Skip to content

Commit 9e03908

Browse files
committed
feat(Analysis/Normed): add additional symm lemmas (leanprover-community#41149)
`Equiv` and `LinearEquiv` have the symm lemmas `symm_apply_eq` and `eq_symm_apply`. This adds those lemmas for `LinearIsometryEquiv`.
1 parent 83a4552 commit 9e03908

12 files changed

Lines changed: 92 additions & 3 deletions

File tree

Mathlib/Algebra/AddConstMap/Equiv.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,22 @@ initialize_simps_projections AddConstEquiv (toFun → apply, invFun → symm_app
7676

7777
@[simp] lemma symm_symm (e : G ≃+c[a, b] H) : e.symm.symm = e := rfl
7878

79+
theorem symm_apply_eq (e : G ≃+c[a, b] H) {a b} :
80+
e.symm a = b ↔ a = e b :=
81+
e.toEquiv.symm_apply_eq
82+
83+
theorem eq_symm_apply (e : G ≃+c[a, b] H) {a b} :
84+
b = e.symm a ↔ e b = a :=
85+
e.toEquiv.eq_symm_apply
86+
87+
@[simp] theorem apply_symm_apply (e : G ≃+c[a, b] H) (a) :
88+
e (e.symm a) = a :=
89+
e.toEquiv.apply_symm_apply _
90+
91+
@[simp] theorem symm_apply_apply (e : G ≃+c[a, b] H) (a) :
92+
e.symm (e a) = a :=
93+
e.toEquiv.symm_apply_apply _
94+
7995
/-- The identity map as an `AddConstEquiv`. -/
8096
@[simps! toEquiv apply]
8197
def refl (a : G) : G ≃+c[a, a] G where

Mathlib/Algebra/Group/Action/Equidecomp.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,14 @@ theorem right_inv {f : Equidecomp X G} {x : X} (h : x ∈ f.target) :
206206
@[simp]
207207
theorem symm_symm (f : Equidecomp X G) : f.symm.symm = f := rfl
208208

209+
theorem symm_apply_eq (f : Equidecomp X G) {x y} (hx : x ∈ f.toPartialEquiv.target)
210+
(hy : y ∈ f.toPartialEquiv.source) : f.symm x = y ↔ x = f y :=
211+
f.toPartialEquiv.symm_apply_eq hy hx
212+
213+
theorem eq_symm_apply (f : Equidecomp X G) {x y} (hx : x ∈ f.toPartialEquiv.target)
214+
(hy : y ∈ f.toPartialEquiv.source) : y = f.symm x ↔ f y = x :=
215+
f.toPartialEquiv.eq_symm_apply hy hx
216+
209217
theorem symm_involutive : Function.Involutive (symm : Equidecomp X G → _) := symm_symm
210218

211219
theorem symm_bijective : Function.Bijective (symm : Equidecomp X G → _) := symm_involutive.bijective

Mathlib/Algebra/Lie/Basic.lean

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,12 @@ theorem apply_symm_apply (e : L₁ ≃ₗ⁅R⁆ L₂) : ∀ x, e (e.symm x) = x
614614
theorem symm_apply_apply (e : L₁ ≃ₗ⁅R⁆ L₂) : ∀ x, e.symm (e x) = x :=
615615
e.toLinearEquiv.symm_apply_apply
616616

617+
theorem symm_apply_eq (e : L₁ ≃ₗ⁅R⁆ L₂) {x y} : e.symm x = y ↔ x = e y :=
618+
e.toLinearEquiv.symm_apply_eq
619+
620+
theorem eq_symm_apply (e : L₁ ≃ₗ⁅R⁆ L₂) {x y} : y = e.symm x ↔ e y = x :=
621+
e.toLinearEquiv.eq_symm_apply
622+
617623
@[simp]
618624
theorem refl_symm : (refl : L₁ ≃ₗ⁅R⁆ L₁).symm = refl :=
619625
rfl
@@ -982,7 +988,13 @@ theorem symm_apply_apply (e : M ≃ₗ⁅R,L⁆ N) : ∀ x, e.symm (e x) = x :=
982988

983989
theorem apply_eq_iff_eq_symm_apply {m : M} {n : N} (e : M ≃ₗ⁅R,L⁆ N) :
984990
e m = n ↔ m = e.symm n :=
985-
(e : M ≃ N).apply_eq_iff_eq_symm_apply
991+
e.toEquiv.apply_eq_iff_eq_symm_apply
992+
993+
theorem symm_apply_eq {m : M} {n : N} (e : M ≃ₗ⁅R,L⁆ N) : e.symm n = m ↔ n = e m :=
994+
e.toEquiv.symm_apply_eq
995+
996+
theorem eq_symm_apply {m : M} {n : N} (e : M ≃ₗ⁅R,L⁆ N) : m = e.symm n ↔ e m = n :=
997+
e.toEquiv.eq_symm_apply
986998

987999
@[simp]
9881000
theorem symm_symm (e : M ≃ₗ⁅R,L⁆ N) : e.symm.symm = e := rfl

Mathlib/Algebra/Star/StarAlgHom.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,14 @@ theorem invFun_eq_symm {e : A ≃⋆ₐ[R] B} : EquivLike.inv e = e.symm :=
759759
@[simp]
760760
theorem symm_symm (e : A ≃⋆ₐ[R] B) : e.symm.symm = e := rfl
761761

762+
lemma symm_apply_eq (e : A ≃⋆ₐ[R] B) {x y} :
763+
e.symm x = y ↔ x = e y :=
764+
e.toEquiv.symm_apply_eq
765+
766+
lemma eq_symm_apply (e : A ≃⋆ₐ[R] B) {x y} :
767+
y = e.symm x ↔ e y = x :=
768+
e.toEquiv.eq_symm_apply
769+
762770
theorem symm_bijective : Function.Bijective (symm : (A ≃⋆ₐ[R] B) → B ≃⋆ₐ[R] A) :=
763771
Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
764772

Mathlib/Analysis/Normed/Affine/Isometry.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,12 @@ theorem symm_apply_apply (x : P) : e.symm (e x) = x :=
505505
@[simp]
506506
theorem symm_symm : e.symm.symm = e := rfl
507507

508+
theorem symm_apply_eq {x y} : e.symm x = y ↔ x = e y :=
509+
e.toAffineEquiv.symm_apply_eq
510+
511+
theorem eq_symm_apply {x y} : y = e.symm x ↔ e y = x :=
512+
e.toAffineEquiv.eq_symm_apply
513+
508514
theorem symm_bijective : Bijective (AffineIsometryEquiv.symm : (P₂ ≃ᵃⁱ[𝕜] P) → _) :=
509515
Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
510516

Mathlib/Analysis/Normed/Operator/LinearIsometry.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,12 @@ theorem apply_symm_apply (x : E₂) : e (e.symm x) = x :=
644644
theorem symm_apply_apply (x : E) : e.symm (e x) = x :=
645645
e.toLinearEquiv.symm_apply_apply x
646646

647+
theorem symm_apply_eq {x y} : e.symm x = y ↔ x = e y :=
648+
e.toEquiv.symm_apply_eq
649+
650+
theorem eq_symm_apply {x y} : y = e.symm x ↔ e y = x :=
651+
e.toEquiv.eq_symm_apply
652+
647653
theorem map_eq_zero_iff {x : E} : e x = 0 ↔ x = 0 :=
648654
e.toLinearEquiv.map_eq_zero_iff
649655

Mathlib/Data/PEquiv.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ theorem symm_refl : (PEquiv.refl α).symm = PEquiv.refl α :=
126126
@[simp]
127127
theorem symm_symm (f : α ≃. β) : f.symm.symm = f := rfl
128128

129+
theorem symm_apply_eq (f : α ≃. β) {x : β} {y : α} : f.symm x = y ↔ x = f y := by
130+
rw [eq_some_iff, eq_comm]
131+
132+
theorem eq_symm_apply (f : α ≃. β) {x : β} {y : α} : y = f.symm x ↔ f y = x := by
133+
rw [← eq_some_iff, eq_comm]
134+
129135
theorem symm_bijective : Function.Bijective (PEquiv.symm : (α ≃. β) → β ≃. α) :=
130136
Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
131137

Mathlib/LinearAlgebra/QuadraticForm/IsometryEquiv.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ def toIsometry (g : Q₁.IsometryEquiv Q₂) : Q₁ →qᵢ Q₂ where
102102
@[simp] lemma symm_apply_apply (f : Q₁.IsometryEquiv Q₂) (x : M₁) : f.symm (f x) = x :=
103103
f.toEquiv.symm_apply_apply x
104104

105+
theorem symm_apply_eq (f : Q₁.IsometryEquiv Q₂) {x y} :
106+
f.symm x = y ↔ x = f y :=
107+
f.toEquiv.symm_apply_eq
108+
109+
theorem eq_symm_apply (f : Q₁.IsometryEquiv Q₂) {x y} :
110+
y = f.symm x ↔ f y = x :=
111+
f.toEquiv.eq_symm_apply
112+
105113
@[simp] lemma coe_symm_toLinearEquiv (f : Q₁.IsometryEquiv Q₂) : f.toLinearEquiv.symm = f.symm :=
106114
rfl
107115

Mathlib/Logic/Equiv/PartialEquiv.lean

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,14 @@ theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
200200
theorem target_subset_range : e.target ⊆ range e :=
201201
fun x hx ↦ ⟨e.symm x, right_inv e hx⟩
202202

203-
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
204-
x = e.symm y ↔ e x = y :=
203+
theorem symm_apply_eq {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
204+
e.symm y = x ↔ y = e x :=
205205
fun h => by rw [← e.right_inv hy, h], fun h => by rw [← e.left_inv hx, h]⟩
206206

207+
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
208+
x = e.symm y ↔ e x = y := by
209+
simp [eq_comm, ← symm_apply_eq e hx hy]
210+
207211
protected theorem mapsTo : MapsTo e e.source e.target := fun _ => e.map_source
208212

209213
theorem mapsTo_symm : MapsTo e.symm e.target e.source :=

Mathlib/MeasureTheory/MeasurableSpace/Embedding.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,12 @@ theorem self_trans_symm (e : α ≃ᵐ β) : e.trans e.symm = refl α :=
293293
theorem trans_symm (e₁ : α ≃ᵐ β) (e₂ : β ≃ᵐ γ) : (e₁.trans e₂).symm = e₂.symm.trans (e₁.symm) :=
294294
rfl
295295

296+
theorem symm_apply_eq (e : α ≃ᵐ β) {x y} : e.symm x = y ↔ x = e y :=
297+
e.toEquiv.symm_apply_eq
298+
299+
theorem eq_symm_apply (e : α ≃ᵐ β) {x y} : y = e.symm x ↔ e y = x :=
300+
e.toEquiv.eq_symm_apply
301+
296302
protected theorem surjective (e : α ≃ᵐ β) : Surjective e :=
297303
e.toEquiv.surjective
298304

0 commit comments

Comments
 (0)