Partially defined linear maps #
A linear_pmap R E 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.
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.
Another possible use (not yet in mathlib) would be the theory of unbounded linear operators.
A linear_pmap R E F is a linear map from a submodule of E to F.
Equations
- linear_pmap.has_coe_to_fun = {coe := λ (f : linear_pmap R E F), ⇑(f.to_fun)}
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
- linear_pmap.has_inf = {inf := λ (f g : linear_pmap R E F), {domain := f.eq_locus g, to_fun := f.to_fun.comp (submodule.of_le _)}}
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 := 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.