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 a signature over
uniform spaces reject a non-uniform argument as a type error rather than a
failed side condition. Making spaces nominal would break
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: 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 svd_entry_const (in LambdaS.Map) a statement about types.