Skip to content

Derive defeat between packages and settle disputes with Dung semantics - #72

Merged
deanberris merged 14 commits into
mainfrom
claude/argumentation-framework-7a7yex
Sep 23, 2026
Merged

deanberris merged 14 commits into
mainfrom
claude/argumentation-framework-7a7yex

Conversation

@deanberris

@deanberris deanberris commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #62.

The issue's three questions

Does a Lean 4 argumentation library exist? No. I checked Reservoir, the GitHub argumentation topic and the literature. The only mechanised prior art is Isabelle/HOL (Steen & Fuenmayor, arXiv:2110.09174). So Testimony.Logic.Framework implements Dung's semantics itself, taking Knaster–Tarski (OrderHom.lfp) and Zorn (zorn_subset_nonempty) from Mathlib instead of proving them again.

Should the attack relation be recorded or computed? Computed. Recording it would have mislabelled half the existing replies. The existing replies built with Line.onGrounds turn out to make two different moves:

  • a refusal declines a ground without asserting its negation. This is not an attack. Kruger, Mathison, the final-arbiter answer, and both replies to Geisler's circle are refusals.
  • a denial entails the negation of a ground. This is an attack. Berry, Postell, the classical answer to self-refutation, and Barrett are denials.

Each of these nine classifications is now a theorem: five *_refuses_rather_than_denies by countermodel, four *_denies_the_ground by establish.

Would a framework change existing results? No existing entailment result changes. What it adds is a result entailment cannot state: who prevails.

Two findings that shaped the design

Premise attacks between classical arguments always come in pairs. Under symmetric attack, Dung's semantics reduce to a consistency check (Cayrol, IJCAI 1995), and no argument ever wins. So attack is filtered into defeat by cited confidence, on ASPIC+'s weakest-link rule. This makes the ratings load-bearing, and the docs say so.

The weakest link has to include inference steps. Otherwise the placement of a contested move decides the result: in an atom it is rated, in a step it is not. So a Dispute refuses any node whose inferences are unrated. The rule for rating a step is that it is disputed when a cited source grants its grounds and denies its conclusion.

What's added

  • Testimony/Logic/Framework.lean: conflict-free, admissible, complete, preferred and grounded extensions, and skeptical and credulous acceptance. Also grounded_eq_of_iterate, grounded_eq_empty_of_attacked and preferred_of_blocked.
  • Testimony/Logic/Dispute.lean:
    • UnderminesOn, Rebuts, Attacks, strength, Defeats.
    • Dispute, whose nodes must be satisfiable, must establish their conclusions, and must have rated inferences.
    • Compact tools:
      • Dispute.StandTogether: one named world settles every pair in a group.
      • not_defeats_of_outweighed.
      • Dispute.restrict, for hearings.
      • The defeat_table and grounded_by tactics.
  • Line.inference and ArgumentPackage.inferences: citations rating the steps.
  • Testimony/Arguments/BornOfAVirgin/Dispute.lean: six parties (the scriptural reading, the critic, Berry, Postell on Isaiah 9 and 11, Postell on Micah 5, and Motyer). All 36 pairs are proved, and there are eight headlines:
    • christian_defeats_critical, and nothing_prevails_unanswered: the two tie.
    • scriptural_reading_prevails_once_replies_are_heard: grounded = {scriptural, Berry, Postell, Motyer, Micah}.
    • critical_denial_indefensible: nothing defeats Postell, and he defeats the critic.
    • scriptural_reading_prevails_without_postell: the Micah counterexample suffices on its own.
    • nothing_prevails_without_the_counterexamples: the verdict rests on Postell's inference, rated plausible, in its two instances.
    • nothing_prevails_on_motyer_alone and motyer_rests_on_his_inference.
  • SolaScriptura/Results.lean: the refusal/denial theorems.
  • Docs: a "sixth idea" section in reading-the-logic.md, a "Disputes" section in logic.md, a roadmap finding, a limits paragraph, and CLAUDE.md entries.
  • statusgen: now sorts headlines by import order.

Added in review

  • Sources, each read in full:
    • the church fathers: Justin, Irenaeus, Origen, Jerome;
    • Motyer, TynBul 21.1 (1970);
    • Compton, DBSJ 12 (2007);
    • Young, WTJ 15.2 (1953), part one only;
    • Rhodea, JETS 56.1 (2013);
    • Johnson, JETS 53.2 (2010);
    • Brown, TS 33.1 (1972) and Fitzmyer, TS 34.4 (1973), on the historical premise, which stays disputed.
  • Ratings corrected to the library's definition.
    • Both critical premises are now disputed.
    • The inference steps are rated:
      • Berry's: disputed;
      • Motyer's: disputed;
      • both of Postell's: plausible;
      • the critic's: consensus.
  • Motyer's reply and Postell's Micah counterexample as parties, each with its rival written first.
  • Luke as a disputed allusion, with the birth-announcement form as the rival reading.
  • The Isaiah dispute rewritten compactly.
  • The patristic "sign" argument is tracked in Encode the patristic "sign" argument against an ordinary pregnancy at Isaiah 7:14 #73.

Checks

  • lake build passes. The only warnings are the two in Entail.lean that are already on main.
  • lake lint passes.
  • lake exe axiom-audit passes, with only propext, Classical.choice and Quot.sound.
  • testimony_lint.py passes, and so do its 84 tests.
  • The --check runs for bibgen, statusgen, argdoc and argtex all pass.
  • Not run locally: mdbook and tectonic. CI runs mdbook.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP

Closes #62. Entailment is monotonic, so it can say that a reply removes a
ground but never that one argument defeats another. This adds the layer
that can:

- Testimony.Logic.Framework: Dung's abstract argumentation semantics over
  any relation — conflict-free, admissible, complete, preferred — with the
  grounded extension as OrderHom.lfp and preferred extensions by Zorn.
  No Lean 4 argumentation library exists to reuse; Mathlib supplies the
  fixed point and the maximality argument.
- Testimony.Logic.Dispute: attack derived from entailment (undermining a
  premise, rebutting a conclusion), and defeat as attack filtered by the
  cited confidences on the weakest-link principle. Without a preference,
  premise attacks between classical arguments are always mutual and the
  semantics collapse into a consistency check (Cayrol 1995). The ratings
  are therefore load-bearing in a dispute, and the docs say so.
- BornOfAVirgin/Dispute: the Isaiah 7:14 positions as a dispute. The
  critical denial prevails over the scriptural reading alone; once Berry
  and Postell are heard nothing prevails, and the scriptural reading is
  reinstated as one of two preferred extensions.
- SolaScriptura: seven theorems classifying the existing replies as
  refusals of a ground (not attacks) or denials of it (attacks).

statusgen now orders the headline table by import order, so a directory
argument's Dispute results follow its Results rather than preceding them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Comment thread Testimony/Arguments/BornOfAVirgin/Dispute.lean Outdated
Justin (Dialogue with Trypho), Irenaeus (Against Heresies III.21), Origen
(Against Celsus I.34-35) and Jerome (Against Jovinianus I.32), cited
through the Ante-Nicene and Nicene and Post-Nicene Fathers volumes whose
text was consulted. The series have no ISBN, so the entries carry none.

They are added as supporting references for the predictive reading, for
עַלְמָה as a virgin, for the Genesis 24:43 case, and for the Three's νεᾶνις.
Where they deny a critical premise — the near-term reading, an ordinary
pregnancy — they are recorded in comments, not as support. Origen's
appeal to Deuteronomy 22 is left out: that law's Hebrew is נַעֲרָה בְתוּלָה.

No rating changes. The Dispute docstring says why: the same texts record
the reading contested from the second century, and under the weakest-link
rule support for one premise changes nothing unless it lifts the lowest.

Agent gains a `single` constructor for authors known by one name, so
"Origen" is not split into an invented given and family name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
nearTermExcludesMessianicSense was cited wellSupported on Brown's
authority while the same argument records Berry and Postell denying it,
and Motyer with them. The library defines `disputed` as actively
contested by competent scholars, so that is its rating.

The critic's weakest link is now that premise, and the dispute changes:

- the scriptural reading's rebuttal of the critic becomes a defeat
  (christian_defeats_critical), so unanswered the two defeat each other
  and nothing prevails (nothing_prevails_unanswered);
- the critic no longer defeats Berry or Postell back, and neither
  undermines the other: each premise case has a named world;
- with the replies heard, the scriptural reading prevails: the grounded
  extension is it with both replies
  (scriptural_reading_prevails_once_replies_are_heard), and the critic
  is in no admissible set (critical_denial_indefensible).

These replace critical_prevails_unanswered,
nothing_prevails_once_replies_are_heard, scriptural_reading_reinstated,
critical_denial_remains_defensible and christian_does_not_defeat_critical.
The module docstring, the argument's root, the roadmap finding,
reading-the-logic, logic and scope-and-limits now describe the new
outcome and name the ratings it rests on: the replies' own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
J. A. Motyer, "Context and Content in the Interpretation of Isaiah 7:14",
Tyndale Bulletin 21.1 (1970): 118-125, DOI 10.53751/001c.30667 (checked
against Crossref; text read in full from the open-access PDF).

It is the most direct answer in the library to the critical denial: the
sign confirms events after the fact rather than persuading Ahaz (120),
Maher-shalal-hash-baz carries the timetable so Immanuel belongs to the
undated future (124), and 7:14 cannot be severed from 8:8, 8:10, 9:6-7
and 11 (123). Cited as support for the predictive reading, for עַלְמָה
(125) and for the chapters 2-12 frame (122-123); its denial of the
near-term reading is recorded in a comment on that critic's atom.

No rating or result changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
R. Bruce Compton, "The Immanuel Prophecy in Isaiah 7:14-16 and Its Use
in Matthew 1:23: Harmonizing Historical Context and Single Meaning",
Detroit Baptist Seminary Journal 12 (2007): 3-15, read in full from the
publisher's PDF.

Compton disputes both premises of the critical denial. 7:14 is addressed
to the house of David in plural pronouns, not to Ahaz, and is no
confirmation of Ahaz's deliverance (12); every near-term candidate fails
(9). And 7:15-16, the part that does address Ahaz, measures time by the
child's infancy and so does not need the child born in Ahaz's day (14).

Cited as support for the predictive reading (12-14), for עַלְמָה (7-8),
for the other clear עַלְמָה passages (8), and for Berry's premise that
the near-term fulfilment is unsettled (5, 9). His denials of the two
critical premises are recorded in comments on those atoms. No rating or
result changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
isaiahIsNearTermSignToAhaz was cited wellSupported on Brown's authority.
Motyer (1970) and Compton (2007), both now cited and read in full, deny
it outright, so on the library's definition it is disputed, like the
exclusion premise before it.

No result changes: the critic's weakest link was already disputed. The
rating would decide a dispute in which a reply attacked this premise, as
Motyer's would, and the Dispute docstring now says so. The prose that
named the exclusion premise as the critic's only weak one is updated in
the Dispute module, the argument's root, the roadmap finding and the
brownOnBirth docstring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Motyer (1970), with Compton (2007), denies the critic's near-term premise
rather than its exclusion premise. Encoded on the Berry and Postell
pattern: the atoms are what the text says, and the contested move is the
step.

- Atoms: signGivenToHouseOfDavid (the plural address of 7:13-14 against
  7:16's singular, consensus as grammar) and
  maherShalalHashBazRepeatsTheTimetable (8:4 repeats 7:16's timetable,
  wellSupported; the critics who identify the two children rely on it).
- Step timetablePassesToMaherShalalHashBaz: so 7:14 is not a near-term
  sign to Ahaz. Motyer's own disjunction, 1970, 124.
- The rival first: sameChildReading, on which both observations hold and
  the near-term sign stands. motyer_rests_on_his_inference proves the
  grounds alone do not decide it, so the weight is on the step.

In the dispute Motyer defeats the critic by undermining its near-term
premise, is defeated by nothing, and stands with every other party. The
grounded extension gains him. A three-party hearing without Berry or
Postell shows he is enough alone
(scriptural_reading_prevails_on_motyer_alone), so the verdict no longer
hangs on the one premise both of them contest.

The Dispute docstring gains "Where Motyer's contest lies": an unranked
step does not lower a reply's strength, but an attack on a step always
defeats, so a critic who granted his observations and held the near-term
reading would defeat him. The critical denial as encoded does not grant
them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
E. J. Young, "The Immanuel Prophecy: Isaiah 7:14-16", Westminster
Theological Journal 15.2 (1953): 97-124, read in full from the Galaxie
text, which keeps the journal's pagination.

This is the first of two parts; it ends "(to be concluded)", and its
verdict on a near-term fulfilment is in the second, which is not cited.
So Young is cited only for what this part argues: the plural address of
the imposed sign (112), for signGivenToHouseOfDavid; הָרָה as a verbal
adjective with present reference (115-117), for harahIsPredicateAdjective
and isaianicAlmahIsAlreadyPregnant; and Ugaritic ǵlmt never used of a
married woman (120-124), for almahAdmitsVirginSense. No rating or result
changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
A dispute weighed each position by its weakest premise, but inference
steps carried no rank. So a reply that put its contested move in a step
was weighed by its observations alone, and where an encoding placed a
contested move - atom or step - decided who prevailed.

- ArgumentPackage gains `inferences : List Source` and Line an optional
  `inference` citation, carried by asPackage. Steps rank at the lowest
  cited inference of their package; a Dispute now requires every node to
  cite one (`rated`), so no party enters a dispute with unweighed steps.
- The rule for a rating: a step is `disputed` when a cited source grants
  its grounds and denies its conclusion.
- Isaiah ratings: the critic's step `consensus` (it only applies the
  exclusion); Berry's `disputed` (Watts grants the uncertain chronology
  and keeps Hezekiah, as Compton reports); Motyer's `disputed` (the
  readers who identify the two children); Postell's `plausible` (no cited
  source grants his grounds and keeps the exclusion); the scriptural
  strands' `disputed`.

Results: the critic now defeats Berry and Motyer back, but not Postell.
The scriptural reading still prevails with the replies heard, now resting
on Postell alone: he is unattacked and defends the rest.
critical_denial_indefensible goes through Postell. Motyer alone no longer
suffices: scriptural_reading_prevails_on_motyer_alone is replaced by
nothing_prevails_on_motyer_alone. The docs say the verdict rests on the
rating of Postell's inference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
The Isaiah dispute proved every ordered pair as its own theorem: twelve
joint-model non-defeats, per-premise countermodels for each blocked
attack, a hand-written table proof, and a separate party type, node map
and defeat table for every hearing. The module ran to 717 lines.

New in Testimony.Logic.Dispute and Framework:

- Dispute.StandTogether: one named world satisfies a group of parties,
  so none defeats another - one fact for every pair in the group.
- not_defeats_of_outweighed: a weaker attacker whose every target premise
  holds alongside it.
- Dispute.restrict: a hearing of some parties, with the defeats already
  proved. grounded_eq_empty_of_attacked: nothing prevails when everyone
  has a defeater.
- Tactics defeat_table (the table from the diagonal, the defeats and the
  groups, deciding memberships) and grounded_by (a grounded extension as
  an iterate).

The Isaiah module is now 504 lines. The defeats stay named theorems;
the twelve non-defeats are replies_stand_with_the_scriptural_reading;
the exchange and both hearings are restrictions. Named countermodels
stay named. One new result the prose had only asserted:
nothing_prevails_without_postell. The exchange's two preferred
extensions (exchange_alone_preferred) are dropped, and the prose no
longer claims them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Luke never quotes Isaiah 7:14, so Luke is encoded as an allusion, never
a quotation, and with both readings attributed:

- lukeAllusionEdge: Luke 1:31 -> Isaiah 7:14, `.allusion`, `disputed`.
  Rhodea, JETS 56.1 (2013), 71 n. 66: Davies and Allison find an
  influence from Isaiah 7:14, Fitzmyer rejects it. Cites the Greek of
  both verses (NA28, Septuagint).
- annunciationFormEdge: the rival - Luke 1:31 -> Genesis 16:11,
  `.thematic`, the stock birth-announcement form, of which Isaiah 7:14 is
  itself an instance. Johnson, JETS 53.2 (2010), 270 n. 6, reporting
  Neff, Conrad and Brown; Young (1953) 113-14.
- independentAttestation gains Rhodea (71) as support: Luke is parallel
  to Matthew and independent of it - for the conception, not the
  prophecy.

Both articles read in full from their open-access PDFs. The argument's
root now says Luke adds to independentAttestation and nothing to the
rating of the predictive reading. No result changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
maryConceivedAsVirgin cited Scripture alone. It now cites Brown, "The
Problem of the Virginal Conception of Jesus", Theological Studies 33.1
(1972) 3-34, for the historical case: no parallel explains how the idea
arose (30-32), and the charge of illegitimacy has to be explained by
anyone who denies it (32-33). Brown's verdict is "an unresolved problem"
(33), and Fitzmyer, TS 34.4 (1973) 541-575, finds the NT data "not
unambiguous" (572): so the premise stays `disputed`, and the comment says
why.

Also: Brown (24) supports independentAttestation - neither evangelist
knew the other's infancy narrative, so the shared tradition is older than
both; and Brown (31) supports the rival to Luke's allusion - "no proof
that Is 7:14 played any major role in shaping the Lucan account".

Both read in full from the journal's open-access PDFs; DOIs checked on
Crossref. No rating or result changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Postell, JETS 68.3 (2025) 481 n. 72, gives a second counterexample to
the exclusion premise: the Bethlehem ruler of Micah 5 is set against the
Assyrian invasion (5:5-6) and was read messianically - which Brown, the
critic's own authority, grants ("there was an expectation of the
Messiah's birth at Bethlehem (Mt 2:4-6; Jn 7:42)", TS 1972, 26 n. 64).

- Atoms micahRulerFacesAssyria (`consensus`, what the text says) and
  micahRulerReadMessianically (`wellSupported`, granted by Brown).
- Step micahParityDefeatsNearTermExclusion, rated `plausible` as
  Postell's Isaiah step is, for the same reason and with the same likely
  answer (a disanalogy: Micah 5 is no sign to Ahaz).
- The rival first: laterMessianicReading, on which both grounds hold and
  the exclusion stands; micah_parity_rests_on_its_inference.

Results: nothing defeats the counterexample, and it stands with every
party but the critic. The grounded extension gains it. Without Postell's
Isaiah argument the scriptural reading still prevails
(scriptural_reading_prevails_without_postell), so an attack on either
counterexample's grounds leaves the verdict standing; without both,
nothing prevails (nothing_prevails_without_the_counterexamples), which
replaces nothing_prevails_without_postell. The two share one inference,
and the docs say so: the verdict rests on its rating.

reading-the-logic.md no longer claims the critic defeats no reply back,
or the exchange's two preferred extensions, which were dropped earlier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VGgpRWs6WLZF6e3Qb3fWRP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Defeat is encoded by removing a ground, because classical consequence is monotonic

2 participants