Repository navigation
Engine: certify the support and part-of tables - #190
Merged
Merged
Conversation
`supports?` and `partOf?` were decided by a search the kernel ran, and the part-of table converted a party's premises to clauses afresh for every premise it asked about. Each question now takes a hint, as a defeat cell's does: `supportsBy?` and `partOfBy?` ask their questions through `Horn.satisfiableAppend?`, each party's clauses converted once a cell, and `horn_certify` finds the hints (`Horn.supportHints`, `Horn.partHints`). `supports_iff_of_certified` and `partOf_iff_of_certified` take any index that tells atoms apart and any hints that decide the cell. The searched forms are the same decisions with no hints, and keep their theorems. Every dispute's support and part-of tables are certified: the arguments' and the grits example's. On sola fide's, five interleaved rounds, searched against certified: part of 8.01 s to 5.00 s (-38%, p = 0.008), 131 to 102 MiB; supports 3.37 s to 1.99 s (-41%, p = 0.008), 17 to 13 MiB. The searched forms match main. Ledger round 8; the citation check's pin moves to 2305 definitions, the proofs' auxiliary definitions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BC49XsbtehCbmJMavF1K5Q
deanberris
marked this pull request as ready for review
November 2, 2026 06:48
# Conflicts: # arguments/TestimonyArguments/Checks.lean # docs/src/performance.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The second item of the profiling plan after #189: the support and part-of tables were the last tables in a dispute the kernel still decided by searching.
What changes
supportsBy?andpartOfBy?(Testimony.Logic.Support) ask each question with a hint, asHorn.defeatsBy?does: a model or a refutation, checked by the kernel (Horn.clausesSatisfiableBy?), throughHorn.satisfiableAppend?. Each party's clauses are converted once a cell. Before this, the part-of table converted a party's premises afresh for every premise it asked about.supports_iff_of_certifiedandpartOf_iff_of_certifiedtake the same hypothesis as the certified defeat tables: some index that tells atoms apart, and some hints that decide the cell. The soundness proofs go throughchecksBy, which hands questions their hints in order. Its lemmas show every check was asked of a premise with a valid hint, and every premise was asked about.supports?andpartOf?are nowsupportsBy?/partOfBy?with no hints, the waydefeats?is. Their theorems are unchanged in statement.horn_certifydispatches on both, withHorn.supportHintsandHorn.partHints, which shareentailsQuestionwith the checker.docs/src/logic.mdshows the certified proof.Measured
scripts/bench-ab.sh origin/main --filter "144 cells", five interleaved rounds. The certified benchmarks exist only on this side, so they are compared with the searched ones, as in round 3:The searched forms, now the no-hint case, match
main(supports +1.2%, p = 1.0; part of −0.9%, p = 0.55). Timed by hand, two runs each:SolaFide.Disputeelaborates in 41.5 s, against 47.6 s with its two tables searched. Recorded as ledger round 8 indocs/src/performance.md.Merged with
mainafter #189#189 merged first. The merge resolves two conflicts:
arguments/TestimonyArguments/Checks.lean: now 2,326 definitions. That ismain's 2,319 plus the 7 auxiliary definitions this PR's proofs add; no entries changed.Gates
All run locally on the merged head and all pass:
lake build,lake build TestimonyTools,lake lint,lake exe axiom-audit,scripts/kernel-replay.sh;bibgen/argtex/statusgen/argdoc --check;exampletex --check;testimony_lint.pyandmdbook build.No generated file changed: the docstrings that say how each table is computed name the engine as the certified defeat tables' docstrings already do.
Generated by Claude Code