@@ -33,7 +33,7 @@ variable [CharP F 2]
33
33
omit [E.IsElliptic] [E'.IsElliptic] in
34
34
private lemma exists_variableChange_of_char_two_of_j_ne_zero
35
35
[E.IsCharTwoJNeZeroNF] [E'.IsCharTwoJNeZeroNF] (heq : E.a₆ = E'.a₆) :
36
- ∃ C : VariableChange F, E.variableChange C = E' := by
36
+ ∃ C : VariableChange F, C • E = E' := by
37
37
obtain ⟨s, hs⟩ := IsSepClosed.exists_root_C_mul_X_pow_add_C_mul_X_add_C' 2 2
38
38
1 1 (E.a₂ + E'.a₂) (by norm_num) (by norm_num) one_ne_zero
39
39
use ⟨1 , 0 , s, 0 ⟩
@@ -51,8 +51,7 @@ private lemma exists_variableChange_of_char_two_of_j_ne_zero
51
51
ring1
52
52
53
53
private lemma exists_variableChange_of_char_two_of_j_eq_zero
54
- [E.IsCharTwoJEqZeroNF] [E'.IsCharTwoJEqZeroNF] :
55
- ∃ C : VariableChange F, E.variableChange C = E' := by
54
+ [E.IsCharTwoJEqZeroNF] [E'.IsCharTwoJEqZeroNF] : ∃ C : VariableChange F, C • E = E' := by
56
55
have ha₃ := E.Δ'.ne_zero
57
56
rw [E.coe_Δ', Δ_of_isCharTwoJEqZeroNF_of_char_two, pow_ne_zero_iff (Nat.succ_ne_zero _)] at ha₃
58
57
have ha₃' := E'.Δ'.ne_zero
@@ -85,29 +84,26 @@ private lemma exists_variableChange_of_char_two_of_j_eq_zero
85
84
linear_combination ht - (t ^ 2 + E.a₃ * t) * CharP.cast_eq_zero F 2
86
85
87
86
private lemma exists_variableChange_of_char_two (heq : E.j = E'.j) :
88
- ∃ C : VariableChange F, E.variableChange C = E' := by
87
+ ∃ C : VariableChange F, C • E = E' := by
89
88
obtain ⟨C, _ | _⟩ := E.exists_variableChange_isCharTwoNF
90
89
· obtain ⟨C', _ | _⟩ := E'.exists_variableChange_isCharTwoNF
91
90
· simp_rw [← variableChange_j E C, ← variableChange_j E' C',
92
91
j_of_isCharTwoJNeZeroNF_of_char_two, one_div, inv_inj] at heq
93
92
obtain ⟨C'', hC⟩ := exists_variableChange_of_char_two_of_j_ne_zero _ _ heq
94
- use (C'.inv.comp C'').comp C
95
- rw [variableChange_comp, variableChange_comp, hC, ← variableChange_comp,
96
- VariableChange.comp_left_inv, variableChange_id]
97
- · have h := (E.variableChange C).j_ne_zero_of_isCharTwoJNeZeroNF_of_char_two
93
+ use C'⁻¹ * C'' * C
94
+ rw [mul_smul, mul_smul, hC, ← mul_smul, inv_mul_cancel, one_smul]
95
+ · have h := (C • E).j_ne_zero_of_isCharTwoJNeZeroNF_of_char_two
98
96
rw [variableChange_j, heq, ← variableChange_j E' C',
99
97
j_of_isCharTwoJEqZeroNF_of_char_two] at h
100
98
exact False.elim (h rfl)
101
99
· obtain ⟨C', _ | _⟩ := E'.exists_variableChange_isCharTwoNF
102
- · have h := (E'.variableChange C ').j_ne_zero_of_isCharTwoJNeZeroNF_of_char_two
100
+ · have h := (C' • E ').j_ne_zero_of_isCharTwoJNeZeroNF_of_char_two
103
101
rw [variableChange_j, ← heq, ← variableChange_j E C,
104
102
j_of_isCharTwoJEqZeroNF_of_char_two] at h
105
103
exact False.elim (h rfl)
106
- · obtain ⟨C'', hC⟩ := exists_variableChange_of_char_two_of_j_eq_zero
107
- (E.variableChange C) (E'.variableChange C')
108
- use (C'.inv.comp C'').comp C
109
- rw [variableChange_comp, variableChange_comp, hC, ← variableChange_comp,
110
- VariableChange.comp_left_inv, variableChange_id]
104
+ · obtain ⟨C'', hC⟩ := exists_variableChange_of_char_two_of_j_eq_zero (C • E) (C' • E')
105
+ use C'⁻¹ * C'' * C
106
+ rw [mul_smul, mul_smul, hC, ← mul_smul, inv_mul_cancel, one_smul]
111
107
112
108
end CharTwo
113
109
@@ -117,7 +113,7 @@ variable [CharP F 3]
117
113
118
114
private lemma exists_variableChange_of_char_three_of_j_ne_zero
119
115
[E.IsCharThreeJNeZeroNF] [E'.IsCharThreeJNeZeroNF] (heq : E.j = E'.j) :
120
- ∃ C : VariableChange F, E.variableChange C = E' := by
116
+ ∃ C : VariableChange F, C • E = E' := by
121
117
have h := E.Δ'.ne_zero
122
118
rw [E.coe_Δ', Δ_of_isCharThreeJNeZeroNF_of_char_three, mul_ne_zero_iff, neg_ne_zero,
123
119
pow_ne_zero_iff three_ne_zero] at h
@@ -153,8 +149,7 @@ private lemma exists_variableChange_of_char_three_of_j_ne_zero
153
149
linear_combination heq
154
150
155
151
private lemma exists_variableChange_of_char_three_of_j_eq_zero
156
- [E.IsShortNF] [E'.IsShortNF] :
157
- ∃ C : VariableChange F, E.variableChange C = E' := by
152
+ [E.IsShortNF] [E'.IsShortNF] : ∃ C : VariableChange F, C • E = E' := by
158
153
have ha₄ := E.Δ'.ne_zero
159
154
rw [E.coe_Δ', Δ_of_isShortNF_of_char_three, neg_ne_zero, pow_ne_zero_iff three_ne_zero] at ha₄
160
155
have ha₄' := E'.Δ'.ne_zero
@@ -187,34 +182,31 @@ private lemma exists_variableChange_of_char_three_of_j_eq_zero
187
182
linear_combination hr
188
183
189
184
private lemma exists_variableChange_of_char_three (heq : E.j = E'.j) :
190
- ∃ C : VariableChange F, E.variableChange C = E' := by
185
+ ∃ C : VariableChange F, C • E = E' := by
191
186
obtain ⟨C, _ | _⟩ := E.exists_variableChange_isCharThreeNF
192
187
· obtain ⟨C', _ | _⟩ := E'.exists_variableChange_isCharThreeNF
193
188
· rw [← variableChange_j E C, ← variableChange_j E' C'] at heq
194
189
obtain ⟨C'', hC⟩ := exists_variableChange_of_char_three_of_j_ne_zero _ _ heq
195
- use (C'.inv.comp C'').comp C
196
- rw [variableChange_comp, variableChange_comp, hC, ← variableChange_comp,
197
- VariableChange.comp_left_inv, variableChange_id]
198
- · have h := (E.variableChange C).j_ne_zero_of_isCharThreeJNeZeroNF_of_char_three
190
+ use C'⁻¹ * C'' * C
191
+ rw [mul_smul, mul_smul, hC, ← mul_smul, inv_mul_cancel, one_smul]
192
+ · have h := (C • E).j_ne_zero_of_isCharThreeJNeZeroNF_of_char_three
199
193
rw [variableChange_j, heq, ← variableChange_j E' C', j_of_isShortNF_of_char_three] at h
200
194
exact False.elim (h rfl)
201
195
· obtain ⟨C', _ | _⟩ := E'.exists_variableChange_isCharThreeNF
202
- · have h := (E'.variableChange C ').j_ne_zero_of_isCharThreeJNeZeroNF_of_char_three
196
+ · have h := (C' • E ').j_ne_zero_of_isCharThreeJNeZeroNF_of_char_three
203
197
rw [variableChange_j, ← heq, ← variableChange_j E C, j_of_isShortNF_of_char_three] at h
204
198
exact False.elim (h rfl)
205
- · obtain ⟨C'', hC⟩ := exists_variableChange_of_char_three_of_j_eq_zero
206
- (E.variableChange C) (E'.variableChange C')
207
- use (C'.inv.comp C'').comp C
208
- rw [variableChange_comp, variableChange_comp, hC, ← variableChange_comp,
209
- VariableChange.comp_left_inv, variableChange_id]
199
+ · obtain ⟨C'', hC⟩ := exists_variableChange_of_char_three_of_j_eq_zero (C • E) (C' • E')
200
+ use C'⁻¹ * C'' * C
201
+ rw [mul_smul, mul_smul, hC, ← mul_smul, inv_mul_cancel, one_smul]
210
202
211
203
end CharThree
212
204
213
205
section CharNeTwoOrThree
214
206
215
207
private lemma exists_variableChange_of_char_ne_two_or_three
216
208
{p : ℕ} [CharP F p] (hchar2 : p ≠ 2 ) (hchar3 : p ≠ 3 ) (heq : E.j = E'.j) :
217
- ∃ C : VariableChange F, E.variableChange C = E' := by
209
+ ∃ C : VariableChange F, C • E = E' := by
218
210
replace hchar2 : (2 : F) ≠ 0 := CharP.cast_ne_zero_of_ne_of_prime F Nat.prime_two hchar2
219
211
replace hchar3 : (3 : F) ≠ 0 := CharP.cast_ne_zero_of_ne_of_prime F Nat.prime_three hchar3
220
212
haveI := NeZero.mk hchar2
@@ -232,13 +224,12 @@ private lemma exists_variableChange_of_char_ne_two_or_three
232
224
· obtain ⟨C, hE⟩ := E.exists_variableChange_isShortNF
233
225
rw [← variableChange_j E C] at heq
234
226
obtain ⟨C', hC⟩ := this _ heq hE
235
- exact ⟨C'.comp C, by rwa [variableChange_comp ]⟩
227
+ exact ⟨C' * C, by rwa [mul_smul ]⟩
236
228
wlog _ : E'.IsShortNF generalizing E'
237
229
· obtain ⟨C, hE'⟩ := E'.exists_variableChange_isShortNF
238
230
rw [← variableChange_j E' C] at heq
239
231
obtain ⟨C', hC⟩ := this _ heq hE'
240
- exact ⟨C.inv.comp C', by rw [variableChange_comp, hC, ← variableChange_comp,
241
- VariableChange.comp_left_inv, variableChange_id]⟩
232
+ exact ⟨C⁻¹ * C', by rw [mul_smul, hC, ← mul_smul, inv_mul_cancel, one_smul]⟩
242
233
simp_rw [j, Units.val_inv_eq_inv_val, inv_mul_eq_div,
243
234
div_eq_div_iff E.Δ'.ne_zero E'.Δ'.ne_zero, coe_Δ', Δ_of_isShortNF, c₄_of_isShortNF] at heq
244
235
replace heq : E.a₄ ^ 3 * E'.a₆ ^ 2 = E'.a₄ ^ 3 * E.a₆ ^ 2 := by
@@ -335,8 +326,7 @@ end CharNeTwoOrThree
335
326
/-- If there are two elliptic curves with the same `j`-invariants defined over a
336
327
separably closed field, then there exists a change of variables over that field which change
337
328
one curve into another. -/
338
- theorem exists_variableChange_of_j_eq (heq : E.j = E'.j) :
339
- ∃ C : VariableChange F, E.variableChange C = E' := by
329
+ theorem exists_variableChange_of_j_eq (heq : E.j = E'.j) : ∃ C : VariableChange F, C • E = E' := by
340
330
obtain ⟨p, _⟩ := CharP.exists F
341
331
by_cases hchar2 : p = 2
342
332
· subst hchar2
0 commit comments