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 mapsf,gthat agree on the intersection of their domains, and returns the unique partial linear map onf.domain ⊔ g.domainthat extends bothfandg.sSuptakes aDirectedOn (· ≤ ·)set of partial linear maps, and returns the unique partial linear map on thesSupof their domains that extends all these maps.
Moreover, we define
LinearPMap.graphis the graph of the partial linear map viewed as a submodule ofE × 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.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.