Partially defined linear maps #
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_singletondefines 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.Suptakes adirected_on (≤)set of partial linear maps, and returns the unique partial linear map on theSupof their domains that extends all these maps.
Moreover, we define
linear_pmap.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, linear_pmap.Sup implies that every chain of linear_pmaps
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
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.
Equations
- linear_pmap.mk_span_singleton' x y H = {domain := submodule.span R {x}, to_fun := have H : ∀ (c₁ c₂ : R), c₁ • x = c₂ • x → c₁ • y = c₂ • y, from _, {to_fun := λ (z : ↥(submodule.span R {x})), classical.some _ • y, map_add' := _, map_smul' := _}}
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.
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_pmaps
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 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.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' := _}}