Theorem: PosNum.minFacAux_to_nat
File: Mathlib/Data/Num/Prime.lean

tactic: induction' fuel with fuel ih generalizing k <;> rw [minFacAux, Nat.minFacAux]
state_before: fuel : ℕ
n k : PosNum
h : Nat.sqrt ↑n < fuel + ↑(bit1 k)
⊢ ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)

tactic: simp_rw [← mul_to_nat]
state_before: case succ
fuel✝ : ℕ
n k✝ : PosNum
h✝ : Nat.sqrt ↑n < fuel✝ + ↑(bit1 k✝)
fuel : ℕ
ih : ∀ {k : PosNum}, Nat.sqrt ↑n < fuel + ↑(bit1 k) → ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)
k : PosNum
h : Nat.sqrt ↑n < Nat.succ fuel + ↑(bit1 k)
⊢ ↑(if n < bit1 k * bit1 k then n else if bit1 k ∣ n then bit1 k else minFacAux n fuel (succ k)) =
    if h : ↑n < ↑(bit1 k) * ↑(bit1 k) then ↑n
    else
      if ↑(bit1 k) ∣ ↑n then ↑(bit1 k)
      else
        let_fun this := (_ : Nat.sqrt ↑n - ↑(bit1 k) < Nat.sqrt ↑n + 2 - ↑(bit1 k));
        Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: simp only [cast_lt, dvd_to_nat]
state_before: case succ
fuel✝ : ℕ
n k✝ : PosNum
h✝ : Nat.sqrt ↑n < fuel✝ + ↑(bit1 k✝)
fuel : ℕ
ih : ∀ {k : PosNum}, Nat.sqrt ↑n < fuel + ↑(bit1 k) → ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)
k : PosNum
h : Nat.sqrt ↑n < Nat.succ fuel + ↑(bit1 k)
⊢ ↑(if n < bit1 k * bit1 k then n else if bit1 k ∣ n then bit1 k else minFacAux n fuel (succ k)) =
    if h : ↑n < ↑(bit1 k * bit1 k) then ↑n else if ↑(bit1 k) ∣ ↑n then ↑(bit1 k) else Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: split_ifs <;> try rfl
state_before: case succ
fuel✝ : ℕ
n k✝ : PosNum
h✝ : Nat.sqrt ↑n < fuel✝ + ↑(bit1 k✝)
fuel : ℕ
ih : ∀ {k : PosNum}, Nat.sqrt ↑n < fuel + ↑(bit1 k) → ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)
k : PosNum
h : Nat.sqrt ↑n < Nat.succ fuel + ↑(bit1 k)
⊢ ↑(if n < bit1 k * bit1 k then n else if bit1 k ∣ n then bit1 k else minFacAux n fuel (succ k)) =
    if h : n < bit1 k * bit1 k then ↑n else if bit1 k ∣ n then ↑(bit1 k) else Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: rw [ih] <;> [congr; convert Nat.lt_succ_of_lt h using 1] <;>
  simp only [_root_.bit1, _root_.bit0, cast_bit1, cast_succ, Nat.succ_eq_add_one, add_assoc,
    add_left_comm, ← one_add_one_eq_two]
state_before: case succ.inr.inr
fuel✝ : ℕ
n k✝ : PosNum
h✝² : Nat.sqrt ↑n < fuel✝ + ↑(bit1 k✝)
fuel : ℕ
ih : ∀ {k : PosNum}, Nat.sqrt ↑n < fuel + ↑(bit1 k) → ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)
k : PosNum
h : Nat.sqrt ↑n < Nat.succ fuel + ↑(bit1 k)
h✝¹ : ¬n < bit1 k * bit1 k
h✝ : ¬bit1 k ∣ n
⊢ ↑(minFacAux n fuel (succ k)) = Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: rw [Nat.zero_add, Nat.sqrt_lt] at h
state_before: case zero
fuel : ℕ
n k✝ : PosNum
h✝ : Nat.sqrt ↑n < fuel + ↑(bit1 k✝)
k : PosNum
h : Nat.sqrt ↑n < Nat.zero + ↑(bit1 k)
⊢ ↑n =
    if h : ↑n < ↑(bit1 k) * ↑(bit1 k) then ↑n
    else
      if ↑(bit1 k) ∣ ↑n then ↑(bit1 k)
      else
        let_fun this := (_ : Nat.sqrt ↑n - ↑(bit1 k) < Nat.sqrt ↑n + 2 - ↑(bit1 k));
        Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: simp only [h, dite_true]
state_before: case zero
fuel : ℕ
n k✝ : PosNum
h✝ : Nat.sqrt ↑n < fuel + ↑(bit1 k✝)
k : PosNum
h : ↑n < ↑(bit1 k) * ↑(bit1 k)
⊢ ↑n =
    if h : ↑n < ↑(bit1 k) * ↑(bit1 k) then ↑n
    else
      if ↑(bit1 k) ∣ ↑n then ↑(bit1 k)
      else
        let_fun this := (_ : Nat.sqrt ↑n - ↑(bit1 k) < Nat.sqrt ↑n + 2 - ↑(bit1 k));
        Nat.minFacAux (↑n) (↑(bit1 k) + 2)

tactic: rfl
state_before: case succ.inr.inr
fuel✝ : ℕ
n k✝ : PosNum
h✝² : Nat.sqrt ↑n < fuel✝ + ↑(bit1 k✝)
fuel : ℕ
ih : ∀ {k : PosNum}, Nat.sqrt ↑n < fuel + ↑(bit1 k) → ↑(minFacAux n fuel k) = Nat.minFacAux ↑n ↑(bit1 k)
k : PosNum
h : Nat.sqrt ↑n < Nat.succ fuel + ↑(bit1 k)
h✝¹ : ¬n < bit1 k * bit1 k
h✝ : ¬bit1 k ∣ n
⊢ ↑(minFacAux n fuel (succ k)) = Nat.minFacAux (↑n) (↑(bit1 k) + 2)