Dimensioned spaces #
A space is an index type I together with a unit assignment δ : I → Uom B.
A vector over it is a family of quantities indexed by I, the component at i
carrying the unit δ i; a linear map is handled in LambdaS.Map.
Spaces are structural #
Space B I is a reducible abbreviation for I → Uom B. A space therefore
is its unit assignment: two spaces with equal δ are equal, definitionally,
with no coercion in between.
This is a decision, not an accident. It is what makes a uniform space equal to
triv ⊗ u rather than merely isomorphic to it, and so what lets the signature of
SVD be a type error rather than a side condition. Making spaces nominal would
silently invalidate Space.uniform_iff_scale_triv and, with it, the claim
that Hart's taxonomy is derived rather than checked.
A space: an index type together with a unit assignment. Structural in δ.
Equations
- LambdaS.Space B I = (I → LambdaS.Uom B)
Instances For
The dimensionless space on I, written I₁ on paper. Every component
carries the trivial unit.
Equations
- LambdaS.Space.triv B I x✝ = 1
Instances For
Scaling a space by a scalar unit, written V ⊗ d.
Equations
- LambdaS.Space.«term_⊗_» = Lean.ParserDescr.trailingNode `LambdaS.Space.«term_⊗_» 70 70 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊗ ") (Lean.ParserDescr.cat `term 71))
Instances For
A space is uniform when every component carries the same unit.
Equations
- V.Uniform = ∃ (u : LambdaS.Uom B), ∀ (i : I), V i = u
Instances For
Scaling is tensoring. V ⊗ d is the tensor product of V with the
one-dimensional space carrying d, transported along I × PUnit ≅ I.
So ⊗ is a single operator, not two that happen to share notation: the
scalar case is the one-point case. It holds definitionally.
A uniform space is equal to a scaled dimensionless space, not merely
isomorphic to one. This equality is what structurality buys, and it is what
makes LambdaS.Map.svd_entry_const a statement about types.