SigmaLayer/UntriggeredVolume: the untriggered flow preserves chart volume, and is unique #
Category: 7-SigmaLayer (dynamical measurement) — specs/frozen-base-obstruction-scoping.md brick 2, the
two gaps its own honest scope left open: measure preservation and uniqueness.
What this closes #
Brick 2 (SigmaLayer/UntriggeredFlow.lean) built one Hamiltonian flow that records and
back-reacts. Its readout half (SigmaLayer/UntriggeredReadout.lean) showed the record is
faithful for every preparation μ — but said nothing about which μ the dynamics itself
preserves, and every necessary condition in RecordLayer/MeasurementConstraints.lean takes
measure preservation as its hypothesis. This module supplies it.
The whole argument is one observation: the time-t map is linear in the initial state,
block-diagonal on Chart n = (Fin n → ℝ) × (Fin n → ℝ), and each block is a rank-one
perturbation of the identity — a shear. Its determinant is (1 + t·c_k)(1 − t·c_k) = 1 by the
matrix determinant lemma, because c k = 0.
untriggeredLin— the time-tmap as a linear endomorphism;untriggeredLin_applyidentifies it withuntriggeredCurve.det_untriggeredLin— its determinant is1.- ★★
untriggeredCurve_measurePreserving— therefore the flow preserves Lebesgue measure on the chart. This isMeasurePreservingin the corpus's own sense (ConstraintDynamics.flow_preserves,MeasurementRecord), so it plugs directly into the necessary conditions. - ★
untriggered_no_exact_collapse— one such plug-in,MeasurementConstraints.no_exact_collapseinstantiated on this flow: a positive-volume set of preparations cannot be driven into a null set. Collapse, on this flow too, is relocation of a null slice. - ★
untriggeredCurve_unique— the same linearity makes the field Lipschitz, so brick 0'shamiltonianCurve_uniqueupgrades an integral curve to the integral curve. This is the claim brick 2's docstring promised and then withdrew; it is now proved.
Not reinvented #
Everything measure-theoretic is Mathlib: Measure.map_linearMap_addHaar_eq_smul_addHaar
(pushforward of a Haar measure by a linear map is |det⁻¹| times itself), LinearMap.det_prodMap
(block-diagonal determinants multiply), LinearMap.det_toLin' and
Matrix.det_one_add_replicateCol_mul_replicateRow (the matrix determinant lemma). The chart's
Lebesgue measure is Haar by instance. No volume computation is done by hand.
⚠️ Honest scope #
This is measure preservation of the chart flow, not Born. There is still no moment map in a
Darboux chart, so nothing here weights outcomes; the readout half's caveat stands unchanged.
It is a chart statement: Chart n is globally ℝ^{2n}, the arena is not, and the
chart→arena transport remains open (⚠️ RESIDUE(R-016)). Which interaction an apparatus
realises is a permanent boundary rather than open work (⚠️ RESIDUE(R-015)).
c k = 0 is a hypothesis throughout, as in untriggeredCurve_isHamiltonianCurve. Without it
the block determinants are 1 ± t·c_k and the map is not volume-preserving — but then it is not
the Hamiltonian flow either, so nothing is lost.
References #
specs/frozen-base-obstruction-scoping.md (brick 2, remaining gaps); specs/future-work.md;
SigmaLayer/UntriggeredFlow.lean (untriggeredCurve, interactionH);
SigmaLayer/UntriggeredReadout.lean (the readout half); SigmaLayer/ChartIntegralCurve.lean
(hamiltonianCurve_unique, lipschitzWith_momentumH_field — the idiom reused here);
RecordLayer/MeasurementConstraints.lean (no_exact_collapse, the consumer);
SigmaLayer/ConstraintDynamics.lean (flow_preserves, the predicate).
The time-t map is linear: the two blocks #
The position block of the time-t map, x ↦ x + t (c ⬝ x) e_k, as the rank-one
perturbation of the identity 1 + (t e_k) cᵀ.
Equations
- CSD.SigmaLayer.posBlock c k t = 1 + Matrix.vecMulVec (t • Pi.single k 1) c
Instances For
The time-t map of the untriggered flow, as a linear endomorphism of the chart.
Equations
- CSD.SigmaLayer.untriggeredLin c k t = (Matrix.toLin' (CSD.SigmaLayer.posBlock c k t)).prodMap (Matrix.toLin' (CSD.SigmaLayer.momBlock c k t))
Instances For
The linear map is the flow: untriggeredLin c k t z = untriggeredCurve c k z t.
The determinant is one #
★★ Measure preservation #
Lebesgue measure on the chart is a Haar measure: the product of the two Haar measures on
the position and momentum blocks. (Instance search does not find the Measure.prod instance
through volume on the product by itself; this registers it for Chart n.)
★★ The untriggered flow preserves chart volume. A unit-determinant linear map pushes
Lebesgue measure to itself (Measure.map_linearMap_addHaar_eq_smul_addHaar). This is
MeasurePreserving in the corpus's own sense — the hypothesis every necessary condition in
RecordLayer/MeasurementConstraints.lean takes.
Volume flows without compression or dilation: the set of initial states carried into a
measurable A has exactly the volume of A.
★ no_exact_collapse on the untriggered flow. A positive-volume set of preparations
cannot be driven into a null set of states: on this flow too, collapse can only be relocation
of a null slice, never contraction of a positive-measure one. The first consumer of
untriggeredCurve_measurePreserving, showing it plugs into the existing constraints.
★ The field is linear, so the flow is the flow #
The Hamiltonian field of the coupling as a continuous linear map,
z ↦ ((Σᵢ cᵢ xᵢ) e_k, −y_k c).
Equations
- CSD.SigmaLayer.untriggeredField c k = ((CSD.SigmaLayer.posCLM c).smulRight (Pi.single k 1)).prod ((CSD.SigmaLayer.momCoord k).smulRight (-c))
Instances For
The field of interactionH is untriggeredField — linear, hence Lipschitz.
The coupling's field is Lipschitz, with constant the operator norm.
★ The untriggered curve is THE integral curve. Any integral curve of the coupling
through z₀ at time 0 is untriggeredCurve c k z₀ — the uniqueness brick 2's honest scope
left open, discharged from linearity via brick 0.