(Semi-)linear isometries #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define linear_isometry σ₁₂ E E₂
(notation: E →ₛₗᵢ[σ₁₂] E₂
) to be a semilinear
isometric embedding of E
into E₂
and linear_isometry_equiv
(notation: E ≃ₛₗᵢ[σ₁₂] E₂
) to be
a semilinear isometric equivalence between E
and E₂
. The notation for the associated purely
linear concepts is E →ₗᵢ[R] E₂
, E ≃ₗᵢ[R] E₂
, and E →ₗᵢ⋆[R] E₂
, E ≃ₗᵢ⋆[R] E₂
for
the star-linear versions.
We also prove some trivial lemmas and provide convenience constructors.
Since a lot of elementary properties don't require ‖x‖ = 0 → x = 0
we start setting up the
theory for seminormed_add_comm_group
and we specialize to normed_add_comm_group
when needed.
A σ₁₂
-semilinear isometric embedding of a normed R
-module into an R₂
-module.
Instances for linear_isometry
- linear_isometry.has_sizeof_inst
- linear_isometry.semilinear_isometry_class
- linear_isometry.has_coe_to_fun
- linear_isometry.inhabited
- linear_isometry.monoid
- coe : 𝓕 → Π (a : E), (λ (_x : E), E₂) a
- coe_injective' : function.injective semilinear_isometry_class.coe
- map_add : ∀ (f : 𝓕) (x y : E), ⇑f (x + y) = ⇑f x + ⇑f y
- map_smulₛₗ : ∀ (f : 𝓕) (r : R) (x : E), ⇑f (r • x) = ⇑σ₁₂ r • ⇑f x
- norm_map : ∀ (f : 𝓕) (x : E), ‖⇑f x‖ = ‖x‖
semilinear_isometry_class F σ E E₂
asserts F
is a type of bundled σ
-semilinear isometries
E → E₂
.
See also linear_isometry_class F R E E₂
for the case where σ
is the identity map on R
.
A map f
between an R
-module and an S
-module over a ring homomorphism σ : R →+* S
is semilinear if it satisfies the two properties f (x + y) = f x + f y
and
f (c • x) = (σ c) • f x
.
Instances of this typeclass
Instances of other typeclasses for semilinear_isometry_class
- semilinear_isometry_class.has_sizeof_inst
linear_isometry_class F R E E₂
asserts F
is a type of bundled R
-linear isometries
M → M₂
.
This is an abbreviation for semilinear_isometry_class F (ring_hom.id R) E E₂
.
Equations
- semilinear_isometry_class.continuous_semilinear_map_class = {coe := semilinear_isometry_class.coe s, coe_injective' := _, map_add := _, map_smulₛₗ := _, map_continuous := _}
Equations
- linear_isometry.semilinear_isometry_class = {coe := λ (f : E →ₛₗᵢ[σ₁₂] E₂), f.to_linear_map.to_fun, coe_injective' := _, map_add := _, map_smulₛₗ := _, norm_map := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- linear_isometry.has_coe_to_fun = {coe := λ (f : E →ₛₗᵢ[σ₁₂] E₂), f.to_linear_map.to_fun}
See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.
Equations
- linear_isometry.simps.apply σ₁₂ E E₂ h = ⇑h
Interpret a linear isometry as a continuous linear map.
Equations
- f.to_continuous_linear_map = {to_linear_map := f.to_linear_map, cont := _}
The identity linear isometry.
Equations
- linear_isometry.id = {to_linear_map := linear_map.id _inst_29, norm_map' := _}
Equations
- linear_isometry.inhabited = {default := linear_isometry.id _inst_29}
Composition of linear isometries.
Equations
- g.comp f = {to_linear_map := g.to_linear_map.comp f.to_linear_map, norm_map' := _}
Equations
- linear_isometry.monoid = {mul := linear_isometry.comp _inst_29, mul_assoc := _, one := linear_isometry.id _inst_29, one_mul := _, mul_one := _, npow := npow_rec (mul_one_class.to_has_mul (E →ₗᵢ[R] E)), npow_zero' := _, npow_succ' := _}
Construct a linear_isometry
from a linear_map
satisfying isometry
.
Equations
- f.to_linear_isometry hf = {to_linear_map := {to_fun := f.to_fun, map_add' := _, map_smul' := _}, norm_map' := _}
A semilinear isometric equivalence between two normed vector spaces.
Instances for linear_isometry_equiv
- coe : 𝓕 → E → E₂
- inv : 𝓕 → E₂ → E
- left_inv : ∀ (e : 𝓕), function.left_inverse (semilinear_isometry_equiv_class.inv e) (semilinear_isometry_equiv_class.coe e)
- right_inv : ∀ (e : 𝓕), function.right_inverse (semilinear_isometry_equiv_class.inv e) (semilinear_isometry_equiv_class.coe e)
- coe_injective' : ∀ (e g : 𝓕), semilinear_isometry_equiv_class.coe e = semilinear_isometry_equiv_class.coe g → semilinear_isometry_equiv_class.inv e = semilinear_isometry_equiv_class.inv g → e = g
- map_add : ∀ (f : 𝓕) (a b : E), ⇑f (a + b) = ⇑f a + ⇑f b
- map_smulₛₗ : ∀ (f : 𝓕) (r : R) (x : E), ⇑f (r • x) = ⇑σ₁₂ r • ⇑f x
- norm_map : ∀ (f : 𝓕) (x : E), ‖⇑f x‖ = ‖x‖
semilinear_isometry_equiv_class F σ E E₂
asserts F
is a type of bundled σ
-semilinear
isometric equivs E → E₂
.
See also linear_isometry_equiv_class F R E E₂
for the case where σ
is the identity map on R
.
A map f
between an R
-module and an S
-module over a ring homomorphism σ : R →+* S
is semilinear if it satisfies the two properties f (x + y) = f x + f y
and
f (c • x) = (σ c) • f x
.
Instances of this typeclass
Instances of other typeclasses for semilinear_isometry_equiv_class
- semilinear_isometry_equiv_class.has_sizeof_inst
linear_isometry_equiv_class F R E E₂
asserts F
is a type of bundled R
-linear isometries
M → M₂
.
This is an abbreviation for semilinear_isometry_equiv_class F (ring_hom.id R) E E₂
.
Equations
- semilinear_isometry_equiv_class.semilinear_isometry_class 𝓕 = {coe := semilinear_isometry_equiv_class.coe s, coe_injective' := _, map_add := _, map_smulₛₗ := _, norm_map := _}
Equations
- linear_isometry_equiv.semilinear_isometry_equiv_class = {coe := λ (e : E ≃ₛₗᵢ[σ₁₂] E₂), e.to_linear_equiv.to_fun, inv := λ (e : E ≃ₛₗᵢ[σ₁₂] E₂), e.to_linear_equiv.inv_fun, left_inv := _, right_inv := _, coe_injective' := _, map_add := _, map_smulₛₗ := _, norm_map := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- linear_isometry_equiv.has_coe_to_fun = {coe := λ (f : E ≃ₛₗᵢ[σ₁₂] E₂), f.to_linear_equiv.to_fun}
Construct a linear_isometry_equiv
from a linear_equiv
and two inequalities:
∀ x, ‖e x‖ ≤ ‖x‖
and ∀ y, ‖e.symm y‖ ≤ ‖y‖
.
Equations
- linear_isometry_equiv.of_bounds e h₁ h₂ = {to_linear_equiv := e, norm_map' := _}
Reinterpret a linear_isometry_equiv
as a linear_isometry
.
Equations
- e.to_linear_isometry = {to_linear_map := ↑(e.to_linear_equiv), norm_map' := _}
Reinterpret a linear_isometry_equiv
as an isometry_equiv
.
Equations
- e.to_isometry_equiv = {to_equiv := e.to_linear_equiv.to_equiv, isometry_to_fun := _}
Reinterpret a linear_isometry_equiv
as an homeomorph
.
Equations
Interpret a linear_isometry_equiv
as a continuous linear equiv.
Equations
- e.to_continuous_linear_equiv = {to_linear_equiv := {to_fun := e.to_linear_isometry.to_continuous_linear_map.to_linear_map.to_fun, map_add' := _, map_smul' := _, inv_fun := e.to_homeomorph.to_equiv.inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Identity map as a linear_isometry_equiv
.
Equations
- linear_isometry_equiv.refl R E = {to_linear_equiv := linear_equiv.refl R E _inst_29, norm_map' := _}
Linear isometry equiv between a space and its lift to another universe.
Equations
Equations
- linear_isometry_equiv.inhabited = {default := linear_isometry_equiv.refl R E _inst_29}
The inverse linear_isometry_equiv
.
Equations
- e.symm = {to_linear_equiv := e.to_linear_equiv.symm, norm_map' := _}
See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.
Equations
- linear_isometry_equiv.simps.apply σ₁₂ E E₂ h = ⇑h
See Note [custom simps projection]
Equations
- linear_isometry_equiv.simps.symm_apply σ₁₂ E E₂ h = ⇑(h.symm)
Composition of linear_isometry_equiv
s as a linear_isometry_equiv
.
Equations
- e.trans e' = {to_linear_equiv := e.to_linear_equiv.trans e'.to_linear_equiv, norm_map' := _}
Equations
- linear_isometry_equiv.group = {mul := λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁, mul_assoc := _, one := linear_isometry_equiv.refl R E _inst_29, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default (linear_isometry_equiv.refl R E) (λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁) linear_isometry_equiv.group._proof_6 linear_isometry_equiv.group._proof_7, npow_zero' := _, npow_succ' := _, inv := linear_isometry_equiv.symm _inst_29, div := div_inv_monoid.div._default (λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁) linear_isometry_equiv.group._proof_10 (linear_isometry_equiv.refl R E) linear_isometry_equiv.group._proof_11 linear_isometry_equiv.group._proof_12 (div_inv_monoid.npow._default (linear_isometry_equiv.refl R E) (λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁) linear_isometry_equiv.group._proof_6 linear_isometry_equiv.group._proof_7) linear_isometry_equiv.group._proof_13 linear_isometry_equiv.group._proof_14 linear_isometry_equiv.symm, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default (λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁) linear_isometry_equiv.group._proof_16 (linear_isometry_equiv.refl R E) linear_isometry_equiv.group._proof_17 linear_isometry_equiv.group._proof_18 (div_inv_monoid.npow._default (linear_isometry_equiv.refl R E) (λ (e₁ e₂ : E ≃ₗᵢ[R] E), e₂.trans e₁) linear_isometry_equiv.group._proof_6 linear_isometry_equiv.group._proof_7) linear_isometry_equiv.group._proof_19 linear_isometry_equiv.group._proof_20 linear_isometry_equiv.symm, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
Lemmas about mixing the group structure with definitions. Because we have multiple ways to
express linear_isometry_equiv.refl
, linear_isometry_equiv.symm
, and
linear_isometry_equiv.trans
, we want simp lemmas for every combination.
The assumption made here is that if you're using the group structure, you want to preserve it
after simp.
This copies the approach used by the lemmas near equiv.perm.trans_one
.
Reinterpret a linear_isometry_equiv
as a continuous_linear_equiv
.
Equations
- linear_isometry_equiv.continuous_linear_equiv.has_coe_t = {coe := λ (e : E ≃ₛₗᵢ[σ₁₂] E₂), {to_linear_equiv := e.to_linear_equiv, continuous_to_fun := _, continuous_inv_fun := _}}
Construct a linear isometry equiv from a surjective linear isometry.
Equations
- linear_isometry_equiv.of_surjective f hfr = {to_linear_equiv := {to_fun := (linear_equiv.of_bijective f.to_linear_map _).to_fun, map_add' := _, map_smul' := _, inv_fun := (linear_equiv.of_bijective f.to_linear_map _).inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
If a linear isometry has an inverse, it is a linear isometric equivalence.
Equations
- linear_isometry_equiv.of_linear_isometry f g h₁ h₂ = {to_linear_equiv := {to_fun := (linear_equiv.of_linear f.to_linear_map g h₁ h₂).to_fun, map_add' := _, map_smul' := _, inv_fun := (linear_equiv.of_linear f.to_linear_map g h₁ h₂).inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
The negation operation on a normed space E
, considered as a linear isometry equivalence.
Equations
- linear_isometry_equiv.neg R = {to_linear_equiv := {to_fun := (linear_equiv.neg R).to_fun, map_add' := _, map_smul' := _, inv_fun := (linear_equiv.neg R).inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
The natural equivalence (E × E₂) × E₃ ≃ E × (E₂ × E₃)
is a linear isometry.
Equations
- linear_isometry_equiv.prod_assoc R E E₂ E₃ = {to_linear_equiv := {to_fun := ⇑(equiv.prod_assoc E E₂ E₃), map_add' := _, map_smul' := _, inv_fun := ⇑((equiv.prod_assoc E E₂ E₃).symm), left_inv := _, right_inv := _}, norm_map' := _}
If p
is a submodule that is equal to ⊤
, then linear_isometry_equiv.of_top p hp
is the
"identity" equivalence between p
and E
.
Equations
- linear_isometry_equiv.of_top E p hp = {to_linear_equiv := linear_equiv.of_top p hp, norm_map' := _}
linear_equiv.of_eq
as a linear_isometry_equiv
.
Equations
- linear_isometry_equiv.of_eq p q hpq = {to_linear_equiv := {to_fun := (linear_equiv.of_eq p q hpq).to_fun, map_add' := _, map_smul' := _, inv_fun := (linear_equiv.of_eq p q hpq).inv_fun, left_inv := _, right_inv := _}, norm_map' := _}
Two linear isometries are equal if they are equal on basis vectors.
Two linear isometric equivalences are equal if they are equal on basis vectors.
Reinterpret a linear_isometry
as a linear_isometry_equiv
to the range.
Equations
- f.equiv_range = {to_linear_equiv := linear_equiv.of_injective f.to_linear_map _, norm_map' := _}