Gaps in the rational numbers
Analysis I, Section 4.4: gaps in the rational numbers
I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.
Main constructions and results of this section:
-
Irrationality of √2, and related facts about the rational numbers
Many of the results here can be established more quickly by relying more heavily on the Mathlib API; one can set oneself the exercise of doing so.
Tips from past users
Users of the companion who have completed the exercises in this section are welcome to send their tips for future users in this section as PRs.
-
(Add tip here)
Proposition 4.4.1 (Interspersing of integers by rationals) / Exercise 4.4.1
theorem Rat.between_int (x:ℚ) : ∃! n:ℤ, n ≤ x ∧ x < n+1 := x:ℚ⊢ ∃! n, ↑n ≤ x ∧ x < ↑n + 1
All goals completed! 🐙theorem Nat.exists_gt (x:ℚ) : ∃ n:ℕ, n > x := x:ℚ⊢ ∃ n, ↑n > x
All goals completed! 🐙Proposition 4.4.3 (Interspersing of rationals)
theorem Rat.exists_between_rat {x y:ℚ} (h: x < y) : ∃ z:ℚ, x < z ∧ z < y := x:ℚy:ℚh:x < y⊢ ∃ z, x < z ∧ z < y
-- This proof is written to follow the structure of the original text.
-- The reader is encouraged to find shorter proofs, for instance
-- using Mathlib's `linarith` tactic.
x:ℚy:ℚh:x < y⊢ x < (x + y) / 2 ∧ (x + y) / 2 < y
have h' : x/2 < y/2 := x:ℚy:ℚh:x < y⊢ ∃ z, x < z ∧ z < y
x:ℚy:ℚh:x < y⊢ x * (1 / 2) < y * (1 / 2)
x:ℚy:ℚh:x < y⊢ 0 < 1 / 2; All goals completed! 🐙
x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ x < (x + y) / 2x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ (x + y) / 2 < y
x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ x < (x + y) / 2 x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ x = x / 2 + x / 2x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ (x + y) / 2 = x / 2 + y / 2 x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ x = x / 2 + x / 2x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ (x + y) / 2 = x / 2 + y / 2 All goals completed! 🐙
x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ (x + y) / 2 = y / 2 + x / 2x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ y = y / 2 + y / 2 x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ (x + y) / 2 = y / 2 + x / 2x:ℚy:ℚh:x < yh':x / 2 < y / 2 :=
Eq.mpr
(id
(congrArg (fun _a => _a < y / 2)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf x)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left x (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (x ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (x ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(Eq.mpr
(id
(congrArg (fun _a => x * (1 / 2) < _a)
(have this :=
Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1)
(Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.atom_pf y)
(Mathlib.Tactic.Ring.div_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.div_pf
(Mathlib.Tactic.Ring.inv_single
(Mathlib.Meta.NormNum.IsNNRat.to_raw_eq
(Mathlib.Meta.NormNum.isNNRat_inv_pos
(Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 2)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (NNRat.rawCast 1 2 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left y (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (NNRat.rawCast 1 2)))
(Mathlib.Tactic.Ring.mul_zero (y ^ Nat.rawCast 1 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (NNRat.rawCast 1 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (y ^ Nat.rawCast 1 * NNRat.rawCast 1 2 + 0))));
this)))
(mul_lt_mul_of_pos_right h
(div_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2))))))⊢ y = y / 2 + y / 2 All goals completed! 🐙Exercise 4.4.2 (a)
theorem Nat.no_infinite_descent : ¬ ∃ a:ℕ → ℕ, ∀ n, a (n+1) < a n := ⊢ ¬∃ a, ∀ (n : ℕ), a (n + 1) < a n
All goals completed! 🐙Exercise 4.4.2 (b)
def Int.infinite_descent : Decidable (∃ a:ℕ → ℤ, ∀ n, a (n+1) < a n) := ⊢ Decidable (∃ a, ∀ (n : ℕ), a (n + 1) < a n)
-- the first line of this construction should be either `apply isTrue` or `apply isFalse`.
All goals completed! 🐙Exercise 4.4.2 (b)
def Rat.pos_infinite_descent : Decidable (∃ a:ℕ → {x: ℚ // 0 < x}, ∀ n, a (n+1) < a n) := ⊢ Decidable (∃ a, ∀ (n : ℕ), a (n + 1) < a n)
-- the first line of this construction should be either `apply isTrue` or `apply isFalse`.
All goals completed! 🐙theorem Nat.even_or_odd'' (n:ℕ) : Even n ∨ Odd n := n:ℕ⊢ Even n ∨ Odd n
All goals completed! 🐙theorem Nat.not_even_and_odd (n:ℕ) : ¬ (Even n ∧ Odd n) := n:ℕ⊢ ¬(Even n ∧ Odd n)
All goals completed! 🐙Proposition 4.4.4 / Exercise 4.4.3
theorem Rat.not_exist_sqrt_two : ¬ ∃ x:ℚ, x^2 = 2 := ⊢ ¬∃ x, x ^ 2 = 2
-- This proof is written to follow the structure of the original text.
h:∃ x, x ^ 2 = 2⊢ False; x:ℚhx:x ^ 2 = 2⊢ False
have hnon : x ≠ 0 := ⊢ ¬∃ x, x ^ 2 = 2 All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0 :=
id
(Aesop.BuiltinRules.not_intro fun a =>
Eq.ndrec (motive := fun x => x ^ 2 = 2 → False)
(fun hx =>
False.elim
(Eq.mp
(Eq.trans
(congrFun'
(congrArg Eq
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
2)
(OfNat.zero_ne_ofNat._simp_1 2))
hx))
(Eq.symm a) hx)this:∀ (x : ℚ), x ^ 2 = 2 → x ≠ 0 → x > 0 → Falsehpos:¬x > 0⊢ Falsex:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0⊢ False
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0 :=
id
(Aesop.BuiltinRules.not_intro fun a =>
Eq.ndrec (motive := fun x => x ^ 2 = 2 → False)
(fun hx =>
False.elim
(Eq.mp
(Eq.trans
(congrFun'
(congrArg Eq
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
2)
(OfNat.zero_ne_ofNat._simp_1 2))
hx))
(Eq.symm a) hx)this:∀ (x : ℚ), x ^ 2 = 2 → x ≠ 0 → x > 0 → Falsehpos:¬x > 0⊢ False apply this _ _ _ (show -x>0 ⊢ ¬∃ x, x ^ 2 = 2 x:ℚhx:x ^ 2 = 2hnon:x ≠ 0 :=
id
(Aesop.BuiltinRules.not_intro fun a =>
Eq.ndrec (motive := fun x => x ^ 2 = 2 → False)
(fun hx =>
False.elim
(Eq.mp
(Eq.trans
(congrFun'
(congrArg Eq
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
2)
(OfNat.zero_ne_ofNat._simp_1 2))
hx))
(Eq.symm a) hx)this:∀ (x : ℚ), x ^ 2 = 2 → x ≠ 0 → x > 0 → Falsehpos:¬x > 0⊢ x < 0; All goals completed! 🐙) x:ℚhx:x ^ 2 = 2hnon:x ≠ 0 :=
id
(Aesop.BuiltinRules.not_intro fun a =>
Eq.ndrec (motive := fun x => x ^ 2 = 2 → False)
(fun hx =>
False.elim
(Eq.mp
(Eq.trans
(congrFun'
(congrArg Eq
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
2)
(OfNat.zero_ne_ofNat._simp_1 2))
hx))
(Eq.symm a) hx)this:∀ (x : ℚ), x ^ 2 = 2 → x ≠ 0 → x > 0 → Falsehpos:¬x > 0⊢ (-x) ^ 2 = 2x:ℚhx:x ^ 2 = 2hnon:x ≠ 0 :=
id
(Aesop.BuiltinRules.not_intro fun a =>
Eq.ndrec (motive := fun x => x ^ 2 = 2 → False)
(fun hx =>
False.elim
(Eq.mp
(Eq.trans
(congrFun'
(congrArg Eq
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
2)
(OfNat.zero_ne_ofNat._simp_1 2))
hx))
(Eq.symm a) hx)this:∀ (x : ℚ), x ^ 2 = 2 → x ≠ 0 → x > 0 → Falsehpos:¬x > 0⊢ -x ≠ 0 All goals completed! 🐙
have hrep : ∃ p q:ℕ, p > 0 ∧ q > 0 ∧ p^2 = 2*q^2 := ⊢ ¬∃ x, x ^ 2 = 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0⊢ x.num.toNat > 0 ∧ x.den > 0 ∧ x.num.toNat ^ 2 = 2 * x.den ^ 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.num⊢ x.num.toNat > 0 ∧ x.den > 0 ∧ x.num.toNat ^ 2 = 2 * x.den ^ 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.den⊢ x.num.toNat > 0 ∧ x.den > 0 ∧ x.num.toNat ^ 2 = 2 * x.den ^ 2
refine ⟨ x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.den⊢ x.num.toNat > 0 All goals completed! 🐙, hden_pos, ?_ ⟩
x:ℚhx:(↑x.num / ↑x.den) ^ 2 = 2hnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.den⊢ x.num.toNat ^ 2 = 2 * x.den ^ 2; x:ℚhnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.denhx:↑x.num ^ 2 = ↑x.den ^ 2 * 2⊢ x.num.toNat ^ 2 = 2 * x.den ^ 2
have hnum_cast : x.num = x.num.toNat := Int.eq_natCast_toNat.mpr (x:ℚhnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.denhx:↑x.num ^ 2 = ↑x.den ^ 2 * 2⊢ 0 ≤ x.num All goals completed! 🐙)
x:ℚhnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.denhx:↑↑x.num.toNat ^ 2 = ↑x.den ^ 2 * 2hnum_cast:x.num = ↑x.num.toNat⊢ x.num.toNat ^ 2 = 2 * x.den ^ 2; x:ℚhnon:x ≠ 0hpos:x > 0hnum_pos:0 < x.numhden_pos:0 < x.denhnum_cast:x.num = ↑x.num.toNathx:x.num.toNat ^ 2 = x.den ^ 2 * 2⊢ x.num.toNat ^ 2 = 2 * x.den ^ 2; All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2⊢ False
have hP : ∃ p, P p := ⊢ ¬∃ x, x ^ 2 = 2 All goals completed! 🐙
have hiter (p:ℕ) (hPp: P p) : ∃ q, q < p ∧ P q := ⊢ ¬∃ x, x ^ 2 = 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Even p⊢ ∃ q < p, P qx:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Odd p⊢ ∃ q < p, P q
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Even p⊢ ∃ q < p, P q x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:∃ b, p = 2 * b⊢ ∃ q < p, P q
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)⊢ ∃ q < 2 * k, P q
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2⊢ ∃ q < 2 * k, P q
have : q^2 = 2 * k^2 := ⊢ ¬∃ x, x ^ 2 = 2 All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2this:q ^ 2 = 2 * k ^ 2 :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt (Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))⊢ q < 2 * k ∧ P q; x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2this:q ^ 2 = 2 * k ^ 2 :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt (Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))⊢ q < 2 * kx:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2this:q ^ 2 = 2 * k ^ 2 :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt (Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))⊢ P q
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2this:q ^ 2 = 2 * k ^ 2 :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt (Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))⊢ q < 2 * k All goals completed! 🐙
exact ⟨ hpos, k, x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos✝)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos✝));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))k:ℕhPp:P (2 * k)q:ℕhpos:q > 0hq:(2 * k) ^ 2 = 2 * q ^ 2this:q ^ 2 = 2 * k ^ 2 :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast + (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + (↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2) (congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
hq)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt (Eq.trans (Nat.cast_mul 2 (k ^ 2)) (congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))⊢ k > 0 All goals completed! 🐙, this ⟩
have h1 : Odd (p^2) := ⊢ ¬∃ x, x ^ 2 = 2
All goals completed! 🐙
have h2 : Even (p^2) := ⊢ ¬∃ x, x ^ 2 = 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Odd ph1:Odd (p ^ 2) := sorryq:ℕhpos:q > 0hq:p ^ 2 = 2 * q ^ 2⊢ Even (p ^ 2)
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos✝:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Odd ph1:Odd (p ^ 2) := sorryq:ℕhpos:q > 0hq:p ^ 2 = 2 * q ^ 2⊢ ∃ b, p ^ 2 = 2 * b
All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))p:ℕhPp:P php:Odd ph1:Odd (p ^ 2) := sorryh2:Even (p ^ 2) :=
(fun q x => Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right)this:¬(Even (p ^ 2) ∧ Odd (p ^ 2))⊢ ∃ q < p, P q
All goals completed! 🐙
classical
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0⊢ False
have hf (p:ℕ) (hPp: P p) : (f p < p) ∧ P (f p) := ⊢ ¬∃ x, x ^ 2 = 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hP:∃ p, P p :=
of_eq_true
(Eq.trans
(congrArg Exists
(funext fun p =>
congrFun'
(funext fun p =>
congr (congrArg And gt_iff_lt._simp_1)
(congrArg Exists (funext fun q => congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
p))
(eq_true
(id
(Eq.mp
(congrArg Exists
(funext fun p =>
Eq.trans
(congrArg Exists
(funext fun q =>
congr (congrArg And gt_iff_lt._simp_1)
(congrFun' (congrArg And gt_iff_lt._simp_1) (p ^ 2 = 2 * q ^ 2))))
exists_and_left._simp_1))
hrep))))hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0p:ℕhPp:P p⊢ ⋯.choose < p ∧ P ⋯.choose; All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0hf:∀ (p : ℕ), P p → f p < p ∧ P (f p) :=
fun p hPp =>
Eq.mpr
(id
(congr (congrArg And (congrFun' (congrArg LT.lt (dite_cond_eq_true (eq_true hPp))) p))
(congrArg P (dite_cond_eq_true (eq_true hPp)))))
(Exists.choose_spec (hiter p hPp))p:ℕhP:P p⊢ False
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0hf:∀ (p : ℕ), P p → f p < p ∧ P (f p) :=
fun p hPp =>
Eq.mpr
(id
(congr (congrArg And (congrFun' (congrArg LT.lt (dite_cond_eq_true (eq_true hPp))) p))
(congrArg P (dite_cond_eq_true (eq_true hPp)))))
(Exists.choose_spec (hiter p hPp))p:ℕhP:P pa:ℕ → ℕ := fun t => Nat.rec p (fun n p => f p) t⊢ False
have ha (n:ℕ) : P (a n) := ⊢ ¬∃ x, x ^ 2 = 2
induction n with
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0hf:∀ (p : ℕ), P p → f p < p ∧ P (f p) :=
fun p hPp =>
Eq.mpr
(id
(congr (congrArg And (congrFun' (congrArg LT.lt (dite_cond_eq_true (eq_true hPp))) p))
(congrArg P (dite_cond_eq_true (eq_true hPp)))))
(Exists.choose_spec (hiter p hPp))p:ℕhP:P pa:ℕ → ℕ := fun t => Nat.rec p (fun n p => f p) t⊢ P (a 0) All goals completed! 🐙
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0hf:∀ (p : ℕ), P p → f p < p ∧ P (f p) :=
fun p hPp =>
Eq.mpr
(id
(congr (congrArg And (congrFun' (congrArg LT.lt (dite_cond_eq_true (eq_true hPp))) p))
(congrArg P (dite_cond_eq_true (eq_true hPp)))))
(Exists.choose_spec (hiter p hPp))p:ℕhP:P pa:ℕ → ℕ := fun t => Nat.rec p (fun n p => f p) tn:ℕih:P (a n)⊢ P (a (n + 1)) All goals completed! 🐙
have hlt (n:ℕ) : a (n+1) < a n := ⊢ ¬∃ x, x ^ 2 = 2
x:ℚhx:x ^ 2 = 2hnon:x ≠ 0hpos:x > 0hrep:∃ p q, p > 0 ∧ q > 0 ∧ p ^ 2 = 2 * q ^ 2 :=
Exists.intro x.num.toNat
(Exists.intro x.den
⟨of_eq_true
(Eq.trans gt_iff_lt._simp_1
(Eq.trans Int.lt_toNat._simp_1
(Eq.trans (Eq.trans (congrFun' (congrArg LT.lt (CharP.cast_eq_zero ℤ 0)) x.num) num_pos._simp_1)
(eq_true hpos)))),
⟨den_pos x,
have hnum_cast := Int.eq_natCast_toNat.mpr (le_of_lt (Mathlib.Meta.Positivity.num_pos_of_pos hpos));
not_exist_sqrt_two._proof_4 x
(Eq.mp
(Eq.trans
(Eq.trans
(congr
(congrArg Eq
(Eq.trans (Int.cast_pow._simp_1 (↑x.num.toNat) 2)
(congrArg Int.cast (Nat.cast_pow._simp_1 x.num.toNat 2))))
(Eq.trans (congrFun' (congrArg HMul.hMul (Nat.cast_pow._simp_1 x.den 2)) ↑2)
(Nat.cast_mul._simp_1 (x.den ^ 2) 2)))
(congrArg (Eq ↑↑(x.num.toNat ^ 2))
(Eq.trans
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2) (congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2))
(Eq.symm
(Eq.trans
(Eq.trans
(congrArg Int.cast
(Eq.trans (Nat.cast_mul (x.den ^ 2) 2)
(congrFun' (congrArg HMul.hMul (Nat.cast_pow x.den 2)) 2)))
(Int.cast_mul (↑x.den ^ 2) 2))
(congr
(congrArg HMul.hMul
(Eq.trans (Int.cast_pow (↑x.den) 2)
(congrFun' (congrArg HPow.hPow (Int.cast_natCast x.den)) 2)))
(Int.cast_ofNat 2)))))))
(Eq.trans
(Eq.trans Int.cast_inj._simp_1
(congrArg (fun x_1 => x_1 = ↑(x.den ^ 2 * 2))
(Eq.trans (Nat.cast_pow x.num.toNat 2) (Eq.symm (Nat.cast_pow x.num.toNat 2)))))
Nat.cast_inj._simp_1))
(Eq.mp (congrArg (fun _a => ↑_a ^ 2 = ↑x.den ^ 2 * 2) hnum_cast)
(Eq.mp
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul
(Eq.trans (congr_arg (fun x => x ^ 2) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.pow_eq_eval (of_decide_eq_true (id (Eq.refl true)))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl ↑x.num) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.num))
(Eq.trans (Eq.refl ↑x.den) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ↑x.den))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, ↑x.den) (div_one ((1, ↑x.num) ::ᵣ []).eval))))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-2) (↑x.den)
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 2 (↑x.num)
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.num) (Eq.symm (div_one 1)))
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.num ^ 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.num) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.num).2 (2, ↑x.num).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.num) (of_decide_eq_true (id (Eq.refl true))))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl
(Eq.trans (Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 2
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-2)
(ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 2
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 2 (↑x.den) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) ((2, ↑x.den) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = ↑x.den ^ 2)
(Mathlib.Tactic.FieldSimp.NF.eval_cons (2, ↑x.den) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (2, ↑x.den).2 (2, ↑x.den).1))
(Mathlib.Tactic.FieldSimp.zpow'_ofNat (↑x.den) (of_decide_eq_true (id (Eq.refl true))))))
(Mathlib.Tactic.FieldSimp.zpow'_one 2)))))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-2) (ne_of_gt (Nat.cast_pos'.mpr (den_pos x)))
one_ne_zero))
(Eq.mp (congrArg (fun _a => _a ^ 2 = 2) (Eq.symm (num_div_den x))) hx))))⟩⟩)P:ℕ → Prop := fun p => p > 0 ∧ ∃ q > 0, p ^ 2 = 2 * q ^ 2hiter:∀ (p : ℕ), P p → ∃ q < p, P q :=
fun p hPp =>
Or.casesOn (Nat.even_or_odd'' p)
(fun hp =>
Exists.casesOn (Eq.mp (congrArg (fun _a => _a) (propext even_iff_exists_two_mul)) hp) fun k h =>
Eq.ndrec (motive := fun p => P p → ∃ q < p, P q)
(fun hPp =>
(fun q x =>
have this :=
Mathlib.Tactic.Linarith.eq_of_not_lt_of_not_gt (q ^ 2) (2 * k ^ 2)
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_gt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.negOfNat 4)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (q ^ 2) (2 * k ^ 2))
(congr (congrArg LT.lt (Nat.cast_pow q 2))
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2)))))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))))
(Not.intro fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.pow_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 2)
(Mathlib.Meta.NormNum.IsNatPowT.run
Mathlib.Meta.NormNum.IsNatPowT.bit0)))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 4)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 4))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.negOfNat 4))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 2)))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * (Int.negOfNat 4).rawCast +
(↑q ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑k ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑q)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑q ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑q ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑q) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 4))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑k ^ Nat.rawCast 2 * Nat.rawCast 4)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 1 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 2 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 2 +
(↑k ^ Nat.rawCast 2 * Nat.rawCast 4 +
(↑q ^ Nat.rawCast 2 * (Int.negOfNat 2).rawCast + 0))))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 4))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 4))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑q) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.lt_of_lt_of_eq
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false)))
(neg_eq_zero.mpr
(sub_eq_zero_of_eq
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_eq._simp_1 ((2 * k) ^ 2) (2 * q ^ 2))
(congr
(congrArg Eq
(Eq.trans (Nat.cast_pow (2 * k) 2)
(congrFun' (congrArg HPow.hPow (Nat.cast_mul 2 k)) 2)))
(Eq.trans (Nat.cast_mul 2 (q ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow q 2)))))
x.right)))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (2 * k ^ 2) (q ^ 2))
(congr
(congrArg LT.lt
(Eq.trans (Nat.cast_mul 2 (k ^ 2))
(congrArg (HMul.hMul 2) (Nat.cast_pow k 2))))
(Nat.cast_pow q 2)))
a))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))));
Exists.intro q
⟨sorry,
⟨x.left,
Exists.intro k
⟨lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_zero
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑k)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑k ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑k ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑k) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑k ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑k) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 k 0)
(congrArg (LE.le ↑k) Nat.cast_zero))
a)))
(Mathlib.Meta.NormNum.isNat_lt_true
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(Int.add_one_le_iff.mpr
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 0 (2 * k))
(congr (congrArg LT.lt Nat.cast_zero) (Nat.cast_mul 2 k)))
hPp.left)))))),
this⟩⟩⟩)
(Classical.choose hPp.right) (Classical.choose_spec hPp.right))
(Eq.symm h) hPp)
fun hp =>
have h1 := sorry;
have h2 :=
(fun q x =>
Eq.mpr (id (congrArg (fun _a => _a) (propext even_iff_exists_two_mul))) (Exists.intro (q ^ 2) x.right))
(Classical.choose hPp.right) (Classical.choose_spec hPp.right);
Exists.casesOn hrep fun w h =>
Exists.casesOn hP fun w_1 h_1 =>
And.casesOn hPp fun left right =>
Or.casesOn (Decidable.not_and_iff_not_or_not'.mp (Nat.not_even_and_odd (p ^ 2)))
(fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h2))
fun h_2 =>
Exists.casesOn h fun w_2 h =>
And.casesOn h_1 fun left right_1 =>
Exists.casesOn right fun w_3 h_3 =>
And.casesOn h fun left right =>
Exists.casesOn right_1 fun w_4 h =>
And.casesOn h_3 fun left right_2 =>
And.casesOn right fun left right => And.casesOn h fun left right => False.elim (h_2 h1)f:ℕ → ℕ := fun p => if hPp : P p then ⋯.choose else 0hf:∀ (p : ℕ), P p → f p < p ∧ P (f p) :=
fun p hPp =>
Eq.mpr
(id
(congr (congrArg And (congrFun' (congrArg LT.lt (dite_cond_eq_true (eq_true hPp))) p))
(congrArg P (dite_cond_eq_true (eq_true hPp)))))
(Exists.choose_spec (hiter p hPp))p:ℕhP:P pa:ℕ → ℕ := fun t => Nat.rec p (fun n p => f p) tha:∀ (n : ℕ), P (a n) := fun n => Nat.recAux hP (fun n ih => (hf (a n) ih).right) nn:ℕthis:a (n + 1) = f (a n) := Nat.rec_add_one p (fun n p => f p) n⊢ a (n + 1) < a n
All goals completed! 🐙
All goals completed! 🐙Proposition 4.4.5
theorem Rat.exist_approx_sqrt_two {ε:ℚ} (hε:ε>0) : ∃ x ≥ (0:ℚ), x^2 < 2 ∧ 2 < (x+ε)^2 := ε:ℚhε:ε > 0⊢ ∃ x ≥ 0, x ^ 2 < 2 ∧ 2 < (x + ε) ^ 2
-- This proof is written to follow the structure of the original text.
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2⊢ False
have (n:ℕ): (n*ε)^2 < 2 := ε:ℚhε:ε > 0⊢ ∃ x ≥ 0, x ^ 2 < 2 ∧ 2 < (x + ε) ^ 2
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2⊢ (↑0 * ε) ^ 2 < 2ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2n:ℕhn:(↑n * ε) ^ 2 < 2⊢ (↑(n + 1) * ε) ^ 2 < 2; ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2n:ℕhn:(↑n * ε) ^ 2 < 2⊢ (↑(n + 1) * ε) ^ 2 < 2
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2n:ℕhn:(↑n * ε) ^ 2 < 2⊢ (↑n * ε + ε) ^ 2 < 2
apply lt_of_le_of_ne (h (n*ε) (ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2n:ℕhn:(↑n * ε) ^ 2 < 2⊢ ↑n * ε ≥ 0 All goals completed! 🐙) hn)
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2n:ℕhn:(↑n * ε) ^ 2 < 2this:¬∃ x, x ^ 2 = 2 := not_exist_sqrt_two⊢ (↑n * ε + ε) ^ 2 ≠ 2
All goals completed! 🐙
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:↑n > 2 / ε⊢ False
ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 ^ 2 < (↑n * ε) ^ 2⊢ Falseε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 < ↑n * ε⊢ 0 ≤ 2ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 < ↑n * ε⊢ 0 ≤ ↑n * εε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 / ε < ↑n⊢ 0 < ε ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 ^ 2 < (↑n * ε) ^ 2⊢ Falseε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 < ↑n * ε⊢ 0 ≤ 2ε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 < ↑n * ε⊢ 0 ≤ ↑n * εε:ℚhε:ε > 0h:∀ x ≥ 0, x ^ 2 < 2 → (x + ε) ^ 2 ≤ 2this:∀ (n : ℕ), (↑n * ε) ^ 2 < 2 :=
fun n =>
Nat.recAux
(of_eq_true
(Eq.trans
(congrFun'
(congrArg LT.lt
(Eq.trans
(congrFun'
(congrArg HPow.hPow (Eq.trans (congrFun' (congrArg HMul.hMul (CharP.cast_eq_zero ℚ 0)) ε) (zero_mul ε)))
2)
(zero_pow (of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
2)
Nat.ofNat_pos._simp_1))
(fun n hn =>
Eq.mpr
(id
(congrFun'
(congrArg LT.lt
(congrFun'
(congrArg HPow.hPow
(Eq.trans
(Eq.trans
(congrFun'
(congrArg HMul.hMul (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd ↑n) Nat.cast_one))) ε)
(add_mul (↑n) 1 ε))
(congrArg (HAdd.hAdd (↑n * ε)) (one_mul ε))))
2))
2))
(lt_of_le_of_ne (h (↑n * ε) (mul_nonneg (Nat.cast_nonneg' n) (le_of_lt hε)) hn)
(have this := not_exist_sqrt_two;
of_eq_true
(Eq.trans (congrArg Not ((fun x => eq_false (id (Eq.mp not_exists._simp_1 this) x)) (↑n * ε + ε)))
not_false_eq_true))))
nn:ℕhn:2 / ε < ↑n⊢ 0 < ε try All goals completed! 🐙
All goals completed! 🐙Example 4.4.6
example :
let ε:ℚ := 1/1000
let x:ℚ := 1414/1000
x^2 < 2 ∧ 2 < (x+ε)^2 := ⊢ let ε := 1 / 1000;
let x := 1414 / 1000;
x ^ 2 < 2 ∧ 2 < (x + ε) ^ 2 All goals completed! 🐙