Instead of asserting f(2)==4 on a handful of hand-picked cases, state a property that must hold for all inputs — reverse(reverse(xs))==xs, sort is idempotent — and let the machine throw inputs at it until one breaks it. QuickCheck is Popper in a test harness: a property is a bold universal claim, and a single counterexample refutes it. You do not confirm the law; you try to kill it, and report the first input that does.
State a property over a domain and let the checker search for a refuter. Here the claim n² < 100 is asserted for all n — the checker returns the first n that breaks it, the counterexample: live demo
“More example tests = more confidence.” — a thousand passing examples cannot prove a law; one counterexample ends it. QuickCheck flips the goal from confirming examples to refuting a universal — the only asymmetry that actually buys knowledge (Popper). Passing is never proof; it is only not-yet-refuted. cited
The verdict is never “true.” It is FALSIFIED (here is the input that broke you) or survived (nothing broke it — yet). A property that no input could ever break tests nothing. Claessen–Hughes 2000
On the canonical compiler, the property n² < 100 asserted over 1..30 is refuted — the search returns the first breaking input: