Two wings from one joint selector #
Category: 7-SigmaLayer (the record layer — Paper C A7). BACKLOG #131, blocker (I), resolved at the author's decision by option I1: one joint ontic selector, four cells, the two wings read off by coarsening.
The decision this file implements, and why it is the shape it is #
The audit found that globalBasin's selector is one-dimensional — it reads x.2.1, and
TorusFibre.mem_torusCell_iff records that the second torus coordinate "is genuinely free … the
symplectic partner carries no record content". A two-wing experiment needs two records, and the
tempting minimal choice — one selector per wing, each wing's cell geometry depending only on that
wing's setting — fails twice over: it is the product-partition arity
LF6.no_product_partition_realises_singlet kills, and with independent selectors the joint law
factorises, so it cannot carry correlation at all.
Option I1 takes the other route. One selector, a context whose rates are the joint outcome probabilities, and the wings obtained by coarsening the fine outcome code. Two facts make this the cheapest option that is also foundationally clean:
circleCell r i = rep ⁻¹' Ioc (loSum r i) (loSum r i + r i)has no free offset — a cell's position is determined by the rate vector alone. So "whose geometry sees the joint context" is really "which rate vector is the joint one", and I1 answers: there is one, and it is joint;- the architecture
sigma-fibre-contextuality.mdsettles on is probabilities Born, regions contextual. Coarsening preserves both: the fine widths are Born weights, the coarse cells move with the joint context, the fibre law stays fixed and context-independent, andx.2.2keeps the symplectic role the corpus gives it.
What is proved #
The content is stated once, for an arbitrary decoding u : Fin N → κ of the fine outcomes, and the
two wings are instances of it:
coarseEvent c u k— the event that the fine outcome decodes tok: the union of the basinsusends tok, withmeasurableSet_coarseEvent;- ★★★
measure_coarseEvent— the coarse law is the sum of the fine Born weights over the decoding's fibre. This is the shapeLF6's clause (3) already uses (summing basins over the system index), now as a theorem about any decoding; - ★★★
measure_coarseEvent_comp— coarsening composes: decoding further sums the coarse weights. ★★★measure_wingAEvent_eq_sumand ★★★measure_wingBEvent_eq_sumare the two wing marginals read off it — each wing's marginal is the sum over the other wing's outcomes. Not an assumption: a consequence of the fine cells partitioningΣ, throughFinset.sum_fiberwise; - ★★★
measure_coarseEvent_eq_of_fineSum_eqand its wing form ★★★measure_wingAEvent_eq_of_fineSum_eq— operational no-signalling, with its premise named. A's marginal agrees between two joint contexts exactly when their summed fine weights agree. The construction supplies the identity; whether the premise holds is a property of the rate vector — for the singlet, ofP_st— and so it is checkable rather than smuggled; - ★★
factorsThrough_coarseEvent— every coarse event is macroscopic: it is a preimage of #102's record string, so the wing reading is visible at the level ofπ′and not only on the microstate; fineIndexandwingCode— the pointwise codes,Option-valued throughfinSuccEquivso that all of #102'soutcomeCodeAPI applies unchanged, with ★mem_wingEvent_ifftying the code to the events;- ★
wingCode_ne_of_mem_of_mem— non-vacuity against the no-go: the coarse code genuinely moves between joint contexts at the same ontic point, so these outcome maps are not of product-partition arity. This is the analogue ofLF3.translation_wingA_setting_dependent, and without it the construction would be the pointwise primitive in disguise.
Honest scope #
⚠️ The two wings share one ontic selector. That is what I1 concedes, and it is a commitment about
Σ, not a formalisation artefact: the "two records" are two readings of x.2.1, so
CV.recordStroke₂'s two channels are not the write mechanism for this model. It is honest for CSD —
Σ is unified and the apparent nonlocality sits in the projection — and it is the easiest point for
a critic to press. Options I2 (chained selectors) and I3 (a non-product partition of T²) are the
alternatives, and both would repurpose x.2.2.
⚠️ The measurable coordinate is still outcomeCode. fineIndex and wingCode are convenience
codes into Option, a type with no measurable structure in scope, and no measurability is claimed
for them. Nothing is lost: every probability statement here is about an event, and
factorsThrough_coarseEvent is what ties those events to the measurable record coordinate.
⚠️ No P_st here. Nothing in this file mentions the singlet. The decoding and the context are
arguments; instantiating them with LF6's pointer-pair index and the joint Born rates is #131
obligation 1's second half, and needs the index transport of the audit's §3.
⚠️ No-signalling is conditional on its premise, which is the honest form:
measure_wingAEvent_eq_of_fineSum_eq assumes the summed weights agree. For the singlet that premise
is P_st's arithmetic and is not discharged here.
⚠️ Measurement independence is inherited, not removed — as in LF3/SettingLocality.lean, the
statements are made against one fixed epistemicMeasure p across contexts, and that fixture is the
Bell premise.
⚠️ Not C-1. No causal structure; #131's adjacency is still supplied.
References: RecordMacrostate.lean (outcomeCode, recordString, and the
basin API this is built on), GlobalBasin.lean (globalBasin,
epistemicMeasure, globalBasin_pairwiseDisjoint),
MacroProjection.lean (FactorsThrough),
CircleFibre.lean (circleCell, the no-offset fact this decision turns on),
TorusFibre.lean (x.2.2 as the symplectic partner),
LF3/SettingLocality.lean (RemoteSettingLocalityA, and the non-vacuity pattern),
LF6/ForcedContextuality.lean (no_product_partition_realises_singlet, the no-go avoided);
specs/BACKLOG.md #131, #102; specs/two-wing-experiment-scoping.md §5 blocker (I);
specs/sigma-fibre-contextuality.md (probabilities Born, regions contextual).
The fine index #
outcomeCode lands in Fin (N + 1) with 0 for "no basin". Through finSuccEquiv that is an
Option (Fin N), which is the convenient form for composing a decoding.
The index of the basin a microstate lies in, none on the null set no basin covers: the
Option-valued face of outcomeCode.
⚠️ No measurability is claimed — Option (Fin N) carries no measurable structure here. The
measurable coordinate is outcomeCode, and the probability content below is carried by events.
Equations
- CSD.RecordLayer.fineIndex c x = (finSuccEquiv N) (CSD.RecordLayer.outcomeCode c x)
Instances For
Coarse events of a decoding #
The coarse event of a decoding: the microstates whose fine outcome u sends to k. For a
two-wing experiment with u the joint decoding this is "the pair of wings recorded k".
Equations
- CSD.RecordLayer.coarseEvent c u k = ⋃ i ∈ {i : Fin N | u i = k}, CSD.RecordLayer.globalBasin c i
Instances For
★★★ Coarsening sums the fine Born weights. The probability of a coarse outcome is the sum of
the Born weights of the fine cells the decoding sends to it — the shape LF6's clause (3) already
uses, here as a theorem about an arbitrary decoding.
★★★ Operational no-signalling, with its premise named. The coarse weight agrees between two contexts exactly when their summed fine weights do. The identity is supplied by the construction; whether the premise holds is a property of the rate vectors, so it is checkable rather than assumed in disguise.
★★ Coarse events are macroscopic. Each is a union of basins, and #102's criterion presents each basin as a preimage of the record string, so the coarse reading is visible at the level of the macroscopic coordinate — which is what #131's obligation 5 asks of an outcome.
★★★ Coarsening composes. Decoding a coarse outcome further sums the coarse weights over the
second decoding's fibre. The two wing marginals below are the two instances of this, so neither is an
assumption: both follow from the fine cells partitioning Σ.
Summing a product over one coordinate's fibre #
Summing over the fibre of the first coordinate is summing over the second: the Finset form of
"the A-marginal sums over B's outcomes".
Summing over the fibre of the second coordinate is summing over the first.
The two wings #
The joint wing event: the two wings together recorded the pair st.
Equations
- CSD.RecordLayer.wingEvent c w st = CSD.RecordLayer.coarseEvent c w st
Instances For
The A-wing event: wing A recorded o₁, whatever B recorded. A coarsening of the joint
event, which is the whole content of option I1.
Equations
- CSD.RecordLayer.wingAEvent c w o₁ = CSD.RecordLayer.coarseEvent c (Prod.fst ∘ w) o₁
Instances For
The B-wing event: wing B recorded o₂, whatever A recorded.
Equations
- CSD.RecordLayer.wingBEvent c w o₂ = CSD.RecordLayer.coarseEvent c (Prod.snd ∘ w) o₂
Instances For
The two-wing outcome code: the fine index decoded into a pair of wing outcomes, none on
the null set no basin covers. The pointwise companion of wingEvent; see
★ mem_wingEvent_iff.
Equations
- CSD.RecordLayer.wingCode c w x = Option.map w (CSD.RecordLayer.fineIndex c x)
Instances For
★ The joint event is exactly where the code reads st — so the probability statements really
are about the coarsened two-wing outcome.
★★★ The A-wing's marginal is the sum over B's outcomes. Not an assumption — a consequence of
the fine cells partitioning Σ, by measure_coarseEvent_comp.
★★★ The B-wing's marginal is the sum over A's outcomes, by the same theorem.
★★★ Operational no-signalling for wing A, with its premise named: A's marginal is unchanged between two joint contexts exactly when the fine weights A's outcome selects sum to the same thing. Changing B's setting changes the joint context, so this is the statement a signalling claim would have to break.
★★★ Operational no-signalling for wing B.
Non-vacuity: the coarse code is not of product-partition arity #
★ The coarse code genuinely moves with the joint context. At one ontic point two joint
contexts can return different wing pairs, so these outcome maps are not setting-local response
functions and LF6.no_product_partition_realises_singlet does not apply to them.
Without this the construction would be the pointwise primitive in disguise — the same check
LF3.translation_wingA_setting_dependent makes for the relabelling primitive.