Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit fa3b622

Browse files
dupuisfhrmacbeth
andcommitted
refactor(analysis/normed_space/linear_isometry): semilinear isometries (#9551)
Generalize the theory of linear isometries to the semilinear setting. Co-authored-by: Frédéric Dupuis <dupuisf@iro.umontreal.ca> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>
1 parent 9518ce1 commit fa3b622

File tree

2 files changed

+107
-62
lines changed

2 files changed

+107
-62
lines changed

src/analysis/normed_space/linear_isometry.lean

Lines changed: 105 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
/-
22
Copyright (c) 2021 Yury Kudryashov. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
4-
Authors: Yury Kudryashov
4+
Authors: Yury Kudryashov, Frédéric Dupuis, Heather Macbeth
55
-/
66
import analysis.normed_space.basic
77

88
/-!
9-
# Linear isometries
9+
# (Semi-)linear isometries
1010
11-
In this file we define `linear_isometry R E F` (notation: `E →ₗᵢ[R] F`) to be a linear isometric
12-
embedding of `E` into `F` and `linear_isometry_equiv` (notation: `E ≃ₗᵢ[R] F`) to be a linear
13-
isometric equivalence between `E` and `F`.
11+
In this file we define `linear_isometry σ₁₂ E E₂` (notation: `E →ₛₗᵢ[σ₁₂] E₂`) to be a semilinear
12+
isometric embedding of `E` into `E₂` and `linear_isometry_equiv` (notation: `E ≃ₛₗᵢ[σ₁₂] E₂`) to be
13+
a semilinear isometric equivalence between `E` and `E₂`. The notation for the associated purely
14+
linear concepts is `E →ₗᵢ[R] E₂`, `E ≃ₗᵢ[R] E₂`.
1415
1516
We also prove some trivial lemmas and provide convenience constructors.
1617
@@ -19,34 +20,48 @@ theory for `semi_normed_space` and we specialize to `normed_space` when needed.
1920
-/
2021
open function set
2122

22-
variables {R E F G G' E₁ : Type*} [semiring R]
23-
[semi_normed_group E] [semi_normed_group F] [semi_normed_group G] [semi_normed_group G']
24-
[module R E] [module R F] [module R G] [module R G']
25-
[normed_group E₁] [module R E₁]
26-
27-
/-- An `R`-linear isometric embedding of one normed `R`-module into another. -/
28-
structure linear_isometry (R E F : Type*) [semiring R] [semi_normed_group E]
29-
[semi_normed_group F] [module R E] [module R F] extends E →ₗ[R] F :=
23+
variables {R R₂ R₃ R₄ E E₂ E₃ E₄ F : Type*} [semiring R] [semiring R₂] [semiring R₃] [semiring R₄]
24+
{σ₁₂ : R →+* R₂} {σ₂₁ : R₂ →+* R} {σ₁₃ : R →+* R₃} {σ₃₁ : R₃ →+* R} {σ₁₄ : R →+* R₄}
25+
{σ₄₁ : R₄ →+* R} {σ₂₃ : R₂ →+* R₃} {σ₃₂ : R₃ →+* R₂} {σ₂₄ : R₂ →+* R₄} {σ₄₂ : R₄ →+* R₂}
26+
{σ₃₄ : R₃ →+* R₄} {σ₄₃ : R₄ →+* R₃}
27+
[ring_hom_inv_pair σ₁₂ σ₂₁] [ring_hom_inv_pair σ₂₁ σ₁₂]
28+
[ring_hom_inv_pair σ₁₃ σ₃₁] [ring_hom_inv_pair σ₃₁ σ₁₃]
29+
[ring_hom_inv_pair σ₂₃ σ₃₂] [ring_hom_inv_pair σ₃₂ σ₂₃]
30+
[ring_hom_inv_pair σ₁₄ σ₄₁] [ring_hom_inv_pair σ₄₁ σ₁₄]
31+
[ring_hom_inv_pair σ₂₄ σ₄₂] [ring_hom_inv_pair σ₄₂ σ₂₄]
32+
[ring_hom_inv_pair σ₃₄ σ₄₃] [ring_hom_inv_pair σ₄₃ σ₃₄]
33+
[ring_hom_comp_triple σ₁₂ σ₂₃ σ₁₃] [ring_hom_comp_triple σ₁₂ σ₂₄ σ₁₄]
34+
[ring_hom_comp_triple σ₂₃ σ₃₄ σ₂₄] [ring_hom_comp_triple σ₁₃ σ₃₄ σ₁₄]
35+
[ring_hom_comp_triple σ₃₂ σ₂₁ σ₃₁] [ring_hom_comp_triple σ₄₂ σ₂₁ σ₄₁]
36+
[ring_hom_comp_triple σ₄₃ σ₃₂ σ₄₂] [ring_hom_comp_triple σ₄₃ σ₃₁ σ₄₁]
37+
[semi_normed_group E] [semi_normed_group E₂] [semi_normed_group E₃] [semi_normed_group E₄]
38+
[module R E] [module R₂ E₂] [module R₃ E₃] [module R₄ E₄]
39+
[normed_group F] [module R F]
40+
41+
/-- A `σ₁₂`-semilinear isometric embedding of a normed `R`-module into an `R₂`-module. -/
42+
structure linear_isometry (σ₁₂ : R →+* R₂) (E E₂ : Type*) [semi_normed_group E]
43+
[semi_normed_group E₂] [module R E] [module R₂ E₂] extends E →ₛₗ[σ₁₂] E₂ :=
3044
(norm_map' : ∀ x, ∥to_linear_map x∥ = ∥x∥)
3145

32-
notation E ` →ₗᵢ[`:25 R:25 `] `:0 F:0 := linear_isometry R E F
46+
notation E ` →ₛₗᵢ[`:25 σ₁₂:25 `] `:0 E₂:0 := linear_isometry σ₁₂ E E₂
47+
notation E ` →ₗᵢ[`:25 R:25 `] `:0 E₂:0 := linear_isometry (ring_hom.id R) E E₂
3348

3449
namespace linear_isometry
3550

3651
/-- We use `f₁` when we need the domain to be a `normed_space`. -/
37-
variables (f : E →ₗᵢ[R] F) (f₁ : E₁ →ₗᵢ[R] F)
52+
variables (f : E →ₛₗᵢ[σ₁₂] E₂) (f₁ : F →ₛₗᵢ[σ₁₂] E₂)
3853

39-
instance : has_coe_to_fun (E →ₗᵢ[R] F) := ⟨_, λ f, f.to_fun⟩
54+
instance : has_coe_to_fun (E →ₛₗᵢ[σ₁₂] E₂) := ⟨_, λ f, f.to_fun⟩
4055

4156
@[simp] lemma coe_to_linear_map : ⇑f.to_linear_map = f := rfl
4257

43-
lemma to_linear_map_injective : injective (to_linear_map : (E →ₗᵢ[R] F) → (E →ₗ[R] F))
58+
lemma to_linear_map_injective : injective (to_linear_map : (E →ₛₗᵢ[σ₁₂] E₂) → (E →ₛₗ[σ₁₂] E₂))
4459
| ⟨f, _⟩ ⟨g, _⟩ rfl := rfl
4560

46-
lemma coe_fn_injective : injective (λ (f : E →ₗᵢ[R] F) (x : E), f x) :=
61+
lemma coe_fn_injective : injective (λ (f : E →ₛₗᵢ[σ₁₂] E₂) (x : E), f x) :=
4762
linear_map.coe_injective.comp to_linear_map_injective
4863

49-
@[ext] lemma ext {f g : E →ₗᵢ[R] F} (h : ∀ x, f x = g x) : f = g :=
64+
@[ext] lemma ext {f g : E →ₛₗᵢ[σ₁₂] E₂} (h : ∀ x, f x = g x) : f = g :=
5065
coe_fn_injective $ funext h
5166

5267
@[simp] lemma map_zero : f 0 = 0 := f.to_linear_map.map_zero
@@ -55,7 +70,10 @@ coe_fn_injective $ funext h
5570

5671
@[simp] lemma map_sub (x y : E) : f (x - y) = f x - f y := f.to_linear_map.map_sub x y
5772

58-
@[simp] lemma map_smul (c : R) (x : E) : f (c • x) = c • f x := f.to_linear_map.map_smul c x
73+
@[simp] lemma map_smulₛₗ (c : R) (x : E) : f (c • x) = σ₁₂ c • f x := f.to_linear_map.map_smulₛₗ c x
74+
75+
@[simp] lemma map_smul [module R E₂] (f : E →ₗᵢ[R] E₂) (c : R) (x : E) : f (c • x) = c • f x :=
76+
f.to_linear_map.map_smul c x
5977

6078
@[simp] lemma norm_map (x : E) : ∥f x∥ = ∥x∥ := f.norm_map' x
6179

@@ -69,9 +87,9 @@ f.to_linear_map.to_add_monoid_hom.isometry_of_norm f.norm_map
6987

7088
protected lemma injective : injective f₁ := f₁.isometry.injective
7189

72-
@[simp] lemma map_eq_iff {x y : E₁} : f₁ x = f₁ y ↔ x = y := f₁.injective.eq_iff
90+
@[simp] lemma map_eq_iff {x y : F} : f₁ x = f₁ y ↔ x = y := f₁.injective.eq_iff
7391

74-
lemma map_ne {x y : E₁} (h : x ≠ y) : f₁ x ≠ f₁ y := f₁.injective.ne h
92+
lemma map_ne {x y : F} (h : x ≠ y) : f₁ x ≠ f₁ y := f₁.injective.ne h
7593

7694
protected lemma lipschitz : lipschitz_with 1 f := f.isometry.lipschitz
7795

@@ -92,7 +110,7 @@ lemma diam_range : metric.diam (range f) = metric.diam (univ : set E) :=
92110
f.isometry.diam_range
93111

94112
/-- Interpret a linear isometry as a continuous linear map. -/
95-
def to_continuous_linear_map : E →L[R] F := ⟨f.to_linear_map, f.continuous⟩
113+
def to_continuous_linear_map : E →SL[σ₁₂] E₂ := ⟨f.to_linear_map, f.continuous⟩
96114

97115
@[simp] lemma coe_to_continuous_linear_map : ⇑f.to_continuous_linear_map = f := rfl
98116

@@ -112,20 +130,24 @@ def id : E →ₗᵢ[R] E := ⟨linear_map.id, λ x, rfl⟩
112130
instance : inhabited (E →ₗᵢ[R] E) := ⟨id⟩
113131

114132
/-- Composition of linear isometries. -/
115-
def comp (g : F →ₗᵢ[R] G) (f : E →ₗᵢ[R] F) : E →ₗᵢ[R] G :=
133+
def comp (g : E₂ →ₛₗᵢ[σ₂₃] E₃) (f : E →ₛₗᵢ[σ₁₂] E₂) : E →ₛₗᵢ[σ₁₃] E₃ :=
116134
⟨g.to_linear_map.comp f.to_linear_map, λ x, (g.norm_map _).trans (f.norm_map _)⟩
117135

118-
@[simp] lemma coe_comp (g : F →ₗᵢ[R] G) (f : E →ₗᵢ[R] F) :
136+
include σ₁₃
137+
@[simp] lemma coe_comp (g : E₂ →ₛₗᵢ[σ₂₃] E₃) (f : E →ₛₗᵢ[σ₁₂] E₂) :
119138
⇑(g.comp f) = g ∘ f :=
120139
rfl
140+
omit σ₁₃
121141

122-
@[simp] lemma id_comp : (id : F →ₗᵢ[R] F).comp f = f := ext $ λ x, rfl
142+
@[simp] lemma id_comp : (id : E₂ →ₗᵢ[R₂] E₂).comp f = f := ext $ λ x, rfl
123143

124144
@[simp] lemma comp_id : f.comp id = f := ext $ λ x, rfl
125145

126-
lemma comp_assoc (f : G →ₗᵢ[R] G') (g : F →ₗᵢ[R] G) (h : E →ₗᵢ[R] F) :
146+
include σ₁₃ σ₂₄ σ₁₄
147+
lemma comp_assoc (f : E₃ →ₛₗᵢ[σ₃₄] E₄) (g : E₂ →ₛₗᵢ[σ₂₃] E₃) (h : E →ₛₗᵢ[σ₁₂] E₂) :
127148
(f.comp g).comp h = f.comp (g.comp h) :=
128149
rfl
150+
omit σ₁₃ σ₂₄ σ₁₄
129151

130152
instance : monoid (E →ₗᵢ[R] E) :=
131153
{ one := id,
@@ -165,55 +187,59 @@ ker_subtype _
165187

166188
end submodule
167189

168-
/-- A linear isometric equivalence between two normed vector spaces. -/
169-
structure linear_isometry_equiv (R E F : Type*) [semiring R] [semi_normed_group E]
170-
[semi_normed_group F] [module R E] [module R F] extends E ≃ₗ[R] F :=
190+
/-- A semilinear isometric equivalence between two normed vector spaces. -/
191+
structure linear_isometry_equiv (σ₁₂ : R →+* R₂) {σ₂₁ : R₂ →+* R} [ring_hom_inv_pair σ₁₂ σ₂₁]
192+
[ring_hom_inv_pair σ₂₁ σ₁₂] (E E₂ : Type*) [semi_normed_group E] [semi_normed_group E₂]
193+
[module R E] [module R₂ E₂] extends E ≃ₛₗ[σ₁₂] E₂ :=
171194
(norm_map' : ∀ x, ∥to_linear_equiv x∥ = ∥x∥)
172195

173-
notation E ` ≃ₗᵢ[`:25 R:25 `] `:0 F:0 := linear_isometry_equiv R E F
196+
notation E ` ≃ₛₗᵢ[`:25 σ₁₂:25 `] `:0 E₂:0 := linear_isometry_equiv σ₁₂ E E₂
197+
notation E ` ≃ₗᵢ[`:25 R:25 `] `:0 E₂:0 := linear_isometry_equiv (ring_hom.id R) E E₂
174198

175199
namespace linear_isometry_equiv
176200

177-
variables (e : E ≃ₗᵢ[R] F)
201+
variables (e : E ≃ₛₗᵢ[σ₁₂] E₂)
178202

179-
instance : has_coe_to_fun (E ≃ₗᵢ[R] F) := ⟨_, λ f, f.to_fun⟩
203+
include σ₂₁
204+
instance : has_coe_to_fun (E ≃ₛₗᵢ[σ₁₂] E₂) := ⟨_, λ f, f.to_fun⟩
180205

181-
@[simp] lemma coe_mk (e : E ≃ₗ[R] F) (he : ∀ x, ∥e x∥ = ∥x∥) :
206+
@[simp] lemma coe_mk (e : E ≃ₛₗ[σ₁₂] E₂) (he : ∀ x, ∥e x∥ = ∥x∥) :
182207
⇑(mk e he) = e :=
183208
rfl
184209

185-
@[simp] lemma coe_to_linear_equiv (e : E ≃ₗᵢ[R] F) : ⇑e.to_linear_equiv = e := rfl
210+
@[simp] lemma coe_to_linear_equiv (e : E ≃ₛₗᵢ[σ₁₂] E₂) : ⇑e.to_linear_equiv = e := rfl
186211

187-
lemma to_linear_equiv_injective : injective (to_linear_equiv : (E ≃ₗᵢ[R] F) → (E ≃ₗ[R] F))
212+
lemma to_linear_equiv_injective : injective (to_linear_equiv : (E ≃ₛₗᵢ[σ₁₂] E₂) → (E ≃ₛₗ[σ₁₂] E₂))
188213
| ⟨e, _⟩ ⟨_, _⟩ rfl := rfl
189214

190-
@[ext] lemma ext {e e' : E ≃ₗᵢ[R] F} (h : ∀ x, e x = e' x) : e = e' :=
215+
@[ext] lemma ext {e e' : E ≃ₛₗᵢ[σ₁₂] E₂} (h : ∀ x, e x = e' x) : e = e' :=
191216
to_linear_equiv_injective $ linear_equiv.ext h
192217

193218
/-- Construct a `linear_isometry_equiv` from a `linear_equiv` and two inequalities:
194219
`∀ x, ∥e x∥ ≤ ∥x∥` and `∀ y, ∥e.symm y∥ ≤ ∥y∥`. -/
195-
def of_bounds (e : E ≃ₗ[R] F) (h₁ : ∀ x, ∥e x∥ ≤ ∥x∥) (h₂ : ∀ y, ∥e.symm y∥ ≤ ∥y∥) : E ≃ₗᵢ[R] F :=
220+
def of_bounds (e : E ≃ₛₗ[σ₁₂] E₂) (h₁ : ∀ x, ∥e x∥ ≤ ∥x∥) (h₂ : ∀ y, ∥e.symm y∥ ≤ ∥y∥) :
221+
E ≃ₛₗᵢ[σ₁₂] E₂ :=
196222
⟨e, λ x, le_antisymm (h₁ x) $ by simpa only [e.symm_apply_apply] using h₂ (e x)⟩
197223

198224
@[simp] lemma norm_map (x : E) : ∥e x∥ = ∥x∥ := e.norm_map' x
199225

200226
/-- Reinterpret a `linear_isometry_equiv` as a `linear_isometry`. -/
201-
def to_linear_isometry : E →ₗᵢ[R] F := ⟨e.1, e.2
227+
def to_linear_isometry : E →ₛₗᵢ[σ₁₂] E₂ := ⟨e.1, e.2
202228

203229
@[simp] lemma coe_to_linear_isometry : ⇑e.to_linear_isometry = e := rfl
204230

205231
protected lemma isometry : isometry e := e.to_linear_isometry.isometry
206232

207233
/-- Reinterpret a `linear_isometry_equiv` as an `isometric`. -/
208-
def to_isometric : E ≃ᵢ F := ⟨e.to_linear_equiv.to_equiv, e.isometry⟩
234+
def to_isometric : E ≃ᵢ E₂ := ⟨e.to_linear_equiv.to_equiv, e.isometry⟩
209235

210236
@[simp] lemma coe_to_isometric : ⇑e.to_isometric = e := rfl
211237

212-
lemma range_eq_univ (e : E ≃ₗᵢ[R] F) : set.range e = set.univ :=
238+
lemma range_eq_univ (e : E ≃ₛₗᵢ[σ₁₂] E₂) : set.range e = set.univ :=
213239
by { rw ← coe_to_isometric, exact isometric.range_eq_univ _, }
214240

215241
/-- Reinterpret a `linear_isometry_equiv` as an `homeomorph`. -/
216-
def to_homeomorph : E ≃ₜ F := e.to_isometric.to_homeomorph
242+
def to_homeomorph : E ≃ₜ E₂ := e.to_isometric.to_homeomorph
217243

218244
@[simp] lemma coe_to_homeomorph : ⇑e.to_homeomorph = e := rfl
219245

@@ -225,12 +251,14 @@ protected lemma continuous_within_at {s x} : continuous_within_at e s x :=
225251
e.continuous.continuous_within_at
226252

227253
/-- Interpret a `linear_isometry_equiv` as a continuous linear equiv. -/
228-
def to_continuous_linear_equiv : E ≃L[R] F :=
254+
def to_continuous_linear_equiv : E ≃SL[σ₁₂] E₂ :=
229255
{ .. e.to_linear_isometry.to_continuous_linear_map,
230256
.. e.to_homeomorph }
231257

232258
@[simp] lemma coe_to_continuous_linear_equiv : ⇑e.to_continuous_linear_equiv = e := rfl
233259

260+
omit σ₂₁
261+
234262
variables (R E)
235263

236264
/-- Identity map as a `linear_isometry_equiv`. -/
@@ -243,11 +271,11 @@ instance : inhabited (E ≃ₗᵢ[R] E) := ⟨refl R E⟩
243271
@[simp] lemma coe_refl : ⇑(refl R E) = id := rfl
244272

245273
/-- The inverse `linear_isometry_equiv`. -/
246-
def symm : F ≃ₗᵢ[R] E :=
274+
def symm : E₂ ≃ₛₗᵢ[σ₂₁] E :=
247275
⟨e.to_linear_equiv.symm,
248276
λ x, (e.norm_map _).symm.trans $ congr_arg norm $ e.to_linear_equiv.apply_symm_apply x⟩
249277

250-
@[simp] lemma apply_symm_apply (x : F) : e (e.symm x) = x := e.to_linear_equiv.apply_symm_apply x
278+
@[simp] lemma apply_symm_apply (x : E₂) : e (e.symm x) = x := e.to_linear_equiv.apply_symm_apply x
251279
@[simp] lemma symm_apply_apply (x : E) : e.symm (e x) = x := e.to_linear_equiv.symm_apply_apply x
252280
@[simp] lemma map_eq_zero_iff {x : E} : e x = 0 ↔ x = 0 := e.to_linear_equiv.map_eq_zero_iff
253281
@[simp] lemma symm_symm : e.symm.symm = e := ext $ λ x, rfl
@@ -256,23 +284,31 @@ def symm : F ≃ₗᵢ[R] E :=
256284
@[simp] lemma to_isometric_symm : e.to_isometric.symm = e.symm.to_isometric := rfl
257285
@[simp] lemma to_homeomorph_symm : e.to_homeomorph.symm = e.symm.to_homeomorph := rfl
258286

287+
include σ₃₁ σ₃₂
259288
/-- Composition of `linear_isometry_equiv`s as a `linear_isometry_equiv`. -/
260-
def trans (e' : F ≃ₗᵢ[R] G) : E ≃ₗᵢ[R] G :=
289+
def trans (e' : E₂ ≃ₛₗᵢ[σ₂₃] E₃) : E ≃ₛₗᵢ[σ₁₃] E₃ :=
261290
⟨e.to_linear_equiv.trans e'.to_linear_equiv, λ x, (e'.norm_map _).trans (e.norm_map _)⟩
262291

263-
@[simp] lemma coe_trans (e₁ : E ≃ₗᵢ[R] F) (e₂ : F ≃ₗᵢ[R] G) : ⇑(e₁.trans e₂) = e₂ ∘ e₁ := rfl
264-
@[simp] lemma trans_refl : e.trans (refl R F) = e := ext $ λ x, rfl
292+
include σ₁₃ σ₂₁
293+
@[simp] lemma coe_trans (e₁ : E ≃ₛₗᵢ[σ₁₂] E₂) (e₂ : E₂ ≃ₛₗᵢ[σ₂₃] E₃) : ⇑(e₁.trans e₂) = e₂ ∘ e₁ :=
294+
rfl
295+
omit σ₁₃ σ₂₁ σ₃₁ σ₃₂
296+
297+
@[simp] lemma trans_refl : e.trans (refl R₂ E₂) = e := ext $ λ x, rfl
265298
@[simp] lemma refl_trans : (refl R E).trans e = e := ext $ λ x, rfl
266299
@[simp] lemma trans_symm : e.trans e.symm = refl R E := ext e.symm_apply_apply
267-
@[simp] lemma symm_trans : e.symm.trans e = refl R F := ext e.apply_symm_apply
300+
@[simp] lemma symm_trans : e.symm.trans e = refl R₂ E₂ := ext e.apply_symm_apply
268301

269-
@[simp] lemma coe_symm_trans (e₁ : E ≃ₗᵢ[R] F) (e₂ : F ≃ₗᵢ[R] G) :
302+
include σ₁₃ σ₂₁ σ₃₂ σ₃₁
303+
@[simp] lemma coe_symm_trans (e₁ : E ≃ₛₗᵢ[σ₁₂] E₂) (e₂ : E₂ ≃ₛₗᵢ[σ₂₃] E₃) :
270304
⇑(e₁.trans e₂).symm = e₁.symm ∘ e₂.symm :=
271305
rfl
272306

273-
lemma trans_assoc (eEF : E ≃ₗᵢ[R] F) (eFG : F ≃ₗᵢ[R] G) (eGG' : G ≃ₗᵢ[R] G') :
274-
eEF.trans (eFG.trans eGG') = (eEF.trans eFG).trans eGG' :=
307+
include σ₁₄ σ₄₁ σ₄₂ σ₄₃ σ₂₄
308+
lemma trans_assoc (eEE₂ : E ≃ₛₗᵢ[σ₁₂] E₂) (eE₂E₃ : E₂ ≃ₛₗᵢ[σ₂₃] E₃) (eE₃E₄ : E₃ ≃ₛₗᵢ[σ₃₄] E₄) :
309+
eEE₂.trans (eE₂E₃.trans eE₃E₄) = (eEE₂.trans eE₂E₃).trans eE₃E₄ :=
275310
rfl
311+
omit σ₂₁ σ₃₁ σ₄₁ σ₃₂ σ₄₂ σ₄₃ σ₁₃ σ₂₄ σ₁₄
276312

277313
instance : group (E ≃ₗᵢ[R] E) :=
278314
{ mul := λ e₁ e₂, e₂.trans e₁,
@@ -287,25 +323,32 @@ instance : group (E ≃ₗᵢ[R] E) :=
287323
@[simp] lemma coe_mul (e e' : E ≃ₗᵢ[R] E) : ⇑(e * e') = e ∘ e' := rfl
288324
@[simp] lemma coe_inv (e : E ≃ₗᵢ[R] E) : ⇑(e⁻¹) = e.symm := rfl
289325

326+
include σ₂₁
327+
290328
/-- Reinterpret a `linear_isometry_equiv` as a `continuous_linear_equiv`. -/
291-
instance : has_coe_t (E ≃ₗᵢ[R] F) (E ≃L[R] F) :=
329+
instance : has_coe_t (E ≃ₛₗᵢ[σ₁₂] E₂) (E ≃SL[σ₁₂] E₂) :=
292330
⟨λ e, ⟨e.to_linear_equiv, e.continuous, e.to_isometric.symm.continuous⟩⟩
293331

294-
instance : has_coe_t (E ≃ₗᵢ[R] F) (E →L[R] F) := ⟨λ e, ↑(e : E ≃L[R] F)⟩
332+
instance : has_coe_t (E ≃ₛₗᵢ[σ₁₂] E₂) (E →SL[σ₁₂] E₂) := ⟨λ e, ↑(e : E ≃SL[σ₁₂] E₂)⟩
295333

296-
@[simp] lemma coe_coe : ⇑(e : E ≃L[R] F) = e := rfl
334+
@[simp] lemma coe_coe : ⇑(e : E ≃SL[σ₁₂] E₂) = e := rfl
297335

298-
@[simp] lemma coe_coe' : ((e : E ≃L[R] F) : E →L[R] F) = e := rfl
336+
@[simp] lemma coe_coe' : ((e : E ≃SL[σ₁₂] E₂) : E →SL[σ₁₂] E₂) = e := rfl
299337

300-
@[simp] lemma coe_coe'' : ⇑(e : E →L[R] F) = e := rfl
338+
@[simp] lemma coe_coe'' : ⇑(e : E →SL[σ₁₂] E₂) = e := rfl
339+
340+
omit σ₂₁
301341

302342
@[simp] lemma map_zero : e 0 = 0 := e.1.map_zero
303343

304344
@[simp] lemma map_add (x y : E) : e (x + y) = e x + e y := e.1.map_add x y
305345

306346
@[simp] lemma map_sub (x y : E) : e (x - y) = e x - e y := e.1.map_sub x y
307347

308-
@[simp] lemma map_smul (c : R) (x : E) : e (c • x) = c • e x := e.1.map_smul c x
348+
@[simp] lemma map_smulₛₗ (c : R) (x : E) : e (c • x) = σ₁₂ c • e x := e.1.map_smulₛₗ c x
349+
350+
@[simp] lemma map_smul [module R E₂] {e : E ≃ₗᵢ[R] E₂} (c : R) (x : E) : e (c • x) = c • e x :=
351+
e.1.map_smul c x
309352

310353
@[simp] lemma nnnorm_map (x : E) : nnnorm (e x) = nnnorm x := e.to_linear_isometry.nnnorm_map x
311354

@@ -343,12 +386,14 @@ e.isometry.comp_continuous_on_iff
343386
continuous (e ∘ f) ↔ continuous f :=
344387
e.isometry.comp_continuous_iff
345388

389+
include σ₂₁
346390
/-- Construct a linear isometry equiv from a surjective linear isometry. -/
347-
noncomputable def of_surjective (f : E₁ →ₗᵢ[R] F)
391+
noncomputable def of_surjective (f : F →ₛₗᵢ[σ₁₂] E₂)
348392
(hfr : function.surjective f) :
349-
E₁ ≃ₗᵢ[R] F :=
393+
F ≃ₛₗᵢ[σ₁₂] E₂ :=
350394
{ norm_map' := f.norm_map,
351395
.. linear_equiv.of_bijective f.to_linear_map f.injective hfr }
396+
omit σ₂₁
352397

353398
variables (R)
354399
/-- The negation operation on a normed space `E`, considered as a linear isometry equivalence. -/

src/analysis/normed_space/multilinear.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,8 @@ def prodL :
446446
/-- `continuous_multilinear_map.pi` as a `linear_isometry_equiv`. -/
447447
def piₗᵢ {ι' : Type v'} [fintype ι'] {E' : ι' → Type wE'} [Π i', normed_group (E' i')]
448448
[Π i', normed_space 𝕜 (E' i')] :
449-
@linear_isometry_equiv 𝕜 (Π i', continuous_multilinear_map 𝕜 E (E' i'))
450-
(continuous_multilinear_map 𝕜 E (Π i, E' i)) _ _ _
449+
@linear_isometry_equiv 𝕜 𝕜 _ _ (ring_hom.id 𝕜) _ _ _
450+
(Π i', continuous_multilinear_map 𝕜 E (E' i')) (continuous_multilinear_map 𝕜 E (Π i, E' i)) _ _
451451
(@pi.module ι' _ 𝕜 _ _ (λ i', infer_instance)) _ :=
452452
{ to_linear_equiv :=
453453
-- note: `pi_linear_equiv` does not unify correctly here, presumably due to issues with dependent

0 commit comments

Comments
 (0)