Ticket: P-16d2 (docs/p16-ticket-split.md, P-16d item 1 "sharpened residue"). Build the
(W, o, e, hmB, hobs, hfib) datum that GQ2.SectionEight.stageR136_of consumes to prove the (136)
display of Prop 8.9, for the concrete R-stage. Deps P-13f (prop_5_15, landed) + prop_5_16
(landed); Ax B6, B7. Owner Opus, 2026-07-05.
(2026-07-06) stageR136_ofRSepData is the finish line. Every abstractly-provable ingredient of
the (W,o,e,hmB,hobs,hfib) datum is proven in GQ2/RStageObstructionBuild.lean; (136) now rests on
exactly two irreducible concrete/source inputs (which the concrete 𝒴-frame, P-16d6, supplies
from the arithmetic) plus hE2:
hsep_hom— the radical-obstruction separation:obs g = 0 ⟹ ghas a homomorphism lift toY. This is the(R^∨)^C-detection ofH²(Γ,R)— a property of the concreteR+C-action, provably not derivable in the bare abstract frame (with a pair-injectivity field the assembly still hits an irreducibleH¹-vanishing / C-invariance condition).homLift_of_splitdischarges the abstractly-provable half (splitting cochain ⟹ continuous hom lift); d6 supplies the splitting.hZcount— the sourceZ¹-count#RCocycle = z_R(prop_5_16/prop_5_15cl.2 +card_DR).
Proven abstract scaffolding: the obstruction map + hmB (steps 1–2), stageR136_ofRObstructionData
(the assembler + easy hobs), the whole hfib fibre-torsor (fibreCocycleEquiv), hsep's
Frattini/framing wrapper (liftB_fibre_nonempty_of_homLift), and homLift_of_split. d6
consumes stageR136_ofRSepData by constructing the concrete RObstructionData and discharging
hsep_hom + hZcount.
-
✅ Reduction landed —
GQ2/RStageObstruction.lean,stageR136_ofObstruction, std-3, sorry-free. It repackagesstageR136_of'sW/o/einterface into the natural obstruction shape and discharges the double-dual bookkeeping, so a caller need only supply the obstruction as a linear functional on the scalar-character space:obs : BoundaryLifts b F RF.TB → Module.Dual (ZMod 2) D_Rmod (D_Rmod ≃ RF.DR) hmB : ∀ λ ≠ 0, m_{Γ,λ}(B) = #{ g // obs g λ = 0 } hobs : ∀ g, obs g = 0 ↔ g lifts to Y hfib : ∀ g, obs g = 0 → #(fibre of liftB over g) = z_R ⟹ (136): |D_R|·e_Γ(Y) = z_R · Σ_λ (2 m_{Γ,λ}(B) − e_Γ(B)).Internally
W := D_Rmodᵛ,o := obs, ande : D_R ≃ Wᵛ = D_Rmodᵛᵛis the finite-dimensional double-dualModule.evalEquiv;hmB/hobs/hfibpass through verbatim. This is the reusable "obstruction module" object the ticket names, and it is the interface the concrete witness will target. -
🔨 Option A underway (user-approved 2026-07-05) —
GQ2/RStageObstructionBuild.lean, std-3, sorry-free. Landed so far:RCoverData RF— the compat structure (coverMap_λ : Y →* (scalarCover λ).coverwithp_λ ∘ coverMap_λ = π_B), kept self-contained (noEnrichmentedit; foldable in later);lifts_scalarCover_of_liftB— the easyhobsdirection (lifts-to-Y⟹ lifts-through-every-p_λ);trivialRCD— theM = ⊥RadicalCoverDatawrapping any bareCentralCover, which unlocks the wholeCentralObstructionengine (ob,central_iff_ob_eq_zero) for plain "a hom lifts through the cover". This is the reuse hinge:scalarCover λis a central 𝔽₂-cover ofB, and itsMLifts.CentralatM = ⊥is exactly the frame'smB-liftability.
Progress on the obstruction core (
GQ2/RStageObstructionBuild.lean, all std-3, sorry-free):- ✅
mB ⟺ obbridge —trivialRCD(M=⊥ cover wrapper) +central_iff_ob_eq_zerogiveliftsThroughCover_iff_homOb : g lifts through C ⟺ homOb C g = 0;cardTwoLinEquivturnsH²(Γ,𝔽₂) ≅ 𝔽₂(from#H²=2). - ✅
obs+hmBDONE — the extended datumRObstructionData(addsD_Rmod ≃ D_Rand thepair : D_Rmod →ₗ (R→+𝔽₂)field withpair_coverMap); the single-set-lift defectrDefect; the connectionhomOb(scalarCover λ) g = H2mk(pair d ∘ rDefect)(homOb_eq_H2mk_pair); the obstruction functionalobs : D_Rmod →ₗ 𝔽₂(obsMapAddadditive +cardTwoLinEquiv,map_smulby the two-value case split); andhmB_holds—mB l = #{f // obs f.1.1 (toDR.symm l) = 0}, exactlystageR136_ofObstruction'shmB. - ◐
hobs— the ⟸ direction DONE (folded into the assembler, step 5). The ⟹ direction is the hard separation, and its Frattini/framing wrapper is DONE (liftB_fibre_nonempty_of_homLift, std-3): a bare hom liftφ : Γ → Yofg(π_B∘φ = g) already lands in theliftB-fibre (surjective bysurj_of_piB_surj= Frattinieq_top_of_map_frattini_quotient_top; framed because the framing factors throughπ_BviaTB_head/TB_theta). Residual = the separation core:obs g = 0 ⟹ ∃ hom φ : Γ → Ywithπ_B∘φ = g. Route:obs g = 0 ⟺ ∀d, [pair d ∘ rDefect] = 0 ∈ H²(Γ,𝔽₂)(homOb_eq_H2mk_pair) ⟹ (separation)[rDefect] = 0 ∈ H²(Γ,R)⟹ (coboundary) buildc, setφ = c⁻¹·slift∘g. The separation is the deep piece: needsH²(Γ,R)for theg-twisted action + the(R^∨)^C-character injectivityH²(Γ,R) ↪ ∏_d H²(Γ,𝔽₂)(Relem-abelian +C-invariance of the framed obstruction) + the pushout-kernel structural link. - ✅
hfibabstract torsor DONE —fibreCocycleEquiv+hfib_holds(std-3, sorry-free):RCocycle RF f₀— the R-stage torsor groupZ¹_{Γ,ρ}(R)(continuous crossed 1-cocyclesΓ → Rfor thef₀-conjugation action;u_one,twistHom);R_le_ker_piY/R_le_ker_thetaY(needshE2) — the framing preservation of R-twists;surj_of_piB_surj— Frattini surjectivity;fibreCocycleEquiv : {f // liftB f = g} ≃ RCocycle RF f₀.1.1— the torsor bijection;hfib_holds—#fibre = z_R, reduced to the source count#RCocycle = z_R(the 5.15/5.16 numeric +card_DR, discharged by d6 — a short citation).
- ✅ assemble DONE —
stageR136_ofRObstructionData(std-3, sorry-free): feedsstageR136_ofObstructionwithobs/hmB/(the easyhobs) discharged, reducing the entire (136) display to exactly the two hard-core hypotheseshsep(step 3 ⟹) andhfib(step 4).
Complete + committed: steps 1–2 (obstruction map), step 5 (assembler + easy
hobs), step 4 (the hfib fibre-torsor, its whole abstract content), and step 3's Frattini/framing wrapper. The single remaining piece is thehsepseparation core — the deepest classical argument in §8's R-stage (theH²(Γ,R)twisted-cohomology injectivity via(R^∨)^C-characters). It needs a newH²(Γ,R)layer + the pushout-kernel structural field; a focused follow-up.hfibneeds only the sourceZ¹-count from d6.
RecursionFrame.scalarCover : (l : DR) → l ≠ 0 → CentralCover YB stores each p_λ : B_λ ↠ B as an
abstract central 𝔽₂-cover of B. Its docstring reads "the pushout K_λ = K/ker λ, realized
as Y/ker λ ↠ Y/R" — but that is documentation, not a field: nothing in the frame (or in
Enrichment, which adds only the per-λ square forms q_λ/q̄_λ and factor sets dat_λ) exposes
a map relating p_λ to the single radical extension Y ↠ B = Y/R (ker π_B = R = Φ(K)).
Two properties of obs depend on exactly that link and are not derivable without it:
- (Lin) — linearity of the obstruction. We need
obs g : D_R → 𝔽₂(λ ↦ [g lifts through p_λ], as an element ofD_Rᵛ) to be𝔽₂-linear. This holds becauseobs g λ = λ_*(Obs_R(g)), the pushforward alongλ : R → 𝔽₂of the one radical-extension obstructionObs_R(g) ∈ H²(Γ, R), andλ ↦ λ_*is linear (functoriality ofH²in the coefficient module). If thep_λare unrelated covers, there is no commonObs_R(g)and no reason for linearity. - (Sep) — the
hobsseparation.obs g = 0 ⟺ ∀ λ ∈ D_R, glifts throughp_λ, and we need this⟺ glifts toY. With the pushout link, "lifts through everyp_λ" ⟺ "Obs_R(g)dies against everyλ ∈ (R^∨)^C", and the Frattini structure (R = Φ(K),eq_top_of_map_frattini_quotient_top) is what forces this to be lifting toY. Without the link the two sides are unrelated.
Per the project rule ("if a proof needs an unstated input, that is a design escalation — flag on the board, discuss; never an axiom"), this is flagged rather than hacked.
Option A — extend the frame with the pushout compatibility (recommended). Add to
RecursionFrame (or, less invasively, to Enrichment, keeping the bare frame untouched) a
compatible realization family
cover_map : (l : DR) → (h : l ≠ 0) → Y →* (scalarCover l h).cover -- q_λ : Y ↠ B_λ
cover_map_lifts_piB : (scalarCover l h).p ∘ cover_map l h = piB -- p_λ ∘ q_λ = π_B
cover_map_ker : (cover_map l h).ker = (ker λ as a subgroup of R ≤ Y) -- kernel is ker λ
i.e. the datum that p_λ really is Y/ker λ ↠ Y/R. From it, Obs_R(g) ∈ H²(Γ,R) is the single
radical obstruction and obs g λ = λ_*(Obs_R(g)) gives (Lin); (Sep) follows from
⋂_{λ∈(R^∨)^C} ker λ and the Frattini surjectivity. This is a co-owned SectionEight.lean edit
to a structure — needs a fleet-lead / owner sign-off (the Enrichment-extension variant is the
lighter touch, mirroring how P-16d1 added Enrichment without editing the bare frame).
Option B — build the witness only for the concrete 𝒴-frame (P-16d5/d6). There the covers
are Y/ker λ by construction, so the compatibility holds definitionally and obs/(Lin)/(Sep)
are provable in place; P-16d2 then reduces to "provide the concrete obs for 𝒴" and folds into
the witness. Cleaner for correctness, but couples P-16d2 to d5/d6 (loses the reusable abstraction).
De-risked precondition: R = Φ(K) is elementary abelian (and central in K, K⁴ = 1) by
GQ2.SectionSeven.lemma_7_2 (proved, std-3): its middle conjunct is ∀ r ∈ B.R, r*r = 1. So
R^∨, D_R = (R^∨)^C, and z_R = 2^{2·dim R + dim D_R} = |R|²·|D_R| are all well-founded — the
obstruction/duality picture does not rest on an unverified exponent hypothesis.
-
W,e,he0— done, generic:stageR136_ofObstruction(this file).D_Rmod=D_Rgiven𝔽₂-module structure (it is(R^∨)^C, naturally a subspace ofR^∨, elementary abelian bylemma_7_2);W = D_Rmodᵛ. -
Obs_R : BoundaryLifts(B) → H²(Γ, R)— the radical-extension obstruction, per liftg, via the pushout family (Option A/B). Per-λ,λ_*(Obs_R(g)) ∈ H²(Γ,𝔽₂)is exactly theGQ2.SectionEight.CentralObstruction.obof the central coverp_λ(central_iff_ob_eq_zero), soobs g λ := ob_{p_λ}(g)and (Lin) isob-functoriality inλ(the covers share the lift family throughcover_map). -
hmB— near-definitional:m_{Γ,λ}(B)(RecursionFrame.mB) is#{g // g lifts through p_λ}, andobs g λ = 0 ⟺ glifts throughp_λbycentral_iff_ob_eq_zero. -
hobs— (Sep):obs g = 0 ⟺ ∀λ, ob_{p_λ}(g)=0 ⟺ Obs_R(g)=0 ⟺ glifts toY; the last⟺is the pushout universal property + the Frattini surjectivityGQ2.eq_top_of_map_frattini_quotient_top(a lift's image is automatically all ofY). -
hfib— thez_Rtorsor count, this is where B6/B7 enter. The fibre ofliftBover a liftablegis a torsor under the twisted cocyclesZ¹(Γ, R)(the lift-difference cocycle;fiberLiftEquivis the rank-1𝔽₂prototype). Its size is the 5.15/5.16 numeric:#Z¹(Γ, R) = |R|² · #(ElemDual R)^C— exactly- local (
Γ = G_ℚ₂):GQ2.LocalLiftingDuality.card_Z1_eq/prop_5_16_bundleclause 2, - candidate (
Γ = Γ_A):prop_5_15'sIsSelfDual Rclause 2 (#Z1w = |R|² · #(ElemDual R)^C),
and
#(ElemDual R)^C = |D_R|iscard_DR(theC-invariantλ-kernels ↔(R^∨)^C). Hence the fibre size is|R|² · |D_R| = z_R(RecursionFrame.zR) on the nose. Sohfibis design-independent modulo the fibre-is-a-Z¹-torsor identification — and that identification uses only the honest extensionY ↠ B(RF.piB, kernelR), not the per-λscalar covers, so it is not blocked by the compatibility gap above (onlyobs/hmB/hobsare). It does still need a twisted-Z¹(Γ,R)-torsor layer forR-coefficients (the repo has the rank-1𝔽₂prototypefiberLiftEquiv; general-Ris new infra). NoteR ≤ ker π_Y = L_Y(K ≤ P ≤ L_Y, soΦ(K) ≤ K ≤ L_Y), so theπ_Y-framing isR-twist-invariant; theθ_Y-framing interaction is the one point to check. - local (
GQ2/RStageObstruction.lean— the reduction (landed, std-3). Not yet imported byGQ2.lean(leaf awaiting the P-16d6 splice, which willimport GQ2.RStageObstruction); the guard scans it textually and it is violation-free.- Blocker owner: whoever holds the
RecursionFrame/Enrichmentstructure (co-ownedSectionEight.lean). Recommended: add thecover_mapcompatibility toEnrichment(light touch), then discharge steps 2–5 in a follow-upRStageObstruction-consumer, feedingstageR136_ofObstruction.