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

Erdős Problem 346

References:

    erdosproblems.com/346

    [Gr64d] Graham, R. L., A property of Fibonacci numbers. Fibonacci Quart. (1964), 1-10.

    [ErGr80] Erdős, P. and Graham, R., Old and new problems and results in combinatorial number theory. Monographies de L'Enseignement Mathematique (1980).

open Filter Topology Set namespace Erdos346

Is it true that for every lacunary, strongly complete sequence A that is not complete whenever infinitely many terms are removed from it, lim A (n + 1) / A n = (1 + √5) / 2?

@[category research open, AMS 11] theorem declaration uses 'sorry'erdos_346 : answer(sorry) {A : }, IsLacunary A IsAddStronglyCompleteNatSeq A ( B : Set , B range A B.Infinite ¬ IsAddComplete (range A \ B)) Tendsto (fun n => A (n + 1) / (A n : )) atTop (𝓝 ((1 + 5) / 2)) := True {A : }, IsLacunary A IsAddStronglyCompleteNatSeq A (∀ B range A, B.Infinite ¬IsAddComplete (range A \ B)) Tendsto (fun n => (A (n + 1)) / (A n)) atTop (𝓝 ((1 + 5) / 2)) All goals completed! 🐙

We define a sequence f by the formula f n = n.fib - (- 1) ^ n.

def f (n : ) : := if Even n then n.fib - 1 else n.fib + 1

The sequence f is lacunary.

@[category test, AMS 11] theorem erdos_346.variants.f_isLacunary : IsLacunary f := IsLacunary f refine 3/2, 3 / 2 > 1 All goals completed! 🐙, Filter.eventually_atTop.mpr 9, fun k hk => ?_ -- Key: `2·fib(k+1) > 3·fib(k) + 5` for `k ≥ 9`, since -- `2·fib(k+1) - 3·fib(k) = fib(k-3) ≥ fib(6) = 8 > 5`. have hfib_strict : 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := IsLacunary f obtain m, rfl : m, k = m + 9 := k - 9, k:hk:k 9k = k - 9 + 9 All goals completed! 🐙 have h1 : Nat.fib (m + 9 + 1) = Nat.fib (m + 8) + Nat.fib (m + 9) := IsLacunary f All goals completed! 🐙 have h2 : Nat.fib (m + 9) = Nat.fib (m + 7) + Nat.fib (m + 8) := IsLacunary f All goals completed! 🐙 have h3 : Nat.fib (m + 8) = Nat.fib (m + 6) + Nat.fib (m + 7) := IsLacunary f All goals completed! 🐙 have h4 : 8 Nat.fib (m + 6) := le_trans (m:hk:m + 9 9h1:Nat.fib (m + 9 + 1) = Nat.fib (m + 8) + Nat.fib (m + 9) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1))))h2:Nat.fib (m + 9) = Nat.fib (m + 7) + Nat.fib (m + 8) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1))))h3:Nat.fib (m + 8) = Nat.fib (m + 6) + Nat.fib (m + 7) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1))))8 Nat.fib 6 All goals completed! 🐙 : 8 Nat.fib 6) (Nat.fib_mono (m:hk:m + 9 9h1:Nat.fib (m + 9 + 1) = Nat.fib (m + 8) + Nat.fib (m + 9) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1))))h2:Nat.fib (m + 9) = Nat.fib (m + 7) + Nat.fib (m + 8) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1))))h3:Nat.fib (m + 8) = Nat.fib (m + 6) + Nat.fib (m + 7) := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1))))6 m + 6 All goals completed! 🐙)) All goals completed! 🐙 have hfib_R : 3 * (Nat.fib k : ) + 5 < 2 * Nat.fib (k + 1) := IsLacunary f All goals completed! 🐙 have hpos : 1 Nat.fib k := Nat.fib_pos.mpr (k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_strict0 < k All goals completed! 🐙) have hpos1 : 1 Nat.fib (k + 1) := Nat.fib_pos.mpr (k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)0 < k + 1 All goals completed! 🐙) k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)3 / 2 * (if Even k then Nat.fib k - 1 else Nat.fib k + 1) < (if Even (k + 1) then Nat.fib (k + 1) - 1 else Nat.fib (k + 1) + 1) k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:Even k3 / 2 * (if Even k then Nat.fib k - 1 else Nat.fib k + 1) < (if Even (k + 1) then Nat.fib (k + 1) - 1 else Nat.fib (k + 1) + 1)k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:¬Even k3 / 2 * (if Even k then Nat.fib k - 1 else Nat.fib k + 1) < (if Even (k + 1) then Nat.fib (k + 1) - 1 else Nat.fib (k + 1) + 1) k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:Even k3 / 2 * (if Even k then Nat.fib k - 1 else Nat.fib k + 1) < (if Even (k + 1) then Nat.fib (k + 1) - 1 else Nat.fib (k + 1) + 1) have hodd : ¬ Even (k + 1) := IsLacunary f All goals completed! 🐙 k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:Even khodd:¬Even (k + 1) := of_eq_true (Eq.trans (congrArg Not (Eq.trans f_isLacunary._simp_5 (Eq.trans (congrArg Not (eq_true heven)) not_true_eq_false))) not_false_eq_true)3 / 2 * (Nat.fib k - 1) < (Nat.fib (k + 1) + 1) k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:Even khodd:¬Even (k + 1) := of_eq_true (Eq.trans (congrArg Not (Eq.trans f_isLacunary._simp_5 (Eq.trans (congrArg Not (eq_true heven)) not_true_eq_false))) not_false_eq_true)3 / 2 * ((Nat.fib k) - 1) < (Nat.fib (k + 1)) + 1 All goals completed! 🐙 k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:¬Even k3 / 2 * (if Even k then Nat.fib k - 1 else Nat.fib k + 1) < (if Even (k + 1) then Nat.fib (k + 1) - 1 else Nat.fib (k + 1) + 1) have hodd_plus : Even (k + 1) := IsLacunary f All goals completed! 🐙 k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:¬Even khodd_plus:Even (k + 1) := of_eq_true (Eq.trans f_isLacunary._simp_5 (Eq.trans (congrArg Not (eq_false heven)) not_false_eq_true))3 / 2 * (Nat.fib k + 1) < (Nat.fib (k + 1) - 1) k:hk:k 9hfib_strict:3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1) := Exists.casesOn (Exists.intro (k - 9) (Decidable.byContradiction fun a => f_isLacunary._proof_1 k hk a)) fun m h => Eq.ndrec (motive := fun k => k 9 3 * Nat.fib k + 5 < 2 * Nat.fib (k + 1)) (fun hk => have h1 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 8) + Nat.fib (m + 9)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (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 9) (Mathlib.Meta.NormNum.IsNat.of_raw 1) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 8) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 10))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 8) + Nat.fib (m + 9)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 8) + Nat.fib (m + 8 + 1)))); have h2 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 7) + Nat.fib (m + 8)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 9) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 7))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 7) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 7) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 9))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 7) + Nat.fib (m + 8)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 7) + Nat.fib (m + 7 + 1)))); have h3 := Eq.mpr (id (congrArg (fun _a => Nat.fib _a = Nat.fib (m + 6) + Nat.fib (m + 7)) (have this := Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 8) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf m) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 6))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 6) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (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 6) (Mathlib.Meta.NormNum.IsNat.of_raw 2) (Eq.refl 8))) (Mathlib.Tactic.Ring.add_pf_add_zero (m ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))); this))) (Eq.mpr (id (congrArg (fun _a => _a = Nat.fib (m + 6) + Nat.fib (m + 7)) Nat.fib_add_two)) (Eq.refl (Nat.fib (m + 6) + Nat.fib (m + 6 + 1)))); have h4 := le_trans (of_decide_eq_true (id (Eq.refl true))) (Nat.fib_mono (Decidable.byContradiction fun a => f_isLacunary._proof_2 m hk a)); Decidable.byContradiction fun a => f_isLacunary._proof_3 m h1 h2 h3 h4 a) (Eq.symm h) hkhfib_R:3 * (Nat.fib k) + 5 < 2 * (Nat.fib (k + 1)) := cast (Eq.symm (Eq.trans (congr (congrArg LT.lt (Eq.trans (congrArg (fun x => x + 5) (Nat.cast_mul._simp_1 3 (Nat.fib k))) (Nat.cast_add._simp_1 (3 * Nat.fib k) 5))) (Nat.cast_mul._simp_1 2 (Nat.fib (k + 1)))) Nat.cast_lt._simp_1)) hfib_stricthpos:1 Nat.fib k := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_4 k hk a)hpos1:1 Nat.fib (k + 1) := Nat.fib_pos.mpr (Decidable.byContradiction fun a => f_isLacunary._proof_5 k hk a)heven:¬Even khodd_plus:Even (k + 1) := of_eq_true (Eq.trans f_isLacunary._simp_5 (Eq.trans (congrArg Not (eq_false heven)) not_false_eq_true))3 / 2 * ((Nat.fib k) + 1) < (Nat.fib (k + 1)) - 1 All goals completed! 🐙

The sequence f is strongly complete, and this is proved in [Gr64d].

@[category research solved, AMS 11] theorem declaration uses 'sorry'erdos_346.variants.f_isAddStronglyCompleteNatSeq : IsAddStronglyCompleteNatSeq f := IsAddStronglyCompleteNatSeq f All goals completed! 🐙

The sequence f is not complete whenever infinitely many terms are removed from it, and this is proved in [Gr64d].

@[category research solved, AMS 11] theorem declaration uses 'sorry'erdos_346.variants.f_not_isAddComplete {B : Set } (h : B range f) (hB : B.Infinite) : ¬ IsAddComplete (range f \ B) := B:Set h:B range fhB:B.Infinite¬IsAddComplete (range f \ B) All goals completed! 🐙

Erdős and Graham [ErGr80] remark that it is easy to see that if A (n + 1) / A n > (1 + √5) / 2 then the second property is automatically satisfied.

@[category research solved, AMS 11] theorem declaration uses 'sorry'erdos_346.variants.gt_goldenRatio_not_IsAddComplete {A : } (hA : n, (1 + 5) / 2 * A n < A (n + 1)) {B : Set } (h : B range A) (hB : B.Infinite) : ¬ IsAddComplete (range A \ B) := A: hA: (n : ), (1 + 5) / 2 * (A n) < (A (n + 1))B:Set h:B range AhB:B.Infinite¬IsAddComplete (range A \ B) All goals completed! 🐙

Erdős and Graham [ErGr80] also say that it is not hard to construct very irregular sequences satisfying the aforementioned properties.

@[category research solved, AMS 11] theorem declaration uses 'sorry'erdos_346.variants.example : A : , IsAddStronglyCompleteNatSeq A ( B : Set , B range A B.Infinite ¬ IsAddComplete (range A \ B)) liminf (fun n => A (n + 1) / (2 : )) atTop = 1 limsup (fun n => A (n + 1) / (A n : ENNReal)) atTop = := A, IsAddStronglyCompleteNatSeq A (∀ B range A, B.Infinite ¬IsAddComplete (range A \ B)) liminf (fun n => (A (n + 1)) / 2) atTop = 1 limsup (fun n => (A (n + 1)) / (A n)) atTop = All goals completed! 🐙 end Erdos346