The answer is 0.4. The way to think about this is thinking about how to choose the votes.
We have a hundred votes to begin with.
There are four that the mixer cheats on, and the auditor is sampling 20 votes in this space.
As long as the auditor picks one of the votes that was cheated on
then the mixer would be detected.
We can compute this by dividing the number of ways to choose without picking
any of the cheated votes--that's choosing out of the 96 noncheating votes--
divided by the total number of ways of choosing the votes.
To solve this, we just need to compute 96 choose 20 divided by 100 choose 20.
Since the orders were cancelled out, they're 20 elements each time
this the same as computing 96 times 95 down to 77 divided by 100 down to 81.
We had cancelled things out and compute this by hand. We could just compute it all in Python.
Here's a procedure to compute the product of the list remembering to multiply by 1 point
to turn this into a floating point, so we get accurate division.
When we run that, we get the result 0.4 with some more.
We might like a higher probability of catching cheaters
if we think cheating on four votes is enough to change the election.
We'd like to audit more votes. We could do that.
That will increase the probability of catching a cheating mixer but will also increase the probability
that privacy is lost--that a vote can be traced through the mix net.
