In review, how do you spot a correctness argument that quietly assumes the invariant it claims to establish?
answer
- the conclusion serving as a premise
- justification wearing another name
- list the sources of each step
- delete the claim, re-read the steps
- the conclusion may still be true
basics
~20 sList what each step rests on and name the source of every one. A circular argument has a step whose only support is the claim itself, wearing another name: a documented precondition, a helper's contract, or a passing test.
solid answer
~40 sCircularity rarely appears as a bare repetition; it is laundered. The step reads *the list has no duplicates here, by the caller's contract* — and that contract is the property under argument. The mechanical check is to build the assumption set explicitly, attach a source to each step, then **delete the claim from the assumption set and re-read**. Any step that dies was resting on the conclusion. Two refinements matter. First, contradiction arguments attract this defect, because the *negated* claim is legitimately on the table, so reaching for the positive claim elsewhere feels natural and is fatal. Second, a circular argument does not make its conclusion false — the invariant may well hold. It makes the argument worthless, so you keep the claim open and go find an independent argument or a counterexample.
go deeper
Recall that an argument may not use the thing it is trying to establish as one of its reasons, and that a comment stating the property is not evidence that the property holds.
Be able to run the check: list what each step rests on, remove the claim from the allowed assumptions, and identify which steps no longer stand.
Show that you separate the legitimate use of the negated claim in a contradiction argument from the fatal use of the positive one, and that you reject the argument without assuming the invariant is false.
Watch for circularity that spans components, where each document leans on the other's guarantee, and require that every cited guarantee terminate in an argument someone actually wrote.
## What circularity looks like in a real argument Nobody writes *the invariant holds because the invariant holds*. In review the defect arrives disguised, and the disguises are few enough to memorise: - **A precondition in a comment.** The step says *the caller guarantees no duplicates*, and the guarantee is exactly the property being established for the caller by the same document. - **A helper's contract.** The argument leans on a function documented to preserve the invariant, and that documentation was written from the same belief rather than from an independent argument. - **A test that sets up the state.** The suite constructs the structure in a state satisfying the invariant, observes it still satisfies it, and is cited as evidence the invariant cannot be violated. - **A type or structural claim that encodes the conclusion.** The state is described in terms that presuppose the property, so the property becomes unstatable rather than established. - **An obviously.** The single most reliable marker in a written argument is an adverb standing where a justification belongs. - **Mutual support across documents.** Component A's argument cites B's guarantee and B's cites A's; neither is circular on its own page. ## The mechanical check 1. **Write the claim in one sentence** at the top, exactly as it will be relied on. 2. **List the assumption set** — everything the argument is allowed to use: mechanism facts, stated preconditions, results established elsewhere. 3. **Attach a source to every step.** Not a paraphrase: the specific assumption or earlier step it rests on. 4. **Delete the claim, and anything equivalent to it, from the assumption set.** 5. **Re-read.** A step with no surviving source was the circular one. A step that now needs a fact nobody stated is not circular but incomplete, which is a different defect with a different fix. The fourth step is the one people skip, and it is the one that works. It also catches the laundered forms automatically, because a documented precondition that restates the claim disappears together with the claim. ## Why contradiction arguments attract this defect In a contradiction argument the **negated** claim is the working hypothesis. Using it is not merely allowed, it is the point: *suppose some run hands the same block to two callers* is the assumption the whole argument traces. But having the subject on the table in negated form makes it easy to reach, mid-argument, for the positive form — *and of course a block is only ever handed out once, so the second call must have come later*. That step uses the conclusion, and it is fatal. The two are worth separating explicitly, because a reviewer who has not separated them tends to make the opposite error and rejects the legitimate use: | Use of the claim inside a contradiction argument | Verdict | |---|---| | The negated claim as the assumed violating case | legitimate; it is the working hypothesis | | The negated claim used again at a later step | legitimate; it is assumed throughout | | The positive claim, as the reason a step holds | circular; the argument establishes nothing | | A helper documented to guarantee the positive claim | circular unless that helper has its own independent argument | ## Adjacent failures that are not circularity Misdiagnosis wastes review time, so name the defect precisely: - **An unstated assumption.** The argument leans on something true but never written down — say, that releases are serialised. The fix is to state it as a precondition, not to rewrite the argument. - **Proving a weaker claim.** The argument is sound but closes on a narrower statement than the document asserts. The fix is to correct the document. - **Contradicting nothing.** A contradiction argument that ends at a surprising but possible consequence has not closed. The fix is to keep going or change shape. - **A false lemma.** A cited earlier result is simply wrong; nothing is circular, and the repair is upstream. ## What to do when you find one Reject the **argument**, not the **conclusion**. A circularly supported invariant may be perfectly true, and teams that treat exposure as refutation end up ripping out correct code. The claim returns to the open pile and gets the ordinary treatment: attempt an independent argument in whichever shape has a usable hypothesis, and in parallel hunt for a counterexample. If both stall at the same place, the step that resisted is where the missing assumption lives — promote it to a stated precondition and see whether the argument then closes honestly.
- Inside a proof by contradiction, which uses of the claim are legitimate?The negated claim is the working hypothesis and may be used at any step, as often as needed; that is what the shape assumes. The positive claim may never be used to justify a step. Reviewers who have not drawn this line either miss the fatal use or reject the legitimate one.
- A circular argument reached a conclusion that turns out to be true. What do you do?Discard the argument and return the claim to the open pile. Truth of the conclusion is not evidence for the reasoning, and leaving a circular argument in a document means the next change is reviewed against nothing. Attempt an independent argument, and run a counterexample hunt in parallel to bound the risk meanwhile.
- How do you catch circularity that is split across two components' documents?Follow every cited guarantee to the argument that establishes it, and stop only at mechanism facts or results with their own independent support. Mutual citation shows up the moment you draw the dependency edges: if A's support reaches B and B's reaches A, neither has been established, however sound each page reads alone.
A witness who says the record is accurate because the record says so has told you nothing about the record, which may still be perfectly accurate. You have lost the testimony, not the fact.
saying these in an interview costs you the question
- Accepts a helper's documented precondition as support for the claim itself.
- Counts a passing test that constructs the state as evidence of the invariant.
- Calls any use of the negated claim inside a contradiction argument circular.
- Concludes that a circularly argued invariant must therefore be false.
- Assumes circular steps are always visible on a single reading.
- Confuses an unstated assumption with assuming the conclusion.