@@ -23,34 +23,34 @@ import Mathlib.LinearAlgebra.QuadraticForm.Isometry
23
23
-/
24
24
25
25
26
- variable {ι R K M M₁ M₂ M₃ V : Type *}
26
+ variable {ι R K M M₁ M₂ M₃ V N : Type *}
27
27
28
28
open QuadraticMap
29
29
30
- namespace QuadraticForm
30
+ namespace QuadraticMap
31
31
32
32
variable [CommSemiring R]
33
- variable [AddCommMonoid M] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃]
34
- variable [Module R M] [Module R M₁] [Module R M₂] [Module R M₃]
33
+ variable [AddCommMonoid M] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] [AddCommMonoid N]
34
+ variable [Module R M] [Module R M₁] [Module R M₂] [Module R M₃] [Module R N]
35
35
36
36
/-- An isometric equivalence between two quadratic spaces `M₁, Q₁` and `M₂, Q₂` over a ring `R`,
37
37
is a linear equivalence between `M₁` and `M₂` that commutes with the quadratic forms. -/
38
38
-- Porting note(#5171): linter not ported yet @[nolint has_nonempty_instance]
39
- structure IsometryEquiv (Q₁ : QuadraticForm R M₁) (Q₂ : QuadraticForm R M₂)
39
+ structure IsometryEquiv (Q₁ : QuadraticMap R M₁ N ) (Q₂ : QuadraticMap R M₂ N )
40
40
extends M₁ ≃ₗ[R] M₂ where
41
41
map_app' : ∀ m, Q₂ (toFun m) = Q₁ m
42
- #align quadratic_form.isometry QuadraticForm .IsometryEquiv
42
+ #align quadratic_form.isometry QuadraticMap .IsometryEquiv
43
43
44
44
/-- Two quadratic forms over a ring `R` are equivalent
45
45
if there exists an isometric equivalence between them:
46
46
a linear equivalence that transforms one quadratic form into the other. -/
47
- def Equivalent (Q₁ : QuadraticForm R M₁) (Q₂ : QuadraticForm R M₂) : Prop :=
47
+ def Equivalent (Q₁ : QuadraticMap R M₁ N ) (Q₂ : QuadraticMap R M₂ N ) : Prop :=
48
48
Nonempty (Q₁.IsometryEquiv Q₂)
49
- #align quadratic_form.equivalent QuadraticForm .Equivalent
49
+ #align quadratic_form.equivalent QuadraticMap .Equivalent
50
50
51
51
namespace IsometryEquiv
52
52
53
- variable {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} {Q₃ : QuadraticForm R M₃}
53
+ variable {Q₁ : QuadraticMap R M₁ N } {Q₂ : QuadraticMap R M₂ N } {Q₃ : QuadraticMap R M₃ N }
54
54
55
55
instance : EquivLike (Q₁.IsometryEquiv Q₂) M₁ M₂ where
56
56
coe f := f.toLinearEquiv
@@ -73,32 +73,32 @@ instance : CoeOut (Q₁.IsometryEquiv Q₂) (M₁ ≃ₗ[R] M₂) :=
73
73
@[simp]
74
74
theorem coe_toLinearEquiv (f : Q₁.IsometryEquiv Q₂) : ⇑(f : M₁ ≃ₗ[R] M₂) = f :=
75
75
rfl
76
- #align quadratic_form.isometry.coe_to_linear_equiv QuadraticForm .IsometryEquiv.coe_toLinearEquiv
76
+ #align quadratic_form.isometry.coe_to_linear_equiv QuadraticMap .IsometryEquiv.coe_toLinearEquiv
77
77
78
78
@[simp]
79
79
theorem map_app (f : Q₁.IsometryEquiv Q₂) (m : M₁) : Q₂ (f m) = Q₁ m :=
80
80
f.map_app' m
81
- #align quadratic_form.isometry.map_app QuadraticForm .IsometryEquiv.map_app
81
+ #align quadratic_form.isometry.map_app QuadraticMap .IsometryEquiv.map_app
82
82
83
83
/-- The identity isometric equivalence between a quadratic form and itself. -/
84
84
@[refl]
85
- def refl (Q : QuadraticForm R M) : Q.IsometryEquiv Q :=
85
+ def refl (Q : QuadraticMap R M N ) : Q.IsometryEquiv Q :=
86
86
{ LinearEquiv.refl R M with map_app' := fun _ => rfl }
87
- #align quadratic_form.isometry.refl QuadraticForm .IsometryEquiv.refl
87
+ #align quadratic_form.isometry.refl QuadraticMap .IsometryEquiv.refl
88
88
89
89
/-- The inverse isometric equivalence of an isometric equivalence between two quadratic forms. -/
90
90
@[symm]
91
91
def symm (f : Q₁.IsometryEquiv Q₂) : Q₂.IsometryEquiv Q₁ :=
92
92
{ (f : M₁ ≃ₗ[R] M₂).symm with
93
93
map_app' := by intro m; rw [← f.map_app]; congr; exact f.toLinearEquiv.apply_symm_apply m }
94
- #align quadratic_form.isometry.symm QuadraticForm .IsometryEquiv.symm
94
+ #align quadratic_form.isometry.symm QuadraticMap .IsometryEquiv.symm
95
95
96
96
/-- The composition of two isometric equivalences between quadratic forms. -/
97
97
@[trans]
98
98
def trans (f : Q₁.IsometryEquiv Q₂) (g : Q₂.IsometryEquiv Q₃) : Q₁.IsometryEquiv Q₃ :=
99
99
{ (f : M₁ ≃ₗ[R] M₂).trans (g : M₂ ≃ₗ[R] M₃) with
100
100
map_app' := by intro m; rw [← f.map_app, ← g.map_app]; rfl }
101
- #align quadratic_form.isometry.trans QuadraticForm .IsometryEquiv.trans
101
+ #align quadratic_form.isometry.trans QuadraticMap .IsometryEquiv.trans
102
102
103
103
/-- Isometric equivalences are isometric maps -/
104
104
@[simps]
@@ -110,43 +110,46 @@ end IsometryEquiv
110
110
111
111
namespace Equivalent
112
112
113
- variable {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} {Q₃ : QuadraticForm R M₃}
113
+ variable {Q₁ : QuadraticMap R M₁ N } {Q₂ : QuadraticMap R M₂ N } {Q₃ : QuadraticMap R M₃ N }
114
114
115
115
@[refl]
116
- theorem refl (Q : QuadraticForm R M) : Q.Equivalent Q :=
116
+ theorem refl (Q : QuadraticMap R M N ) : Q.Equivalent Q :=
117
117
⟨IsometryEquiv.refl Q⟩
118
- #align quadratic_form.equivalent.refl QuadraticForm .Equivalent.refl
118
+ #align quadratic_form.equivalent.refl QuadraticMap .Equivalent.refl
119
119
120
120
@[symm]
121
121
theorem symm (h : Q₁.Equivalent Q₂) : Q₂.Equivalent Q₁ :=
122
122
h.elim fun f => ⟨f.symm⟩
123
- #align quadratic_form.equivalent.symm QuadraticForm .Equivalent.symm
123
+ #align quadratic_form.equivalent.symm QuadraticMap .Equivalent.symm
124
124
125
125
@[trans]
126
126
theorem trans (h : Q₁.Equivalent Q₂) (h' : Q₂.Equivalent Q₃) : Q₁.Equivalent Q₃ :=
127
127
h'.elim <| h.elim fun f g => ⟨f.trans g⟩
128
- #align quadratic_form.equivalent.trans QuadraticForm .Equivalent.trans
128
+ #align quadratic_form.equivalent.trans QuadraticMap .Equivalent.trans
129
129
130
130
end Equivalent
131
131
132
132
/-- A quadratic form composed with a `LinearEquiv` is isometric to itself. -/
133
- def isometryEquivOfCompLinearEquiv (Q : QuadraticForm R M) (f : M₁ ≃ₗ[R] M) :
133
+ def isometryEquivOfCompLinearEquiv (Q : QuadraticMap R M N ) (f : M₁ ≃ₗ[R] M) :
134
134
Q.IsometryEquiv (Q.comp (f : M₁ →ₗ[R] M)) :=
135
135
{ f.symm with
136
136
map_app' := by
137
137
intro
138
138
simp only [comp_apply, LinearEquiv.coe_coe, LinearEquiv.toFun_eq_coe,
139
139
LinearEquiv.apply_symm_apply, f.apply_symm_apply] }
140
- #align quadratic_form.isometry_of_comp_linear_equiv QuadraticForm .isometryEquivOfCompLinearEquiv
140
+ #align quadratic_form.isometry_of_comp_linear_equiv QuadraticMap .isometryEquivOfCompLinearEquiv
141
141
142
142
variable [Finite ι]
143
143
144
144
/-- A quadratic form is isometrically equivalent to its bases representations. -/
145
- noncomputable def isometryEquivBasisRepr (Q : QuadraticForm R M) (v : Basis ι R M) :
145
+ noncomputable def isometryEquivBasisRepr (Q : QuadraticMap R M N ) (v : Basis ι R M) :
146
146
IsometryEquiv Q (Q.basisRepr v) :=
147
147
isometryEquivOfCompLinearEquiv Q v.equivFun.symm
148
- #align quadratic_form.isometry_basis_repr QuadraticForm.isometryEquivBasisRepr
148
+ #align quadratic_form.isometry_basis_repr QuadraticMap.isometryEquivBasisRepr
149
+
150
+ end QuadraticMap
149
151
152
+ namespace QuadraticForm
150
153
variable [Field K] [Invertible (2 : K)] [AddCommGroup V] [Module K V]
151
154
152
155
/-- Given an orthogonal basis, a quadratic form is isometrically equivalent with a weighted sum of
0 commit comments