internlm/Lean-Github huggingface dataset:
Theorem: Zqrtd.factor_div'
Proof state before:
case h.e'_4
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
e : ℤ := m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
he : e = m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
⊢ c.norm = (c + m * ↑x).norm - x * e
Tactic:
rw [he, Zsqrtd.norm_def, Zsqrtd.norm_def]
Proof state after:
case h.e'_4
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
e : ℤ := m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
he : e = m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
⊢ c.re * c.re - -3 * c.im * c.im =
    (c + m * ↑x).re * (c + m * ↑x).re - -3 * (c + m * ↑x).im * (c + m * ↑x).im -
      x * (m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im)
Theorem: Zqrtd.factor_div'
Proof state before:
case h.e'_4
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
e : ℤ := m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
he : e = m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
⊢ c.re * c.re - -3 * c.im * c.im =
    (c + m * ↑x).re * (c + m * ↑x).re - -3 * (c + m * ↑x).im * (c + m * ↑x).im -
      x * (m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im)
Tactic:
simp only [Zsqrtd.intCast_re, Zsqrtd.mul_im, Zsqrtd.add_im, Zsqrtd.mul_re, Zsqrtd.add_re,
  Zsqrtd.intCast_im]
Proof state after:
case h.e'_4
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
e : ℤ := m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
he : e = m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
⊢ c.re * c.re - -3 * c.im * c.im =
    (c.re + (m.re * x + -3 * m.im * 0)) * (c.re + (m.re * x + -3 * m.im * 0)) -
        -3 * (c.im + (m.re * 0 + m.im * x)) * (c.im + (m.re * 0 + m.im * x)) -
      x * (m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im)
Theorem: Zqrtd.factor_div'
Proof state before:
case h.e'_4
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
e : ℤ := m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
he : e = m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im
⊢ c.re * c.re - -3 * c.im * c.im =
    (c.re + (m.re * x + -3 * m.im * 0)) * (c.re + (m.re * x + -3 * m.im * 0)) -
        -3 * (c.im + (m.re * 0 + m.im * x)) * (c.im + (m.re * 0 + m.im * x)) -
      x * (m.re ^ 2 * x + 2 * m.re * c.re + 3 * m.im ^ 2 * x + 6 * m.im * c.im)
Tactic:
ring
Proof state after:
no goals
Theorem: Zqrtd.factor_div'
Proof state before:
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
y : ℤ
hy : c.norm = x * y
⊢ 0 < x.natAbs
Tactic:
zify
Proof state after:
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
y : ℤ
hy : c.norm = x * y
⊢ 0 < |x|
Theorem: Zqrtd.factor_div'
Proof state before:
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
y : ℤ
hy : c.norm = x * y
⊢ 0 < |x|
Tactic:
exact zero_lt_one.trans h
Proof state after:
no goals
Theorem: Zqrtd.factor_div'
Proof state before:
x : ℤ
hodd : Odd x
h : 1 < |x|
c m : ℤ√(-3)
h2 : c.norm < x ^ 2
hcoprime : IsCoprime (c + m * ↑x).re (c + m * ↑x).im
hfactor : x ∣ (c + m * ↑x).norm
y : ℤ
hy : c.norm = x * y
h0'' : 0 < x.natAbs
⊢ -3 ≤ 0
Tactic:
norm_num
Proof state after:
no goals
Theorem: factors
Proof state before:
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
⊢ ∃ c, |x| = c.norm
Tactic:
induction' hx' : x.natAbs using Nat.strong_induction_on with x' IH generalizing a x
Proof state after:
case h
x' : ℕ
IH : ∀ m < x', ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
hx' : x.natAbs = x'
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h
x' : ℕ
IH : ∀ m < x', ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
hx' : x.natAbs = x'
⊢ ∃ c, |x| = c.norm
Tactic:
subst hx'
Proof state after:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
⊢ ∃ c, |x| = c.norm
Tactic:
have hneg1 : 1 ≤ a.norm := by
  rw [← Int.sub_one_lt_iff, sub_self]
  apply lt_of_le_of_ne (Zsqrtd.norm_nonneg (by norm_num) a)
  rw [Ne, eq_comm, Zsqrtd.norm_eq_zero_iff (by norm_num : (-3 : ℤ) < 0)]
  rintro rfl
  rw [Zsqrtd.zero_im, Zsqrtd.zero_re] at hcoprime
  exact not_isCoprime_zero_zero hcoprime
Proof state after:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
⊢ ∃ c, |x| = c.norm
Tactic:
have h0 : x ≠ 0 := by
  rintro rfl
  simp only [even_zero, not_true, Int.odd_iff_not_even] at hodd
Proof state after:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
⊢ ∃ c, |x| = c.norm
Tactic:
have h0' : 1 ≤ abs x := by rwa [← Int.sub_one_lt_iff, sub_self, abs_pos]
Proof state after:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
⊢ ∃ c, |x| = c.norm
Tactic:
cases' h0'.eq_or_lt with h h
Proof state after:
case h.inl
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 = |x|
⊢ ∃ c, |x| = c.norm

case h.inr
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
hneg1 : 1 ≤ a.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
⊢ ∃ c, |x| = c.norm
Tactic:
obtain ⟨c', m, rfl, -, h1, ⟨y, hy, h3⟩⟩ := Zqrtd.factor_div' a hodd h hcoprime hfactor
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
⊢ ∃ c, |x| = c.norm
Tactic:
have h4 : c'.norm ≠ 0 := by rwa [Ne, Zsqrtd.norm_eq_zero_iff (by norm_num) c']
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
⊢ ∃ c, |x| = c.norm
Tactic:
set g := Int.gcd c'.re c'.im with hg
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
⊢ ∃ c, |x| = c.norm
Tactic:
have hgpos : 0 < g := by rwa [hg, Zsqrtd.gcd_pos_iff]
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
⊢ ∃ c, |x| = c.norm
Tactic:
obtain ⟨C', HC', HCDcoprime⟩ := Zsqrtd.exists_coprime_of_gcd_pos hgpos
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
⊢ ∃ c, |x| = c.norm
Tactic:
have h5 : x * y = (g : ℤ) ^ 2 * C'.norm := by
  rw [← hy, HC', Zsqrtd.norm_mul, Zsqrtd.norm_intCast, ← pow_two]
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
⊢ ∃ c, |x| = c.norm
Tactic:
have h6 : x * z = C'.norm := by
  apply Int.eq_of_mul_eq_mul_left (pow_ne_zero 2 <| Int.natCast_ne_zero_iff_pos.mpr hgpos)
  rw [← h5, hz, mul_left_comm]
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
⊢ ∃ c, |x| = c.norm
Tactic:
have h8 : z ≠ 0 := by
  apply right_ne_zero_of_mul
  apply right_ne_zero_of_mul
  rwa [h6, ← h5, ← hy]
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
⊢ ∃ c, |x| = c.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
⊢ ∃ c, |x| = c.norm
Tactic:
refine' factors' _ x z hodd h8 h6 _
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
⊢ ∀ (f' : ℤ), f' ∣ z → Odd f' → ∃ p, |f'| = p.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
⊢ ∀ (f' : ℤ), f' ∣ z → Odd f' → ∃ p, |f'| = p.norm
Tactic:
intro w hwdvd hwodd
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
w : ℤ
hwdvd : w ∣ z
hwodd : Odd w
⊢ ∃ p, |w| = p.norm
Theorem: factors
Proof state before:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
w : ℤ
hwdvd : w ∣ z
hwodd : Odd w
⊢ ∃ p, |w| = p.norm
Tactic:
refine' IH w.natAbs _ C' w HCDcoprime hwodd _ rfl
Proof state after:
case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
w : ℤ
hwdvd : w ∣ z
hwodd : Odd w
⊢ w.natAbs < x.natAbs

case h.inr.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
x : ℤ
hodd : Odd x
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
h0 : x ≠ 0
h0' : 1 ≤ |x|
h : 1 < |x|
c' m : ℤ√(-3)
hcoprime : IsCoprime (c' + m * ↑x).re (c' + m * ↑x).im
hfactor : x ∣ (c' + m * ↑x).norm
hneg1 : 1 ≤ (c' + m * ↑x).norm
h1 : c' ≠ 0
y : ℤ
hy : c'.norm = x * y
h3 : y.natAbs < x.natAbs
h4 : c'.norm ≠ 0
g : ℕ := c'.re.gcd c'.im
hg : g = c'.re.gcd c'.im
hgpos : 0 < g
C' : ℤ√(-3)
HC' : c' = ↑↑(c'.re.gcd c'.im) * C'
HCDcoprime : IsCoprime C'.re C'.im
h5 : x * y = ↑g ^ 2 * C'.norm
z : ℤ
hz : y = ↑g ^ 2 * z
h6 : x * z = C'.norm
h8 : z ≠ 0
w : ℤ
hwdvd : w ∣ z
hwodd : Odd w
⊢ w ∣ C'.norm
Theorem: factors
Proof state before:
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
⊢ 1 ≤ a.norm
Tactic:
rw [← Int.sub_one_lt_iff, sub_self]
Proof state after:
a : ℤ√(-3)
x : ℤ
hcoprime : IsCoprime a.re a.im
hodd : Odd x
hfactor : x ∣ a.norm
IH : ∀ m < x.natAbs, ∀ (a : ℤ√(-3)) (x : ℤ), IsCoprime a.re a.im → Odd x → x ∣ a.norm → x.natAbs = m → ∃ c, |x| = c.norm
⊢ 0 < a.norm