Partially defined linear maps #
A LinearPMap R E F or E →ₗ.[R] F is a linear map from a submodule of E to F.
We define a SemilatticeInf with OrderBot instance on this, and define three operations:
- mkSpanSingletondefines a partial linear map defined on the span of a singleton.
- suptakes two partial linear maps- f,- gthat agree on the intersection of their domains, and returns the unique partial linear map on- f.domain ⊔ g.domainthat extends both- fand- g.
- sSuptakes a- DirectedOn (· ≤ ·)set of partial linear maps, and returns the unique partial linear map on the- sSupof their domains that extends all these maps.
Moreover, we define
- LinearPMap.graphis the graph of the partial linear map viewed as a submodule of- E × F.
Partially defined maps are currently used in Mathlib to prove Hahn-Banach theorem
and its variations. Namely, LinearPMap.sSup implies that every chain of LinearPMaps
is bounded above.
They are also the basis for the theory of unbounded operators.
A LinearPMap R E F or E →ₗ.[R] F is a linear map from a submodule of E to F.
- domain : Submodule R E
Instances For
A LinearPMap R E F or E →ₗ.[R] F is a linear map from a submodule of E to F.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Instances For
Equations
The unique LinearPMap on R ∙ x that sends x to y. This version works for modules
over rings, and requires a proof of ∀ c, c • x = 0 → c • y = 0.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The unique LinearPMap on span R {x} that sends a non-zero vector x to y.
This version works for modules over division rings.
Equations
- LinearPMap.mkSpanSingleton x y hx = LinearPMap.mkSpanSingleton' x y ⋯
Instances For
Projection to the first coordinate as a LinearPMap
Equations
- LinearPMap.fst p p' = { domain := p.prod p', toFun := LinearMap.fst R E F ∘ₗ (p.prod p').subtype }
Instances For
Projection to the second coordinate as a LinearPMap
Equations
- LinearPMap.snd p p' = { domain := p.prod p', toFun := LinearMap.snd R E F ∘ₗ (p.prod p').subtype }
Instances For
Given two partial linear maps f, g, the set of points x such that
both f and g are defined at x and f x = g x form a submodule.
Equations
Instances For
Equations
- LinearPMap.inhabited = { default := ⊥ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- LinearPMap.orderBot = { toBot := LinearPMap.bot, bot_le := ⋯ }
Given two partial linear maps that agree on the intersection of their domains,
f.sup g h is the unique partial linear map on f.domain ⊔ g.domain that agrees
with f and g.
Instances For
Hypothesis for LinearPMap.sup holds, if f.domain is disjoint with g.domain.
Algebraic operations #
Equations
- LinearPMap.instMulAction = { toSMul := LinearPMap.instSMul, one_smul := ⋯, mul_smul := ⋯ }
Equations
- LinearPMap.instInvolutiveNeg = { toNeg := LinearPMap.instNeg, neg_neg := ⋯ }
Equations
- LinearPMap.instAddSemigroup = { toAdd := LinearPMap.instAdd, add_assoc := ⋯ }
Equations
- LinearPMap.instAddZeroClass = { toZero := LinearPMap.instZero, toAdd := LinearPMap.instAdd, zero_add := ⋯, add_zero := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- LinearPMap.instAddCommMonoid = { toAddMonoid := LinearPMap.instAddMonoid, add_comm := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Extend a LinearPMap to f.domain ⊔ K ∙ x.
Equations
- f.supSpanSingleton x y hx = f.sup (LinearPMap.mkSpanSingleton x y ⋯) ⋯
Instances For
Equations
- LinearPMap.sSup c hc = { domain := sSup (LinearPMap.domain '' c), toFun := Classical.choose ⋯ }
Instances For
Restrict a linear map to a submodule, reinterpreting the result as a LinearPMap.
Instances For
Compose a linear map with a LinearPMap
Instances For
Restrict codomain of a LinearPMap
Equations
- f.codRestrict p H = { domain := f.domain, toFun := LinearMap.codRestrict p f.toFun H }
Instances For
Compose two LinearPMaps
Instances For
f.coprod g is the partially defined linear map defined on f.domain × g.domain,
and sending p to f p.1 + g p.2.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Restrict a partially defined linear map to a submodule of E contained in f.domain.
Equations
- f.domRestrict S = { domain := S ⊓ f.domain, toFun := f.toFun ∘ₗ Submodule.inclusion ⋯ }
Instances For
Graph #
The graph of a LinearPMap viewed as a submodule on E × F.
Equations
- f.graph = Submodule.map (f.domain.subtype.prodMap LinearMap.id) f.toFun.graph
Instances For
The graph of z • f as a pushforward.
The graph of -f as a pushforward.
Auxiliary definition to unfold the existential quantifier.
Equations
- Submodule.valFromGraph hg ha = ⋯.choose
Instances For
Define a LinearMap from its graph.
Helper definition for LinearPMap.
Equations
- g.toLinearPMapAux hg = { toFun := fun (x : ↥(Submodule.map (LinearMap.fst R E F) g)) => Submodule.valFromGraph hg ⋯, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Define a LinearPMap from its graph.
In the case that the submodule is not a graph of a LinearPMap then the underlying linear map
is just the zero map.
Equations
- g.toLinearPMap = { domain := Submodule.map (LinearMap.fst R E F) g, toFun := if hg : ∀ x ∈ g, x.1 = 0 → x.2 = 0 then g.toLinearPMapAux hg else 0 }
Instances For
The inverse of a LinearPMap.
Equations
- f.inverse = (Submodule.map (LinearEquiv.prodComm R E F) f.graph).toLinearPMap
Instances For
The graph of the inverse generates a LinearPMap.