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:
mkSpanSingleton
defines a partial linear map defined on the span of a singleton.sup
takes two partial linear mapsf
,g
that agree on the intersection of their domains, and returns the unique partial linear map onf.domain ⊔ g.domain
that extends bothf
andg
.sSup
takes aDirectedOn (· ≤ ·)
set of partial linear maps, and returns the unique partial linear map on thesSup
of their domains that extends all these maps.
Moreover, we define
LinearPMap.graph
is 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 LinearPMap
s
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
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 ⋯
Instances For
Projection to the first coordinate as a LinearPMap
Equations
- LinearPMap.fst p p' = { domain := Submodule.prod p p', toFun := 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.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
- LinearPMap.inf = { inf := fun (f g : E →ₗ.[R] F) => { domain := LinearPMap.eqLocus f g, toFun := f.toFun ∘ₗ Submodule.inclusion ⋯ } }
Equations
- LinearPMap.semilatticeInf = SemilatticeInf.mk ⋯ ⋯ ⋯
Equations
- LinearPMap.orderBot = OrderBot.mk ⋯
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
- LinearPMap.sup f g h = { domain := f.domain ⊔ g.domain, toFun := Classical.choose ⋯ }
Instances For
Hypothesis for LinearPMap.sup
holds, if f.domain
is disjoint with g.domain
.
Algebraic operations #
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- LinearPMap.instMulAction = MulAction.mk ⋯ ⋯
Equations
- LinearPMap.instInvolutiveNeg = InvolutiveNeg.mk ⋯
Equations
- LinearPMap.instAdd = { add := fun (f g : E →ₗ.[R] F) => { domain := f.domain ⊓ g.domain, toFun := f.toFun ∘ₗ Submodule.inclusion ⋯ + g.toFun ∘ₗ Submodule.inclusion ⋯ } }
Equations
- LinearPMap.instAddSemigroup = AddSemigroup.mk ⋯
Equations
- LinearPMap.instAddZeroClass = AddZeroClass.mk ⋯ ⋯
Equations
- LinearPMap.instAddMonoid = AddMonoid.mk ⋯ ⋯ nsmulRec ⋯ ⋯
Equations
- LinearPMap.instAddCommMonoid = AddCommMonoid.mk ⋯
Equations
- LinearPMap.instAddAction = AddAction.mk ⋯ ⋯
Equations
- LinearPMap.instSub = { sub := fun (f g : E →ₗ.[R] F) => { domain := f.domain ⊓ g.domain, toFun := f.toFun ∘ₗ Submodule.inclusion ⋯ - g.toFun ∘ₗ Submodule.inclusion ⋯ } }
Equations
- LinearPMap.instSubtractionCommMonoid = SubtractionCommMonoid.mk ⋯
Extend a LinearPMap
to f.domain ⊔ K ∙ x
.
Equations
- LinearPMap.supSpanSingleton f x y hx = LinearPMap.sup f (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
.
Equations
- LinearMap.toPMap f p = { domain := p, toFun := f ∘ₗ Submodule.subtype p }
Instances For
Compose a linear map with a LinearPMap
Equations
- LinearMap.compPMap g f = { domain := f.domain, toFun := 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 LinearPMap
s
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 := f.toFun ∘ₗ Submodule.inclusion ⋯ }
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 ⋯
Instances For
Define a LinearMap
from its graph.
Helper definition for LinearPMap
.
Equations
- Submodule.toLinearPMapAux g hg = { toAddHom := { 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
- 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
.