By answering, I'm assuming that when you say the "oracle" can't tell you if a single assertion is either true o false, it still does know its truth value (e.g. randomly generated truth values for generic assertions).
Let A be the set of your assertions. If A contains n items, its cardinality is: |A| = n. You first ask the oracle how many assertions in the starting set A are true:
- true(A) = true(a1,a2,...,an) = c.
Now you calculate every subset of cardinality n - 1, thus those subsets containing only n - 1 items; every subset can be defined as follow:
- Ak = {a1,a2,...,ak-1,ak+1,...,an-1,an}.
The number of subsets you get is n because you remove one item out of n from time to time.
Again, you ask the oracle how may true assertions are in every subset:
- true(A1) = c1;
- true(A2) = c2;
- ...
- true(An) = cn.
And finally, the last operation is... Subtraction. You compute the difference between c and every ck you have, and figure out which assertions are true and which false.
Example: Let's say the set A has 10 items, and true(A) = 5. Half the assertions are true, the other half false. Now we pop out the first assertion a1 from A obtaining the subset A1, and then ask the oracle the value of true(A1).
- If true(A1) = 5, it means no true assertion was removed from starting set A: a1 is false;
- If true(A1) = 4, there's a missing true assertion than before: a1 is true.
Going on with A2, A3, ..., An and subtracting c to every ck will tell you what assertions are true and what false.
Notes: I'm assuming the function true() is linear, because it depends only on the size of input: if the argument size is 50 values, there will be only 50 reading operations. You can implement the function so that its argument is a data structure instead of writing every single variable - that's good for scalability of the input.
The math I used is very simple, and the data structure you need can be whatever you consider appropriate.
Also, you were constrained to ask the oracle for a great number of assertions per time: the smallest sets I dealt with contains n - 1 items, which is very close to the total number of assertions whose value you want to figure out.