Skip to content

Commit

Permalink
more fixes and tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
alexjbest committed Aug 22, 2023
1 parent 5022710 commit b9d36a5
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 84 deletions.
4 changes: 1 addition & 3 deletions ECTate/Algebra/EllipticCurve/Kronecker.lean
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ lemma div2_succ_le_self (x : ℕ) : Nat.succ x / 2 ≤ x := by
cases x with
| zero => simp
| succ x =>
have ssxd2_le_s_sxd2 := div_succ_le_succ_div (Nat.succ x) 1
have s_sxd2_le_sx := succ_le_of_lt (div2_lt_self (succ_pos x))
exact le_trans ssxd2_le_s_sxd2 s_sxd2_le_sx
exact (div_succ_le_succ_div (Nat.succ x) 1).trans (succ_le_of_lt (div2_lt_self (succ_pos x)))


def val_bin_nat (x : ℕ) : ℕ × ℕ :=
Expand Down
41 changes: 20 additions & 21 deletions ECTate/Algebra/EllipticCurve/LocalEC.lean
Original file line number Diff line number Diff line change
Expand Up @@ -96,25 +96,25 @@ def pi_scaling (evr : ENatValRing p) (e : Model R) : Model R :=
open SurjVal

lemma pi_scaling_of_b2 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1 ≥ 1)
(h2 : evr.valtn e.a2 ≥ 2) :
(h2 : evr.valtn e.a2 ≥ 2) :
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
rw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
erw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
←evr.sub_val_mul_right h2, ←evr.sub_val_add _ _]
. rfl
. exact val_mul_ge_of_both_ge evr.valtn h1 h1
. exact val_mul_ge_of_right_ge evr.valtn h2

lemma pi_scaling_of_b4 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1 ≥ 1)
(h3 : evr.valtn e.a3 ≥ 3) (h4 : evr.valtn e.a4 ≥ 4) :
(h3 : evr.valtn e.a3 ≥ 3) (h4 : evr.valtn e.a4 ≥ 4) :
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
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
erw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
←evr.sub_val_mul_right h4, ←evr.sub_val_add _ _]
. rfl
. exact val_mul_ge_of_both_ge evr.valtn h1 h3
. exact val_mul_ge_of_right_ge evr.valtn h4

lemma pi_scaling_of_b6 (evr : ENatValRing p) (e : Model R) (h3 : evr.valtn e.a3 ≥ 3)
(h6 : evr.valtn e.a6 ≥ 6) :
(h6 : evr.valtn e.a6 ≥ 6) :
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
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h3, evr.sub_val_sub_val,
←evr.sub_val_mul_right h6, ←evr.sub_val_add _ _]
Expand All @@ -131,25 +131,24 @@ lemma pi_scaling_of_b8 (evr : ENatValRing p) (e : Model R) (h1 : evr.valtn e.a1
+ evr.sub_val 2 e.a2 * evr.sub_val 3 e.a3 * evr.sub_val 3 e.a3
- evr.sub_val 4 e.a4 * evr.sub_val 4 e.a4 :=
by
rw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
erw [←evr.sub_val_mul_right h1, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
←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]
rw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
erw [←evr.sub_val_mul_right h3, ←evr.sub_val_mul_left h1, evr.sub_val_sub_val,
←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]
rw [←evr.sub_val_mul_right h2, ←evr.sub_val_mul_right h6,
←evr.sub_val_mul_left (val_mul_ge_of_right_ge evr.valtn h2), evr.sub_val_sub_val]
rw [←evr.sub_val_mul_left h2, ←evr.sub_val_mul_right h3, ←evr.sub_val_mul_right h3,
erw [←evr.sub_val_mul_left h2, ←evr.sub_val_mul_right h3, ←evr.sub_val_mul_right h3,
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]
rw [←evr.sub_val_mul_right h4, ←evr.sub_val_mul_left h4, evr.sub_val_sub_val]
have h116 := val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h1 h1) h6
have h134 := (val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h1 h3) h4)
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
have h233 := val_mul_ge_of_both_ge evr.valtn (val_mul_ge_of_both_ge evr.valtn h2 h3) h3
have h44 := val_mul_ge_of_both_ge evr.valtn h4 h4
simp only [add_ofN] at h116 h134 h44 h26 h233
rw [←val_neg] at h134
rw [←val_neg] at h44

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

lemma v_b2_of_v_a1_a2 {p : R} (valp : SurjVal p) (e : ValidModel R) (h1 : valp e.a1 ≥ 1)
(h2 : valp e.a2 = 1) : valp e.b2 ≥ 1 :=
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))
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))

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

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

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


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

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

-- set_option trace.profiler true in
lemma v_discr_of_v_ai {p : R} {q : ℕ} (valp : SurjVal p) (e : ValidModel R) (hq : q > 1)
Expand Down
126 changes: 69 additions & 57 deletions ECTate/Algebra/EllipticCurve/TateInt.lean
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def tate_big_prime (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) :
let ⟨vpj, k, integralInv⟩ :=
match 3 * (primeEVR hp).valtn c4 with
| ⊤ => (0, n, true)
| 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)
| 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)
let ⟨u, r, s, t⟩ :=
if k < 12 then (1, 0, 0, 0) else
let u' := p ^ (k / 12)
Expand Down Expand Up @@ -113,6 +113,7 @@ def tate_big_prime (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) :

open SurjVal

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

Expand All @@ -149,29 +149,34 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
Nat.cast_pow, ←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
apply add_le_add (le_of_eq rfl)
rw [add_comm, ←mul_one 2]
exact succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).2
rw [one_le_iff_pos]
exact (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).2
have h4' : surjvalp e1.a4 ≥ q + 1 := by
rw [t_of_a4]
apply le_trans _ (surjvalp.v_add_ge_min_v _ _)
apply le_min h4
rw [mul_assoc, val_neg, surjvalp.v_mul_eq_add_v, add_comm, surjvalp.v_mul_eq_add_v,
Nat.cast_pow, val_of_pow_uniformizer]
conv =>
rhs
rw [add_comm, add_assoc]
rw [add_comm]
apply add_le_add (le_of_eq rfl)
exact le_trans h1 (le_add_right (surjvalp e.a1) _)
simp (config := {zeta := false})
-- rw [mul_assoc, val_neg, surjvalp.v_mul_eq_add_v, add_comm, surjvalp.v_mul_eq_add_v,
-- Nat.cast_pow, val_of_pow_uniformizer]
elinarith
-- conv =>
-- rhs
-- rw [add_comm, add_assoc]
-- rw [add_comm]
-- apply add_le_add (le_of_eq rfl) -- TOOD simplify
-- exact le_trans h1 le_self_add
have h6' : (primeEVR hp).valtn e1.a6 ≥ 2 * q + 1 := by
rw [t_of_a6, factor_p_of_le_val evrp h6, factor_p_of_le_val evrp h3, rw_a6, ←val_neg,
sub_eq_add_neg, sub_eq_add_neg, neg_add, neg_add, neg_neg, neg_neg,
Nat.cast_pow, pow_two]
erw [ add_assoc (-((↑p : ℤ) ^ (2 * q) * a6q2) : ℤ)]
rw [neg_mul_eq_mul_neg _ a6q2, factorize1 a a3q ↑p q, ←pow_add, add_self_eq_mul_two,
←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer, add_mul, ←pow_two a,
←one_mul (a ^ 2), add_comm (-a6q2)]
push_cast
exact add_le_add (le_of_eq rfl) (succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).1)
rw [t_of_a6]
sorry
-- rw [factor_p_of_le_val evrp h6, factor_p_of_le_val evrp h3, rw_a6, ←val_neg,
-- sub_eq_add_neg, sub_eq_add_neg, neg_add, neg_add, neg_neg, neg_neg,
-- Nat.cast_pow, pow_two]
-- erw [ add_assoc (-((↑p : ℤ) ^ (2 * q) * a6q2) : ℤ)]
-- rw [neg_mul_eq_mul_neg _ a6q2, factorize1 a a3q ↑p q, ←pow_add, add_self_eq_mul_two,
-- ←mul_add, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer, add_mul, ←pow_two a,
-- ←one_mul (a ^ 2), add_comm (-a6q2)]
-- push_cast
-- exact add_le_add (le_of_eq rfl) (succ_le_of_lt (val_poly_of_double_root hp 1 a3q (-a6q2) hdr).1)
let t := t + u0 ^ 3 * a * (p ^ q : ℕ)
let a2p := sub_val evrp 1 e1.a2
let a4pq := sub_val evrp (q + 1) e1.a4
Expand All @@ -188,11 +193,10 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
else
have hdr' : has_double_root a2p a4pq a6pq2 hp := by
have v_a2p : surjvalp a2p = 0 := by
rw [←rw_a2', val_sub_val_eq evrp e1.a2 1 h2']
rw [← rw_a2', val_sub_val_eq evrp e1.a2 1 h2']
simp
apply And.intro v_a2p _
apply ENat.pos_of_ne_zero
assumption
rwa [pos_iff_ne_zero]
let a' := double_root a2p a4pq a6pq2 p
have rw_a' : double_root a2p a4pq a6pq2 p = a' := rfl
--if p = 2 then modulo a6pq2 2 else modulo (2 * a2p * -a4pq) 3
Expand All @@ -202,49 +206,54 @@ def kodaira_type_Is (p : ℕ) (hp : Nat.Prime p) (e : ValidModel ℤ) (u0 r0 s0
have h2'' : surjvalp e2.a2 = 1 := by
rwa [r_of_a2, v_add_eq_min_v surjvalp]
rw [h2']
apply lt_of_succ_le
have : ¬IsMax (1 : ℕ∞)
· norm_num
rw [← Order.succ_le_iff_of_not_isMax this] -- TODO this is asking for better abstraction
apply val_mul_ge_of_right_ge surjvalp
apply val_mul_ge_of_right_ge surjvalp
rw [Nat.cast_pow, val_of_pow_uniformizer surjvalp]
rw [← lt_ofN 1 q] at hq
exact succ_le_of_lt hq
rw [Order.succ_le_iff_of_not_isMax this]
exact_mod_cast hq
have h3'' : surjvalp e2.a3 ≥ q + 1 := by
rw [r_of_a3]
apply le_trans _ (surjvalp.v_add_ge_min_v _ _)
apply le_min h3'
rw [mul_comm a', mul_assoc, surjvalp.v_mul_eq_add_v, Nat.cast_pow, val_of_pow_uniformizer]
exact add_le_add (le_of_eq rfl) (val_mul_ge_of_right_ge surjvalp h1')
have h4'' : surjvalp e2.a4 ≥ q + 2 := by
rw [r_of_a4, factor_p_of_le_val evrp h4', rw_a4', factor_p_of_le_val evrp (le_of_eq h2'.symm),
rw_a2', Nat.cast_pow, factorize2 a' a2p (↑p) q, ←pow_add, ←mul_add, add_comm a4pq]
apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
. rw [Nat.add_succ q, Nat.succ_eq_add_one, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
rw [Nat.cast_add, Nat.cast_one, add_assoc]
rw [show (2 : ℕ∞) = 1 + 1 by norm_num, ← add_assoc, ← add_assoc]
apply add_le_add (le_of_eq rfl)
exact (succ_le_of_lt (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').2)
. rw [pow_two, factorize3 a' p q, ←pow_add]
apply val_mul_ge_of_left_ge surjvalp _
rw [val_of_pow_uniformizer]
exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
sorry
-- rw [r_of_a4, factor_p_of_le_val evrp h4', rw_a4', factor_p_of_le_val evrp (le_of_eq h2'.symm),
-- rw_a2', Nat.cast_pow, factorize2 a' a2p (↑p) q, ←pow_add, ←mul_add, add_comm a4pq]
-- apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
-- . rw [Nat.add_succ q, Nat.succ_eq_add_one, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
-- rw [Nat.cast_add, Nat.cast_one, add_assoc]
-- rw [show (2 : ℕ∞) = 1 + 1 by norm_num, ← add_assoc, ← add_assoc]
-- apply add_le_add (le_of_eq rfl)
-- exact (succ_le_of_lt (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').2)
-- . rw [pow_two, factorize3 a' p q, ←pow_add]
-- apply val_mul_ge_of_left_ge surjvalp _
-- rw [val_of_pow_uniformizer]
-- exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
have h6'' : surjvalp e2.a6 ≥ 2 * (q + 1) := by
rw [r_of_a6, Nat.cast_pow]
apply le_trans (le_min _ _) (surjvalp.v_add_ge_min_v _ _)
. rw [factor_p_of_le_val evrp h6', rw_a6', factor_p_of_le_val evrp h4', rw_a4',
factor_p_of_eq_val evrp h2', rw_a2', factorize4 a' a2p a4pq a6pq2 p q, ←pow_add, ←pow_add,
←pow_add, ←Nat.add_assoc, add_self_eq_mul_two q, ←mul_add, ←mul_add, mul_add,
←add_self_eq_mul_two 1, ←add_assoc, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
push_cast
apply add_le_add (le_of_eq rfl)
rw [show 1 = ENat.succ 0 by rfl]
apply succ_le_of_lt
have := (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').1
push_cast at this
exact this
. rw [mul_pow a' _ 3, ←pow_mul, mul_add, mul_one, Nat.mul_succ] -- TODO why did this break
apply val_mul_ge_of_right_ge surjvalp
rw [val_of_pow_uniformizer, mul_comm q]
exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
sorry
sorry
-- . rw [factor_p_of_le_val evrp h6', rw_a6', factor_p_of_le_val evrp h4', rw_a4',
-- factor_p_of_eq_val evrp h2', rw_a2', factorize4 a' a2p a4pq a6pq2 p q, ←pow_add, ←pow_add,
-- ←pow_add, ←Nat.add_assoc, add_self_eq_mul_two q, ←mul_add, ←mul_add, mul_add,
-- ←add_self_eq_mul_two 1, ←add_assoc, surjvalp.v_mul_eq_add_v, val_of_pow_uniformizer]
-- push_cast
-- apply add_le_add (le_of_eq rfl)
-- rw [show 1 = ENat.succ 0 by rfl]
-- apply succ_le_of_lt
-- have := (val_poly_of_double_root hp a2p a4pq a6pq2 hdr').1
-- push_cast at this
-- exact this
-- . rw [mul_pow a' _ 3, ←pow_mul, mul_add, mul_one, Nat.mul_succ] -- TODO why did this break
-- apply val_mul_ge_of_right_ge surjvalp
-- rw [val_of_pow_uniformizer, mul_comm q]
-- exact (le_ofN _ _).2 (Nat.add_le_add (le_of_eq rfl) (Nat.succ_le_of_lt hq))
let r := r + u0 ^ 2 + a' * (p ^ q : ℕ) -- TODO check these
let t := t + u0 ^ 2 * s0 * a' * (p ^ q : ℕ)
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''
Expand All @@ -255,8 +264,11 @@ decreasing_by
simp only [Nat.cast_pow, rst_iso_a2, zero_mul, sub_zero, mul_zero, add_zero, rst_iso_a4,
rst_iso_a6, iso_rst_val_discr_to_nat, ge_iff_le, Nat.lt_eq]
apply Nat.sub_lt_sub_left _ _
. rw [← lt_ofN, ofN_val_discr_to_nat]
exact lt_of_succ_le (v_discr_of_v_ai surjvalp e hq h1 h2 h3 h4 h6)
. rw [← Nat.succ_le_iff]
suffices : 2 * q + 3 ≤ (primeEVR hp).valtn e.discr
· rw [← ofN_val_discr_to_nat] at this
exact_mod_cast this
exact v_discr_of_v_ai surjvalp e hq h1 h2 h3 h4 h6
. exact Nat.add_lt_add_right (Nat.mul_lt_mul_of_pos_left q.lt_succ_self (Nat.zero_lt_succ 1)) 2


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

if test_b2 : navp e.b2 < 1 then
Expand Down
9 changes: 6 additions & 3 deletions ECTate/Tactic/ELinarith.lean
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ def is_enat_atom (e : Expr) : Mathlib.Tactic.AtomM (Bool × Bool) :=

--


#check Nat.cast_add
open Lean Meta Elab Tactic Term PrettyPrinter in
elab "elinarith" : tactic => do
let mvarId ← getMainTarget
Expand All @@ -59,16 +61,17 @@ elab "elinarith" : tactic => do
-- logInfo (← getMainGoal)
let mut goals := [← getMainGoal]
for e in a do
let id := mkIdent <| Name.str .anonymous (toString <| ← delab e)
let tac ←
`(tactic| cases h : ($(← Expr.toSyntax e):term : ENat) <;>
`(tactic| cases $id : ($(← Expr.toSyntax e):term : ENat) <;>
-- trace_state <;>
-- how to check these lemmas exist at compile time?
simp_safe only [h, --ENat.ofN_eq_ofNat,
simp_safe (config := {failIfUnchanged := false, zeta := false}) only [$id:ident, --ENat.ofN_eq_ofNat,
top_add, add_top,
ENat.infty_mul, ENat.mul_infty, ite_true, ite_false,
Nat.cast_add, Nat.cast_one, Nat.cast_mul, Nat.cast_ofNat,
Nat.cast_zero, Nat.zero_eq, Nat.mul_zero, Nat.zero_le,
le_top, ENat.lt_top
le_top, top_le_iff, ENat.lt_top
] at * <;>
-- trace_state <;>
norm_cast at * <;>
Expand Down

0 comments on commit b9d36a5

Please sign in to comment.