feat(Hachi): make extractors computable - #697
Conversation
🤖 PR Summary
Hachi extractors made fully computable; documentation and axiom baseline updated accordingly.This PR eliminates the Mathematical Formalization
Known Gaps / Remaining
|
| Metric | Count |
|---|---|
| 📝 Files Changed | 53 |
| ✅ Lines Added | 3837 |
| ❌ Lines Removed | 1881 |
Lean Declarations
✏️ Removed: 14 declaration(s)
ArkLib/Commitments/Functional/Hachi/ZeroCheck/Reduction.lean (1)
noncomputable def nestedPathResponse
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Escape.lean (3)
def _root_.CoordinateWise.EscapeCWSSPackage.toGuardeddef append {StmtA WitA StmtB WitB StmtC WitC : Type}private def univAppendFn : Name → Name → Option Name
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/NoChallenge.lean (2)
def onlyTranscript [IsEmpty pSpec.ChallengeIdx]theorem onlyTranscript_mem [IsEmpty pSpec.ChallengeIdx]
ArkLib/OracleReduction/Security/TranscriptTree/Composition.lean (8)
def RightProj.src : {r : Fin (n + 1)} → RightProj arity₁ arity₂ r →def RightProj.tree : {r : Fin (n + 1)} → RightProj arity₁ arity₂ r →def rightProjOfTree {r : Fin (n + 1)}def rightProjOfTreeAux : {a : Fin (m + n + 1)} →def splitDataOfTreeAux : {a : Fin (m + n + 1)} →theorem RightProj.mem_transcripts_append :theorem RightProj.tree_isStructured :theorem rightProjOfTree_src {r : Fin (n + 1)}
✏️ Added: 99 declaration(s)
ArkLib/Commitments/Functional/Hachi/QuadEval/Bridge.lean (1)
def bridgeVerifierPureForm : (bridgeVerifier (oSpec
ArkLib/Commitments/Functional/Hachi/QuadEval/Reduction.lean (1)
def verifierPureForm : (verifier (oSpec
ArkLib/Commitments/Functional/Hachi/Recursion/PartialEval.lean (1)
def partialEvalVerifierPureForm {TCom : Type} :
ArkLib/Commitments/Functional/Hachi/Recursion/TraceHandoff.lean (1)
def handoffVerifierGuardedForm {TCom : Type} (φF : ZMod q →+* F)
ArkLib/Commitments/Functional/Hachi/Recursion/ZBatchBridge.lean (1)
def zBatchVerifierPureForm {TCom : Type} (zpow : Fin (2 ^ κ) → F) :
ArkLib/Commitments/Functional/Hachi/RingSwitch/Rlin.lean (1)
def rlinVerifierPureForm
ArkLib/Commitments/Functional/Hachi/Sumcheck/Bridge.lean (1)
def nestedSumcheckBridgeVerifierPureForm
ArkLib/Commitments/Functional/Hachi/Sumcheck/FinalEval.lean (1)
def finalEvalVerifierGuardedForm {TCom : Type} (φF : ZMod q →+* F) :
ArkLib/Commitments/Functional/Hachi/Sumcheck/Rounds.lean (2)
def roundVerifierGuardedForm {TCom : Type} (i : ℕ) :def roundsBaseVerifierPureForm {TCom : Type} :
ArkLib/Commitments/Functional/Hachi/ZeroCheck/Batch.lean (1)
def batchVerifierPureForm
ArkLib/Commitments/Functional/Hachi/ZeroCheck/Reduction.lean (1)
def nestedZeroCheckVerifierPureForm {TCom : Type} :
ArkLib/Data/Lattices/CyclotomicRing/Core/Basic.lean (1)
@[simp] theorem quotientHom_phi : Φ.quotientHom Φ.φ = 0
ArkLib/Data/Lattices/CyclotomicRing/Inverse.lean (6)
def Rq.inv (a : Rq Φ) : Rq Φtheorem Rq.inv_eq_ringInverse {a : Rq Φ} (ha : IsUnit a) :theorem Rq.inv_mul_cancel {a : Rq Φ} (ha : IsUnit a) : Rq.inv Φ a * a = 1theorem Rq.isCoprime_of_isUnit {a : Rq Φ} (ha : IsUnit a) :theorem Rq.mul_inv_cancel {a : Rq Φ} (ha : IsUnit a) : a * Rq.inv Φ a = 1theorem Rq.normXgcd_fst_eq_one {a : Rq Φ} (ha : IsUnit a) :
ArkLib/OracleReduction/Basic.lean (1)
theorem Verifier.PureForm.isPure {V : Verifier oSpec StmtIn StmtOut pSpec} (P : V.PureForm) :
ArkLib/OracleReduction/Composition/Sequential/IsPure.lean (1)
def PureForm.append {V₁ : Verifier oSpec Stmt₁ Stmt₂ pSpec₁}
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Basic.lean (2)
instance instDecidableCoordEq [DecidableEq S] {ℓ : ℕ} (i : Fin ℓ) (x y : Fin ℓ → S) :theorem toShape_arity_pos : ∀ i, 0 < D.toShape.arity i
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/CommittedScalar.lean (1)
def verifierPureForm {ι : Type} {oSpec : OracleSpec ι} (K : BindingCommitment W Short) :
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Composition.lean (1)
theorem append_run_outputs
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Escape.lean (5)
def EscapeCWSSPackage.appenddef EscapeCWSSPackage.toGuardeddef EscapeGCWSSPackage.appendprivate def applyAppend (fn : Name) (lE rE : Expr) : TermElabM Exprprivate def canonAppendFn : Name → Name → Option Name
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Guarded.lean (10)
def GuardedForm.append {V₁ : Verifier oSpec Stmt₁ Stmt₂ pSpec₁}def PureForm.toGuardedForm {V : Verifier oSpec StmtIn StmtOut pSpec} (P : V.PureForm) :theorem GuardedForm.isGuarded {V : Verifier oSpec StmtIn StmtOut pSpec} (G : V.GuardedForm) :theorem append_run_guardedLefttheorem append_run_outputs_guardedLefttheorem append_treeSpecialSoundWithEscape_guardedLefttheorem append_treeSpecialSoundWith_guardedLefttheorem guarded_accepting_of_memtheorem guarded_verdict_mem_outputstheorem outputs_guarded_subsingleton
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/ScalarRound.lean (5)
def branchPathOf (tree : ChallengeTree (pSpecScalar Msg C) arity 0)def chalPathAux : {a : Fin 3} → (t : ChallengeTree (pSpecScalar Msg C) arity a) →def lastPathAux : {a : Fin 3} → (t : ChallengeTree (pSpecScalar Msg C) arity a) →theorem collect_branch_data {k : ℕ}theorem fullTranscript_branchPathOf (v : Msg)
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.lean (8)
def branchPathOf (tree : ChallengeTree (pSpec CarrierCom C r) arity 0)def chalPathAux : {a : Fin 3} → (t : ChallengeTree (pSpec CarrierCom C r) arity a) →def collect {K : ℕ} {W : Type} (f : Fin K → Option W) : Option (Fin K → W)def lastPathAux : {a : Fin 3} → (t : ChallengeTree (pSpec CarrierCom C r) arity a) →instance instDecidableStarAt [DecidableEq C] {ℓ K : ℕ} (challenges : Fin K → (Fin ℓ → C))theorem collect_branch_datatheorem collect_eq_some {K : ℕ} {W : Type} {f : Fin K → Option W} {w : Fin K → W}theorem fullTranscript_branchPathOf (v : CarrierCom)
ArkLib/OracleReduction/Security/SpecialSoundness.lean (1)
theorem specialSound.exists_total_extractor [Inhabited WitIn] (k : pSpec.ChallengeIdx → ℕ)
ArkLib/OracleReduction/Security/TranscriptTree/Basic.lean (18)
def IsValid (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))def LeafWitnesses (tree : ChallengeTree pSpec arity 0) (WitOut : Type) : Typedef Outputs (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))def onlyPath [IsEmpty pSpec.ChallengeIdx] :def somePath (harity : ∀ i, 0 < arity i) :noncomputable def canonWitnesses (init : ProbComp σ)theorem canonWitnesses_isValid {init : ProbComp σ}theorem isValid_iff_pure (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))theorem mem_language_of_mem_outputs {init : ProbComp σ}theorem mem_outputs_iff (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))theorem not_accepting_of_failure {init : ProbComp σ}theorem not_isAccepting_of_no_outputs (init : ProbComp σ)theorem outputs_nonempty_of_isAccepting {init : ProbComp σ}theorem outputs_pure_subsingleton {Stmt₁ Stmt₂ : Type} {m : ℕ} {pSpec₁ : ProtocolSpec m}theorem pure_verdict_mem_outputs (init : ProbComp σ)theorem support_init_nonempty_of_accepting {init : ProbComp σ}theorem support_init_nonempty_of_prob_one {init : ProbComp σ}theorem treeSpecialSoundWith.mem_relIn_of_isAccepting [Inhabited WitIn]
ArkLib/OracleReduction/Security/TranscriptTree/Composition.lean (27)
def AppendSplit.gluePathdef LeafPath.embedRight : {r : Fin (n + 1)} → {t : ChallengeTree pSpec₂ arity₂ r} →def LeafPath.transport {r : Fin (m + 1)} {T T' : ChallengeTree pSpec₁ arity₁ r}def SplitData.gluePath : {r : Fin (m + 1)} → (S : SplitData arity₁ arity₂ r) →def TreeBased.append (verify₁ : Stmt₁ → pSpec₁.FullTranscript → Stmt₂)def boundaryOf {a : Fin (m + n + 1)}def embedRight : {r : Fin (n + 1)} → ChallengeTree pSpec₂ arity₂ r →def splitOf : {a : Fin (m + n + 1)} →def unembedRight : {a : Fin (m + n + 1)} →def unembedRight' {r : Fin (n + 1)}theorem AppendSplit.fullTranscript_gluePaththeorem LeafPath.fullTranscript_transport {T T' : ChallengeTree pSpec₁ arity₁ 0}theorem LeafPath.transcript_embedRight :theorem SplitData.transcript_gluePath :theorem appendArity_left {i : Fin m} {h : pSpec₁.dir i = .V_to_P}theorem appendArity_right {i : Fin n} {h : pSpec₂.dir i = .V_to_P}theorem appendDir_left (i : Fin m) :theorem appendDir_right (i : Fin n) :theorem appendType_left (i : Fin m) :theorem appendType_right (i : Fin n) :theorem embedRight_isStructured :theorem embedRight_mem_transcripts_append :theorem embedRight_unembedRight : {a : Fin (m + n + 1)} →theorem embedRight_unembedRight' {r : Fin (n + 1)}theorem leftSucc {i : Fin (m + n)} {rv : ℕ} (hv : (i : ℕ) = rv) (hlt : rv + 1 < m + 1) :theorem rightSucc {i : Fin (m + n)} {rv : ℕ} (hv : (i : ℕ) = m + rv) (hlt : rv + 1 < n + 1) :theorem src_splitOf : {a : Fin (m + n + 1)} →
✏️ Affected: 62 declaration(s) (line number changed)
def evalChain (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Composition.leanmoved from L182 to L189def openCore (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Composition.leanmoved from L288 to L295def openingChain (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Composition.leanmoved from L334 to L341def bridgePackage {σ : Type}inArkLib/Commitments/Functional/Hachi/QuadEval/Bridge.leanmoved from L229 to L243def buildWitness (base : ZMod q)inArkLib/Commitments/Functional/Hachi/QuadEval/Soundness.leanmoved from L207 to L221def extractedOpening (base : ZMod q)inArkLib/Commitments/Functional/Hachi/QuadEval/Soundness.leanmoved from L177 to L188def quadEvalMkWitness (base : ZMod q)inArkLib/Commitments/Functional/Hachi/QuadEval/Soundness.leanmoved from L252 to L267def quadEvalPackage {ι : Type} {oSpec : OracleSpec ι} {σ : Type}inArkLib/Commitments/Functional/Hachi/QuadEval/Soundness.leanmoved from L596 to L609def partialEvalExtractorinArkLib/Commitments/Functional/Hachi/Recursion/PartialEval.leanmoved from L165 to L182def partialEvalPackage (init : ProbComp σ)inArkLib/Commitments/Functional/Hachi/Recursion/PartialEval.leanmoved from L201 to L218def handoffExtractorinArkLib/Commitments/Functional/Hachi/Recursion/TraceHandoff.leanmoved from L157 to L179def handoffPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Recursion/TraceHandoff.leanmoved from L225 to L248def zBatchPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Recursion/ZBatchBridge.leanmoved from L119 to L132def RhoShort (ρBound : ℕ) (ρ : Fin n → CPolynomial (ZMod q)) : PropinArkLib/Commitments/Functional/Hachi/RingSwitch/Reduction.leanmoved from L140 to L142def cyclotomicPresentation : Lift.Presentation (ZMod q) (Rq Φ) whereinArkLib/Commitments/Functional/Hachi/RingSwitch/Reduction.leanmoved from L102 to L104def liftPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/RingSwitch/Reduction.leanmoved from L252 to L255def rlinPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/RingSwitch/Rlin.leanmoved from L469 to L483def rlinStmtinArkLib/Commitments/Functional/Hachi/RingSwitch/Rlin.leanmoved from L273 to L274def nestedSumcheckBridgePackage (init : ProbComp σ)inArkLib/Commitments/Functional/Hachi/Sumcheck/Bridge.leanmoved from L84 to L97def finalEvalExtractorinArkLib/Commitments/Functional/Hachi/Sumcheck/FinalEval.leanmoved from L141 to L160def finalEvalPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Sumcheck/FinalEval.leanmoved from L177 to L197def roundExtractorinArkLib/Commitments/Functional/Hachi/Sumcheck/Rounds.leanmoved from L199 to L224def roundPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Sumcheck/Rounds.leanmoved from L246 to L271def roundsChain (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/Sumcheck/Rounds.leanmoved from L310 to L347def roundsChainAux (init : ProbComp σ)inArkLib/Commitments/Functional/Hachi/Sumcheck/Rounds.leanmoved from L273 to L312def batchPackage (init : ProbComp σ) (impl : QueryImpl oSpec (StateT σ ProbComp))inArkLib/Commitments/Functional/Hachi/ZeroCheck/Batch.leanmoved from L126 to L138def nestedZeroCheckExtractor {TCom : Type} :inArkLib/Commitments/Functional/Hachi/ZeroCheck/Reduction.leanmoved from L454 to L442def nestedZeroCheckPackage (init : ProbComp σ)inArkLib/Commitments/Functional/Hachi/ZeroCheck/Reduction.leanmoved from L622 to L619def package {ι : Type} {oSpec : OracleSpec ι} {σ : Type}inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/CommittedScalar.leanmoved from L261 to L273def treeExtractor {k : ℕ} (hk : 2 ≤ k) (K : BindingCommitment W Short) (project : W → WitIn) :inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/CommittedScalar.leanmoved from L198 to L202theorem coordinateWiseSpecialSoundWithEscape {ι : Type} {oSpec : OracleSpec ι}inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/CommittedScalar.leanmoved from L238 to L249def CWSSPackage.toEscape (L : CWSSPackage init impl StmtIn WitIn StmtOut WitOut pSpec) :inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Escape.leanmoved from L215 to L132def GCWSSPackage.toEscape (L : GCWSSPackage init impl StmtIn WitIn StmtOut WitOut pSpec) :inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Escape.leanmoved from L229 to L144theorem IsGuarded.append (V₁ : Verifier oSpec Stmt₁ Stmt₂ pSpec₁)inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Guarded.leanmoved from L113 to L156theorem append_coordinateWiseSpecialSoundWith_of_guardedLeftinArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Guarded.leanmoved from L161 to L498def append {StmtA WitA StmtB WitB StmtC WitC : Type}inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Package.leanmoved from L94 to L102def treeExtractorScalar {k : ℕ} (hk : 2 ≤ k)inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/ScalarRound.leanmoved from L336 to L385def central [DecidableEq C] {ℓ K : ℕ} (challenges : Fin K → (Fin ℓ → C)) [Inhabited (Fin K)] :inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.leanmoved from L273 to L327def sib [DecidableEq C] {ℓ K : ℕ} (challenges : Fin K → (Fin ℓ → C)) [Inhabited (Fin K)]inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.leanmoved from L279 to L332def treeExtractor {StmtIn WitOut WitIn : Type}inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.leanmoved from L349 to L419theorem sib_coordEq [DecidableEq C] {ℓ K : ℕ} (challenges : Fin K → (Fin ℓ → C))inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.leanmoved from L296 to L349theorem sib_coordEq_ne [DecidableEq C] {ℓ K : ℕ} (challenges : Fin K → (Fin ℓ → C))inArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/SingleRound.leanmoved from L312 to L365def TreeBased (StmtIn WitIn WitOut : Type) {n : ℕ} (pSpec : ProtocolSpec n)inArkLib/OracleReduction/Security/TranscriptTree/Basic.leanmoved from L319 to L654def treeSpecialSoundEscape (S : ChallengeTreeShape pSpec)inArkLib/OracleReduction/Security/TranscriptTree/Basic.leanmoved from L440 to L747def treeSpecialSoundWithEscape (S : ChallengeTreeShape pSpec)inArkLib/OracleReduction/Security/TranscriptTree/Basic.leanmoved from L426 to L716theorem treeSpecialSoundWith_congr {S S' : ChallengeTreeShape pSpec} (hS : S = S')inArkLib/OracleReduction/Security/TranscriptTree/Basic.leanmoved from L404 to L826def chalPeelAux : {ρ : Fin (m + 1)} → {T : ChallengeTree pSpec₁ arity₁ ρ} → (p : LeafPath T) →inArkLib/OracleReduction/Security/TranscriptTree/Composition.leanmoved from L380 to L406def peelMsgAux : {ρ : Fin (m + 1)} → {T : ChallengeTree pSpec₁ arity₁ ρ} → (p : LeafPath T) →inArkLib/OracleReduction/Security/TranscriptTree/Composition.leanmoved from L346 to L373def oracleTreeExtractor (mapWitInv : StmtIn × (∀ i, OStmtIn i) → WitOut → WitIn)inArkLib/ProofSystem/Component/ReduceClaim.leanmoved from L407 to L409def treeExtractor (mapWitInv : StmtIn → WitOut → WitIn)inArkLib/ProofSystem/Component/ReduceClaim.leanmoved from L187 to L190theorem oracleVerifier_coordinateWiseSpecialSoundWithinArkLib/ProofSystem/Component/ReduceClaim.leanmoved from L421 to L420theorem verifier_coordinateWiseSpecialSoundWithinArkLib/ProofSystem/Component/ReduceClaim.leanmoved from L199 to L204theorem eq_of_modulus_dvd {a b : S}inArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L136 to L156theorem eq_zero_of_modulus_dvd_of_natDegree_lt {p : Polynomial R} (h : P.modulus.toPoly ∣ p)inArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L162 to L184theorem modulus_dvd_rep_zero : P.modulus.toPoly ∣ (P.rep 0).toPolyinArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L114 to L133theorem natDegree_modulus_pos : 0 < P.modulus.toPoly.natDegreeinArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L110 to L129theorem rep_add (a b : S) :inArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L181 to L203theorem rep_neg (a : S) : (P.rep (-a)).toPoly = -(P.rep a).toPolyinArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L194 to L218theorem rep_zero : (P.rep (0 : S)).toPoly = 0inArkLib/ProofSystem/RingSwitching/Lift/Presentation.leanmoved from L176 to L198def escEvent [IsPresentation P] (hd : P.modulus.toPoly.natDegree = d) :inArkLib/ProofSystem/RingSwitching/Lift/Reduction.leanmoved from L165 to L170def package [IsPresentation P] (hφF : Function.Injective φF)inArkLib/ProofSystem/RingSwitching/Lift/Reduction.leanmoved from L204 to L215def treeExtractor [IsPresentation P] (hd : P.modulus.toPoly.natDegree = d) :inArkLib/ProofSystem/RingSwitching/Lift/Reduction.leanmoved from L174 to L183
sorry Tracking
✅ Removed: 2 `sorry`(s)
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Guarded.lean (2)
theorem IsGuarded.append (V₁ : Verifier oSpec Stmt₁ Stmt₂ pSpec₁)(L116)theorem append_coordinateWiseSpecialSoundWithEscape_of_guardedLeft(L155)
❌ Added: 1 `sorry`(s)
ArkLib/OracleReduction/Security/CoordinateWiseSpecialSoundness/Guarded.lean (1)
def GuardedForm.append {V₁ : Verifier oSpec Stmt₁ Stmt₂ pSpec₁}(L153)
Coverage Notes
- AI file summarization partially analyzed 1 file(s) because their individual diffs exceeded the per-file size budget. Statistics and Lean signal tracking still cover the full PR.
Partially Analyzed Files
ArkLib/OracleReduction/Security/TranscriptTree/Composition.lean(+551/-376)
Last updated: 2026-08-12 10:17 UTC.
Build Timing Report
Incremental Rebuild Signal
This compares a clean project build against an incremental rebuild in the same CI job; it is a lightweight variability signal, not a full cross-run benchmark. Slowest Current Clean-Build FilesShowing 20 slowest current targets, with comparison against the selected baseline when available.
|
…ebt only Baseline for the computable-extractor work planned in docs/plans/computable-cwss-extractors.md (milestone M0, step 1). - Tree-split rework in `TranscriptTree/Composition.lean`: all 16 `*Package.append*` operators are computable, and `TranscriptTree/Basic.lean` no longer opens a file-wide `noncomputable section`. - Drop `noncomputable` from sorried extractors and from the definitions that carried the marker only because they mentioned one, so the marker set records genuine computability debt rather than proof debt. Each such docstring now says the generated code panics until its `sorry` is filled. - `docs/skills/make-computable.md`: record the Recursor kind, the IR-presence inventory rule, and the `sorry`-does-not-force-`noncomputable` pitfall these changes rest on. - Vendor the plan and its four machine-checked prototypes under `docs/plans/`. Inventory probe (plan §9 note 2) against this tree: 20 noncomputable definitions whose type mentions `Extractor.TreeBased` or a CWSS package, 6 of them narrowly extractor-typed — exactly the population §2 counts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Milestone M0 step 3 of docs/plans/computable-cwss-extractors.md: remove the classical root that is independent of the extractor-notion work. `onlyTranscript` selected a challenge-free tree's unique full transcript as `(fullTranscripts_eq_singleton tree).choose`, so every extractor the no-challenge bridges produced was noncomputable. It is replaced by `ChallengeTree.onlyPath`, the unique root-to-leaf *path*, read off the tree by structural recursion — and therefore computable and axiom-free. Stating the bridges at the path rather than the transcript is also the granularity a leaf-indexed extraction premise needs later in the plan. - `TranscriptTree/Basic.lean`: add `ChallengeTree.onlyPath`, beside `LeafPath`, the structure it constructs (`docs/skills/make-computable.md` step 4's placement rule). - `NoChallenge.lean`: restate the three bridges at `tree.onlyPath.fullTranscript`, delete `onlyTranscript` and `onlyTranscript_mem` (zero consumers afterwards), and drop the file's `noncomputable section`. `transcripts_eq_singleton` / `fullTranscripts_eq_singleton` stay. - `SendWitness.lean`: the two CWSS statements that apply those bridges. They are the only consumers that needed touching — the other four (`CheckClaim`, `SendClaim`, `ReduceClaim` x2) pass an `e` that ignores its transcript argument, so their applications stay definitionally equal across the swap. Gates: `./scripts/validate.sh` green over all 324 imports; `IR PRESENT: ProtocolSpec.ChallengeTree.onlyPath` and it depends on no axioms; `rg -w onlyTranscript ArkLib/` returns nothing; on a concrete one-message tree `#eval tree.onlyPath.fullTranscript 0` prints `42`, kernel-`rfl`-checked. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Session protocol step 5: fill §11's M0 row with the milestone's actual gate output (inventory probe counts and names, validate.sh lines, the IR-gate and axiom prints, the runtime `#eval`), record the `BASELINE` SHA in §1 rule 2, and note the three deviations — `onlyPath`'s home, the four bridge consumers that stayed defeq, and the deliberately untouched generated KB catalog. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…cal` (M2 step 2a) Mechanical rename per the migration shim of `docs/plans/computable-cwss-extractors.md` §4.5: `Extractor.TreeBased`, the `Verifier`/`OracleVerifier` tree- and CWSS-soundness notions with their forgetful and transport lemmas, the four `CoordinateWise` package structures with their 16 appends and lifts, and every certificate-producing append/bridge theorem gain a `Classical` suffix — which frees the canonical names for the witness-only notion. The `▷` dispatch table's constant literals are renamed, not deleted. No statement, proof or definition changes. `lake build` green (4148 jobs); the word-boundary grep over §4.5's table names is clean across every `.lean` file under `ArkLib/`. The vendored prototypes are patched in the same commit so the evidence stays runnable (§1 rule 3, "apply the rename inside `docs/plans/prototypes/`"): `Extractor.TreeBased` renamed in `CM_gates`, `nonempty_leafPath` re-proved on M0's `onlyPath`, and `CM_enginecerts`' inlined `onlyPath` dropped in favour of the in-library one. All four prototypes reproduce §6's expected output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…2 step 2b) Lands the generic notion of `docs/plans/computable-cwss-extractors.md` §4.1 under the canonical names, additively — nothing migrates onto it yet, so every consumer stays on the `*Classical` layer and the build stays green. * `Verifier.Outputs` — the statements a verifier can output on a transcript under the fixed sampling, with the acceptance bridges (`mem_language_of_mem_outputs`, `outputs_nonempty_of_isAccepting`, `support_init_nonempty_of_accepting`) and the pure-verifier pin-down (`outputs_pure_subsingleton`, `pure_verdict_mem_outputs`). * `ChallengeTree.LeafWitnesses` / `LeafWitnesses.IsValid` — one candidate output witness per leaf, valid when each witness certifies, in `relOut`, *some* statement the verifier can output at that leaf (∃ over `Outputs`, not ∀). `LeafWitnesses.isValid_iff_pure` is the pure-case collapse. * `Extractor.TreeBased` — the witness-only extractor `StmtIn → (tree) → tree.LeafWitnesses WitOut → Option WitIn`; no `StmtOut` index, since attributing output statements is the verifier's business. * `Verifier.treeSpecialSoundWith` and its escape twin, the ∃-forms, the forgetful maps and the two shape-congruence transports, all at the widened extractor. * `ChallengeTree.canonWitnesses` (+ `canonWitnesses_isValid`: valid on every accepting tree) and `Verifier.treeSpecialSoundWith.old_of_new`, which recovers the unconditioned classical reading from a certificate and needs only `[Inhabited WitIn]`. * Purity as data: `Verifier.PureForm` (+ `isPure`, `pureFormOfIsPure`) beside `Verifier.IsPure`, the computable `Verifier.PureForm.append` beside `IsPure.append`, and `Verifier.GuardedForm` + `PureForm.toGuardedForm` beside `IsGuardedWith`. * `Security/TranscriptTree/NonVacuity.lean` — the permanent regression gates: refutability at `relIn = ∅` for every extractor, satisfiability of the validity premise, the ∀-over-outputs kill against the classical statement, the reachability-free kill on a sound forwarding engine, the constant-`none` invalidity, and the arity-0 edge. The rejected variants and the fixtures are `private`. Migration shim, deleted with the `*Classical` layer: `Extractor.TreeBased.ofClassical` and `Verifier.treeSpecialSoundWith.new_of_old`. Gates: `IR PRESENT` on `PureForm.append`, `PureForm.toGuardedForm`, `TreeBased.ofClassical`, their toy applications and the three decisive `def probe := @X` probes; `#print axioms` on all 31 new declarations free of `sorryAx`; `./scripts/validate.sh` green over 325 imports; no new build warnings. Lands after the execution-log commit rather than before it: the original handover script committed 2a and the log but dropped this step's patch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ractor (M3 step 3a) Re-lands the CWSS notion under its canonical names at `Extractor.TreeBased`, as shape instances of step 2b's generics — so no declaration here carries a proof of its own, and nothing migrates onto them yet (`lake build` stays green on the `*Classical` layer). * `Verifier.coordinateWiseSpecialSoundWith` / `coordinateWiseSpecialSound` / `coordinateWiseSpecialSoundWithEscape` / `coordinateWiseSpecialSoundEscape`, with `coordinateWiseSpecialSound_iff_exists`, the forgetful `toCWSS` / `toEscape`, the lossless lift `coordinateWiseSpecialSoundWith.withEscape`, `coordinateWiseSpecialSoundWithEscape_false_iff` and `coordinateWiseSpecialSoundWithEscape.mono` — each defined as the corresponding `Verifier.treeSpecialSound*` at `D.toShape`. * The six `OracleVerifier` mirrors, matching the `*Classical` layer's set exactly. * `CWSSStructure.toShape_arity_pos` — every CWSS shape branches (`arity i = ℓᵢ·(kᵢ-1)+1 > 0`). Nothing needs it yet; it is what discharges the positivity hypothesis the guarded-left append theorems gain in step 4a, at every CWSS call site. There is no CWSS-level shape-congruence transport to re-land: the only two transports are tree-level, and the CWSS append theorems consume those directly. Gates: `lake build` green (4149 jobs) with this step alone applied; all 17 declarations `#check`; `#print axioms` on the eight new theorems free of `sorryAx`; `lake env lean` on the file emits no messages. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`appendSplit` cuts a tree; sequential composition of extractors needs the inverse *on paths*. This lands that glue in `TranscriptTree/Composition.lean`, transcribed verbatim from the vendored prototype: * `LeafPath.embedRight` — a suffix tree's leaf path, viewed in the embedded appended tree; * `SplitData.gluePath` — a prefix leaf path plus a suffix leaf path, glued along the certificate; * `LeafPath.transport` / `fullTranscript_transport` — moving a path along `splitDataOfTree_src`; * `AppendSplit.gluePath` + `fullTranscript_gluePath` — the path-level recombination and the fact that the glued path reads exactly `p₁.fullTranscript ++ₜ p₂.fullTranscript`, with the transcript specs `LeafPath.transcript_embedRight` / `SplitData.transcript_gluePath` behind it. The glue is needed in one direction only — nothing ever *un-glues* a path, because extractors attribute no output statements — so it stays an ordinary structural recursion and runs at runtime inside every composed extractor. `docs/plans/prototypes/CM_append.lean` loses its Part A in the same commit: the prototype imports the library, so the copy would now collide. Its Parts B–F still exercise the glue, which makes them evidence for *this* code — the 2-fold and 3-fold chain demos (`some 11`, `some 211`, kernel-`rfl`) and the prototype IR gate now run against these declarations. Gates: `lake build` green (4149 jobs); `lake env lean` on the file emits no messages; `IR PRESENT` on `LeafPath.embedRight`, `SplitData.gluePath`, `LeafPath.transport`, `AppendSplit.gluePath` and the two decisive `def probe := @X` probes; `#print axioms` on the four glue theorems free of `sorryAx`; all four vendored prototypes reproduce their expected output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Fills the M3 row of §11 with the real gate output (entry probes, the per-step builds, the `IR PRESENT` lines and axiom prints, the four prototype re-runs, `./scripts/validate.sh`) and records four session-global facts: `linter.style.longLine` counts codepoints rather than bytes; a prototype declaration that moves into the library must lose its prototype copy in the same commit (4a will hit this for `somePath`); and M2 step 2b was still uncommitted when M3 started. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…p 4a)
Compose the *named* extractors of both factors, at the witness-only notion landed in M2/M3.
* `ChallengeTree.somePath` — some leaf path of any positively-branching tree, beside `onlyPath`;
the guarded appends' probe for "the suffix tree is inhabited".
* `Verifier.support_init_nonempty_of_prob_one` / `not_accepting_of_failure` — the transcript-level
forms of the acceptance facts, so a rejecting guard branch can be refuted from one leaf.
* `Extractor.TreeBased.append verify₁ E₁ E₂` — the composed extraction algorithm: the left
extractor on the prefix tree, fed per prefix leaf with the right extractor's output on the suffix
tree below it, at the statement the left verifier's verdict function names. `AppendSplit.gluePath`
is the only path machinery on its runtime path.
* `Verifier.append_run_outputs` and the five guarded seam lemmas (`append_run_guardedLeft`,
`append_run_outputs_guardedLeft`, `outputs_guarded_subsingleton`, `guarded_accepting_of_mem`,
`guarded_verdict_mem_outputs`) — the `Outputs`-level bridges that carry leaf-witnessing validity
across a seam.
* The four composition theorems — `append_treeSpecialSoundWith{,Escape}` and their
`_guardedLeft` twins — with their CWSS and `OracleVerifier` wrappers. Prefix acceptance is
established by running the *right* certificate at the canonical witnessing, which licenses the
left one; the guarded twins add one move in front, that every prefix guard already passes.
* `Verifier.GuardedForm.append` — guardedness data composes; its `verify_eq` is where
`IsGuarded.append`'s `sorry` now lives, and `IsGuarded.append` is proved from it.
The escape-threaded guarded append — until now the development's fundamental sorried obligation —
is **proved** in its retyped form, at the unchanged `ChallengeTree.EscapeEvent.append`. The guarded
theorems gain the positivity hypothesis `∀ i, 0 < S₂.arity i`, discharged at every CWSS call site by
`CWSSStructure.toShape_arity_pos`.
Milestone M4 step 4a of docs/plans/computable-cwss-extractors.md. Additive: the `*Classical` layer
is untouched, so every consumer stays green.
Re-land the 2x2 package lattice under its canonical names, at the new extractor and notion:
`CWSSPackage`, `GCWSSPackage`, `EscapeCWSSPackage`, `EscapeGCWSSPackage`, with the same field
*names* as their `*Classical` predecessors and two retyped fields:
* `extractor : Extractor.TreeBased …` — a leaf witnessing in, `Option` out;
* `isPure : verifier.PureForm` / `isGuarded : verifier.GuardedForm` — purity and guardedness **as
data**. This is the one field whose kind changes, and it is what keeps composition computable:
the composed `extractor` and `esc` read the seam verdict off `L₁.isPure.verify` (resp.
`L₁.isGuarded.out`) instead of laundering it out of a `Prop` with `Classical.choice`.
The sixteen appends, the four lattice lifts and the `▷` elaborator follow. `▷` now carries two
dispatch tables: two outgoing factors compose on the outgoing one, so an un-migrated definition
keeps its ascribed type, and every other combination composes canonically, lifting an outgoing
factor with `ofClassical`. That is how a half-migrated chain stays composable — at the cost of being
`noncomputable`, since the lift fills the purity field with choice, which is why migrating a consumer
rather than lifting it is what buys computability.
The escape layer is untouched: `EscapeEvent.append` still takes the left verdict map as its index.
Milestone M4 step 4b of docs/plans/computable-cwss-extractors.md.
…p 1)
Replace `SingleRound.treeExtractor` with the computable witness-only engine: it
reads the per-branch responses off the leaf witnessing at `branchPathOf` paths
and `collect`s them into `mkWitness`, instead of inverting `relOut` by choice.
No `[Nonempty WitOut]`, no relation argument, no `Classical`.
New: `lastPathAux` / `chalPathAux` / `branchPathOf` (+ `fullTranscript_branchPathOf`,
by bare `rfl` on the star tree), the `Option`-traverse `collect` with
`collect_eq_some`, the extraction core `collect_branch_data`, and both canonical
certificates `coordinateWiseSpecialSoundWith{,Escape}_of_mkWitness` at TODAY's
`hpure`/`hmk` and the UNCHANGED `escEvent`. The validity premise collapses
through purity (`LeafWitnesses.isValid_iff_pure`), so `hmk` is unchanged; the
escape disjunction is decided before any witnessing is seen.
The classical engine survives as `treeExtractorClassical` under an explicit
outgoing header, carrying its two `*Classical_of_mkWitness` certificates, until
M8 migrates `QuadEval`; the three sites there are repointed accordingly.
…kage (M5 steps 2-3) `ScalarRound`: the `(l = 1, k)` transplant of step 1 — the branch paths, the witness-only `treeExtractorScalar` (reusing `SingleRound.collect`), the scalar `collect_branch_data`, and both canonical certificates at the unchanged `escEventScalar`, with `hmk` at `Function.Injective fam`. The classical engine survives as `treeExtractorScalarClassical` with its two outgoing certificates. `CommittedScalar`: the delegate and the package move to the canonical types — `treeExtractor` (no longer parameterized by `checkAt`, since the openings come from the witnessing), `coordinateWiseSpecialSoundWithEscape`, `package` at `EscapeCWSSPackage` with `isPure` at the new `verifierPureForm` data. The file-wide `noncomputable section` is DELETED: the only noncomputable declarations left are the two outgoing twins `treeExtractorClassical` and `packageClassical`, which now carry per-declaration markers so no later computability sweep can miss them. `RingSwitching/Lift/Reduction.lean` is repointed at the outgoing delegate until M6 migrates it.
…implications (M5 steps 4-6) `NoChallenge`: the three bridges at the canonical notion. Their extractor `fun stmtIn tree _ => some (e stmtIn tree.onlyPath.fullTranscript)` ignores its leaf witnessing, so they carry no purity hypothesis and the validity premise is unused — this is the *closing* shape, the factor that lets a composed extractor run as a function of `(stmtIn, tree)` alone. `SpecialSoundness`: `Verifier.specialSound` / `OracleVerifier.specialSound` re-introduced with their same defining equations, now resolving to the witness-only `treeSpecialSound`, plus `Verifier.specialSound.old_of_new` — the textbook reading recovered unconditionally, with the extractor closed at `ChallengeTree.canonWitnesses` and the conclusion written out so it outlives the shim. Costs `[Inhabited WitIn]` and nothing else. `Implications`: the CWSS-generalizes-SS bridges at the canonical notions, with outgoing twins for the total-extractor forms. Both files' `noncomputable section`s are deleted; they compile clean without them.
`CM_m5demo.lean` runs entirely against the landed library: a real `CWSSPackage` at `SingleRound.treeExtractor` / `coordinateWiseSpecialSoundWith_of_mkWitness`, composed through the canonical `▷` with a synthetic zero-round closing package from `coordinateWiseSpecialSoundWith_of_isEmpty_challengeIdx`. `chain.extractor 3 T (fun _ => none)` evaluates to `some 17` — at the CONSTANT- `none` top-level witnessing, so a chain closed by a terminal link demonstrably runs as a computable function of `(stmtIn, tree)` alone — and `(3, 17) ∈ chain.relIn` holds by `rfl`. The open engine declines (`none`) rather than inventing junk; the composed seam verdict reads the transcript at runtime. All kernel-`rfl`-checked, with fourteen `IR PRESENT` gates and four decisive probes outside any `noncomputable section`.
…p 1) Transcribe `CM_enginecerts.lean` Part B (E17) into `ReduceClaim`, for both the reduction and the oracle-reduction variant: * `treeExtractor` / `oracleTreeExtractor` become the witness-only engines `fun s tree o => (o tree.onlyPath).map (mapWitInv s)` — computable and `Classical.choice`-free (`[propext, Quot.sound]`), matching the prototype's `CMEngines.rcTreeExtractor` byte-for-byte. The zero-round tree carries no information, so the output witness the classical version had to invent by inverting `relOut` now arrives on the leaf witnessing. `ReduceClaim` is an *open* link: it declines exactly when its witnessing declines. * Both certificates are proved directly at the new notion, consuming validity through `LeafWitnesses.isValid_iff_pure` at the verifier's verdict — the no-challenge bridge no longer applies, since the extractor now reads `o`. `[Nonempty WitIn]` is dropped from all four declarations. The classical pair survives as the explicitly-labelled outgoing `treeExtractorClassical` / `verifier_coordinateWiseSpecialSoundWithClassical`, because the seven Hachi package literals that name it are `*PackageClassical`- typed and so demand `Extractor.TreeBasedClassical`; those sites are repointed here and M8 retires the twins with the packages. The oracle pair needs no twin — nothing outside this file names it. IR gate: `IR PRESENT` on both engines and on the two §9-note-1 decisive probes.
Move `CheckClaim`, `SendClaim` and `SendWitness`/`SendSingleWitness`'s CWSS theorems onto the canonical no-challenge bridges. Statement-only migrations, as the plan predicts: the extractors become `fun _ _ _ => some ()` and `fun _ tree _ => some (tree.onlyPath.fullTranscript 0)`, and every proof body survives untouched — each ends `have h := …; exact h`, and `exact` absorbs the beta-redex the canonical bridge introduces. All four extractors are witnessing-agnostic: they read the transcript and never consult their leaf witnessing. That is the *closing* shape — a factor of this kind on the right of a chain is what lets the composed extractor run on `(stmtIn, tree)` alone. The docstrings now say so.
`RingSwitching.Lift.treeExtractor` and `.package` move to the canonical witness-only types and **drop their `noncomputable` markers**: both of their roots are gone — `ScalarRound`'s engine (M5) and the presentation data (M1) — so the markers come off unconditionally. `IR PRESENT` on both, and on the two §9-note-1 decisive probes. * `treeExtractor` delegates to the witness-only `CommittedScalar.treeExtractor` and therefore loses its `φF getM getY sideCond` arguments: the branch openings come from the leaf witnessing, so nothing reads `checkAt` any more. * `package`'s purity field is now `CommittedScalar.verifierPureForm K` — the verdict as data, which is what makes the composed seam computable. The classical trio survives as the explicitly-labelled outgoing `treeExtractorClassical` / `coordinateWiseSpecialSoundWithEscapeClassical` / `packageClassical`, because Hachi's `liftPackage` is still `EscapeCWSSPackageClassical`-typed; it is repointed here and M8 retires the twins with the package.
Fill §11's M6 row with the milestone's actual gate output, add the two session-global facts it established (the outgoing-twin rule, and that a witness-only retype shrinks signatures), and amend M8's entry probe: M6 could not vacate `*Classical` from `ReduceClaim.lean`, so the old probe is unsatisfiable and would have made an M8 session stop under §7 protocol step 2. M8's section now names the five twins it must delete when it repoints Hachi.
The `*Classical` layer introduced in M2 step 2a existed only to keep `lake build`
green while consumers migrated to the witness-only extractor notion. M5-M8 moved
every consumer onto the canonical names, so the twins are now consumer-free and
D3's time-boxed removal fires.
Deleted:
* `Extractor.TreeBasedClassical`, the eight `Verifier.treeSpecialSound*Classical`
/ `coordinateWiseSpecialSound*Classical` notions, the four `OracleVerifier`
mirrors and both `specialSoundClassical`s;
* every forgetful/transport twin (`toCWSSClassical`, `toEscapeClassical`,
`toTreeSpecialSoundClassical`, `*_iff_exists`, `*_congr`, `monoClassical`,
`withEscapeClassical`, `*_false_iff`);
* the four `*PackageClassical` structures with their 16 appends,
`toGuardedClassical` and `toEscapeClassical`;
* every certificate-producing twin, including the sorried
`append_coordinateWiseSpecialSoundWithEscapeClassical_of_guardedLeft` whose
canonical restatement M4 proved -- so the CWSS core comes out with one fewer
`sorry`;
* M5's four extra outgoing engines, both `Implications` bridges, the four
`ofClassical` package lifts, `Extractor.TreeBased.ofClassical`, the two
`new_of_old` shims, `Verifier.pureFormOfIsPure` and
`Verifier.guardedFormOfIsGuarded` (neither had an organic use left);
* the `▷` elaborator's second dispatch table and its lift machinery
(`univAppendFn`, `canonLiftOf`, `liftFactor`), leaving one 16-entry
`canonAppendFn` over the canonical packages.
The kind-marked synonyms `▷ᵍ`, `▷ₑ`, `▷ₑᵍ` are repointed to the canonical appends.
`TranscriptTree/NonVacuity.lean` keeps the total-extractor shape as a `private def
TotalExtractor`: its G0 kill is a statement *about* that shape, so the shape has to
outlive the shim. `docs/plans/prototypes/CM_gates.lean` gets the same treatment, per
the standing rule that a milestone touching a declaration the prototypes import
patches them in the same commit.
Gates: `Build completed successfully (4149 jobs)`; `rg -oN
'[A-Za-z_][A-Za-z_0-9.]*Classical\b' ArkLib/` returns nothing; the inventory probe
logs `TOTAL noncomputable over the CWSS surface: 0` (baseline: 20); 36 `IR PRESENT`
lines with `MISSING IR: 0` over the packages, engines and all 17 Hachi chains, plus
16 decisive `def probe := @X` outside any `noncomputable section`; all five vendored
prototypes green with no `sorryAx`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Closes the plan's docs contract. `docs/wiki/repo-map.md`: the `TranscriptTree` entry now describes the witness-only extractor, leaf witnessings and their validity, the `canonWitnesses` closer, and `NonVacuity` as the standing regression gate; the `Guarded` entry records that both guarded binary CWSS appends are proved and that the file's one remaining `sorry` is `GuardedForm.append`'s `verify_eq`. `docs/skills/make-computable.md`: a new "Widening an interface" section carrying the durable lesson -- *architectural* means the interface is wrong, and an interface is something you can change -- with the three recurring shapes (a missing argument; a `Prop`-valued field a consumer must read as data; a kept `Type`-valued binder holding noncomputable data) and the two facts that shape such a job. `docs/plans/computable-cwss-extractors.md` and `docs/plans/README.md` flip to **landed**, and the M9 row records the gate output. `docs/plans/prototypes/README.md` notes that `TranscriptTree/NonVacuity.lean` is now the living copy of the gates. Validation: `./scripts/validate.sh --docs` passes (`All requested validation checks passed.`, 8570 jobs, 325 imports, docs integrity and KB lint green). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…gleton `Finset.prod_eq_mul_prod_diff_singleton` was deprecated in Mathlib on 2026-06-03 in favour of `Finset.prod_eq_mul_prod_sdiff_singleton`. The old name is a plain `alias`, so the rename is a drop-in with no proof changes. The deprecation warning lands under `ArkLib/Data/`, where the zero-warning budget in `scripts/check-warning-log.py` treats any non-`sorry` warning as an error. That failed the `Time validation wrapper` CI step on every branch, including `main`, from 4f38691 (#534) onward. Verified locally: `lake build` completes clean and `./scripts/validate.sh` exits 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
make extractors computable