/-
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 FormalConjecturesUtilMathoverflow 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.
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 : AngleA 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 := rfl⊢ lbMeasure (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:Rectangle⊢ lbMeasure 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))))))))))))
n⊢ Filter.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))))))))))))
n⊢ Filter.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))))))))))))
n⊢ Filter.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))))))))))))
n⊢ nhds 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 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 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 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 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