The Grand Tour proved that when you delete a circle from a spherical arrangement, the traversal of becomes a gate walk on the parent map that survives the deletion — but it proved this only after assuming three geometric facts it could not yet derive. This round derives all three from sphericity itself, so a spherical census map now satisfies the Grand Tour’s hypothesis with no hand-supplied geometric field.
M-C packaged the well-formedness of a tour into a structure TourOK, and the well-formedness of a deletion into DeleteOK. Four of TourOK’s fields are pure period bookkeeping: that the tour has positive length , starts on , closes after splice steps, and visits distinct darts. Those define the walk. Three further fields were something else entirely — each carried in the source with the same apology, “geometrically expected from sphericity, but not derived from it here”:
DeleteOK, inherited from circle deletion, M-A) — no fused run of the deletion closes back onto its own starting dart. Fused arcs have two distinct ends.These were decidable fields: a particular census map could pay for each with a per-map decide. But paying is not proving, and a hypothesis you always discharge by computation is still a hypothesis. P-1 removes all three from the caller’s hands.
Sphericity, in this tree, is three combinatorial conditions on a dart map : it is DartConnected, its crossings are ProperCrossings (every vertex is a genuine transversal crossing of two circles), and its Euler characteristic is . From exactly this, the promoted stack manufactures the one object every argument below runs on. First isCut_of_spherical certifies that each circle cuts the sphere; then sideFn_exists promotes that cut to a side function
for the chosen circle , a two-colouring of the faces that flips exactly when you step across a dart of circle and stays put across every other dart. Read at the corner faces of a single dart, obeys two step laws, both shape-free — ProperCrossings does not enter here, only later.
The twin flip. Crossing from a dart to its twin crosses the dart’s own arc, so moves by the indicator of “this dart’s circle is ” (sideFn_face_dartTwin):
The splice step. One splice step crosses exactly the crossed strand’s arc, so moves by the indicator that the strand crossed at that vertex lies on (sideFn_face_cont). These two laws are the whole engine; the three dividends are three ways of reading them.
Walk the tour of . Every splice step passes straight through a vertex, and by the ProperCrossings alternation the strand it crosses there belongs to another circle, never to itself. So the splice-step indicator for is always zero, and is constant along the entire tour (sideFn_face_tour): every iterate lands on a face with the same as .
A twin dart of a tour dart, by contrast, sits on the flipped side: at a -dart the twin-flip indicator is , so its face carries . If some tour dart equalled the twin of some tour dart, reading on both sides of that equation would force
which is false. That is the entire proof, and it holds for every pair of steps — no “within one period” window is needed, because the side value does not care how far around the tour you have walked.
theorem tour_two_sided_of_spherical (hconn : M.DartConnected) (hp : M.ProperCrossings)
(heuler : M.eulerChar = 2) {d₀ : Arc × Bool} (hd₀ : M.circ d₀.1 = c) (j k : ℕ) :
(M.cont)^[j] d₀ ≠ dartTwin ((M.cont)^[k] d₀) := by
obtain ⟨σ, hσ⟩ := M.toArrMap.sideFn_exists (M.toArrMap_connected hconn) c
(M.isCut_of_spherical hconn hp heuler c) (M.face d₀)
intro hjk
have h1 : σ (M.face ((M.cont)^[j] d₀)) = σ (M.face d₀) :=
M.sideFn_face_tour c hp hσ hd₀ j
have h2 : σ (M.face (dartTwin ((M.cont)^[k] d₀))) = σ (M.face d₀) + 1 := by
rw [M.sideFn_face_dartTwin hσ, if_pos ((M.circ_cont_iter hp d₀ k).trans hd₀),
M.sideFn_face_tour c hp hσ hd₀ k]
rw [hjk, h2] at h1
exact (by decide : ∀ x : ZMod 2, x + 1 ≠ x) _ h1
The two haves are the two banks: the tour side (h1) and the flipped side (h2). Their collision is a contradiction in , discharged by a one-line decide.
The deletion of fuses each pair of arcs that met into a single run. DeleteOK.twinKNe asks that no such run be Möbius-like — that a fused run never resolves back onto its own starting dart. This is the two-sidedness argument again, run along the fused circle rather than along . Every step a fused run absorbs is a step across itself, and , so is constant along the run (sideFn_face_resolveFuel); meanwhile sits on the flipped side of . So . The constancy law is stated in fuel form, which means it covers runs that never terminate — so the theorem needs neither the Kept guard nor DeleteOK.resolves, and it retires the field M-A had carried since the circle-deletion round.
The third field is different in kind, and this is the part the essay must not overstate. cover is derived not from sphericity but from CircleFaithful, the decoder’s S1 axiom that one label names one closed curve. The bridge is arithmetic on the rotation. The splice undoes the decoder’s traversal successor — on a degree-4 map , so as permutations (contEquiv_eq_sigmaPerm_inv). Splice orbits are -orbits. CircleFaithful’s forward direction says every dart of lies in the -orbit of or of its twin; convert those to splice orbits, reduce the exponent modulo the period , and it lands on an iterate below .
Here is the honesty. The forward direction of CircleFaithful, restricted to , is content-coextensive with cover — it says the same thing. So P-1 does not derive cover from something strictly weaker. It consolidates cover into the standing S1 decoder axiom: a property that is already required, sits upstream of the tour machinery (it is defined from , , and alone), is independently consumed by the decoder, and is discharged on census maps by decide. That is a genuine un-conditionalization, not a derivation from nothing: cover stops being a bespoke tour hypothesis and becomes a consequence of a decoder property the pipeline already pays for. The firewalled cold review confirmed this reading — that CircleFaithful is genuinely upstream, not cover under a new name.
theorem tour_cover_of_faithful (hp : M.ProperCrossings) (hfaith : M.CircleFaithful)
{d₀ : Arc × Bool} {L : ℕ} (hd₀ : M.circ d₀.1 = c) (pos : 0 < L)
(closes : (M.cont)^[L] d₀ = d₀) :
∀ e : Arc × Bool, M.circ e.1 = c →
∃ k, k < L ∧ ((M.cont)^[k] d₀ = e ∨ dartTwin ((M.cont)^[k] d₀) = e) := by
intro e hce
have hreach : ∀ x : Arc × Bool, M.sigmaPerm.SameCycle d₀ x →
∃ k, k < L ∧ (M.cont)^[k] d₀ = x := by
intro x hx
have hx' : M.contEquiv.SameCycle d₀ x := by
rw [M.contEquiv_eq_sigmaPerm_inv hp]
exact Equiv.Perm.sameCycle_inv.mpr hx
obtain ⟨z, hz⟩ := hx'
obtain ⟨k, hk, hke⟩ := M.exists_iterate_lt_of_zpow pos closes z
exact ⟨k, hk, by rw [hke, hz]⟩
rcases (hfaith d₀ e).mp (hd₀.trans hce.symm) with h | h
· obtain ⟨k, hk, hke⟩ := hreach e h
exact ⟨k, hk, Or.inl hke⟩
· obtain ⟨k, hk, hke⟩ := hreach (dartTwin e) h
refine ⟨k, hk, Or.inr ?_⟩
rw [hke, dartTwin_dartTwin]
hreach is the bridge: same -cycle becomes same splice-cycle via , then the exponent is squeezed below . The final rcases is the two cases of CircleFaithful — the dart, or its twin.
The deliverable is deliberately non-invasive. TourOK and DeleteOK keep their fields, so every decide-built control already in the tree still type-checks unchanged. What changes is how the geometric fields get filled. TourOK.of_spherical builds a full TourOK from the four period fields plus sphericity plus faithfulness, deriving two_sided and cover; deleteOK_of_spherical builds a DeleteOK from its combinatorial guards plus sphericity, deriving twinKNe.
theorem TourOK.of_spherical {Arc Circle : Type*} [DecidableEq Circle] [Fintype Arc]
[DecidableEq Arc] {M : DartMap Arc Circle} {c : Circle}
(hconn : M.DartConnected) (hp : M.ProperCrossings) (heuler : M.eulerChar = 2)
(hfaith : M.CircleFaithful) {d₀ : Arc × Bool} {L : ℕ}
(pos : 0 < L) (onC : M.circ d₀.1 = c) (closes : (M.cont)^[L] d₀ = d₀)
(inj : ∀ j, j < L → ∀ k, k < L → (M.cont)^[j] d₀ = (M.cont)^[k] d₀ → j = k) :
M.TourOK c d₀ L :=
⟨pos, onC, closes, inj,
fun j _ k _ => M.tour_two_sided_of_spherical c hconn hp heuler onC j k,
M.tour_cover_of_faithful c hp hfaith onC pos closes⟩
The anonymous constructor’s last two slots are the two dividends. Everything a caller supplies — connectivity, properness, , faithfulness, and the period data — is a decidable decoder guard on a census map. To prove the constructors bite, the M-A and M-C control packages are rebuilt through them (threeChain_tourOK_derived, threeChain_deleteOK_derived) on the real three-chain lens geometry, with threeChain_circleFaithful a genuine decide — so the theorems run end to end on a geometry-read map and cannot pass vacuously.
The two-sidedness theorems claim only that sphericity suffices. They never claim it is necessary, and the source is careful about the difference. The connectivity and Euler hypotheses enter exactly once, through isCut_of_spherical, and no kill-check deleting them is offered — none is expected to exist. A dart map is a rotation system, a rotation system always presents an orientable surface, and an embedded closed curve on an orientable surface is two-sided at every genus.
The prose evidence, fenced as prose and not kernel: an exhaustive sweep of every ProperCrossings rotation system on three or fewer vertices under its finest circle labelling — 109,764 maps, including surfaces of and — found no violation of either two-sidedness conclusion. Both conclusions are labelling-robust (cont never reads the circle labels, and a fused run follows one strand whatever the labels), which is exactly what the orientability reading predicts. A -free combinatorial proof would need orientation-transport machinery this tree does not carry, and every census map is spherical, so the stronger statement would buy the program nothing.
cover is the opposite case: its hypothesis is necessary, and there is a kernel kill-check to prove it. The quad is a real spherical map — two geometric circles and that share the single label . It is dart-connected, proper, and has : fully spherical. But it is not CircleFaithful, because label names two closed curves, not one. The label- tour launched from a dart closes with period and never once reaches a dart of .
quad kill-check: both curves carry label , so the label- fibre has two components. The tour from (solid, arrows) covers and stops; every dart of (dashed, crossed) is unreached. Full sphericity is retained — connected, proper, — and cover still fails. Faithfulness is exactly what “one label, one curve” adds beyond sphericity, and sphericity alone cannot see it.So tour_cover_without_faithful_is_false is a kernel theorem: strike hfaith from tour_cover_of_faithful, keep everything else including full sphericity, and the statement is false on the quad. That is the precise line between the two kinds of dividend. Two-sidedness comes free from the surface being a sphere; cover needs the extra, decidable promise that a label is a curve.
Proved. All three geometric fields the Grand Tour carried are discharged. two_sided and twinKNe are derived from sphericity through the side function; cover is consolidated into the standing CircleFaithful S1 axiom, which census maps satisfy by decide. Through the constructors, a spherical census map satisfies TourOK and DeleteOK with no geometric field supplied by hand — M-C is un-conditioned on the maps the program actually enumerates.
The fences, stated plainly. cover is consolidated, not derived from nothing — it rests on a decoder axiom of the same content, chosen because that axiom is already required and independently checked. A -free proof of two-sidedness is deliberately not attempted; it would need orientation-transport the tree lacks and would buy nothing, since census maps are spherical. The pairs-meet-twice condition hpairs is left where it belongs, as a genuine pseudocircle axiom the spherical quad violates — not a sphericity consequence. And the S2 fence — that a dart map’s faces are the regions of a sphere arrangement — is the program’s single classical citation and is never entered here.
The module is firewalled-Opus cold-review CONFIRMED on standard axioms only (propext, Classical.choice, Quot.sound); every check is a kernel decide, with no native_decide and no sorry. The Grand Tour flagged three open conditions. This is the note that closes them.