Divergent precedent

Building and using a case record

Decisions are made one case at a time and kept as a record that later decisions draw on. Two quite different practices build on this record. The first writes each outcome as narrowly as possible, so that parties who disagree about the general principle can still agree to the same specific holding (the legal idea of an incompletely theorized agreement). The second argues a new case from the record. It cites the closest past cases, distinguishes the cases cited by the other side, and constructs hypothetical variants to find where a position fails. The two practices pull in opposite directions on one point, and the regime should show this rather than hide it. The first deliberately leaves the principle unsettled, while the second searches for the principle's boundary, and a system can do either without the other. A benchmark in this approach asks whether language models can tell when one Supreme Court decision overrules an earlier one. Any accumulating case record presupposes this ability, although neither of the two practices actually supplies it.

The method (highlighting differences with Divergent precedent)

Scroll the diagram sideways to see all of it.

Use it in codefrom aiag.cases import CaseRecord
from aiag import LM
from aiag.cases import CaseRecord

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
record = CaseRecord(lm)
record.add("Member posts a link to their own blog", "remove", reason="self-promotion")
record.add("Member links their blog when asked for a source", "keep", reason="it answers the question")

# Dissents are published beside the holding; an overruled case stays on the record, marked, and is no longer cited
record.dissent(0, "Sharing one's own work is part of the community.", by="mod Ana")
record.overrule(0, by=1, reason="a blanket ban was unworkable")
opinions = ["Self-promotion erodes trust.", "Members may share work that helps."]
ruling = record.narrow(lm, "Member links their paid course in a thread on study tips", opinions)
print(ruling)  # the narrowest ruling both opinions could sign

pip install aiagEvery method in aiag Library on GitHub

Concept Analysis: Theoretical Foundations

Each concept is read twice: whether the approach carries it over, and whether the approach's own sources claim it. A concept that the approach claims but does not carry over is a shortfall. A concept that it neither claims nor carries over is an omission, which marks a gap in the field rather than a failure of the work.

Recorded dissent

PartialShortfall · partially preserved

Definition (Appellate practice)

When judges disagree, the losing view is not erased. It is published alongside the majority's, signed and reasoned. This has two effects. It forces the majority to answer a stated objection, which makes the majority's own reasoning legible. It also keeps the rejected theory on record, so that it remains available to become the majority view later.

Analysis

The closest mechanism is HYPO's three-ply argument. A point is met with a full counter-argument that distinguishes the cited precedent and cites another one in response. The opposing position is therefore stated in reasoned form rather than suppressed, and both lines of argument can be read. Everything that the word 'recorded' implies is missing. HYPO never issues a ruling, so there is no majority for a minority view to stand against. The counter-argument is also generated for the occasion rather than entered into the case base, where a later argument could use it. Caputo's (2024) bracketing preserves only the fact that a disagreement exists, not a signed and reasoned account of the losing side. The overruling benchmark works on case pairs but never asks a model to read the dissents that those opinions actually contain. No source asserts published dissent. However, the pluralism argument (parties who disagree still act together, and the disagreement survives the decision) only works if the rejected view remains available.

Overruling with provenance

AbsentOmission

Definition (Common-law practice)

The law can reverse itself when a precedent has become unworkable, unjust, or simply overtaken by events, but only in the open. The overruling decision names what it overturns and why. The change therefore has a traceable history instead of being quietly removed from the record.

Analysis

Nothing in this approach reverses a holding that it has itself made. HYPO's case base is a static index. Its typical move against an unwelcome precedent is distinguishing, which confines that case to its facts and deliberately leaves it in force. Caputo (2024) supplies no procedure by which a settled agreement can become unsettled. The benchmark's 236 pairs are real reversals, but they belong to the Supreme Court's record rather than to any artifact in this approach. The benchmark keeps only the bare relation between the two cases and drops the stated reasons, which are what make a change traceable. Grading whether a model can detect that one case overruled another is a claim to measure that capability. It is not a claim to perform an overruling with provenance.

Incompletely theorized agreement

PartialNot claimed

Definition (Cass R. Sunstein, Legal Reasoning and Political Conflict, 1996)

This is agreement on what to do in the case at hand, while the deeper principle is explicitly left unresolved. The agreement can be on an outcome, a rule, or a mid-level principle, and the comprehensive worldview underneath is set aside. Courts do this constantly, because it lets people who disagree about theory still act together, one case at a time.

Analysis

The approach carries over the bracketing part of the concept. HYPO reasons entirely in dimensions and factor comparisons drawn from prior cases and never moves up to a general theory. Caputo (2024) makes leaving the deep principle unresolved its explicit design aim. The agreement part is not built anywhere. In Sunstein's account, this is the part that matters most, in which parties who disagree commit to a narrow outcome and act on it. HYPO issues no holding at all. It generates arguments for both sides and stops. Caputo (2024) offers no enforcer, institutional or computational, that holds anyone to the bracket. The result is preserved disagreement without the action it is supposed to enable. The third paper runs the opposite way and fixes one ground-truth label per pair. Caputo (2024) names the concept, but only as a goal for a system that it does not build, so no source claims an artifact that realizes it.

Papers

doi:10.1016/0020-7373(91)90011-U115 citationsMethodBuiltAuthority: External institution (open)

An implemented case-based reasoning system that retrieves relevant past cases through a claim lattice and produces a three-ply argument. Precedents are cited for one side, then distinguished and counter-cited for the other. Manufactured hypotheticals are used to probe a position.

CodeHYPO
from aiag import LM
from aiag.cases import HYPO

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
hypo = HYPO(lm, {  # trade-secret dimensions, each favouring one side
    "agreed": {"favors": "plaintiff", "prerequisites": ["The employee signed a nondisclosure agreement."]},
    "disclosed": {"favors": "defendant", "prerequisites": ["The secret had been disclosed to outsiders."]},
})
hypo.add("Ex-employee took the customer list after signing an NDA", "plaintiff", dimensions={"agreed": 1})
hypo.add("Recipe leaked after the firm printed it in a cookbook", "defendant", dimensions={"agreed": 1, "disclosed": 1})

# Three plies: cite the side's most on-point case, distinguish it and counter-cite, rebut
argument = hypo.three_ply({"agreed": 1, "disclosed": 1}, "plaintiff")
print(argument)
# -> {'cite': 0, 'shared': ['agreed'], 'distinguish': ['disclosed'], 'counter': {'trumping': [1], 'as on point': []}, 'rebut': {1: []}}
  • HYPORecordaiag/cases/divergent_precedent.py:45 HYPO: cases indexed by dimensions that each favour one side, a claim lattice ordering past cases by the dimensions they share with the new fact situation, most-on-point cases and each side's best cases to cite, a three-ply argument, and hypotheticals that move the situation along its dimensions to probe a position (Ashley, 1991).

pip install aiagEvery method in aiag Library on GitHub

Argued for, not built

Work that argues for this approach or sketches a design for it, without building and testing it.

Background

Work this approach builds on that falls outside the inclusion criteria (e.g., a single-objective baseline). It is listed for reference and not counted anywhere.

arXiv:2510.20941BenchmarkBuilt

A benchmark of 236 U.S. Supreme Court case pairs on which state-of-the-art language models are asked to identify whether one case overrules the other. Performance is reported separately by era and by task format.

CodeOverrulingBenchmark
from aiag import LM
from aiag.cases import OverrulingBenchmark

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
pairs = [
    {"earlier": "Plessy v. Ferguson (1896)", "later": "Brown v. Board of Education (1954)", "overrules": True, "era": "20th century"},
    {"earlier": "Bowers v. Hardwick (1986)", "later": "Lawrence v. Texas (2003)", "overrules": True, "era": "21st century"},
    {"earlier": "Miranda v. Arizona (1966)", "later": "Dickerson v. United States (2000)", "overrules": False, "era": "21st century"},
]

# Ask whether the later decision overrules the earlier; score accuracy overall and by era
scores = OverrulingBenchmark()(lm, pairs)
print(scores)  # accuracy overall and per era

pip install aiagEvery method in aiag Library on GitHub