Partially defined linear maps #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A linear_pmap R E F
or E →ₗ.[R] F
is a linear map from a submodule of E
to F
.
We define a semilattice_inf
with order_bot
instance on this this, and define three operations:
mk_span_singleton
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
.Sup
takes adirected_on (≤)
set of partial linear maps, and returns the unique partial linear map on theSup
of their domains that extends all these maps.
Moreover, we define
linear_pmap.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, linear_pmap.Sup
implies that every chain of linear_pmap
s
is bounded above.
They are also the basis for the theory of unbounded operators.
A linear_pmap R E F
or E →ₗ.[R] F
is a linear map from a submodule of E
to F
.
Instances for linear_pmap
- linear_pmap.has_sizeof_inst
- linear_pmap.has_coe_to_fun
- linear_pmap.has_neg
- linear_pmap.has_le
- linear_pmap.has_inf
- linear_pmap.has_bot
- linear_pmap.inhabited
- linear_pmap.semilattice_inf
- linear_pmap.order_bot
- linear_pmap.has_smul
- linear_pmap.smul_comm_class
- linear_pmap.is_scalar_tower
- linear_pmap.mul_action
- linear_pmap.has_vadd
- linear_pmap.add_action
The unique linear_pmap
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
.
The unique linear_pmap
on span R {x}
that sends a non-zero vector x
to y
.
This version works for modules over division rings.
Equations
- linear_pmap.mk_span_singleton x y hx = linear_pmap.mk_span_singleton' x y _
Projection to the first coordinate as a linear_pmap
Equations
- linear_pmap.fst p p' = {domain := p.prod p', to_fun := (linear_map.fst R E F).comp (p.prod p').subtype}
Projection to the second coordinate as a linear_pmap
Equations
- linear_pmap.snd p p' = {domain := p.prod p', to_fun := (linear_map.snd R E F).comp (p.prod p').subtype}
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
Equations
- linear_pmap.semilattice_inf = {inf := has_inf.inf linear_pmap.has_inf, le := has_le.le linear_pmap.has_le, lt := partial_order.lt._default has_le.le, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, inf_le_left := _, inf_le_right := _, le_inf := _}
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
.
Hypothesis for linear_pmap.sup
holds, if f.domain
is disjoint with g.domain
.
Equations
- linear_pmap.mul_action = {to_has_smul := {smul := has_smul.smul linear_pmap.has_smul}, one_smul := _, mul_smul := _}
Equations
- linear_pmap.add_action = {to_has_vadd := {vadd := has_vadd.vadd linear_pmap.has_vadd}, zero_vadd := _, add_vadd := _}
Extend a linear_pmap
to f.domain ⊔ K ∙ x
.
Equations
- f.sup_span_singleton x y hx = f.sup (linear_pmap.mk_span_singleton x y _) _
Glue a collection of partially defined linear maps to a linear map defined on Sup
of these submodules.
Equations
- linear_pmap.Sup c hc = {domain := has_Sup.Sup (linear_pmap.domain '' c), to_fun := classical.some _}
Restrict a linear map to a submodule, reinterpreting the result as a linear_pmap
.
Compose a linear map with a linear_pmap
Restrict codomain of a linear_pmap
Equations
- f.cod_restrict p H = {domain := f.domain, to_fun := linear_map.cod_restrict p f.to_fun H}
Compose two linear_pmap
s
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
.
Restrict a partially defined linear map to a submodule of E
contained in f.domain
.
Equations
- f.dom_restrict S = {domain := S ⊓ f.domain, to_fun := f.to_fun.comp (submodule.of_le _)}
Graph #
The graph of a linear_pmap
viewed as a submodule on E × F
.
Equations
- f.graph = submodule.map (f.domain.subtype.prod_map linear_map.id) f.to_fun.graph
The graph of z • f
as a pushforward.
The graph of -f
as a pushforward.
Auxiliary definition to unfold the existential quantifier.
Equations
- submodule.val_from_graph hg ha = _.some
Define a linear_pmap
from its graph.
Equations
- g.to_linear_pmap hg = {domain := submodule.map (linear_map.fst R E F) g, to_fun := {to_fun := λ (x : ↥(submodule.map (linear_map.fst R E F) g)), submodule.val_from_graph hg _, map_add' := _, map_smul' := _}}