Books / Canons / Experimental Notes
Experimental Notes and Reproducibility
These notes preserve the historical experiment summaries behind the English edition of Canons. Dates and hashes below are those recorded with the manuscripts. They are not claims that the whole corpus was rerun for this edition. Abbreviated hashes are fingerprints, not complete artifacts.
The machine-readable index marks unavailable fields as null. Historical inputs are identified by scenario modules and source revisions where retained; the historical engine version and full certificate files are not recorded consistently. A result summary cannot replace a complete input, output or certificate. The supplemental Harrier archive retains complete inputs and results for the scoped rerun made on 10 October 2026.
The source checkout used for that supplemental run is revision 01bf047e392252b92f6abebc5408428ad47cec32. It is distinct from the older model revisions quoted in the historical summaries.
Let Us Calculate
This section introduces or draws together the experiments. It has no separate retained run record; consult the chapter-specific notes above.
Four Answers to One Case
All answers were obtained on 05.09.2026 on the committed model
corpus/clir/la-protagoras-euathlus.lawir.json (package
la.gellius.protagoras_euathlus, schema law.core.ir/0.2), program hash
sha256:dc587738dca1ea564f60cf25e29bd90eafa974e5467b0e7c73358196494b6c37
(theoryHash, reported as programHash in every manifest;
semanticHash sha256:6a66eebb…). Last change of the CLIR: commit
783fcd169 of 04.09.2026 (freeze of semantics 0.2). The model is the
same as in the withdrawn draft of this chapter (commit 71e83f097); the
runs are the same runs.
Regression, family
protagoras: 7/7 PASS.Differential
check_kz_differential.py --only protagoras: 31 evaluate calls byte-identical (liblaw_ffi == lawref), OK.Certificates
check_kz_certificates.py --only protagoras --no-ffi: OK; 31 oracle and 31 engine certificates, leaves 156, rule steps 82, queries 9; not proved by core v1: 20 applications of the fourdefeasiblerules (§104), 2TRUE_ONLYon an unverified step; outside core v1:interpretation_selection×16,norm_creation×15, NEITHER ×11, BOTH ×4, FALSE_ONLY ×2 (§62/§69), 2 judgment requests checked structurally (§47.3).lawc testontests/01…05.lawtest: 5/5 PASS.Cells (
resultHash, first eight hex digits; legal time 1000-01-01 for the first suit, 1000-02-01 for the second):Selected Judges for Protagoras Judges for Euathlus none NEITHER f36acedaNEITHER 92a86232CaptioProtagoraeTRUE_ONLY 70012ca4TRUE_ONLY a9941485CaptioEvathliFALSE_ONLY d07da996FALSE_ONLY 62f42f33both BOTH 576b54f3BOTH 56a4f6daBefore the verdict:
merces_debeturNEITHER under all four selections (00712ce1,24acba46,1c2ed0b5,0b17ed2a);victoria(PROTAGORAS, LisPrima)NEITHER,REQUIRES_JUDGMENT(c5090362), one judgment request: authorityIudices, formSententiaPetitio. Second suit: TRUE_ONLY under all four (60cac87e,3eef4e0c,0f1ef70a,2f6e41a3),ReliquumDareACTIVE; proof graph 16 nodes:VictoriaIudicata,IpseOravit×2,PrimaVictoria,MercesExPacto,norm_creation ReliquumSolvendum. Conflicts in the "both" cells:INCOMPARABLE, rivalsExSententiaDebebitur/ExPactoNihilDebebitur(for Protagoras) andExPactoDebebitur/ExSententiaNihilDebebitur(for Euathlus), no defeated candidates, no priority edges. Positions:SententiaeParereACTIVE only in the branch for Protagoras."In plain words" in the body renders
truthStatus/evaluationStatusand thejudgmentRequestsentry; it is a translation, not a quotation.Public MCP (
codeHash sha256:e5ef5591…) still served the previous modelsha256:49b7d015…on 05.09.2026:BOTH(f4c11f77…),REQUIRES_JUDGMENT,NEITHERwithwhyNot; its provenance labels the jurisdiction as Kazakhstan while the package declaresnone(server labelling defect, not reported).
The first version, and the measurement behind "equal strength"
- Symmetry: the first edition of
MercesExPactoreadvicit_primam_causamwithoutlis_prior; in the branch for Euathlus the base gaveTRUE_ONLYunder every reading. Recorded in the headers of01-pactum.lawand03-captiones.law; guarded by scenarios PE-03 and PE-04. The body calls the repair a reading, per Sol's review of 05.09.2026: the symmetry was required of the model and does not prove the reading. - Strength: probe of 30.08.2026 on the minimal pair, both
defeasible→BOTH;strictpositive againstdefeasiblenegative →TRUE_ONLYwith no issue; bothstrict→NON_EXECUTABLE_RULE. Header of03-captiones.law.
When an Exception Changes the Answer
All answers were obtained on 05.09.2026 on the committed model of the
repository at commit da47581a1. Program hash
sha256:a6be790a57edcb00100c47ebef2322e88408c3a0954a8c4776638fc15cc79418
(the theoryHash of corpus/clir/eu-air-passenger-rights.lawir.json,
reported as programHash in the manifest of every call); the file's
semanticHash is
sha256:5eaa1328d1585ade284d5e650a9fdde983ab31bef132b08a3ac3f58d68898c62,
schema law.core.ir/0.2, last changed by commit 783fcd169 of
04.09.2026. Package eu.transport.air_passenger_rights, measure §33.1
EXECUTABLE 19 of 19 articles.
Regression of family
air_passenger_rights: 40/40 PASS, about nine seconds.Differential (
check_kz_differential.py --only air_passenger_rights): 40 evaluate calls byte-identical (liblaw_ffi == lawref), OK, about 23 seconds.Certificates (
check_kz_certificates.py --only air_passenger_rights --no-ffi): OK. 40 oracle and 40 engine certificates; leaves proved 809, rule steps 283, queries 1; safety §190 rechecked for 283 applications; L1 §107: 272 candidates, 12 defeats compared against the checker's model of priority, 260 survived. Not proved by core v1: applications of thedefeasiblerules (RegulationAppliesWithinScope×33,WithinScopeOnPresentedPassenger×33,CancellationGivesCompensation×18,PassengerUninformedUnlessCarrierProves/R1×18 and others), 20TRUE_ONLYresults resting on an unverified step. Outside core v1:norm_creation×276, FALSE_ONLY ×10, NEITHER ×9,interpretation_selection×3, closure anti-membership ×2, judgment request ×1 checked structurally.Hand-written tests
tests/01…05.lawtest:lawc test5/5 PASS.Cells of the chapter, oracle through
corpus/kz/engine.pywith the case builders ofcorpus/kz/acts/air_passenger_rights.py(_in_scope,_cancelled,_distance_basis,_flight_profile(1200, True)), legal time 2026-08-26;resultHash, first eight hex digits:Row Query Status resultHash told the day before right_to_compensationTRUE_ONLY 3fbee61etold the day before compensation_due(…, 250 EUR)TRUE_ONLY 3c2a46eatwo weeks, not proved right_to_compensationTRUE_ONLY a9e2b1fatwo weeks, not proved passenger_treated_as_uninformedTRUE_ONLY 2d533b7atwo weeks, not proved compensation_due(…, 250 EUR)TRUE_ONLY 5ed9be3dtwo weeks, proved right_to_compensationFALSE_ONLY 1e2dfa47two weeks, proved passenger_treated_as_uninformedFALSE_ONLY 3a7e40fdtwo weeks, proved compensation_due(…, 250 EUR)NEITHER 4469c18ctwo weeks less one hour, proved right_to_compensationTRUE_ONLY 770df4bbtwo weeks less one hour, proved compensation_due(…, 250 EUR)TRUE_ONLY f85d562eextraordinary circumstances pleaded carrier_exempt_from_compensationNEITHER, REQUIRES_JUDGMENT, authorityCourt782f5eb0extraordinary circumstances pleaded right_to_compensationTRUE_ONLY 922ec0f6extraordinary circumstances pleaded compensation_due(…, 250 EUR)TRUE_ONLY c2c1e615extraordinary circumstances pleaded right_to_reimbursement_or_reroutingTRUE_ONLY 33d19dd0court found them ( origin adjudicated)right_to_compensationFALSE_ONLY 12c45267free non-public fare regulation_appliesFALSE_ONLY 0a5194e5frequent flyer ticket regulation_appliesTRUE_ONLY d58fc4eain scope, no exclusion regulation_appliesTRUE_ONLY d775d3d4delayed four hours, 5 000 km right_to_compensationNEITHER 2cb7a1aedelayed four hours, 5 000 km right_to_careTRUE_ONLY 1e98ba74The "told the day before" case adds to the scenario builders
scheduled_departure_time 2026-08-26T10:00Zandinformed_of_cancellation_at 2026-08-25T10:00Z; the two-week cases use2026-08-12T10:00Z(336 hours) and2026-08-12T11:00Z(335 hours); the delay case is scenario APR-14/15 (_flight_profile(5000, False), expected departure four hours after the scheduled one). No issue of any severity in any call.The defeat record. In the "two weeks, proved" answer the proof graph holds 26 assertions, 23 rule applications, 10
norm_creation, 7candidate_closureand 2defeatnodes. Onedefeatnode: outcomeDEFEATED, reasonpriority,priorityPathnamingTwoWeeksNoticeOverCompensationwithhigher = InformedTwoWeeksAheadDefeatsCompensation,lower = CancellationGivesCompensation; the other is the presumption's own priority (PassengerUninformedUnlessCarrierProves/R2over/R1). The query node's premise is the application of the exception. There is noconflictsrecord: the collision is resolved, unlike chapter one'sINCOMPARABLE.Duties listed beside the base answer (positions ACTIVE):
OfferArticleEightChoice,OfferMeals,OfferCommunications,ProvideWrittenNoticeToPassenger,ExplainAlternativeTransportToPassenger,DisplayCheckInNoticeAtCheckIn,NoLimitationOrWaiverOfObligations;ReportOnOperationOfRegulationUNDETERMINED (the Commission's report of Article 17, window closed in 2007).Public MCP (
codeHash sha256:e5ef5591…), serving an older model of this package (programHash sha256:09dc7f81…): the "two weeks, proved" case with entity namespassenger-1,flight-1,carrier-1,member-state-1and instants as ISO strings —FALSE_ONLY,resultHash sha256:c0ebb2eb…, 18 rules applied includingInformedTwoWeeksAheadDefeatsCompensation;vulnerableTolists three further rules that could remove the right if their missing premises were supplied (ExtraordinaryCircumstancesDefeatCompensation,FreeOrReducedFareOutsideScope,GibraltarApplicationSuspended). The body does not rely on this call; the table's amount cannot be asked through MCP because the grid's input relation (…:table:compensation/input) is not addressable from the tool. The provenance again names the jurisdiction as the Republic of Kazakhstan while the act's own title says "юрисдикция EU, НЕ Республика Казахстан": the same labelling defect of the server layer as in chapter one.
When Does a Document Count as Evidence?
All answers were obtained on 05.09.2026 on the committed model of the
repository at commit da47581a1: package demo.expense_evidence,
packs/demo/expense-evidence/clir/expense-evidence.lawir.json,
semanticHash = theoryHash = programHash
sha256:989d4367de0af5be5b4a3658013ac1da42be2d79b12d87c3e70a5d3b83b80f26;
policy ExpenseEvidenceV1, profile law.core.evidence-policy/0.1,
evidencePolicyHash sha256:11c006b4…. The CLIR was last changed by commit
20912fe36 of 05.09.2026 ("DECISION-0126 ревизия: пять находок внешней
проверки"); the package by 1475abc6b of the same day. The base case is
scenes/base.lawcase, lowered on every run by lawc lower-case; the
scenes of the chapter are derived from it by removing or editing documents,
verifications and support edges, as run_demo.py does.
Demo
run_demo.py: four scenesNEITHER → TRUE_ONLY → NEITHER → TRUE_ONLY, about two seconds. The report prints, for the rejected confirmation of purchase 99,NO_ACCEPTANCE_RULE_APPLIEDand the blockerAcceptPayment: 10 of 11 conjuncts matched; unmet doc_purchase(doc-B91, purchase:42).Demo differential
tools/differential.py: the three tests oftests/reimbursement.lawtestbyte-identical (lawref==lawc eval), PASS.Hand-written tests:
lawc test … --program clir/expense-evidence.lawir.json3/3 PASS (wrong-payment,right-payment,bare-assertion-does-not-bypass).Profile gate
verify/ci/gates/silence/check_evidence_policy.py: 44 vectors of the profile, 44 groups of the plan's matrix covered, 16 goldens asserting what is claimed, engines free of policy-specific conditions — OK.Chapter differential: the thirteen questions of the table, built from the lowered base case with content hashes recomputed by
lawref.authoring.content_hash, evaluated by the oracle (EvaluationRequest.from_dict, semantics 0.2) and bylawc evalon the same wire request; all thirteen canonical documents byte-identical, PASS, about twenty seconds.Cells (
resultHash, first eight hex digits, from the differential run):Row Question Status resultHash A17, R25, B91 (purchase 99) reimbursableNEITHER 65176fcbA17, R25, B91 paidNEITHER 53d07928+ B92 reimbursableTRUE_ONLY d26180ddB92 and B93, B92 withdrawn reimbursableTRUE_ONLY a935dae8no bank document, assert paidoriginadjudicatedreimbursableNEITHER; blocked PROTECTED_PREDICATE_REQUIRES_EVIDENCE, issuePROTECTED_ASSERTION_BLOCKEDinfoc4a6b0ecB92, its verification recordedAt 2027-01-01reimbursableNEITHER; AUTHENTICATION_NOT_AVAILABLE3beba549B92 without verification reimbursableNEITHER; AUTHENTICATION_MISSING41863d8cB92 with amount 1 KZTreimbursableNEITHER; NO_ACCEPTANCE_RULE_APPLIED2b1448c7A17 naming employee 999 reimbursableNEITHER; blocker AcceptApproval7 of 9, unmetclaim_employee(purchase:42, employee:999); B92 acceptede6674ae1+ X77 bank_reversalrefutingpaidreimbursableNEITHER 18853c31+ X77 paidBOTH 10af4674second doc-B92about purchase 99reimbursableno result; issue EVIDENCE_ID_COLLISIONfatal44142de6B92's edge valid [2027-01-01, 2028-01-01)reimbursableNEITHER; EDGE_NOT_CURRENTa4b4bd67Accepted supports carry
proofreferences tosupport_admissionnodes (bac12c13…for R25,209a4259…for A17,73b3d805…for B92,acfffe42…for B93).Certificates.
check_proof_certificates.pycertifies vectorLAY-L3-EVP-ACCEPTEDand rejects seven forged acceptance graphs; it runs over the whole vector corpus and was not re-run for this chapter. The statement in the boundary box rests on STATUS.md of 05.09.2026 and the package README.Observed weakness, to report. For the one-tenge confirmation the report's
blockersfor the B92 edge bind the conjuncts to document B91 (the "deepest satisfiable prefix" is found with the wrong document), so no single unmet conjunct names the amount; the reviewer's finding R5 is closed for the wrong-purchase case and not for this one. Named in the boundary box under "not proved by anyone".No public MCP call: the demo package is not served by the public corpus profiles.
Who Gets to Decide What Is Reasonable?
All answers were obtained on 05.09.2026 on the committed model
corpus/clir/us-leonard-v-pepsico.lawir.json (package
us.sdny.leonard_v_pepsico, schema law.core.ir/0.2), program hash
sha256:e55fa9566c2273130b103a7d368347d65711b6a35a5996561660dc32e493e2f6
(theoryHash, reported as programHash in every manifest;
semanticHash sha256:1fe57916…). Last change of the package and CLIR:
commit 6f896fcaa of 05.09.2026 07:20. Legal time of every case is the
opinion's date, 1999-08-05 (the edition window opens there).
Regression of family
leonard_v_pepsico: 44/44 PASS.Differential
check_kz_differential.py --only leonard_v_pepsico: 44 evaluate calls byte-identical (liblaw_ffi == lawref), OK.Certificates
check_kz_certificates.py --only leonard_v_pepsico --no-ffi: OK. 44 oracle and 44 engine certificates; leaves proved 326, rule steps 61, queries 7; safety §190 rechecked for 61 applications; L1 §107: 254 candidates, 36 defeats compared, 218 survived. The package README's note that the Lean core rejects 16 of 28 certificates by the §181.1 defect is stale as of this run: all 44 pass.Hand-written tests
tests/01…06.lawtest:lawc test6/6 PASS.Cells (oracle through
corpus/kz/engine.py, fact lists copied fromcorpus/kz/acts/leonard_v_pepsico.py;resultHash, first eight hex digits):Case Query Status resultHash facts as found ( CLAIM)claim_failsTRUE_ONLY; rules ClaimFailsBecauseTheAdvertisementWasNotAnOffer,ClaimFailsForWantOfAWriting8d84cc66facts as found offer_of(commercial, harrier)FALSE_ONLY ( AdvertisementIsNotAnOffer)e3a5c732facts as found positions none c43b6183facts as found objectively_understood_as_offerNEITHER, REQUIRES_JUDGMENT, authorityCourt, predicatereasonable_person_would_understand_as_offer8b191eb9facts as found evidently_done_in_jestNEITHER (no findings in the case) 9a5eb595+ judgment negative ( origin adjudicated)objectively_understood_as_offerNEITHER, COMPUTED, no request 813d311d+ judgment negative claim_failsTRUE_ONLY 52b64cd9+ judgment positive objectively_understood_as_offerTRUE_ONLY ( ObjectiveUnderstandingEstablished)21ed84ac+ judgment positive claim_failsTRUE_ONLY a98d123fcommercial + five findings ( JEST)evidently_done_in_jestTRUE_ONLY ( CommercialWasEvidentlyDoneInJest)e0d21a2afour findings (no military_purpose_of)evidently_done_in_jestNEITHER a58d160cLefkowitz-style ad, judgment positive, no writing (LP-33C) claim_failsTRUE_ONLY ( ClaimFailsForWantOfAWritingonly)d376e293the same offer_of(commercial, tshirt)TRUE_ONLY ( LefkowitzException)20a1eea4+ signed writing ( all_cured)claim_failsNEITHER 27b6717d+ signed writing positions DeliverTheItemACTIVEecc20b5bfacts as found why_not sufficient_writingblocker SignedWritingEstablishingTheRelationshipSuffices:contract_for_sale_of_goodsSATISFIED;writing,signed_by_the_party_charged,establishes_contractual_relationshipUNDETERMINED95cb9261facts as found why_not entitled_to_deliveryone blocker, no conjunct breakdown (declared limit §185 on defeasible rules, LP-39) 8ee06b55"For the court" and "for the jury" in the body are regression scenarios LP-28A and LP-28B (
for_the_courtTRUE_ONLY on a contract-formation question appropriate for summary judgment;for_the_juryTRUE_ONLY when the question requires experience of subtle social dynamics, Gallagher). No issue of any severity in any call.Public MCP: not called for this chapter.
A Right You Must Exercise
All answers were obtained on 05.09.2026 on the committed model
corpus/clir/fide-laws-chess.lawir.json (package fide.laws.chess,
schema law.core.ir/0.2), program hash
sha256:ed75d93bde3f92fd1b5213b240db8c1c076cac526c3b56d0361da0963134cad8
(theoryHash, reported as programHash in every manifest;
semanticHash sha256:f4f8a786…). Last change: commit 6f896fcaa of
05.09.2026 07:20. Legal time of every case: 2023-06-01 (the Laws in force
from 2023-01-01).
Regression of family
fide_chess: 16/16 PASS.Differential
check_kz_differential.py --only fide_chess: 16 evaluate calls byte-identical (liblaw_ffi == lawref), OK.Certificates
check_kz_certificates.py --only fide_chess --no-ffi: OK. 16 oracle and 16 engine certificates; leaves proved 50, rule steps 18, queries 4; safety §190 rechecked for 20 applications; L1 §107: 2 candidates, 0 defeats compared. Not proved by core v1:MoveIsIllegal×15,SecondIllegalMoveEndsTheGame×2,CastlingLegal,ThreefoldClaimCorrect,FivefoldAutomaticDraw,FiftyMoveClaimCorrect(conjunct or head outside core v1: §52/§57 arithmetic, §113), 7TRUE_ONLYresting on an unverified step,ThreefoldClaimDrawson an unverified step (§180). Outside core v1: 140 closure anti-membership leaves (§70/§196), 5 NEITHER, 1 judgment request checked structurally.Hand-written tests
tests/01…03.lawtest:lawc test3/3 PASS.Chapter differential: the twenty-one questions below, built with the case builders of
corpus/kz/acts/fide_chess.py(_players,_case), evaluated by the oracle (EvaluationRequest.from_dict, semantics 0.2) and bylawc evalon the same wire request; all twenty-one canonical documents byte-identical, PASS.Cells (
resultHash, first eight hex digits):Record Query Status resultHash White to move, occurrence count 3 game_drawnNEITHER 26e6a66b+ draw_claimed(White)game_drawnTRUE_ONLY ( ThreefoldClaimCorrect,ThreefoldClaimDraws)a2abedbaWhite to move, count 3, draw_claimed(Black)game_drawnNEITHER 0f69806fWhite to move, count 2, draw_claimed(White)game_drawnNEITHER a570242dcount 5, no claim game_drawnTRUE_ONLY ( FivefoldAutomaticDraw)76a9d50eWhite to move, 50 moves, draw_claimed(White)game_drawnTRUE_ONLY ( FiftyMoveClaimCorrect,FiftyMoveClaimDraws)20d59c7bWhite to move, 50 moves, no claim game_drawnNEITHER bcc8111075 moves, no claim game_drawnTRUE_ONLY ( SeventyFiveAutomaticDraw)85fcb91975 moves, checkmate_delivered(White)game_drawnFALSE_ONLY, one defeatnode (CheckmateOverSeventyFiveMoves,lex_specialis)1cb1bc88the same game_won_by(White)TRUE_ONLY ( CheckmateWins)c50f4bfdcompleted_illegal_move_count(White, 2)game_lost_by(White)TRUE_ONLY ( SecondIllegalMoveLoses)0560c10ccompleted_illegal_move_count(White, 1)game_lost_by(White)NEITHER eb3d23e4count 2 + king_cannot_be_checkmated(White)game_drawnTRUE_ONLY ( SecondIllegalMoveDrawnIfMateImpossible)474f81e7the same game_lost_by(White)NEITHER dc26ec4cWhite to move, piece_can_be_moved(king)must_move_first_touched_pieceNEITHER, REQUIRES_JUDGMENT, authorityFIDEArbiter, predicatepiece_touched_intentionallyf6932c55+ judgment positive ( origin adjudicated)must_move_first_touched_pieceTRUE_ONLY ( MustMoveFirstTouchedPiece)11ae71b6+ judgment negative must_move_first_touched_pieceNEITHER, COMPUTED, no request ba84e176castling side declared, king not recorded as moved castling_legalTRUE_ONLY ( CastlingLegal, closure)ecf9d336+ piece_has_moved(king)castling_legalNEITHER a9815a5bgame started, attempted_transition PlayMove, move not meeting 3.1–3.9valid_transition(PlayMove)NEITHER ( MoveIsIllegal)9004f793the same with move_meets_articles_3_1_to_3_9valid_transition(PlayMove)TRUE_ONLY ( MoveIsLegal)e81f14e0MoveIsIllegalfires in every case through the closure overmove_meets_articles_3_1_to_3_9; it is not part of any answer above except the procedure rows. No issue of any severity in any call.Public MCP: not called for this chapter.
What the Model Leaves Out
All answers were obtained on 05.09.2026 on the committed model
corpus/clir/kz-social-code.lawir.json (package kz.corpus.socialcode,
schema law.core.ir/0.2), program hash
sha256:ad71b29e332956f513045b6e2405891a5e2c60fd292d6cca745d88378ae20c99
(theoryHash, reported as programHash in every manifest; semanticHash sha256:44c49df3…). Last change of the package and CLIR: commit 2d33c8c40
of 05.09.2026 11:50. The public MCP catalogue reports semanticHash sha256:01d66f14… for the same package: the server serves a different
build; its catalogue line ("EXECUTABLE 180 §33.1") and its search results
were used in the body only for what the catalogue says about depth and
for the absence of predicates on special social services, both of which
hold on the committed model as well (zero nodes reference SC_ART131,
SC_ART133, SC_ART154; 22 rules reference SC_ART206).
Pension cells (oracle
EvaluationRequest.from_dict, semantics 0.2, andlawc evalon the same wire request; all seven byte-identical, PASS). Facts:pension_system_participation_full_years(person, N),basic_pension_applicable_subsistence_minimum(person, 50851 KZT); querycalculated_state_basic_pension_amount(person, X KZT);resultHash, first eight hex digits:Years Legal time Asked amount Status Rule resultHash 8 2026-09-01 35 595,70 TRUE_ONLY BasicPension2026Base024a556c20 2026-09-01 45 765,90 TRUE_ONLY BasicPension2026Growth9a39afc440 2026-09-01 60 004,18 TRUE_ONLY BasicPension2026Cap59fa095020 2026-09-01 45 765,00 NEITHER (Growth fired; amount differs) 7959dee940 2027-06-01 61 021,20 TRUE_ONLY BasicPension2027Cap7000cd1134 2026-09-01 60 004,18 TRUE_ONLY BasicPension2026Capdd39cec334 2027-06-01 60 004,18 TRUE_ONLY BasicPension2027Growtha54ca209Rules (
09-basic-pension-amount.law, all strict,effectivewindows 2026 and 2027+): base 70 % for ≤ 10 years; growth 70 % + 2 % × (years − 10) for 10 < years < 34 (2026) / < 35 (2027); cap 118 % (2026) / 120 % (2027). The subsistence minimum is an empirical case fact (kind empirical,key(person)), not derived from the importedkz.corpus.budget; the budget-2026 package pins 50 851 KZT (budget-2026.law, assertion ofkz.corpus.budget_code::subsistence_minimum(2026, 50851 KZT)).Regression of family
vysluga_pensiya(linkskz.corpus.socialcodethroughlink_deps): 6/6 PASS; differential 13 evaluate calls byte-identical, OK. The registry'sSOC-01/SOC-03anchors run under the full regression, not under a family key.Depth measure
check_formalization_depth.py --only kz-social-code:{EXECUTABLE 180, ANCHORED 0, INTERPRETED 0, SOURCE_ONLY 92, UNEXPLAINED 92, EXCLUDED 0, —: 0}, matches the baselineverify/ci/data/formalization-depth.json. Per-article list fromboundaries.py corpus/laws/kz/codes/social-code/sources/social-code/ru.txt corpus/clir/kz-social-code.lawir.json: the 92 source-only articles are 1, 2, 10-1, 42–75, 83, 86, 114, 116, 122–125, 130–171, 173, 174, 176, 193 and others (special social services 131–142, national preventive mechanism 143–153, disability rights and rehabilitation 154–171).Corpus-wide depth (baseline of 04.09.2026 23:56, 374 acts): totals EXECUTABLE 16 816, ANCHORED 2 072, SOURCE_ONLY 2 675, UNEXPLAINED 1 140, EXCLUDED 118, INTERPRETED 16, outside packages 18 041 article-units; 89 acts fully executable; 4 acts with no measure at all (
eu-nomenclature-gri,kz-gats-financial-services,mng-yasa,us-liver-status). Examples named in the body:kz-customs-code{EXECUTABLE 124, ANCHORED 466};kz-civil-code{EXECUTABLE 414, ANCHORED 1, EXCLUDED 10};la-protagoras-euathlus{EXECUTABLE 10, INTERPRETED 1, ANCHORED 5};us-leonard-v-pepsico{EXECUTABLE 13, ANCHORED 3, SOURCE_ONLY 3};fide-laws-chess{EXECUTABLE 6, —: 6};eu-air-passenger-rights{EXECUTABLE 19};de-bgb-1896{EXECUTABLE 37, —: 1 723}.Provenance kinds (count of
materialization_statusincorpus/laws/**/sources.lawon 05.09.2026): PINNED_UNOFFICIAL_COPY 303, PINNED_OFFICIAL_BYTES 89, ABSTRACT_ONLY 30, UNAVAILABLE 17, PINNED_EDITORIAL_RECONSTRUCTION 9, DYNAMIC_OFFICIAL_PAGE 1, empty 10;officiality: official 300, unofficial 171, translation 3, empty 11. Examples: official bytesintl/echr-1950,intl/ilo-c138; reconstructioneng/animal-farm-1945,ru/vershki-koreshki; abstract onlyintl/general-average,ru/zolotaya-rybka; unavailableus/three-laws-robotics; dynamic pagefatf/recommendations;un/charterandus/constitutionPINNED_UNOFFICIAL_COPY (transcripts).Social Code provenance (
02-sources.law): editionSOCIAL_CODE_224_RU,officiality official,materialization_status PINNED_UNOFFICIAL_COPY, adopted 2023-04-20, in force from 2023-07-01; publicationhttps://adilet.zan.kz/rus/docs/K2300000224/compare, left column, retrieved 2026-08-27T21:40:11Z,content_hash sha256:f053dbeb…, 272 fragments.Certificates: not run for this chapter. The depth measure is guarded by
check_formalization_depth.py(one-way ratchet;--canarymutations) and is not certified by the Lean core.
Who Chose This Reading?
All seven-day answers were obtained on 05.09.2026 on the committed model
corpus/clir/eu-air-passenger-rights.lawir.json (program hash
sha256:a6be790a…, as in chapter two). Facts: the in-scope set,
cancellation, reimbursement_chosen_on(p, f, 2026-08-01),
reimbursement_paid_on(p, f, 2026-08-08 | 2026-08-09); legal time
2026-08-26; the reading enters as case.options.selectedInterpretations = ["…#SevenDayReimbursementStart"] (the wire schema accepts options only
inside case, DECISION-0111 §2.2). Oracle EvaluationRequest.from_dict
and lawc eval on the same wire request; all five byte-identical, PASS.
resultHash, first eight hex digits:
| Case | Query | Reading | Status | resultHash |
|---|---|---|---|---|
| paid 08.08 | reimbursement_within_seven_days |
none | NEITHER; manifest.interpretations empty |
2aa2e730 |
| paid 08.08 | the same | SevenDayReimbursementStart |
TRUE_ONLY (ReimbursementWithinSevenDaysOfChoice) |
33c9bae6 |
| paid 09.08 | the same | SevenDayReimbursementStart |
NEITHER | 1e953693 |
| paid 09.08 | the same | none | NEITHER | 2b49346b |
| paid 08.08 | right_to_reimbursement_or_rerouting |
none | TRUE_ONLY | 6ef316c4 |
The family regression (40/40) and differential (40/40) of chapter two
cover scenarios APR-27, APR-28, APR-29 and APR-38 (the same reading with
the package-travel exclusion, FALSE_ONLY).
- Interpretation (
07-reimbursement-and-care.law):interpretation SevenDayReimbursementStart of EU261_ART_8 { status disputed; label en official "…"; include ReimbursementWithinSevenDaysOfChoice; }; the included rule is defeasible and readsdays_between(chosen, paid) <= 7. Two further interpretations of the same package carry noinclude(ReasonablyExpectsStandard,ReducedMobilityStandard,ReasonableRelationToWaitingTime): open standards that qualify the content of a duty, not its existence; the header explains why they must not remove the rule from the base theory. - Labels and overlays.
corpus/clir/kz-constitution-rights.lawir.json(semanticHash sha256:72b7cecb…,theoryHash sha256:37583296…, last change commit71e83f097of 05.09.2026): ruleCitizenNonExtraditionImmunity, labelsru-KZ officialandkk-KZ official, anchorsKZ_CONSTITUTION_2026_ART14_RUand…_ART14_KK. Overlayscorpus/laws/kz/constitution/rights/i18n/{en,la,zh,ar,uz,ky}.json(formatlaw.i18n/0.1, 118 entries each, every entrystatus: translation; thekk.jsonoverlay carriesofficialfor the Kazakh text). Verbalisation contentHash: Russian pack, no overlaysha256:ab05dc05…; the same with any overlay but the Russian packsha256:ab05dc05…(the pack selects the language); English packlaw.verb.en/pack-0.2.0.json+en.jsonsha256:c15f6805…; Latin packla.jsonsha256:7c9e9a4d…. The program hashes are unchanged in all four runs; §218 / errata E-0010 keep labels out of the semantic-hash preimage; DECISION-0070 keeps overlays out of the compiler entirely.
- Reports (DECISION-0100): tool
law_report, facetfeedback; fieldspackage(checked against the catalogue),category∈ {missing-norm,wrong-outcome,label-mismatch,broken-address,source-text,other},expected,observed, optionalfragment,predicate,callId; the handler is pure, the transport journal records the call withMCP_REPORT_*fields and the packagesemanticHash; triage outside the server with two outcomes (rule fix / recorded decision); thefiqh-nikahprecedent of 03.09.2026; confirmed findings go to the findings ratchet of DECISION-0095 with a disposition. Not built: a confirmation metric. No report was filed for this chapter. - Approvals (DECISION-0006): the subject is one verbalised block per
declaration;
subjectSemanticHashis the node's semantic hash; statescurrent,stale_semantics,stale_verbalization,orphaned(LDC-E8202); a block with a totality gap cannot be approved abovedraft(LDC-E8201); an approval is necessary, not sufficient, for VERIFIED (§33.1); storage, signatures and the dispute mechanics are recorded as open. - Certificates: not run for this chapter.
The Day the Answer Changes
All figures were obtained on 05.09.2026 on the committed model
corpus/clir/kz-dogovornaya-penya.lawir.json (theoryHash sha256:b25ac0b7…, last change commit 8f4b819d1 of 05.09.2026;
repository HEAD 118294aac). The world is four packages:
kz.private.dogovornaya_penya 0.1.0 (contentHash sha256:f2892d3e…),
kz.corpus.civilcode 0.1.0 (sha256:9d304acf…), calc.obligations
and calc.accruals (DECISION-0123, P02 and P03). programHash sha256:768d605e… in every run. Contract text
sources/dogovornaya-penya/ru.txt, sha256:9b41a46f…. Semantics
law.core/0.2.
Runs through corpus/laws/kz/study/dogovornaya-penya/tools/raschet.py <input.json> --differential; the flag executes every call a second
time through liblaw_ffi and compares canonical bytes (§208). Inputs
derived from scenarios/kontrolnyi-primer.json (principal 1000000.00,
due 2026-06-10, payment PP-001 400000.00 credited 2026-06-21,
paymentHistoryConfirmedComplete: true):
| Variant | Calculation date | Penalty | Principal | Total | Status | semanticHash | differential |
|---|---|---|---|---|---|---|---|
| base | 2026-06-30 | 16 000 (10 000 + 6 000) | 600 000 | 616 000 | computed | 3561fff4 |
26/26 |
| date | 2026-06-20 | 10 000 | 1 000 000 | 1 010 000 | computed | 3c7ec7b3 |
22/22 |
| date | 2026-07-31 | 34 600 (10 000 + 24 600, 41 days) | 600 000 | 634 600 | computed | 60e8e969 |
26/26 |
| cap | 2026-12-31 | 126 400 → cap 100 000 (194 days) | 600 000 | 700 000 | computed | 71e6fceb |
26/26 |
paymentHistoryConfirmedComplete: false |
2026-06-30 | periods 10 000 + 6 000 shown, final None |
None |
None |
incomplete; blockers §185: payment_history_confirmed_complete NEITHER, contract_calculation_date unbound |
cc429e22 |
26/26 |
| field absent | 2026-06-30 | — | — | — | invalid-input, exit 2 (clause 5.2) | — | — |
| duplicate payment id | 2026-06-30 | — | — | — | invalid-input, exit 2 (clause 4.2) | — | — |
allocations: [] |
2026-06-30 | 20 000 (20 days on 1 000 000) | 1 000 000 | 1 020 000 | computed; CONSTRAINT_VIOLATED … #UnallocatedPaymentIsNamed |
bf63aa5c |
22/22 |
Every computed run also carries the legal question: penalty_recoverable
answers REQUIRES_JUDGMENT, judgment request §47.3 to authority Court,
urn:kz:private:clir:dogovornaya-penya#court_awarded_penalty (clause
6.3; Civil Code art. 297). penalty_final and court_awarded_penalty
are distinct predicates with no rule between them.
Family checks on the same date: run_kz_regression.py --only dogovornaya-penya --only holidays --only civil_terms → 32/32 PASS
(composition dogovornaya-penya 21, holidays 6, civil_terms 4);
check_kz_differential.py with the same families → 101 evaluate calls
byte-identical, OK.
Calendar cells: model corpus/clir/kz-official-calendar-2026.lawir.json
(theoryHash sha256:2fc5bdf6…, last change 783fcd169 of 04.09.2026),
resource corpus/clir/kz-official-2026.calendar.json, policy
{"start_count": "next_day", "include_end": true, "roll": "next_working_day", "cutoff": null} (Civil Code art. 173/175/176, as
documented in corpus/kz/acts/official_calendar.py). Oracle
engine.evaluate on EvaluationRequest.build; resultHash, first
eight hex digits:
| Cell | From | Days | Result | Trace | resultHash |
|---|---|---|---|---|---|
| CIV-01 | 2026-12-04 (Fri) | 10 | 2026-12-14 | rolled false | 725d594c |
| CIV-02 | 2026-12-06 (Sun) | 10 | 2026-12-17 | rolled true (16.12 Independence Day, law 267-II) | 25083515 |
| CIV-04 | 2026-03-16 (Mon) | 5 | 2026-03-26 | rolled true (21–23.03 Nauryz; 24–25.03 moved rest days, art. 5 para. 3 of law 267-II) | aae1c06d |
| CIV-03 | 2026-12-04, filed 19:30, cutoff 18:00 | 10 | 2026-12-15 | cutoffShifted true | 59bc14e5 |
is_working_day |
2026-12-16 | — | false | — | d7358cb5 |
The history told in the body: until 30.08.2026 scenario CIV-04 was
described as a chain of three acts, with 24–25.03 attributed to a
government resolution on moving rest days; no resolution with that
subject exists, the moved days follow from the law on holidays itself.
The comment in official_calendar.py records the correction; the dates
did not change.
One Case, Five Legal Traditions
The comparative chain is DECISION-0091 (spec/decisions/0091-comparative-private-law-chain.ru.md,
02.09.2026; plan docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, phases
Ф0–Ф8 closed 02.09.2026). Shared vocabulary doctrine.ius_privatum
(corpus/laws/doctrine/law/ius-privatum/, CLIR
corpus/clir/doctrine-ius-privatum.lawir.json, theoryHash sha256:f1182dbd…); heads ius_efficax, ius_nudum,
remedium_sine_iure over remedium_competit, remedium_datur,
remedium_exclusum. Casus registry
corpus/laws/doctrine/law/ius-privatum/casus/*.lawtest (31 files, 12
numbered casus with variants), expectations per link in
casus/matrix.json with anchors, written from the text before the run.
Links, legal time per link (from matrix.links), CLIR and theoryHash
on 05.09.2026 (repository HEAD 118294aac; all CLIR last regenerated in
783fcd169 of 04.09.2026, the Kazakh pair in 8f4b819d1 of
05.09.2026):
| Link | Legal time | CLIR | theoryHash |
|---|---|---|---|
| Gaius, Institutiones IV (c. 161) | 0161-06-01 | rom-gai-institutiones |
0c1d00c7 |
| Justinian, Institutiones (533) | 0533-12-30 | rom-institutiones-iustiniani |
e876d041 |
| Mejelle (1869–1876) | 1900-06-01 | osm-mejelle |
d3991a5b |
| Code civil (1804) | 1810-01-01 | fr-code-civil-1804 |
cced74d9 |
| BGB (1896, in force 1900) | 1900-06-01 | de-bgb-1896 |
86af955b |
| Civil Code of Kazakhstan (268-XIII, 409-I) | 2026-09-02 | kz-civil-code-special + kz-civil-code |
d3b19025, b743cd52 |
Cells of the published hall apps/registry/index/casus/matrix.json
(generator verify/ci/tools/casus_matrix.py, committed 2080f6db0 of
02.09.2026; summary 173 cells, 173 matches, 0 mismatches, 13 skipped);
resultHash, first eight hex digits:
| Casus | Question | Gaius | Justinian | Mejelle | Code civil | BGB | KZ | nullum |
|---|---|---|---|---|---|---|---|---|
| 01 venditio a non domino | ius_efficax(Titius, Maevius) |
TRUE_ONLY d916915d (GAI_4_003) |
TRUE_ONLY 131bf3c7 (INST_2_1_40) |
TRUE_ONLY 507123c4 (MJL_ART368) |
FALSE_ONLY 2aa37ad2 (CC_ART2279) |
FALSE_ONLY a63babf4 (BGB_P932) |
FALSE_ONLY 2b695790 (GK_ART261) |
NEITHER 5662149d |
| 05 furtum et venditio | the same, stolen thing | TRUE_ONLY (GAI_4_003) | TRUE_ONLY (INST_2_6_2) | TRUE_ONLY (MJL_ART890) | TRUE_ONLY (CC_ART2279 al. 2) | TRUE_ONLY (BGB_P935) | TRUE_ONLY (GK_ART261) | NEITHER |
| 07a usucapio mobilis anno | movable, one year | NEITHER 928383d4 (GAI_2_042) |
TRUE_ONLY 8ce1f7f7 (INST_2_6_PR) |
TRUE_ONLY 4c7f6aec (MJL_ART1660) |
FALSE_ONLY 1018e95d (CC_ART2279) |
TRUE_ONLY 06f66db9 (BGB_P937) |
TRUE_ONLY cc1f06c6 (GK_ART240) |
NEITHER 9ae0b90b |
| 07d usucapio immobilis annis triginta | land, thirty years | NEITHER 51c5cabc |
NEITHER 037dcf16 |
FALSE_ONLY 17c77920 (MJL_ART1660, 1674) |
NEITHER a4d7bbcc (CC_ART2262) |
FALSE_ONLY 7cd8561a (BGB_P194, 222) |
NEITHER f224f282 (GK_ART240) |
NEITHER 7f1ad91f |
| 09e praescriptio ius nudum | ius_nudum(Titius, Seius) |
NEITHER (REQUIRES_JUDGMENT, GAI_4_110) | skipped | TRUE_ONLY (MJL_ART1674) | TRUE_ONLY (CC_ART1235) | TRUE_ONLY (BGB_P222) | TRUE_ONLY (GK_ART187) | NEITHER |
Family checks on 05.09.2026: run_kz_regression.py --only ius_privatum_casus → 204/204 PASS; check_kz_differential.py --only ius_privatum_casus → 204 evaluate calls byte-identical (liblaw_ffi == lawref), OK. verify/ci/tools/casus_matrix.py --check → FAIL, 32 of 32 index files stale: the committed hall of 02.09.2026 predates the CLIR regeneration of 04–05.09.2026. Regenerated on 05.09.2026 into the scratchpad (casus_matrix_sandbox.py, same generator, output redirected): 217 cells, 0 verdict changes, 204 resultHash values changed (every non-skipped cell), 13 unchanged (skipped); every link's world semanticHash changed (e.g. Gaius dc73db35 → 86cf9bec, BGB 3902cbc2 → 2c687682). Today's hashes for casus 01: Gaius ff3268f4, Justinian a8ce2e37, Mejelle 2c4ffe34, Code civil d2065bc7, BGB 33342e2d, KZ adb62614, nullum 0c5a66bc; for 07a: ca178ab0, 2335ed48, 9565525a, db5d2182, 0c365027, ddd5af7d, e4f17f7e. The committed index was not rewritten by this chapter.
Source wording used in the body (pinned texts): Gaius IV.3 (la.txt,
"In rem actio est, cum aut corporalem rem intendimus nostram esse…"),
II.42 ("Vsucapio autem mobilium quidem rerum anno completur, fundi uero
et aedium biennio"); Justinian 2.1.40 ("…a domino tradita alienatur"),
2.6.pr (movables one year, immovables two, under the ius civile; the
Institutes then state the new three-year and ten/twenty-year terms);
Mejelle art. 368 (sale of another's property suspended on the owner's
approval), 97, 890, 1660, 1674 (ar.txt); Code civil art. 2279 ("En
fait de meubles, la possession vaut titre. Néanmoins celui qui a perdu
ou auquel il a été volé une chose, peut la revendiquer pendant trois
ans…"), 550, 2262, 2265, 1235; BGB § 932 ("Durch eine nach §. 929
erfolgte Veräußerung wird der Erwerber auch dann Eigenthümer, wenn die
Sache nicht dem Veräußerer gehört, es sei denn, daß er … nicht in gutem
Glauben ist"), § 935, § 937 ("Wer eine bewegliche Sache zehn Jahre im
Eigenbesitze hat, erwirbt das Eigenthum"), § 985, § 194, § 222; Civil
Code of Kazakhstan art. 261 para. 1, art. 240 para. 1 (seven years
immovable, five years other property), art. 260, 178, 187. Paraphrases
of the Arabic and Latin in the body are the author's; the Mejelle's cell
notes in matrix.json are the modeller's readings.
First-run red cells (from STATUS.md, 02.09.2026): Code civil casus 01 gave TRUE_ONLY (no rule reading a purchase as titre translatif, art. 550; rule added from the text, expectation untouched); BGB casus 01 gave NEITHER twice (first the exceptio — § 932 does not take away the § 985 claim; then the intentio — the former owner's claim was never stated as § 985); Code civil casus 07d expected FALSE_ONLY, recorded NEITHER with the reason in the cell note (art. 2262 extinguishes the action thirty years from its birth; the casus states years of possession, so the acquisitive side works).
A Counterexample Before an Amendment
Package ru.afanasyev.vershki_koreshki 0.1.0
(corpus/laws/fiction/afanasyev/vershki-koreshki/, language 0.2; jurisdiction = "none", instrument = "agreement", sourceFidelity = "reconstruction"); CLIR corpus/clir/ru-vershki-koreshki.lawir.json,
theoryHash sha256:da7fb6b4…, last change 783fcd169 of 04.09.2026;
repository HEAD 118294aac; all runs 05.09.2026. Witnesses pinned in
sources/vershki-koreshki/: Afanasyev No. 24 operational (ru.txt,
148 lines; slices e1-god-pervyy.txt, e2-god-vtoroy.txt as the two
editions, materialization_status PINNED_EDITORIAL_RECONSTRUCTION),
No. 23 and No. 25 as divergent witnesses, Grimm KHM 189 "Der Bauer und
der Teufel" (de.txt). Editions RAZDEL_GOD_PERVYY (tops to the
bear) and RAZDEL_GOD_VTOROY (roots to the bear); stand-in legal times
1000-06-01 and 1001-06-01.
| Check | Result |
|---|---|
run_kz_regression.py --only vershki_koreshki |
16/16 PASS (VK-01A/B/C, VK-02, VK-03A/B, VK-04, VK-05, VK-06, VK-07, VK-08A/B) |
check_kz_differential.py --only vershki_koreshki |
16 evaluate calls byte-identical, OK |
lawc test on tests/01…06 |
6/6 PASS (gets_worthless_part TRUE_ONLY in 01 and 03; gets_valuable_part TRUE_ONLY in 02 and 04; deceit_established REQUIRES_JUDGMENT in 05; receives NEITHER across editions in 06) |
| positions VK-05 / VK-06 | DutyToDeliverAllottedPart SATISFIED in both historical years |
lawref impact-editions … 1000-06-01 1001-06-01 --scenarios impact-scenarios |
verdict SEMANTIC-CHANGE; §215 diff added=5, removed=4; scenarios 4, outcome changed 4: year-one-turnip NEITHER→NEITHER, year-one-wheat TRUE_ONLY→NEITHER, year-two-turnip NEITHER→TRUE_ONLY, year-two-wheat NEITHER→NEITHER; bank blind to the change: 9 norms touched, none exercised by any scenario; 3 rules without proven application (DECISION-0019 C) |
lawref amend … --target amend-target-bear-gets-value.json --scenarios impact-scenarios |
not found; 42 evaluations; edit space 8 operations, exhausted: true, editSpaceTruncated: false, maxEdits: 2; exit 1 |
lawref loophole … --goal loophole-goal.json --depth 2 --budget 8000 |
3602 evaluations, walk exhausted; alphabet truncated 24 of 66 atoms; predicates left without any action: allotted, deceived_in_division, delivered, party_to_contract, took_own_part; verdict SPACE-TRUNCATED, exit 4; NORMS_NOT_IN_PROJECTION on both date groups (edition windows) |
the same with --alphabet-cap 80 --dates-cap 6 --budget 30000 |
verdict NOT-FOUND, exit 0; 26 534 evaluations, walk exhausted, alphabet 66 of 66, dates 6; the goal's background is 3 assertions (sowed_together ×2, sown) while the historical world of year-two-wheat carries harvested, valuable_part, worthless_part and took_own_part ×2 on top of it (plus the dead chose_crop), i.e. at least five facts, so depth 2 cannot reach it: the negative is a statement about depth 2 |
The impact tool's blindness to positions was closed 31.08.2026
(README of the package: before that date the report printed "outcome
changed: 2" and called both historical scenarios unchanged; the O-1
outcome projection compared only {results, issues}, while §134
positions live at the root of the evaluation document). The loophole
verdicts SPACE-TRUNCATED / BUDGET-EXHAUSTED (exit 4) were added
01.09.2026 (STATUS.md, "lawref loophole: капы пространства получили
флаги, а «не найдено» — вердикт"), with the tale's three-place action
took_own_part recorded as the second witness (29.08.2026).
Maine: package us.me.ranked_choice (21-A M.R.S. § 723-A;
corpus/laws/us/maine-ranked-choice/), CLIR
corpus/clir/us-maine-ranked-choice.lawir.json, theoryHash sha256:4145cb49…, last change 783fcd169 of 04.09.2026; world of
scenarios KZ-ME723A-03/04 built by the runner's _election("r", "ABC", ["ABC", "ABC", "BAC", "BAC", "CAB"], recorded_removals=(("C", 1),))
(26 assertions, scratchpad/maine_goal.py); goal truth declared_the_winner(governor, C) expected TRUE_ONLY.
lawref loophole corpus/clir/us-maine-ranked-choice.lawir.json --goal … --depth 1 --budget 400 --alphabet-cap 80 --dates-cap 4 → verdict
FOUND, 256 evaluations, walk truncated by the findings cap (5 findings),
every finding one step ballots_cast_for_office(urn:us:me:office:governor, ?) on dates 2018-01-01, 2018-01-02, 2026-09-01; exit 1. The documented
run of 02.09.2026 (verification.ru.md, commit a2673f555) reports
326 evaluations and the same single step. Family checks:
run_kz_regression.py --only maine_ranked_choice → 16/16 PASS; check_kz_differential.py --only maine_ranked_choice → 41 evaluate calls byte-identical, OK. Statute text (sources/…/en.txt, line 67): "If a
candidate has been assigned ranking number one on more than 50% of all
ballots cast for the particular office for which the candidate is
running, including but not limited to ballots on which ranking number
one is blank, on which there is an overvote at ranking number one or on
which ranking number one was assigned to an excluded candidate, that
candidate is declared the winner…"
What the Checker Actually Proves
Checker engines/checker/ (Lean 4, toolchain leanprover/lean4:v4.33.0,
lean-toolchain); modules LawCore/{A3, Argumentation, Arith, Cert, Cert181, Check, Closure, Conservativity, Const, Defeasible, Json, Precedent, Sha256, Strata, Support, Term}.lean plus Main.lean, 3 899
lines total (wc, 05.09.2026); no external dependencies (no mathlib, no
import Lean; §197). Last change of LawCore/ in 20912fe36 of
05.09.2026 (the review commit of chapter eleven touched
Check.lean); README last changed d6dbc8796 of 29.08.2026.
Theorems and axioms, printed with lake env lean on 05.09.2026:
| Theorem | Statement (paraphrase) | Axioms |
|---|---|---|
LawCore.cert_sound (Cert.lean:102) |
if CertOK rules base proven cert, every step's conclusion is positively in the base or in Derives rules base (least model §103) |
none |
LawCore.certOKB_sound |
the executable certOKB returning true implies CertOK |
propext, Quot.sound |
LawCore.safe_head_grounded (Term.lean:170) |
a safe rule's head is ground under any substitution grounding its body (§190) | propext, Classical.choice, Quot.sound |
LawCore.no_explosion (Support.lean:85) |
raising an atom to BOTH changes no other atom's status (§5.4) | propext |
LawCore.strict_opposition_defeats (Defeasible.lean:123) |
a strict derivation is not defeated by a defeasible one (§114) | propext |
sorryAx appears nowhere (README; the #print axioms output above
lists none).
Runs on 05.09.2026 (lake build: 39 jobs, OK; lake exe lawcheck
self-test OK: closure §103, canon §208 round-trip and three refusals,
SHA-256 §180, arithmetic §57–§58, L1 §107 three defeat paths). Verbose
certificate checks on canonical ir/case/expected of three vectors
(scratchpad/lc_*.json):
| Vector | Report |
|---|---|
t/T001 (P without not P gives TRUE_ONLY) |
nodes 2; proved: leaves 1, steps 0, queries 1; no assumptions; OK |
errata/ERR-E0062-MOD-SIGN |
nodes 3; proved: leaves 1; assumptions: apply:EuclidWitness "conjunct or head outside core v1 (§52/§57/…)", query "TRUE_ONLY rests on an unverified step (§65/§66)"; OK |
lay/LAY-L3-EVP-ACCEPTED |
nodes 12; safety §190 checked 2; assumptions: eight evidence-projection nodes "projection bound to raw input; the projection §78.2.3 itself is outside core v1, external premise", support-admission "structurally verified (policy, document, link, polarity, …)", apply:AcceptPaid and apply:Settle "rest on an unverified step (§180)", query:settled unverified; OK |
Gate verify/ci/gates/proofs/check_proof_certificates.py (whole vector
corpus, eleven forgeries, positive strength check, four DECISION-0118
canaries, closure §179 without Lean): run 05.09.2026, OK. Closure §179: 379 graphs, no dangling premises, canary on a detached premise reddens; priorityPath §181.2 checked; 4/4 forgeries §180–§180.1 rejected (content-id, uniqueness, Kahn order, set-like array); 386 certificates checked by the core: leaves proved 401, rule steps 69, queries 47, safety §190 rechecked at 103 applications, L1 candidates 105, defeats 34, survived 63, admitted 338 (§104 candidates, division §59, conjuncts outside v1); 386 engine certificates checked, rule steps 72; 387 calls by handle, 0 subprocess fallbacks; 7/7 forgeries rejected (substitution, premise, leaf, cycle, dangling reference, status); strength §104 read (defeasible: 0 proved steps against 1 for strict); 2/2 sum forgeries rejected; opaque head operand → named assumption; 6/6 §181.1 forgeries rejected; 2/2 defeat forgeries rejected (§107 recomputed); 2/2 judgment-node forgeries rejected (§47.3); 7/7 acceptance-phase forgeries rejected; certification boundary §78.2.9 printed; 2/2 AF and 2/2 PREC forgeries rejected
Live acts, check_kz_certificates.py --only zheti_zhargy --only us_declaration --no-ffi (two of the four packages named in the §54
constant finding of 28.08.2026): run 05.09.2026: regression 181/181 PASS (zheti_zhargy 165, us_declaration 16); 216 live-act certificates checked: leaves 3 644, rule steps 6 401, queries 107 proved, safety §190 rechecked at 6 426 applications, L1: candidates 65, defeats 3 compared, 62 survived; 216 engine certificates checked with the same 6 401 steps; but 5 oracle certificates and the same 5 engine certificates REJECTED (zh-12d-multiple-offences-same-matter, zh-132-two-witnesses-prove, usd-13, usd-15, usd-16), each with ОШИБКА: urn:proof:closure:…: множества id сертификата не отсортированы либо содержат дубликат (§180.1/§181.1); gate exit 1. No errors of the §54 constant class. The closure-certificate class is recorded in STATUS.md as qualified under invariant 8 as an oracle defect (entries of 30.08–31.08.2026: candidate_closure lists only the supporting candidate in allApplicableCandidateIds where §181.1 demands all applicable; leonard-v-pepsico 16 of 28, repka 8 of 26, zhirenshe 3 of 30, f1_sporting 17 of 28 at the time; both engines byte-identical, fix requires errata); chapter four's run of 05.09.2026 shows leonard_v_pepsico 44/44 accepted, so the earlier message has gone; today's message names sortedness and uniqueness of the id sets (§180.1/§181.1, the DECISION-0118 set-like check), and no entry relates it to the earlier class. The map of the unproved (top): 36 × BlasphemyEstablishedBySevenWitnesses conjunct or head outside v1, 33 × TRUE_ONLY resting on an unverified step, 19 × DeathSentenceIsPunishment defeasible candidate; outside v1: 256 norm_creation nodes, 60 NEITHER statuses, 18 interpretation_selection nodes. Chapter four's run of the same
gate on leonard_v_pepsico: 44 oracle and 44 engine certificates, 326
leaves, 61 steps, 7 queries proved; L1: 254 candidates, 36 defeats
compared, 218 survived.
Hand forgeries (scratchpad/forge_ch13.py): vector t/T005 (nodes 4: leaf, apply:S1, query, one node outside v1; genuine report: leaves 1, steps 1, queries 1, safety §190 1, OK). F1 premise removed from apply:S1 → exit 1, ERROR … content-id does not match the SHA-256 of the canonical content (§180), "REJECTED — certificate not verified". F2 leaf argument urn:entity:acme altered → exit 1, литерал листа не совпадает с assertion urn:law:vectors:t005#assert-a байт-в-байт (§208). F3 conclusion argument altered → exit 1, the content-id error and a second error on the same node. Node ids are SHA-256 of canonical node content (§180), so any edit to a node trips the id check before the semantic one.
README figures (29.08.2026): 89 certificates of live acts, 473 leaves and 272 rule applications proved, safety §190 rechecked at 273 applications; 272 rather than 391 because the core reads rule strength (§104 candidates are not proofs); 119 applications had counted as proved before strength was read.
Findings by the checker recorded in errata: E-0019 (found 26.08.2026,
qualified 27.08: proof graph not required to be closed under premises;
SPEC defect; closure now checked on every vector without Lean), E-0022
(27.08.2026: rule_application node without rule/substitution
allowed by evaluation.schema.json; schema defect, prose intact); STATUS
entry "Ядро Lean отвергает сертификаты при ОБЪЯВЛЕННОЙ константе §54
(28.08.2026, не закрыто)": criminal-code 117/120, us-declaration
38/35, zheti-zhargy 34/33, state-duty 7/7 rejected while the
differential stayed green; LawCore/Const.lean (README table, errata
E-0049 p. 1) now dereferences constants in a pre-pass "before reading
the program, the same walk and table as both engines".
A Computed Obligation, an Unfinished Dispute
Package intl.minsk.package_2015 0.1.0
(corpus/laws/intl/minsk-package-2015/, language 0.2, layer L3,
jurisdiction = "International", instrument = "agreement",
sourceFidelity = "pinned_unofficial_copy", issuer "участники
Трёхсторонней контактной группы"); CLIR
corpus/clir/intl-minsk-package-2015.lawir.json, theoryHash sha256:a5e2bb6c…, last change 783fcd169 of 04.09.2026; source
sources/minsk-package-2015/ru.txt (the Russian text as annexed to UN
Security Council resolution 2202 (2015)); all runs 05.09.2026. STATUS.md
measurements of 29.08.2026: depth §33.1 EXECUTABLE 13, ANCHORED 0,
SOURCE_ONLY 0; byte coverage 99.9 % (11 856 of 11 872, 16 fragments);
71 rules, 0 dead; labels §218 117 declarations and 90 norms; 53/53
scenarios byte-identical lawref ↔ lawc. 03.09.2026: check_minsk_readings
argumentation profile §274 checked against lawc byte for byte, 5/5.
Runs of this chapter:
| Check | Result |
|---|---|
scenario family minsk_package (corpus/kz/acts/minsk_package.py, 53 scenarios MINSK-01…52 with variants) |
53/53 PASS, run in-process (scratchpad/run_minsk.py); the shared registry on HEAD 0e2621dc9 (15:20) failed with KeyError: 'tutorial.archive' from a neighbouring package under packs/examples/tutorial/ added at 15:13–15:20, so run_kz_regression.py --only minsk_package, check_kz_differential.py and check_kz_certificates.py could not start |
lawc test tests/minsk-01…02.lawtest |
2/2 PASS |
lawref process on the CLIR |
procedure MinskImplementation(Settlement), initial Signed; 7 states, 6 transitions (DeclareCeasefire, WithdrawHeavyWeapons, OpenDialogue, HoldLocalElections, EnactConstitutionalReform, RestoreBorderControl); note SINK_STATE on BorderControlRestored; no structural defects |
byte differential (scratchpad/diff_ch14.py) |
12 cells, all byte-identical oracle (EvaluationRequest.from_dict) == lawc eval; see table |
Readings (09-sequencing-readings.law): SecurityFirstReading of MINSK_P10 { status disputed; include ElectionsRequireSecurityConditions; }
and LiteralOrderReading (both status disputed, interpretation_group
with selection any_of); the only differentiating predicate is
elections_precondition_met, derived by no base rule; both included
norms are listed in corpus/interpretation-gated.json.
Journals (journals/point-ten-pending.json, point-ten-completed.json,
law.process.journal/0.1, instance urn:intl:minsk:case:settlement-1),
six steps each: 2015-02-15 DeclareCeasefire; 2015-03-03
WithdrawHeavyWeapons (started and completed, monitoring from the
first day); 2015-03-10 OpenDialogue (dialogue, Rada resolution,
memorandum line); 2015-10-25 HoldLocalElections (elections held,
questions agreed in the contact group, OSCE standards, ODIHR
monitoring; in the completed journal also foreign_formations_withdrawn
and illegal_groups_disarmed); 2015-12-20 EnactConstitutionalReform
(reform in force, decentralisation, permanent special-status law with
all eight measures of the note to point 11); 2015-12-30
RestoreBorderControl.
lawref process-run (the reading passed as
case.options.selectedInterpretations, scratchpad copies of the
journals):
| Journal | Reading | Elections step | Last frame 2015-12-30 | Findings |
|---|---|---|---|---|
| point ten pending | none | HoldLocalElections NEITHER, no effect |
[CeasefireInForce, DialogueOnElections, HeavyWeaponsWithdrawn, Signed] |
ATTEMPT_WITHOUT_EFFECT ×3 (steps 3, 4, 5); STUCK on 2015-12-30 |
| point ten pending | SecurityFirst | NEITHER, no effect | the same | ATTEMPT_WITHOUT_EFFECT ×3; STUCK |
| point ten pending | LiteralOrder | TRUE_ONLY, effect | [BorderControlRestored, …, LocalElectionsHeld, Signed] |
none |
| point ten completed | none | NEITHER, no effect | stuck at dialogue | ATTEMPT_WITHOUT_EFFECT; STUCK |
| point ten completed | SecurityFirst | TRUE_ONLY, effect | BorderControlRestored reached |
none |
| point ten completed | LiteralOrder | TRUE_ONLY, effect | BorderControlRestored reached |
none |
Positions on the pending journal's last frame: WithdrawalMustStartByDayTwo
SATISFIED (due 2015-02-18), RadaMustAdoptResolution SATISFIED (due
2015-03-15), UkraineMustAdoptPermanentSpecialStatusLaw and
UkraineMustCarryOutConstitutionalReform SATISFIED (due 2016-01-01),
CeasefireDuty ACTIVE, ContactGroupMustAgreeElectionQuestions
SATISFIED, ContactGroupMustIntensifyActivity and
DutyToDefineSocioEconomicModalities ACTIVE.
Truth cells, legal time 2015-12-30, facts = all journal steps, resultHash
first eight hex digits (oracle == lawc in every row):
| Journal | Reading | local_elections_valid |
full_border_control_due |
|---|---|---|---|
| pending | none | NEITHER aba1c564 |
NEITHER 3a1066b4 |
| pending | SecurityFirst | NEITHER c2f443e5 |
NEITHER 3527a48b |
| pending | LiteralOrder | TRUE_ONLY 1a90582c |
TRUE_ONLY ced738ae |
| completed | none | NEITHER 187f9b54 |
NEITHER 69fb778e |
| completed | SecurityFirst | TRUE_ONLY 8d185316 |
TRUE_ONLY 24e71b0f |
| completed | LiteralOrder | TRUE_ONLY f4b3b438 |
TRUE_ONLY 8503b8b8 |
Decision table withdrawal-distance.lawtable.json (law.decision/0.1,
hitPolicy: unique, total: true; inputs mlrs, long_range_listed
Boolean; output zone_km Integer; emits withdrawal_zone_km): rows
artillery-100mm-and-above (false, false → 50), mlrs-general (true,
false → 70), mlrs-long-range-listed (true, true → 140),
tactical-missile-system (false, true → 140). The calibre threshold
(≥ 100 mm) is a rule guard, not a table column: total: true over an
Integer would force a number the document does not give (runner note
3). Scenario pairs: MINSK-06…09 (zones from the table), MINSK-10
(below-calibre: no zone, no duty), MINSK-11 (exactly 100 mm),
MINSK-14/15 (withdrawal day 14 vs 15), MINSK-16/17 (monitoring from day
one), MINSK-18/19 (Rada day 30 vs 31), MINSK-20/21 (dialogue first vs
second day after withdrawal), MINSK-22/23 (release day 5 vs 6),
MINSK-30/31 (closed window: undetermined vs violated with an established
non-performance), MINSK-33…40 (readings), MINSK-46/47 (point ten).
Calculemus, Amended
This section introduces or draws together the experiments. It has no separate retained run record; consult the chapter-specific notes above.
Sources checked for this revision
Kazakhstan Civil Code, Article 297 was checked through the official Adilet API on 10 October 2026. It permits reduction of an excessive penalty at the debtor’s request. Clause 6.3 of the synthetic supply contract is a separate modelling choice.
The constitutional example uses the 2026 edition, adopted on 15 March and in force from 1 July, not the 1995 text. Its pinned Russian text is attributed to the official presidential source; the manuscript’s rule labels must be read together with the treaty exception.
The chess chapter uses the FIDE Laws effective from 1 January 2023. The first completed illegal move adds two minutes to the opponent’s clock in the standard rules; repetition also depends on the available legal moves.
Supplemental Harrier check, 10 October 2026
The original LP-33C and LP-35 examples used a T-shirt while assigning the transaction a hypothetical price of USD 700,008.50. The revised narrative uses the Harrier throughout. The supplemental inputs replace the item consistently, keeping that price and the expressly positive judicial finding. The archive contains the program, assertions, query, full result and comparison record for each retained call. These are hypothetical examples, not findings about the historical commercial. No new certificate-checking claim is made for these supplemental runs.
Both implementations produced identical canonical answer bytes for four supplemental calls: the negative finding remains NEITHER with no open judgment request; the definite Harrier offer without writing yields TRUE_ONLY for claim failure; with writing, claim failure is NEITHER and the delivery obligation is ACTIVE. Monetary decimals are compared using the established canonicalisation, so 700008.50 and 700008.5 are the same term.