Repository navigation
Description
Deferred by owner decision 2026-07-27 ("skip this bit and record it as an issue for now"). A proof campaign was fully designed and briefly launched (wf_e91ac441-9b8), then stopped before any attempt produced output — nothing to salvage, nothing lost. This issue is the resume point.
The goal
Close PROOF-STATUS's OPEN row "ET-1..3 (η): η-laws / η-long normal forms extension of MECH-1" — βη-decidability for the L1 kinded calculus, extending the closed β-fragment ET-2 (PR #24/#27).
Design-critical facts (verified against main @ 859395a)
- Current
Nf.ne : Var Γ k → Sp Γ k j → Nf Γ jadmits neutrals at any kind — the landed forms are β-normal, NOT η-long. The extension needs a new η-long discipline:nerestricted to.star, so every arrow-kinded normal form is alam. DefEq= refl/symm/trans/beta/arrowCong/lamCong/appCong — no η rule. Spines are left-nested;arrowis the base-kinded object arrow, distinct from the kind arrow.- ET-2's modules (SubstLemmas/Soundness/Completeness/Decidable) are the toolbox: cast toolkit (
swp/remSwap+by subst h; rflpush lemmas), sum-measure for subst/subst, hand-rolled mutual DecidableEq pattern.
The 8 goals (purely additive; new Systemet/L1/Eta* modules)
- η-long
NfE/SpE(neat.staronly) + weakening - Total η-long normalizer
nfE— either K–A-native hereditary substitution on η-long forms (MSFP 2010 is natively η-long) or η-expansion-by-kind-recursion over the existing β-nfwith transfer lemmas DefEqE= DefEq + η rule, plus the embeddingDefEq t u → DefEqE t u- Stability
nfE_emb5. SoundnessDefEqE t (embNfE (nfE t))6. Completeness 7.defEqE_iff_nfE+decEqNfE+decDefEqE - Anti-vacuity sanity example: arrow-kinded neutral f — η-equality derivable,
nfEidentifies f with its expansion, β-nfdistinguishes them
Resume handle
Campaign script (4 independent attempts + seeded round 2 + apply-and-gate + 2 adversarial reviewers, hardcoded paths, full gotcha bank in the briefing):
~/.claude/projects/-home-hyperpolymath-developer/f9a6bee1-.../workflows/scripts/l1-eta-campaign-wf_e91ac441-9b8.js
Relaunch: Workflow({scriptPath, resumeFromRunId: "wf_e91ac441-9b8"}) — needs a Fable/high-capability session and a spend ceiling that tolerates ~4–6 max-effort proof agents. Campaign clone was at $CLAUDE_JOB_DIR/tmp/systemet-eta (branch proofs/l1-eta-extension, baseline green); recreate with a fresh clone of main if gone.
Estimated shape: comparable to the ET-2 campaign (which two of four attempts fully closed).
Activity
hyperpolymath commentedon Jul 28, 2026
Campaign run 2 (2026-07-28): spend-limited, but half the work is salvaged and landed
All four Fable attempts died on the monthly spend limit (0/4 reported; 271k tokens, ~41 min). One attempt had written six modules before dying — five build green and are now on
proofs/l1-eta-extension, draft PR #34, axiom-audited[propext, Quot.sound].Landed (goals 1, 3, and the DecidableEq half of 7)
EtaNormal— η-longNfE/SpEwithne : Var Γ k → SpE Γ k .star → NfE Γ .star(neutrals at base kind only) +spEKindLeEtaConversion—DefEqEwith a real η ruleDefEqE t (.lam (.app (wkTy .vz t) (.var .vz))), plus provendefEq_to_defEqEEtaSubstLemmas(26 theorems),EtaHsub,EtaDecEqThe precise obstruction (goal 2 — the normalizer)
EtaExpand.leanis excluded: it stubbed two cases ofadjWkvwith the non-existent identifiersorryAx_placeholder. The lemma being fought:— the
there/vzandthere/vscases, i.e. weakening-exchange across an adjacent variable pair (Adj), transported alongwkv_swp. A resumed campaign should start here, not from scratch: the toolkit around it is already green.Resume
Same handle (
resumeFromRunId: wf_e91ac441-9b8) but the script should be re-pointed at the branch so attempts inherit the landed modules. Needs spend headroom — this is the second run killed by the limit; consider a token budget at launch or fewer parallel attempts.proofs(lean4): land the green half of the η extension (PARTIAL — ET-1…
hyperpolymath commentedon Jul 28, 2026
EtaExpand.lean diagnosed: four defects, not two stubs — one now fixed
I attempted the blocker directly on Opus 5 (no Fable spend). The file is worse than the earlier note implied — it ends at line 138 mid-proof, so the entire promised cluster (
etaSubstHit,etaLaw,etaSubstAdj/etaSubstAdjSp,appSpEtaNe,nappEtaNe) was never written. Of what exists, four things break:etaSubstMiss,.arrcaserflafterrw [h2]wkNfE_etaNeline ~52rwfails: patternwkNfE w.vs (etaNe c x.vs ((wkSpE Var.vz sp).cons ...))not found. Root cause is a dependent-type mismatch:sp : SpE (rem w) x _but the rewrite needsSpE (rem Var.vz) x _. Lean flags it as not type-correct atinstancestransparency — the semireducible-defeq trap in the gotcha bankadjSwpline ~118castV_vs (adjCtx (Adj.there a)) (adjCtx a)— application type mismatch:castV_vswants(c :: Δ) = (c :: Δ')but getsrem (wkv X.vs H.vs) = rem X.vs. Needs therem (Var.vs _) ≡ _ :: rem _step made explicit (my named-argument attempt did not work)adjWkvlines ~134/135sorryAx_placeholdercases (there/vzandthere/vs)The fix for #1 (verified — this error disappears)
simp only [wkv, substSpE] at h2 rw [h2] + rfl termination_by structural j => jGuidance for the resumed run
adjSwpis the smaller cast problem andadjWkvuses the samerem (Var.vs _)reshaping; cracking 3 likely supplies the idiom for 4.Adjmachinery and can be attacked in parallel.nfE) remains a substantial piece of work even once these clear — budget accordingly.proofs/l1-eta-extension, notmain.docs(state): refresh AFFIRMATION + STATE.a2ml; resync the template va…
docs: add the STATE v2 thin journal (docs/status/JOURNAL.adoc) (#96)