SigmaLayer/BlockCollapse: the degenerate-Lüders target as a relocation — the join route, brick 1 #
Category: 7-SigmaLayer (dynamical measurement — the degenerate-Lüders construction, first brick of the projective-join route).
Where this sits #
swap_not_blockLuders (DegenerateLuders.lean) proved the boundary: no fixed calibration
implements the degenerate Lüders update, because the demanded post-state [Πᵢψ] depends on the
preparation. The recorded route forward is the projective join. This module builds the route's
first brick — the object every witness must implement, and the vector-level mechanism
that implements it one level above the rays:
- ★
blockCollapse— the measurable ray-level collapse map[ψ] ↦ [Πᵢψ](junk = identity where the block component vanishes), constructed by quotient descent (Projectivization.lift) with measurability throughmeasurable_iff_measurable_comp_mk'. - ★
luders_target_eq_relocation— collapse as relocation, at the epistemic level: the degenerate-Lüders targetepistemicMeasure [Πᵢψ]is the pushforward of the preparation under the deterministic system-side relocationludersRelocation(collapse the base ray, keep the fibre).blockLudersObligation_iff_relocationrestates the §8.3 obligation accordingly: what a witness must realise is exactly this pushforward, as the conditioned trace of its dynamics. - ★
componentSwap— the vector-level witness core: on the doubled spaceℂᴺ ⊕ ℂᴺ(system ⊕ slot), exchange the block-icomplements and keep the block parts. It is involutive (componentSwap_involutive) and preserves summed norms (componentSwap_norm_sum) — the content of unitarity — and with a slot calibrated inside the block it performs exactly the collapse with the residual stored (componentSwap_collapse,componentSwap_stores):(ψ, α) ↦ (Πᵢψ, Πᵢα + (ψ − Πᵢψ)). No information is destroyed;no_exact_collapseis respected by storage, exactly as in the rank-one swap.
⚠️ The wall, sharpened #
The witness therefore exists one level above the rays. What blocks the descent to the
SwapArena is now precisely diagnosed: componentSwap acts on vectors, and its ray-pair
version is ill-defined — [Πᵢα + (ψ − Πᵢψ)] depends on the relative scale of the two
inputs, which the product ℙ(ℂᴺ) × ℙ(ℂᴺ) forgets (the product quotient kills a U(1) × U(1),
the join needs a surviving relative U(1)). Two recorded repair routes (specs/BACKLOG.md):
(i) the Fubini–Study disintegration under join coordinates (the originally recorded wall);
(ii) a phase-carrying slot — run the bank at sphere level (or ℙ × S¹) so the relative
scale survives, and quotient at readout. Route (ii) is new with this diagnosis and is likely
the cheaper one. Until one lands, swap_not_blockLuders remains the honest boundary; nothing
here claims a ray-level witness.
References #
SigmaLayer/DegenerateLuders.lean (blockProj, BlockLudersObligation,
swap_not_blockLuders — the boundary); SigmaLayer/MeasurementConstraints.lean
(no_exact_collapse — why storage is forced); SigmaLayer/SwapWitness.lean (the rank-one
precedent); Mathlib/LinearAlgebra/Projectivization/MeasureSpace.lean
(measurable_iff_measurable_comp_mk'); specs/BACKLOG.md.
blockProj algebra #
The vector-level witness core: the component swap #
The component swap on the doubled space (system ⊕ slot): keep the block-i parts,
exchange the complements. Linear in each coordinate slot by construction; the unitary content
is componentSwap_involutive + componentSwap_norm_sum.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The summed-norm identity: the swap redistributes entries, so the total square-norm over the two slots is conserved — the isometry half of unitarity.
★ The collapse, with a block-calibrated slot. If the slot state lies inside the
block (Πᵢα = α), the swap delivers exactly the Lüders-collapsed system vector.
…and the residual is stored, not destroyed: the slot receives the complement of the
system state (on top of its own block part). no_exact_collapse is respected by storage.
The ray-level collapse map #
The vector-level representative map: collapse to the block component where it is nonzero, identity otherwise (junk branch, documented).
Equations
- CSD.RecordLayer.blockCollapseAux b i v = ⟨if (CSD.RecordLayer.blockProj b i) ↑v ≠ 0 then (CSD.RecordLayer.blockProj b i) ↑v else ↑v, ⋯⟩
Instances For
On the physical branch (nonzero block component), the representative IS the block projection (interface lemma, §9.1 — the case split its unfold sites re-derive).
★ The ray-level collapse map [ψ] ↦ [Πᵢψ] (identity where the block component
vanishes), by quotient descent. This is the object any degenerate-Lüders witness must realise
as the conditioned trace of its dynamics.
Equations
- CSD.RecordLayer.blockCollapse b i = Projectivization.lift (fun (v : { v : EuclideanSpace ℂ (Fin N) // v ≠ 0 }) => Projectivization.mk' ℂ (CSD.RecordLayer.blockCollapseAux b i v)) ⋯
Instances For
The value lemma: where the block component is nonzero, blockCollapse is [ψ] ↦ [Πᵢψ].
Collapsed states are fixed points: idempotence on the good set.
blockCollapse is measurable — through the coinduced-Borel coincidence
(measurable_iff_measurable_comp_mk').
Collapse as relocation: the obligation, reformulated #
The system-side relocation on KSigma: collapse the base ray, keep the fibre.
Equations
- CSD.RecordLayer.ludersRelocation b i x = (CSD.RecordLayer.blockCollapse b i x.1, x.2)
Instances For
★ Collapse as relocation, at the epistemic level. The degenerate-Lüders target — the
post-measurement state epistemicMeasure [Πᵢψ] demanded by the §8.3 obligation — is exactly
the pushforward of the preparation under the deterministic relocation map. Nothing stochastic:
the update is a measurable relocation of the epistemic Dirac slice, fibre untouched.
The obligation is a relocation demand. BlockLudersObligation holds for a
post-measurement assignment iff, at every preparation with nonvanishing block weight, the
assignment is the pushforward of the preparation under ludersRelocation. What a witness must
realise is exactly this pushforward, as the conditioned trace of measure-preserving
dynamics.