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
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- ↑f = ⇑f.toFun
Instances For
Equations
- LinearPMap.instCoeFunLinearPMapForAllSubtypeMemSubmoduleToSemiringToAddCommMonoidInstMembershipSetLikeDomain = { coe := LinearPMap.toFun' }
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 (_ : ∀ (c : K), c • x = 0 → c • y = 0)
Instances For
Projection to the first coordinate as a LinearPMap
Equations
- LinearPMap.fst p p' = { domain := Submodule.prod p p', toFun := LinearMap.comp (LinearMap.fst R E F) (Submodule.subtype (Submodule.prod p p')) }
Instances For
Projection to the second coordinate as a LinearPMap
Equations
- LinearPMap.snd p p' = { domain := Submodule.prod p p', toFun := LinearMap.comp (LinearMap.snd R E F) (Submodule.subtype (Submodule.prod p p')) }
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
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Hypothesis for LinearPMap.sup holds, if f.domain is disjoint with g.domain.
Algebraic operations #
Equations
- (_ : SMulCommClass M N (E →ₗ.[R] F)) = (_ : SMulCommClass M N (E →ₗ.[R] F))
Equations
- (_ : IsScalarTower M N (E →ₗ.[R] F)) = (_ : IsScalarTower M N (E →ₗ.[R] F))
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- LinearPMap.instVAdd = { vadd := fun (f : E →ₗ[R] F) (g : E →ₗ.[R] F) => { domain := g.domain, toFun := LinearMap.comp f (Submodule.subtype g.domain) + g.toFun } }
Equations
- One or more equations did not get rendered due to their size.
Extend a LinearPMap to f.domain ⊔ K ∙ x.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Restrict a linear map to a submodule, reinterpreting the result as a LinearPMap.
Equations
- LinearMap.toPMap f p = { domain := p, toFun := LinearMap.comp f (Submodule.subtype p) }
Instances For
Compose a linear map with a LinearPMap
Equations
- LinearMap.compPMap g f = { domain := f.domain, toFun := LinearMap.comp g f.toFun }
Instances For
Restrict codomain of a LinearPMap
Equations
- LinearPMap.codRestrict f p H = { domain := f.domain, toFun := LinearMap.codRestrict p f.toFun H }
Instances For
Compose two LinearPMaps
Equations
- LinearPMap.comp g f H = LinearMap.compPMap g.toFun (LinearPMap.codRestrict f g.domain H)
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
- LinearPMap.domRestrict f S = { domain := S ⊓ f.domain, toFun := LinearMap.comp f.toFun (Submodule.inclusion (_ : S ⊓ f.domain ≤ f.domain)) }
Instances For
Graph #
The graph of a LinearPMap viewed as a submodule on E × F.
Equations
- LinearPMap.graph f = Submodule.map (LinearMap.prodMap (Submodule.subtype f.domain) LinearMap.id) (LinearMap.graph f.toFun)
Instances For
The tuple (x, f x) is contained in the graph of f.
The graph of z • f as a pushforward.
The graph of -f as a pushforward.
The property that f 0 = 0 in terms of the graph.
Auxiliary definition to unfold the existential quantifier.
Equations
- Submodule.valFromGraph hg ha = Exists.choose (_ : ∃ (x : F), (a, x) ∈ g)
Instances For
Define a LinearMap from its graph.
Helper definition for LinearPMap.
Equations
- One or more equations did not get rendered due to their size.
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
- Submodule.toLinearPMap g = { domain := Submodule.map (LinearMap.fst R E F) g, toFun := if hg : ∀ x ∈ g, x.1 = 0 → x.2 = 0 then Submodule.toLinearPMapAux g hg else 0 }
Instances For
The inverse of a LinearPMap.
Equations
Instances For
The graph of the inverse generates a LinearPMap.