/- Copyright 2025 The Formal Conjectures Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -/ import FormalConjecturesUtil

Mathoverflow 34145

Can the unit square be covered by $1/k$-by-$1/(k+1)$ rectangles (across $1 \le k$ natural)?

I am deliberately not requiring that the rotations can only be $0^\circ, 90^\circ, 180^\circ, \text{ or } 270^\circ$.

Because of indexing, since n : ℕ starts at 0, we change the side lengths to $1 / (n + 1)$ and $1 / (n + 2)$, so that the first rectangle is $1/1$ by $1/2$, the second is $1/2$ by $1/3$, etc.

Reference: mathoverflow/34145 asked by user Kaveh

open Real MeasureTheory Measure Modulenamespace Mathoverflow34145

A rectangle is specified by its width, height, starting point, and rotation. The rectangle is assumed to start in the lower left corner. For example, the unit square ${ (x, y) \mid 0 \le x \le 1, 0 \le y \le 1 }$ is specified as ⟨1, 1, (0, 0), 0⟩

structure Rectangle : Type where width : height : start : × rotation : Angle

A combination of a rotation and a translation to map the standard rectangle to the desired rectangle.

noncomputable def rigidMotion (start : × ) (θ : Angle) (p : × ) : ( × ) := (start.1 + p.1 * θ.cos - p.2 * θ.sin, start.2 + p.1 * θ.sin + p.2 * θ.cos) @[category test, AMS 51] lemma rigidMotion_test : rigidMotion (sqrt 2, sqrt 11) (2 * π / 3 : ) (sqrt 5, sqrt 7) = (sqrt 2 - sqrt 5 / 2 - sqrt 21 / 2, -sqrt 7 / 2 + sqrt 11 + sqrt 15 / 2) := rigidMotion (2, 11) (2 * π / 3) (5, 7) = (2 - 5 / 2 - 21 / 2, -7 / 2 + 11 + 15 / 2) 2 + 5 * (2 * (2 ^ 2)⁻¹ - 1) - 7 * (2 * (3 / 2) * 2⁻¹) = 2 - 5 / 2 - 3 * (7 / 2) 11 + 5 * (2 * (3 / 2) * 2⁻¹) + 7 * (2 * (2 ^ 2)⁻¹ - 1) = -7 / 2 + 11 + 3 * (5 / 2) True True; All goals completed! 🐙

A scaling to map the unit square to a standard rectangle.

noncomputable def scale (x y : ) (p : × ) : ( × ) := (x * p.1, y * p.2)

The unit square.

def unitSquare : Set ( × ) := { p | 0 p.1 p.1 1 0 p.2 p.2 1 }

Converts a rectangle to a set in ℝ × ℝ.

def Rectangle.toSet (r : Rectangle) : Set ( × ) := rigidMotion r.start r.rotation '' (scale r.width r.height '' unitSquare)

The standard Lebesgue measure on ℝ².

noncomputable abbrev lbMeasure : Measure ( × ) := (Basis.finTwoProd ).addHaar

lbMeasure is invariant under rigidMotion start θ.

@[category test, AMS 51] lemma lbMeasure_rigidMotion (start : × ) (θ : Angle) (s : Set ( × )) : lbMeasure (rigidMotion start θ '' s) = lbMeasure s := start: × θ:Angles:Set ( × )lbMeasure (rigidMotion start θ '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)lbMeasure (rigidMotion start θ '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)lbMeasure (rigidMotion start θ '' s) = (Basis.finTwoProd ).addHaar (α '' s)start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)(Basis.finTwoProd ).addHaar (α '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)lbMeasure (rigidMotion start θ '' s) = (Basis.finTwoProd ).addHaar (α '' s) exact (measure_preimage_add_right _ start _).symm.trans (congr_arg _ (Set.ext <| start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos) (x : × ), x (fun h => h + start) ⁻¹' (rigidMotion start θ '' s) x α '' s All goals completed! 🐙)) start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)(Basis.finTwoProd ).addHaar (α '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd (Basis.finTwoProd ).addHaar (α '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd (Basis.finTwoProd ).addHaar (α '' s) = β.addHaar (((β.constr ) ![α (β 0), α (β 1)]) '' s)start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd β.addHaar (((β.constr ) ![α (β 0), α (β 1)]) '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd (Basis.finTwoProd ).addHaar (α '' s) = β.addHaar (((β.constr ) ![α (β 0), α (β 1)]) '' s) exact congr_arg _ <| Set.image_congr <| start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd a s, α a = ((β.constr ) ![α (β 0), α (β 1)]) a All goals completed! 🐙 start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd β.addHaar (((β.constr ) ![α (β 0), α (β 1)]) '' s) = lbMeasure s start: × θ:Angles:Set ( × )α: × × := fun x => (x.1 * θ.cos - x.2 * θ.sin, x.1 * θ.sin + x.2 * θ.cos)β:Basis (Fin 2) ( × ) := Basis.finTwoProd lbMeasure s = ENNReal.ofReal |(LinearMap.toMatrix β β) ((β.constr ) ![α (β 0), α (β 1)]) 0 0 * (LinearMap.toMatrix β β) ((β.constr ) ![α (β 0), α (β 1)]) 1 1 - (LinearMap.toMatrix β β) ((β.constr ) ![α (β 0), α (β 1)]) 0 1 * (LinearMap.toMatrix β β) ((β.constr ) ![α (β 0), α (β 1)]) 1 0| * β.addHaar s All goals completed! 🐙

lbMeasure is scaled by scale.

@[category test, AMS 51] lemma lbMeasure_scale (x y : ) (s : Set ( × )) : lbMeasure (scale x y '' s) = .ofReal |x * y| * lbMeasure s := x:y:s:Set ( × )lbMeasure (scale x y '' s) = ENNReal.ofReal |x * y| * lbMeasure s let scaleLinear : ( × ) →ₗ[] ( × ) := { toFun p := (x * p.1, y * p.2) map_add' p q := x:y:s:Set ( × )p: × q: × (x * (p + q).1, y * (p + q).2) = (x * p.1, y * p.2) + (x * q.1, y * q.2) All goals completed! 🐙 map_smul' c p := x:y:s:Set ( × )c:p: × (x * (c p).1, y * (c p).2) = (RingHom.id ) c (x * p.1, y * p.2) All goals completed! 🐙 } x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfllbMeasure (scale x y '' s) = ENNReal.ofReal |x * y| * lbMeasure s have h₂ : scaleLinear.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd ) = !![x, 0; 0, y] := x:y:s:Set ( × )lbMeasure (scale x y '' s) = ENNReal.ofReal |x * y| * lbMeasure s x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfli:Fin 2j:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) scaleLinear i j = !![x, 0; 0, y] i j; x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfli:Fin 2j:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } i j = !![x, 0; 0, y] i j; x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rflj:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 0, ) j = !![x, 0; 0, y] ((fun i => i) 0, ) jx:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rflj:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) j = !![x, 0; 0, y] ((fun i => i) 1, ) j x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rflj:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 0, ) j = !![x, 0; 0, y] ((fun i => i) 0, ) jx:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rflj:Fin 2(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) j = !![x, 0; 0, y] ((fun i => i) 1, ) j x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) ((fun i => i) 0, ) = !![x, 0; 0, y] ((fun i => i) 1, ) ((fun i => i) 0, )x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) ((fun i => i) 1, ) = !![x, 0; 0, y] ((fun i => i) 1, ) ((fun i => i) 1, ) x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 0, ) ((fun i => i) 0, ) = !![x, 0; 0, y] ((fun i => i) 0, ) ((fun i => i) 0, )x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 0, ) ((fun i => i) 1, ) = !![x, 0; 0, y] ((fun i => i) 0, ) ((fun i => i) 1, )x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) ((fun i => i) 0, ) = !![x, 0; 0, y] ((fun i => i) 1, ) ((fun i => i) 0, )x:y:s:Set ( × )scaleLinear: × →ₗ[] × := { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := }h₁:scale x y = scaleLinear := rfl(LinearMap.toMatrix (Basis.finTwoProd ) (Basis.finTwoProd )) { toFun := fun p => (x * p.1, y * p.2), map_add' := , map_smul' := } ((fun i => i) 1, ) ((fun i => i) 1, ) = !![x, 0; 0, y] ((fun i => i) 1, ) ((fun i => i) 1, ) All goals completed! 🐙 All goals completed! 🐙

The Lebesgue measure of the unit square is 1.

@[category test, AMS 51] lemma lbMeasure_unitSquare : lbMeasure unitSquare = 1 := lbMeasure unitSquare = 1 unitSquare = (Basis.finTwoProd ).parallelepiped p: × p unitSquare p (Basis.finTwoProd ).parallelepiped p: × 0 p.1 p.1 1 0 p.2 p.2 1 t, ((∀ (i : Fin 2), 0 i t i) (i : Fin 2), t i 1 i) p = (t 0, t 1) exact fun h ![p.1, p.2], p: × h:0 p.1 p.1 1 0 p.2 p.2 1((∀ (i : Fin 2), 0 i ![p.1, p.2] i) (i : Fin 2), ![p.1, p.2] i 1 i) p = (![p.1, p.2] 0, ![p.1, p.2] 1) All goals completed! 🐙, fun t, ht ht.2 ht.1.1 0, ht.1.2 0, ht.1.1 1, ht.1.2 1

The Lebesgue measure of the a rectangle r is r.width * r.height

@[category test, AMS 51] lemma lbMeasure_rectangle_toSet (r : Rectangle) : lbMeasure r.toSet = .ofReal |r.width * r.height| := r:RectanglelbMeasure r.toSet = ENNReal.ofReal |r.width * r.height| All goals completed! 🐙

The areas of the required rectangles sum to 1.

@[category test, AMS 51] lemma tsum_area_eq_one : ∑' (n : ), ((1 / (n + 1)) * (1 / (n + 2)) : ) = 1 := ∑' (n : ), 1 / (n + 1) * (1 / (n + 2)) = 1 have (n : ) : i Finset.range n, (1 / (i + 1) * (1 / (i + 2)) : ) = 1 - 1 / (n + 1) := ∑' (n : ), 1 / (n + 1) * (1 / (n + 2)) = 1 induction n with i Finset.range 0, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (0 + 1) All goals completed! 🐙 n:ih: i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) i Finset.range (n + 1), 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / ((n + 1) + 1) n:ih: i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1)1 - 1 / (n + 1) + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1); n:ih: i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1)((n + 1 - 1) * (n + 2) + 1) * ((n + 1) + 1) = (n + 1) * (n + 2) * ((n + 1) + 1 - 1); n:ih: i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1)((n + 1 - 1) * (n + 2) + 1) * (n + 1 + 1) = (n + 1) * (n + 2) * (n + 1 + 1 - 1); All goals completed! 🐙 this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) ni:0 1 / (i + 1) * (1 / (i + 2))this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) nFilter.Tendsto (fun n => i Finset.range n, 1 / (i + 1) * (1 / (i + 2))) Filter.atTop (nhds 1) this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) ni:0 1 / (i + 1) * (1 / (i + 2)) All goals completed! 🐙 this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) nFilter.Tendsto (fun n => i Finset.range n, 1 / (i + 1) * (1 / (i + 2))) Filter.atTop (nhds 1) simp_rw this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) nFilter.Tendsto (fun n => i Finset.range n, 1 / (i + 1) * (1 / (i + 2))) Filter.atTop (nhds 1)this] this: (n : ), i Finset.range n, 1 / (i + 1) * (1 / (i + 2)) = 1 - 1 / (n + 1) := fun n => Nat.recAux (of_eq_true (Eq.trans (congr (congrArg Eq (Finset.sum_congr (Eq.refl ) fun x a => congr (congrArg HMul.hMul (one_div (x + 1))) (one_div (x + 2)))) (Eq.trans (congrArg (HSub.hSub 1) (Eq.trans (congrArg (HDiv.hDiv 1) (Eq.trans (congrArg (fun x => x + 1) (CharP.cast_eq_zero 0)) (zero_add 1))) (div_self (of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true))))) (_root_.sub_self 1))) (eq_self 0))) (fun n ih => Eq.mpr (id (congrArg (fun _a => _a = 1 - 1 / ((n + 1) + 1)) (Finset.sum_range_succ (fun i => 1 / (i + 1) * (1 / (i + 2))) n))) (Eq.mpr (id (congrArg (fun _a => _a + 1 / (n + 1) * (1 / (n + 2)) = 1 - 1 / ((n + 1) + 1)) ih)) (Eq.mpr (id (Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 (n + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, n + 1 - 1) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1 - 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1 - 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1 - 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1 - 1).2 (1, n + 1 - 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1 - 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1)) (one_mul ((1, n + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 1) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl n) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval n)) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑n) (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 (↑n) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = n) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n).2 (1, n).1)) (Mathlib.Tactic.FieldSimp.zpow'_one n))))) (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 (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 (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 2) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 2).2 (1, 2).1)) (Mathlib.Tactic.FieldSimp.zpow'_one 2))))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 2)) (one_mul ((1, n + 2) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, n + 2) ::ᵣ []))) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (-1, n + 2) (mul_one ((-1, n + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1 - 1) * (n + 2) + 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1 - 1) * (n + 2) + 1) (mul_one ((-1, n + 2) ::ᵣ ((-1, n + 1) ::ᵣ [])).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 2) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (n + 1) (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 ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 ((n + 1 - 1) * (n + 2) + 1) (Eq.symm (div_one 1)))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) ((1, (n + 1 - 1) * (n + 2) + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = (n + 1 - 1) * (n + 2) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1 - 1) * (n + 2) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1 - 1) * (n + 2) + 1).2 (1, (n + 1 - 1) * (n + 2) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1 - 1) * (n + 2) + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.subst_sub (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1) + 1).2 (1, (n + 1) + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.div_eq_eval (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Mathlib.Tactic.FieldSimp.subst_add (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Eq.trans (Eq.refl (n + 1)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (n + 1))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (↑(n + 1)) (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 (↑(n + 1)) (Eq.symm (div_one 1))) (Eq.mpr (id (congrArg (fun _a => _a = (n + 1)) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1)) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, (n + 1)).2 (1, (n + 1)).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))))) (Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul rfl (Eq.trans (Mathlib.Tactic.FieldSimp.NF.one_eq_eval ) (Eq.symm (one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1)) (one_mul ((1, (n + 1) + 1) ::ᵣ []).eval)) (Mathlib.Tactic.FieldSimp.NF.one_div_eq_eval ((1, (n + 1) + 1) ::ᵣ []))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))) rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl)) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval ((n + 1) + 1 - 1)) (Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, (n + 1) + 1 - 1) (mul_one ((-1, (n + 1) + 1) ::ᵣ []).eval))) (Eq.symm (Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) ((n + 1) + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (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 ((n + 1) + 1 - 1) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 2) (Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (n + 1) (Eq.symm (div_one 1))))) (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, (n + 1) + 1 - 1) ((1, n + 2) ::ᵣ ((1, n + 1) ::ᵣ []))) (congr_arg₂ HMul.hMul (Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 2) ((1, n + 1) ::ᵣ [])) (congr_arg₂ HMul.hMul (Eq.mpr (id (congrArg (fun _a => _a = n + 1) (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, n + 1) []))) (Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, n + 1).2 (1, n + 1).1)) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 1)))) (Mathlib.Tactic.FieldSimp.zpow'_one (n + 2)))) (Mathlib.Tactic.FieldSimp.zpow'_one ((n + 1) + 1 - 1)))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (add_pos' (Nat.cast_pos'.mpr (Right.add_pos_of_nonneg_of_pos (zero_le n) (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 Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))) (Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1) (ne_of_gt (Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' n) (Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one) (Eq.refl (Nat.ble 1 1))))) one_ne_zero))))) (Eq.mpr (id (congr (congrArg (fun x => Eq (((n + 1 - 1) * (n + 2) + 1) * (x + 1))) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))) (congrArg (fun x => (n + 1) * (n + 2) * (x + 1 - 1)) (Eq.trans (Nat.cast_add n 1) (congrArg (HAdd.hAdd n) Nat.cast_one))))) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap_zero (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 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (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_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 2 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 4) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 4) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))))) (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2)) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_right (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 2 + (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 3)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf n) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.sub_pf (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_pf_add_overlap (Mathlib.Meta.NormNum.IsNat.to_raw_eq (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 1)) (Eq.refl (Int.ofNat 1))))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 1 * 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 (↑n) (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 (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 2))) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 3))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 1 * Nat.rawCast 3)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 3 + 0)))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑n) (Nat.rawCast 2) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑n) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 3))) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))) (Mathlib.Tactic.Ring.mul_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 2 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + (n ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.add_pf_add_zero (n ^ Nat.rawCast 2 * Nat.rawCast 1 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_pf_add_lt (n ^ Nat.rawCast 1 * Nat.rawCast 3) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 2) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 4)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Tactic.Ring.add_overlap_pf (↑n) (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Mathlib.Meta.NormNum.IsNat.of_raw 3) (Eq.refl 5)))) (Mathlib.Tactic.Ring.add_pf_zero_add (n ^ Nat.rawCast 2 * Nat.rawCast 4 + (n ^ Nat.rawCast 3 * Nat.rawCast 1 + 0)))))))))))) nnhds 1 = nhds (1 - 0) All goals completed! 🐙

A configuration of rectangles of sides 1 / (n + 1) and 1 / (n + 2).

structure Configuration : Type where rect (n : ) : Rectangle rect_width (n : ) : (rect n).width = 1 / (n + 1) rect_height (n : ) : (rect n).height = 1 / (n + 2)

A "packing" means that the interiors of any two rectangles are disjoint.

def Configuration.IsPacking (c : Configuration) : Prop := Pairwise fun m n interior (c.rect m).toSet interior (c.rect n).toSet =

Can a unit square be covered by rectangles of width 1 / (n + 1) and height 1 / (n + 2)?

@[category research open, AMS 51] theorem declaration uses 'sorry'rectangles_cover_unit_square : answer(sorry) c : Configuration, p unitSquare, n, p (c.rect n).toSet := True c, p unitSquare, n, p (c.rect n).toSet All goals completed! 🐙

Equivalently, can a unit square be packed with rectangles of width 1 / (n + 1) and height 1 / (n + 2)?

@[category research open, AMS 51] theorem declaration uses 'sorry'rectangles_pack_unit_square : answer(sorry) c : Configuration, ( n, (c.rect n).toSet unitSquare) c.IsPacking := True c, (∀ (n : ), (c.rect n).toSet unitSquare) c.IsPacking All goals completed! 🐙

It is known that packing the rectangles into a square of side length 133/132 is possible.

Reference: https://www.sciencedirect.com/science/article/pii/0097316594901163

@[category research solved, AMS 51] theorem declaration uses 'sorry'rectangles_pack_square_133_div_132 : ( c : Configuration, ( n, (c.rect n).toSet Rectangle.toSet 133/132, 133/132, (0, 0), 0) c.IsPacking) := c, (∀ (n : ), (c.rect n).toSet { width := 133 / 132, height := 133 / 132, start := (0, 0), rotation := 0 }.toSet) c.IsPacking All goals completed! 🐙

It is known that packing the rectangles into a square of side length 501/500 is possible.

Reference: https://www.sciencedirect.com/science/article/pii/S0167506008706009

@[category research solved, AMS 51] theorem declaration uses 'sorry'rectangles_pack_square_501_div_500 : ( c : Configuration, ( n, (c.rect n).toSet Rectangle.toSet 501/500, 501/500, (0, 0), 0) c.IsPacking) := c, (∀ (n : ), (c.rect n).toSet { width := 501 / 500, height := 501 / 500, start := (0, 0), rotation := 0 }.toSet) c.IsPacking All goals completed! 🐙 end Mathoverflow34145