A generative model will produce a citation in the right shape for whatever proposition you asked it to support. Shape is the easy part. Whether the judgment exists, whether it says that, and whether it still binds are three separate questions, and they fail in that order of frequency.
The four checks
Run them in this order. Each is cheaper than the one after it, so a failure at step one saves you the rest.
Does it exist? A reporter citation resolves, or it does not. This catches outright fabrication.
Does it say that? Open the paragraph, not the headnote. A real judgment cited for a proposition it does not contain is the second-commonest failure and the hardest to spot.
Is it still good law? Overruled, doubted, distinguished, or superseded by statute.
Does it bind this court? A coordinate bench persuades; it does not bind.
What each check actually catches
Check | Catches | Typical miss rate |
|---|---|---|
Existence | Fabricated citations | High with unverified AI |
Proposition | Real case, wrong holding | Moderate, and easy to miss |
Good law | Overruled or superseded | Moderate |
Binding force | Coordinate or foreign bench | Low, but expensive |
A worked example
Take a cheque-dishonour matter. The proposition is that the fifteen-day window under Section 138 runs from receipt of the demand notice rather than from dispatch. That is correct, and it is the sort of proposition for which a model will happily invent an authority.
The period is to be reckoned from the date of receipt of the notice by the drawer, and not from the date on which it was sent.
The check is not whether that sentence is plausible. It is whether the paragraph you are about to cite contains it.
A checklist you can keep
Citation resolves to a real reported judgment
The cited paragraph contains the proposition
Good-law status checked against later history
Bench strength and jurisdiction confirmed
Copy of the judgment saved to the matter file
What about unreported judgments?
An unreported judgment is not a lesser authority, but it is a heavier verification burden: there is no reporter citation to resolve, so existence and text have to be established from the certified copy. Attach it.
Automating the first check
The first check is mechanical, which means it can be done for you. A citation either resolves against the corpus or it does not:
def resolve(citation: str) -> Judgment | None:
"""None means: this citation does not correspond to anything.
Not 'we could not find it' — the corpus is the authority here, so a
miss is a finding, and it is reported to the drafter as one.
"""
return corpus.lookup(normalise(citation))The other three still need a lawyer. That is not a limitation to apologise for; it is the correct division of labour.
