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 declaration uses `sorry`Rat.between_int (x:) : ∃! n:, n x x < n+1 := x:∃! n, n x x < n + 1 All goals completed! 🐙
theorem declaration uses `sorry`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 < yx < (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 < yx * (1 / 2) < y * (1 / 2) x:y:h:x < y0 < 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 declaration uses `sorry`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 declaration uses `sorry`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 declaration uses `sorry`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! 🐙
even_iff_exists_two_mul.{u_2} {α : Type u_2} [Semiring α] {a : α} : Even a   b, a = 2 * b
odd_iff_exists_bit1.{u_2} {α : Type u_2} [Semiring α] {a : α} : Odd a   b, a = 2 * b + 1
theorem declaration uses `sorry`Nat.even_or_odd'' (n:) : Even n Odd n := n:Even n Odd n All goals completed! 🐙theorem declaration uses `sorry`Nat.not_even_and_odd (n:) : ¬ (Even n Odd n) := n:¬(Even n Odd n) All goals completed! 🐙
Nat.rec.{u} {motive :   Sort u} (zero : motive Nat.zero) (succ : (n : )  motive n  motive n.succ) (t : ) :
  motive t

Proposition 4.4.4 / Exercise 4.4.3

theorem declaration uses `sorry`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 = 2False; x:hx:x ^ 2 = 2False 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 > 0Falsex:hx:x ^ 2 = 2hnon:x 0hpos:x > 0False 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 > 0False 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 > 0x < 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 > 0x.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.numx.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.denx.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.denx.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.denx.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 * 2x.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 * 20 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.toNatx.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 * 2x.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 ^ 2False 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 ^ 2Even (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 0False 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 pFalse 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) tFalse 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) tP (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) na (n + 1) < a n All goals completed! 🐙 All goals completed! 🐙

Proposition 4.4.5

theorem Rat.exist_approx_sqrt_two {ε:} (:ε>0) : x (0:), x^2 < 2 2 < (x+ε)^2 := ε::ε > 0 x 0, x ^ 2 < 2 2 < (x + ε) ^ 2 -- This proof is written to follow the structure of the original text. ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2False have (n:): (n*ε)^2 < 2 := ε::ε > 0 x 0, x ^ 2 < 2 2 < (x + ε) ^ 2 ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2(0 * ε) ^ 2 < 2ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2n:hn:(n * ε) ^ 2 < 2((n + 1) * ε) ^ 2 < 2; ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2n:hn:(n * ε) ^ 2 < 2((n + 1) * ε) ^ 2 < 2 ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2n:hn:(n * ε) ^ 2 < 2(n * ε + ε) ^ 2 < 2 apply lt_of_le_of_ne (h (n*ε) (ε::ε > 0h: x 0, x ^ 2 < 2 (x + ε) ^ 2 2n:hn:(n * ε) ^ 2 < 2n * ε 0 All goals completed! 🐙) hn) ε::ε > 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! 🐙 ε::ε > 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 )) 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 ε::ε > 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 )) 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 * ε) ^ 2Falseε::ε > 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 )) 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ε::ε > 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 )) 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 * εε::ε > 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 )) 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 / ε < n0 < ε ε::ε > 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 )) 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 * ε) ^ 2Falseε::ε > 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 )) 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ε::ε > 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 )) 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 * εε::ε > 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 )) 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 / ε < n0 < ε 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! 🐙