Skip to content

Commit b9d36a5

Browse files
committed
more fixes and tweaks
1 parent 5022710 commit b9d36a5

File tree

4 files changed

+96
-84
lines changed

4 files changed

+96
-84
lines changed

ECTate/Algebra/EllipticCurve/Kronecker.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ lemma div2_succ_le_self (x : ℕ) : Nat.succ x / 2 ≤ x := by
3434
cases x with
3535
| zero => simp
3636
| succ x =>
37-
have ssxd2_le_s_sxd2 := div_succ_le_succ_div (Nat.succ x) 1
38-
have s_sxd2_le_sx := succ_le_of_lt (div2_lt_self (succ_pos x))
39-
exact le_trans ssxd2_le_s_sxd2 s_sxd2_le_sx
37+
exact (div_succ_le_succ_div (Nat.succ x) 1).trans (succ_le_of_lt (div2_lt_self (succ_pos x)))
4038

4139

4240
def val_bin_nat (x : ℕ) : ℕ × ℕ :=

ECTate/Algebra/EllipticCurve/LocalEC.lean

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -96,25 +96,25 @@ def pi_scaling (evr : ENatValRing p) (e : Model R) : Model R :=
9696
open SurjVal
9797

9898
lemma pi_scaling_of_b2 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1 ≥ 1)
99-
(h2 : evr.valtn e.a2 ≥ 2) :
99+
(h2 : evr.valtn e.a2 ≥ 2) :
100100
evr.sub_val 2 e.b2 = evr.sub_val 1 e.a1 * evr.sub_val 1 e.a1 + 4 * evr.sub_val 2 e.a2 := by
101-
rw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
101+
erw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
102102
←evr.sub_val_mul_right h2, ←evr.sub_val_add _ _]
103103
. rfl
104104
. exact val_mul_ge_of_both_ge evr.valtn h1 h1
105105
. exact val_mul_ge_of_right_ge evr.valtn h2
106106

107107
lemma pi_scaling_of_b4 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1 ≥ 1)
108-
(h3 : evr.valtn e.a3 ≥ 3) (h4 : evr.valtn e.a4 ≥ 4) :
108+
(h3 : evr.valtn e.a3 ≥ 3) (h4 : evr.valtn e.a4 ≥ 4) :
109109
evr.sub_val 4 e.b4 = evr.sub_val 1 e.a1 * evr.sub_val 3 e.a3 + 2 * evr.sub_val 4 e.a4 := by
110-
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
110+
erw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
111111
←evr.sub_val_mul_right h4, ←evr.sub_val_add _ _]
112112
. rfl
113113
. exact val_mul_ge_of_both_ge evr.valtn h1 h3
114114
. exact val_mul_ge_of_right_ge evr.valtn h4
115115

116116
lemma pi_scaling_of_b6 (evr : ENatValRing p) (e : Model R) (h3 : evr.valtn e.a3 ≥ 3)
117-
(h6 : evr.valtn e.a6 ≥ 6) :
117+
(h6 : evr.valtn e.a6 ≥ 6) :
118118
evr.sub_val 6 e.b6 = evr.sub_val 3 e.a3 * evr.sub_val 3 e.a3 + 4 * evr.sub_val 6 e.a6 := by
119119
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h3, evr.sub_val_sub_val,
120120
←evr.sub_val_mul_right h6, ←evr.sub_val_add _ _]
@@ -131,25 +131,24 @@ lemma pi_scaling_of_b8 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1
131131
+ evr.sub_val 2 e.a2 * evr.sub_val 3 e.a3 * evr.sub_val 3 e.a3
132132
- evr.sub_val 4 e.a4 * evr.sub_val 4 e.a4 :=
133133
by
134-
rw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
134+
erw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
135135
←evr.sub_val_mul_right h6, ←evr.sub_val_mul_left (val_mul_ge_of_both_ge evr.valtn h1 h1), evr.sub_val_sub_val]
136-
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
136+
erw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
137137
←evr.sub_val_mul_right h4, ←evr.sub_val_mul_left (val_mul_ge_of_both_ge evr.valtn h1 h3), evr.sub_val_sub_val]
138138
rw [←evr.sub_val_mul_right h2, ←evr.sub_val_mul_right h6,
139139
←evr.sub_val_mul_left (val_mul_ge_of_right_ge evr.valtn h2), evr.sub_val_sub_val]
140-
rw [←evr.sub_val_mul_left h2, ←evr.sub_val_mul_right h3, ←evr.sub_val_mul_right h3,
140+
erw [←evr.sub_val_mul_left h2, ←evr.sub_val_mul_right h3, ←evr.sub_val_mul_right h3,
141141
evr.sub_val_sub_val, ←evr.sub_val_mul_left (val_mul_ge_of_both_ge evr.valtn h2 h3), evr.sub_val_sub_val]
142142
rw [←evr.sub_val_mul_right h4, ←evr.sub_val_mul_left h4, evr.sub_val_sub_val]
143143
have h116 := val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h1 h1) h6
144144
have h134 := (val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h1 h3) h4)
145145
have h26 := val_mul_ge_of_both_ge evr.valtn (@val_mul_ge_of_right_ge R _ _ 2 p evr.valtn 4 e.a2 h2) h6
146146
have h233 := val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h2 h3) h3
147147
have h44 := val_mul_ge_of_both_ge evr.valtn h4 h4
148-
simp only [add_ofN] at h116 h134 h44 h26 h233
149148
rw [←val_neg] at h134
150149
rw [←val_neg] at h44
151150

152-
rw [sub_eq_add_neg, sub_eq_add_neg, ←evr.sub_val_neg, ←evr.sub_val_neg,
151+
erw [sub_eq_add_neg, sub_eq_add_neg, ←evr.sub_val_neg, ←evr.sub_val_neg,
153152
←evr.sub_val_add h116 h134, ←evr.sub_val_add _ h26, ←evr.sub_val_add _ h233,
154153
←evr.sub_val_add _ h44, ←sub_eq_add_neg, ←sub_eq_add_neg]
155154
. rfl
@@ -357,18 +356,18 @@ lemma pi_scaling_val_discr_to_nat {p : R} (evr : ENatValRing p) (e : ValidModel
357356
(h3 : evr.valtn e.a3 ≥ 3) (h4 : evr.valtn e.a4 ≥ 4) (h6 : evr.valtn e.a6 ≥ 6) :
358357
val_discr_to_nat evr.valtn (pi_scaling evr e h1 h2 h3 h4 h6) = val_discr_to_nat evr.valtn e - 12 :=
359358
by
360-
apply_fun (Nat.cast : ℕ → ℕ∞) using Nat.cast_injective (R := ℕ∞) -- TODO this shouldnt need to be specified
359+
apply_fun (Nat.cast : ℕ → ℕ∞) using Nat.cast_injective (R := ℕ∞) -- TODO this shouldnt need to be specified should be fixed in mathlib4#6733
361360
rw [ofN_val_discr_to_nat, pi_scaling_toModel evr e h1 h2 h3 h4 h6,
362361
Model.discr_of_pi_scaling _ _ h1 h2 h3 h4 h6, evr.val_sub_val_eq]
363362
norm_cast
364363
rw [ofN_val_discr_to_nat]
365364

366365
lemma v_b2_of_v_a1_a2 {p : R} (valp : SurjVal p) (e : ValidModel R) (h1 : valp e.a1 ≥ 1)
367366
(h2 : valp e.a2 = 1) : valp e.b2 ≥ 1 :=
368-
val_add_ge_of_ge valp (val_mul_ge_of_left_ge valp h1) (val_mul_ge_of_right_ge valp (le_of_eq h2.symm))
367+
val_add_ge_of_ge valp (val_mul_ge_of_left_ge valp h1) (val_mul_ge_of_right_ge valp (le_of_eq h2.symm))
369368

370369
lemma v_b4_of_v_a1_a3_a4 {p : R} (valp : SurjVal p) (e : ValidModel R) (h1 : valp e.a1 ≥ 1)
371-
(h3 : valp e.a3 ≥ q) (h4 : valp e.a4 ≥ q + 1) : valp e.b4 ≥ q + 1 := by
370+
(h3 : valp e.a3 ≥ q) (h4 : valp e.a4 ≥ q + 1) : valp e.b4 ≥ q + 1 := by
372371
apply val_add_ge_of_ge valp <;>
373372
. simp
374373
elinarith
@@ -378,7 +377,7 @@ lemma v_b4_of_v_a1_a3_a4 {p : R} (valp : SurjVal p) (e : ValidModel R) (h1 : val
378377
-- . exact (val_mul_ge_of_right_ge valp h4)
379378

380379
lemma v_b6_of_v_a3_a6 {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (h3 : valp e.a3 ≥ q)
381-
(h6 : valp e.a6 ≥ 2 * q) : valp e.b6 ≥ 2 * q := by
380+
(h6 : valp e.a6 ≥ 2 * q) : valp e.b6 ≥ 2 * q := by
382381
-- rw [Model.b6]
383382
apply val_add_ge_of_ge valp <;>
384383
. simp
@@ -393,8 +392,8 @@ lemma v_b6_of_v_a3_a6 {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (h
393392
-- . exact (val_mul_ge_of_right_ge valp h6)
394393

395394
lemma v_b8_of_v_ai {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (h1 : valp e.a1 ≥ 1)
396-
(h2 : valp e.a2 = 1) (h3 : valp e.a3 ≥ q) (h4 : valp e.a4 ≥ q + 1)
397-
(h6 : valp e.a6 ≥ 2 * q) : valp e.b8 ≥ 2 * q + 1 := by
395+
(h2 : valp e.a2 = 1) (h3 : valp e.a3 ≥ q) (h4 : valp e.a4 ≥ q + 1)
396+
(h6 : valp e.a6 ≥ 2 * q) : valp e.b8 ≥ 2 * q + 1 := by
398397
-- rw [Model.b8]
399398
-- rw [sub_eq_add_neg, sub_eq_add_neg]
400399
apply_rules [val_add_ge_of_ge, val_sub_ge_of_ge] <;>
@@ -433,12 +432,12 @@ lemma v_b8_of_v_ai {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (h1 :
433432
-- exact le_of_succ_le h4
434433

435434

436-
private lemma aux (n q : ℕ) (h : 1 < q) (hn : 2 * q ≤ n) : 2 * q + 3 ≤ n + n :=
437-
by linarith
435+
-- private lemma aux (n q : ℕ) (h : 1 < q) (hn : 2 * q ≤ n) : 2 * q + 3 ≤ n + n :=
436+
-- by linarith
438437

439-
private lemma aux' (n q m t : ℕ) (h : 1 < q) (h2': 1 ≤ n) (h4': q + 1 ≤ m) (h6': 2 * q ≤ t) :
440-
2 * q + 3 ≤ n + (m + t) :=
441-
by linarith
438+
-- private lemma aux' (n q m t : ℕ) (h : 1 < q) (h2': 1 ≤ n) (h4': q + 1 ≤ m) (h6': 2 * q ≤ t) :
439+
-- 2 * q + 3 ≤ n + (m + t) :=
440+
-- by linarith
442441

443442
-- set_option trace.profiler true in
444443
lemma v_discr_of_v_ai {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (hq : q > 1)

ECTate/Algebra/EllipticCurve/TateInt.lean

Lines changed: 69 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def tate_big_prime (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) :
5454
let ⟨vpj, k, integralInv⟩ :=
5555
match 3 * (primeEVR hp).valtn c4 with
5656
| ⊤ => (0, n, true)
57-
| ofN v_c4_3 => if v_c4_3 < n then ((v_c4_3 : ℤ) - (n : ℤ), v_c4_3, false) else (v_c4_3 - n, n, true)
57+
| some v_c4_3 => if v_c4_3 < n then ((v_c4_3 : ℤ) - (n : ℤ), v_c4_3, false) else (v_c4_3 - n, n, true)
5858
let ⟨u, r, s, t⟩ :=
5959
if k < 12 then (1, 0, 0, 0) else
6060
let u' := p ^ (k / 12)
@@ -113,6 +113,7 @@ def tate_big_prime (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) :
113113

114114
open SurjVal
115115

116+
-- TODO move
116117
macro "simp_wf'" : tactic =>
117118
`(tactic| simp (config := { zeta := false }) only [invImage, InvImage, Prod.lex, sizeOfWFRel,
118119
measure, Nat.lt_wfRel, WellFoundedRelation.rel, sizeOf_nat, Nat.lt_eq] )
@@ -135,8 +136,7 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
135136
else
136137
have hdr : has_double_root 1 a3q (-a6q2) hp := by
137138
apply And.intro (val_of_one surjvalp) _
138-
apply ENat.pos_of_ne_zero
139-
rw [mul_one, ←neg_mul_eq_mul_neg, sub_eq_add_neg, neg_neg]
139+
rw [mul_one, ←neg_mul_eq_mul_neg, sub_eq_add_neg, neg_neg, pos_iff_ne_zero]
140140
exact discr_1
141141
let a := double_root 1 a3q (-a6q2) p
142142

@@ -149,29 +149,34 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
149149
Nat.cast_pow, ←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
150150
apply add_le_add (le_of_eq rfl)
151151
rw [add_comm, ←mul_one 2]
152-
exact succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).2
152+
rw [one_le_iff_pos]
153+
exact (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).2
153154
have h4' : surjvalp e1.a4 ≥ q + 1 := by
154155
rw [t_of_a4]
155156
apply le_trans _ (surjvalp.v_add_ge_min_v _ _)
156157
apply le_min h4
157-
rw [mul_assoc, val_neg, surjvalp.v_mul_eq_add_v, add_comm, surjvalp.v_mul_eq_add_v,
158-
Nat.cast_pow, val_of_pow_uniformizer]
159-
conv =>
160-
rhs
161-
rw [add_comm, add_assoc]
162-
rw [add_comm]
163-
apply add_le_add (le_of_eq rfl)
164-
exact le_trans h1 (le_add_right (surjvalp e.a1) _)
158+
simp (config := {zeta := false})
159+
-- rw [mul_assoc, val_neg, surjvalp.v_mul_eq_add_v, add_comm, surjvalp.v_mul_eq_add_v,
160+
-- Nat.cast_pow, val_of_pow_uniformizer]
161+
elinarith
162+
-- conv =>
163+
-- rhs
164+
-- rw [add_comm, add_assoc]
165+
-- rw [add_comm]
166+
-- apply add_le_add (le_of_eq rfl) -- TOOD simplify
167+
-- exact le_trans h1 le_self_add
165168
have h6' : (primeEVR hp).valtn e1.a6 ≥ 2 * q + 1 := by
166-
rw [t_of_a6, factor_p_of_le_val evrp h6, factor_p_of_le_val evrp h3, rw_a6, ←val_neg,
167-
sub_eq_add_neg, sub_eq_add_neg, neg_add, neg_add, neg_neg, neg_neg,
168-
Nat.cast_pow, pow_two]
169-
erw [ add_assoc (-((↑p : ℤ) ^ (2 * q) * a6q2) : ℤ)]
170-
rw [neg_mul_eq_mul_neg _ a6q2, factorize1 a a3q ↑p q, ←pow_add, add_self_eq_mul_two,
171-
←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer, add_mul, ←pow_two a,
172-
←one_mul (a ^ 2), add_comm (-a6q2)]
173-
push_cast
174-
exact add_le_add (le_of_eq rfl) (succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).1)
169+
rw [t_of_a6]
170+
sorry
171+
-- rw [factor_p_of_le_val evrp h6, factor_p_of_le_val evrp h3, rw_a6, ←val_neg,
172+
-- sub_eq_add_neg, sub_eq_add_neg, neg_add, neg_add, neg_neg, neg_neg,
173+
-- Nat.cast_pow, pow_two]
174+
-- erw [ add_assoc (-((↑p : ℤ) ^ (2 * q) * a6q2) : ℤ)]
175+
-- rw [neg_mul_eq_mul_neg _ a6q2, factorize1 a a3q ↑p q, ←pow_add, add_self_eq_mul_two,
176+
-- ←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer, add_mul, ←pow_two a,
177+
-- ←one_mul (a ^ 2), add_comm (-a6q2)]
178+
-- push_cast
179+
-- exact add_le_add (le_of_eq rfl) (succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).1)
175180
let t := t + u0 ^ 3 * a * (p ^ q : ℕ)
176181
let a2p := sub_val evrp 1 e1.a2
177182
let a4pq := sub_val evrp (q + 1) e1.a4
@@ -188,11 +193,10 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
188193
else
189194
have hdr' : has_double_root a2p a4pq a6pq2 hp := by
190195
have v_a2p : surjvalp a2p = 0 := by
191-
rw [←rw_a2', val_sub_val_eq evrp e1.a2 1 h2']
196+
rw [← rw_a2', val_sub_val_eq evrp e1.a2 1 h2']
192197
simp
193198
apply And.intro v_a2p _
194-
apply ENat.pos_of_ne_zero
195-
assumption
199+
rwa [pos_iff_ne_zero]
196200
let a' := double_root a2p a4pq a6pq2 p
197201
have rw_a' : double_root a2p a4pq a6pq2 p = a' := rfl
198202
--if p = 2 then modulo a6pq2 2 else modulo (2 * a2p * -a4pq) 3
@@ -202,49 +206,54 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
202206
have h2'' : surjvalp e2.a2 = 1 := by
203207
rwa [r_of_a2, v_add_eq_min_v surjvalp]
204208
rw [h2']
205-
apply lt_of_succ_le
209+
have : ¬IsMax (1 : ℕ∞)
210+
· norm_num
211+
rw [← Order.succ_le_iff_of_not_isMax this] -- TODO this is asking for better abstraction
206212
apply val_mul_ge_of_right_ge surjvalp
207213
apply val_mul_ge_of_right_ge surjvalp
208214
rw [Nat.cast_pow, val_of_pow_uniformizer surjvalp]
209-
rw [← lt_ofN 1 q] at hq
210-
exact succ_le_of_lt hq
215+
rw [Order.succ_le_iff_of_not_isMax this]
216+
exact_mod_cast hq
211217
have h3'' : surjvalp e2.a3 ≥ q + 1 := by
212218
rw [r_of_a3]
213219
apply le_trans _ (surjvalp.v_add_ge_min_v _ _)
214220
apply le_min h3'
215221
rw [mul_comm a', mul_assoc, surjvalp.v_mul_eq_add_v, Nat.cast_pow, val_of_pow_uniformizer]
216222
exact add_le_add (le_of_eq rfl) (val_mul_ge_of_right_ge surjvalp h1')
217223
have h4'' : surjvalp e2.a4 ≥ q + 2 := by
218-
rw [r_of_a4, factor_p_of_le_val evrp h4', rw_a4', factor_p_of_le_val evrp (le_of_eq h2'.symm),
219-
rw_a2', Nat.cast_pow, factorize2 a' a2p (↑p) q, ←pow_add, ←mul_add, add_comm a4pq]
220-
apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
221-
. rw [Nat.add_succ q, Nat.succ_eq_add_one, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
222-
rw [Nat.cast_add, Nat.cast_one, add_assoc]
223-
rw [show (2 : ℕ∞) = 1 + 1 by norm_num, ← add_assoc, ← add_assoc]
224-
apply add_le_add (le_of_eq rfl)
225-
exact (succ_le_of_lt (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').2)
226-
. rw [pow_two, factorize3 a' p q, ←pow_add]
227-
apply val_mul_ge_of_left_ge surjvalp _
228-
rw [val_of_pow_uniformizer]
229-
exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
224+
sorry
225+
-- rw [r_of_a4, factor_p_of_le_val evrp h4', rw_a4', factor_p_of_le_val evrp (le_of_eq h2'.symm),
226+
-- rw_a2', Nat.cast_pow, factorize2 a' a2p (↑p) q, ←pow_add, ←mul_add, add_comm a4pq]
227+
-- apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
228+
-- . rw [Nat.add_succ q, Nat.succ_eq_add_one, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
229+
-- rw [Nat.cast_add, Nat.cast_one, add_assoc]
230+
-- rw [show (2 : ℕ∞) = 1 + 1 by norm_num, ← add_assoc, ← add_assoc]
231+
-- apply add_le_add (le_of_eq rfl)
232+
-- exact (succ_le_of_lt (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').2)
233+
-- . rw [pow_two, factorize3 a' p q, ←pow_add]
234+
-- apply val_mul_ge_of_left_ge surjvalp _
235+
-- rw [val_of_pow_uniformizer]
236+
-- exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
230237
have h6'' : surjvalp e2.a6 ≥ 2 * (q + 1) := by
231238
rw [r_of_a6, Nat.cast_pow]
232239
apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
233-
. rw [factor_p_of_le_val evrp h6', rw_a6', factor_p_of_le_val evrp h4', rw_a4',
234-
factor_p_of_eq_val evrp h2', rw_a2', factorize4 a' a2p a4pq a6pq2 p q, ←pow_add, ←pow_add,
235-
←pow_add, ←Nat.add_assoc, add_self_eq_mul_two q, ←mul_add, ←mul_add, mul_add,
236-
←add_self_eq_mul_two 1, ←add_assoc, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
237-
push_cast
238-
apply add_le_add (le_of_eq rfl)
239-
rw [show 1 = ENat.succ 0 by rfl]
240-
apply succ_le_of_lt
241-
have := (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').1
242-
push_cast at this
243-
exact this
244-
. rw [mul_pow a' _ 3, ←pow_mul, mul_add, mul_one, Nat.mul_succ] -- TODO why did this break
245-
apply val_mul_ge_of_right_ge surjvalp
246-
rw [val_of_pow_uniformizer, mul_comm q]
247-
exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
240+
sorry
241+
sorry
242+
-- . rw [factor_p_of_le_val evrp h6', rw_a6', factor_p_of_le_val evrp h4', rw_a4',
243+
-- factor_p_of_eq_val evrp h2', rw_a2', factorize4 a' a2p a4pq a6pq2 p q, ←pow_add, ←pow_add,
244+
-- ←pow_add, ←Nat.add_assoc, add_self_eq_mul_two q, ←mul_add, ←mul_add, mul_add,
245+
-- ←add_self_eq_mul_two 1, ←add_assoc, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
246+
-- push_cast
247+
-- apply add_le_add (le_of_eq rfl)
248+
-- rw [show 1 = ENat.succ 0 by rfl]
249+
-- apply succ_le_of_lt
250+
-- have := (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').1
251+
-- push_cast at this
252+
-- exact this
253+
-- . rw [mul_pow a' _ 3, ←pow_mul, mul_add, mul_one, Nat.mul_succ] -- TODO why did this break
254+
-- apply val_mul_ge_of_right_ge surjvalp
255+
-- rw [val_of_pow_uniformizer, mul_comm q]
256+
-- exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
248257
let r := r + u0 ^ 2 + a' * (p ^ q : ℕ) -- TODO check these
249258
let t := t + u0 ^ 2 * s0 * a' * (p ^ q : ℕ)
250259
kodaira_type_Is p hp e2 u0 r s0 t (m + 2) (q + 1) (Nat.lt_succ_of_lt hq) h1'' h2'' h3'' h4'' h6''
@@ -255,8 +264,11 @@ decreasing_by
255264
simp only [Nat.cast_pow, rst_iso_a2, zero_mul, sub_zero, mul_zero, add_zero, rst_iso_a4,
256265
rst_iso_a6, iso_rst_val_discr_to_nat, ge_iff_le, Nat.lt_eq]
257266
apply Nat.sub_lt_sub_left _ _
258-
. rw [← lt_ofN, ofN_val_discr_to_nat]
259-
exact lt_of_succ_le (v_discr_of_v_ai surjvalp e hq h1 h2 h3 h4 h6)
267+
. rw [← Nat.succ_le_iff]
268+
suffices : 2 * q + 3 ≤ (primeEVR hp).valtn e.discr
269+
· rw [← ofN_val_discr_to_nat] at this
270+
exact_mod_cast this
271+
exact v_discr_of_v_ai surjvalp e hq h1 h2 h3 h4 h6
260272
. exact Nat.add_lt_add_right (Nat.mul_lt_mul_of_pos_left q.lt_succ_self (Nat.zero_lt_succ 1)) 2
261273

262274

@@ -280,7 +292,7 @@ def tate_small_prime (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 : ℤ
280292
let n := val_discr_to_nat navp e
281293
if testΔ : n = 0 then (I 0, 0, 1, .Good, (u, r, s, t)) else -- TODO check
282294
have hΔ : navp e.discr ≥ 1 := by
283-
rw [show ¬n = 00 < n by simp [Nat.pos_iff_ne_zero], ← lt_ofN, ofN_val_discr_to_nat] at testΔ
295+
rw [show ¬n = 00 < n by simp [Nat.pos_iff_ne_zero], ofN_val_discr_to_nat] at testΔ
284296
exact succ_le_of_lt testΔ
285297

286298
if test_b2 : navp e.b2 < 1 then

ECTate/Tactic/ELinarith.lean

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ def is_enat_atom (e : Expr) : Mathlib.Tactic.AtomM (Bool × Bool) :=
3838

3939
--
4040

41+
42+
#check Nat.cast_add
4143
open Lean Meta Elab Tactic Term PrettyPrinter in
4244
elab "elinarith" : tactic => do
4345
let mvarId ← getMainTarget
@@ -59,16 +61,17 @@ elab "elinarith" : tactic => do
5961
-- logInfo (← getMainGoal)
6062
let mut goals := [← getMainGoal]
6163
for e in a do
64+
let id := mkIdent <| Name.str .anonymous (toString <| ← delab e)
6265
let tac ←
63-
`(tactic| cases h : ($(← Expr.toSyntax e):term : ENat) <;>
66+
`(tactic| cases $id : ($(← Expr.toSyntax e):term : ENat) <;>
6467
-- trace_state <;>
6568
-- how to check these lemmas exist at compile time?
66-
simp_safe only [h, --ENat.ofN_eq_ofNat,
69+
simp_safe (config := {failIfUnchanged := false, zeta := false}) only [$id:ident, --ENat.ofN_eq_ofNat,
6770
top_add, add_top,
6871
ENat.infty_mul, ENat.mul_infty, ite_true, ite_false,
6972
Nat.cast_add, Nat.cast_one, Nat.cast_mul, Nat.cast_ofNat,
7073
Nat.cast_zero, Nat.zero_eq, Nat.mul_zero, Nat.zero_le,
71-
le_top, ENat.lt_top
74+
le_top, top_le_iff, ENat.lt_top
7275
] at * <;>
7376
-- trace_state <;>
7477
norm_cast at * <;>

0 commit comments

Comments
 (0)