ex_count_up_tomade with verso-snippets
View
not needed — no prose in this code
def count_up_to := fun (n : Int) ↦ (do let mut ans : List Int := [] let mut isprime : List Bool := PastaLean.pyListRepeat [Bool.true] (n +ₚ (1 : Int)) for i in (PastaLean.pyRange n (2 : Int))do let _ := Libraries.passta.pyPassInvariant (decide ((2 : Int) ≤ i)) let _ := Libraries.passta.pyPassInvariant (decide (i ≤ n)) let _ := Libraries.passta.pyPassInvariant (PastaLean.pyLen isprime == n +ₚ (1 : Int)) -- At most one append per counter value. let _ := Libraries.passta.pyPassInvariant (decide (PastaLean.pyLen ans ≤ i)) -- Everything appended so far was a counter value already passed. let _ := Libraries.passta.pyPassInvariant (PastaLean.pyAll ((PastaLean.pyIter ans).map fun p => decide ((2 : Int) ≤ p))) let _ := Libraries.passta.pyPassInvariant (PastaLean.pyAll ((PastaLean.pyIter ans).map fun p => decide (p < i))) if h_1 : PastaLean.pyTruthy isprime⦋i⦌ then ans := PastaLean.pyAppend ans i for j in (PastaLean.pyRange n (i +ₚ i) i)do -- Index bound for `isprime[j]`. let _ := Libraries.passta.pyPassInvariant (decide ((2 : Int) ≤ j)) let _ := Libraries.passta.pyPassInvariant (decide (j < n)) isprime := PastaLean.pySetItem isprime j Bool.false else let _ := () return ans : Id _) private theorem range_split_val {m : Nat} {pref suff : List Nat} {cur : Nat} (h : List.range m = pref ++ cur :: suff) : cur = pref.length := m:ℕpref:List ℕsuff:List ℕcur:ℕh:List.range m = pref ++ cur :: suff⊢ cur = pref.length m:ℕpref:List ℕsuff:List ℕcur:ℕh:List.range m = pref ++ cur :: suffh2:(List.range m)[pref.length]? = some cur⊢ cur = pref.length m:ℕpref:List ℕsuff:List ℕcur:ℕh:List.range m = pref ++ cur :: suffh2:(List.range m)[pref.length]? = some curh3:pref.length < m⊢ cur = pref.length m:ℕpref:List ℕsuff:List ℕcur:ℕh:List.range m = pref ++ cur :: suffh2:some pref.length = some curh3:pref.length < m⊢ cur = pref.length; m:ℕpref:List ℕsuff:List ℕcur:ℕh:List.range m = pref ++ cur :: suffh3:pref.length < mh2:pref.length = cur⊢ cur = pref.length; All goals completed! 🐙 @[spec] theorem count_up_to_spec : ⦃⌜n ≥ (0 : Int)⌝⦄ count_up_to n ⦃⇓ans => ⌜(PastaLean.pyLen ans ≤ n ∧ ∀ p ∈ PastaLean.pyIter ans, (2 : Int) ≤ p) ∧ ∀ p ∈ PastaLean.pyIter ans, p < n⌝⦄ := n:ℤ⊢ ⦃⌜n ≥ 0⌝⦄ count_up_to n ⦃PostCond.noThrow fun ans => ⌜(pyLen ans ≤ n ∧ ∀ p ∈ pyIter ans, 2 ≤ p) ∧ ∀ p ∈ pyIter ans, p < n⌝⦄ n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)h✝⁴:n ≥ 0pref✝:List ℕcur✝:ℕsuff✝:List ℕh✝³:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝b✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝²:pyTruthy isprime✝⦋2 + Int.ofNat cur✝⦌ = trueans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)h✝¹:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ pyIter b✝.fst, 2 ≤ p) ∧ ∀ p ∈ pyIter b✝.fst, p < 2 + ↑pref✝.lengthr✝:List Boolh✝:True⊢ pyLen ans✝ ≤ ↑(pref✝ ++ [cur✝]).length ∧ (∀ p ∈ pyIter ans✝, 2 ≤ p) ∧ ∀ p ∈ pyIter ans✝, p < 2 + ↑(pref✝ ++ [cur✝]).lengthn:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)h✝³:n ≥ 0pref✝:List ℕcur✝:ℕsuff✝:List ℕh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝b✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝¹:¬pyTruthy isprime✝⦋2 + Int.ofNat cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ pyIter b✝.fst, 2 ≤ p) ∧ ∀ p ∈ pyIter b✝.fst, p < 2 + ↑pref✝.length⊢ pyLen ans✝ ≤ ↑(pref✝ ++ [cur✝]).length ∧ (∀ p ∈ pyIter ans✝, 2 ≤ p) ∧ ∀ p ∈ pyIter ans✝, p < 2 + ↑(pref✝ ++ [cur✝]).lengthn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)h✝:n ≥ 0⊢ pyLen ans✝ ≤ ↑[].length ∧ (∀ p ∈ pyIter ans✝, 2 ≤ p) ∧ ∀ p ∈ pyIter ans✝, p < 2 + ↑[].lengthn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)h✝¹:n ≥ 0r✝:MProd (List ℤ) (List Bool)h✝:pyLen r✝.fst ≤ ↑(List.range (n - 2).toNat).length ∧ (∀ p ∈ pyIter r✝.fst, 2 ≤ p) ∧ ∀ p ∈ pyIter r✝.fst, p < 2 + ↑(List.range (n - 2).toNat).length⊢ (pyLen r✝.fst ≤ n ∧ ∀ p ∈ pyIter r✝.fst, 2 ≤ p) ∧ ∀ p ∈ pyIter r✝.fst, p < n all_goals (try (n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ pyLen r✝.fst ≤ n ∧ ∀ p ∈ r✝.fst, p < n)) case vc3.step.isTrue.post.success n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ pyLen (b✝.fst ++ [2 + ↑cur✝]) ≤ ↑pref✝.length + 1 ∧ (∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → 2 ≤ p) ∧ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → p < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.length⊢ pyLen (b✝.fst ++ [2 + ↑cur✝]) ≤ ↑pref✝.length + 1 ∧ (∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → 2 ≤ p) ∧ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → p < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:pyLen b✝.fst ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ pyLen (b✝.fst ++ [2 + ↑cur✝]) ≤ ↑pref✝.length + 1 ∧ (∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → 2 ≤ p) ∧ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → p < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ↑(b✝.fst.length + (0 + 1)) ≤ ↑pref✝.length + 1 ∧ (∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → 2 ≤ p) ∧ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → p < 2 + (↑pref✝.length + 1) refine ⟨n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ↑(b✝.fst.length + (0 + 1)) ≤ ↑pref✝.length + 1 All goals completed! 🐙, ?_, ?_⟩ n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → 2 ≤ p n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fst⊢ 2 ≤ pn:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ 2 ≤ 2 + ↑cur✝ n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fst⊢ 2 ≤ p All goals completed! 🐙 n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ 2 ≤ 2 + ↑cur✝ All goals completed! 🐙 n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ∀ (p : ℤ), p ∈ b✝.fst ∨ p = 2 + ↑cur✝ → p < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fst⊢ p < 2 + (↑pref✝.length + 1)n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ 2 + ↑cur✝ < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fst⊢ p < 2 + (↑pref✝.length + 1) n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fstthis:p < 2 + ↑pref✝.length⊢ p < 2 + (↑pref✝.length + 1); All goals completed! 🐙 n:ℤans✝²:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝¹:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndans✝:List ℤ := pyAppend ans✝¹ (2 + Int.ofNat cur✝)r✝:List Boolh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = trueh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhcur:cur✝ = pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ 2 + ↑cur✝ < 2 + (↑pref✝.length + 1) All goals completed! 🐙 case vc4.step.isFalse n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ pyLen b✝.fst ≤ ↑pref✝.length + 1 ∧ ∀ p ∈ b✝.fst, p < 2 + (↑pref✝.length + 1) n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhlen:pyLen b✝.fst ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ pyLen b✝.fst ≤ ↑pref✝.length + 1 ∧ ∀ p ∈ b✝.fst, p < 2 + (↑pref✝.length + 1) n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ↑b✝.fst.length ≤ ↑pref✝.length + 1 ∧ ∀ p ∈ b✝.fst, p < 2 + (↑pref✝.length + 1) refine ⟨n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.length⊢ ↑b✝.fst.length ≤ ↑pref✝.length + 1 All goals completed! 🐙, ?_⟩ n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fst⊢ p < 2 + (↑pref✝.length + 1); n:ℤans✝¹:List ℤ := []isprime✝¹:List Bool := pyListRepeat [true] (n +ₚ 1)pref✝:List ℕcur✝:ℕsuff✝:List ℕb✝:MProd (List ℤ) (List Bool)ans✝:List ℤ := b✝.fstisprime✝:List Bool := b✝.sndh✝³:0 ≤ nh✝²:List.range (n - 2).toNat = pref✝ ++ cur✝ :: suff✝h✝¹:b✝.snd⦋2 + ↑cur✝⦌ = falseh✝:pyLen b✝.fst ≤ ↑pref✝.length ∧ (∀ p ∈ b✝.fst, 2 ≤ p) ∧ ∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthhlen:↑b✝.fst.length ≤ ↑pref✝.lengthh2:∀ p ∈ b✝.fst, 2 ≤ ph3:∀ p ∈ b✝.fst, p < 2 + ↑pref✝.lengthp:ℤhp:p ∈ b✝.fstthis:p < 2 + ↑pref✝.length⊢ p < 2 + (↑pref✝.length + 1); All goals completed! 🐙 case vc6.post.success n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ pyLen r✝.fst ≤ n ∧ ∀ p ∈ r✝.fst, p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ pyLen r✝.fst ≤ n ∧ ∀ p ∈ r✝.fst, p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ pyLen r✝.fst ≤ nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ ∀ p ∈ r✝.fst, p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ pyLen r✝.fst ≤ n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:pyLen r✝.fst ≤ n - 2⊢ pyLen r✝.fst ≤ nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:pyLen r✝.fst ≤ 0⊢ pyLen r✝.fst ≤ n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:pyLen r✝.fst ≤ n - 2⊢ pyLen r✝.fst ≤ nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:pyLen r✝.fst ≤ 0⊢ pyLen r✝.fst ≤ n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:↑r✝.fst.length ≤ 0⊢ ↑r✝.fst.length ≤ n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:↑r✝.fst.length ≤ n - 2⊢ ↑r✝.fst.length ≤ nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h:↑r✝.fst.length ≤ 0⊢ ↑r✝.fst.length ≤ n All goals completed! 🐙 n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0⊢ ∀ p ∈ r✝.fst, p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fst⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0hlen:pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.length⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:pyLen r✝.fst ≤ n - 2⊢ p < nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:pyLen r✝.fst ≤ 0⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:pyLen r✝.fst ≤ n - 2⊢ p < nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:pyLen r✝.fst ≤ 0⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:↑r✝.fst.length ≤ 0⊢ p < n n:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:↑r✝.fst.length ≤ n - 2⊢ p < nn:ℤans✝:List ℤ := []isprime✝:List Bool := pyListRepeat [true] (n +ₚ 1)r✝:MProd (List ℤ) (List Bool)h✝¹:0 ≤ nh✝:(pyLen r✝.fst ≤ n - 2 ∨ pyLen r✝.fst ≤ 0) ∧ (∀ p ∈ r✝.fst, 2 ≤ p) ∧ ∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0h2:∀ p ∈ r✝.fst, 2 ≤ ph3:∀ p ∈ r✝.fst, p < 2 + max (n - 2) 0p:ℤhp:p ∈ r✝.fsthp3:p < 2 + max (n - 2) 0hpos:0 < r✝.fst.lengthh:↑r✝.fst.length ≤ 0⊢ p < n All goals completed! 🐙 theorem count_up_to_correct : ∀ (n : Int), n ≥ (0 : Int) → let ans := (count_up_to n).run; (PastaLean.pyLen ans ≤ n ∧ ∀ p ∈ PastaLean.pyIter ans, (2 : Int) ≤ p) ∧ ∀ p ∈ PastaLean.pyIter ans, p < n := ⊢ ∀ n ≥ 0, let ans := (count_up_to n).run; (pyLen ans ≤ n ∧ ∀ p ∈ pyIter ans, 2 ≤ p) ∧ ∀ p ∈ pyIter ans, p < n n:ℤhpre:n ≥ 0⊢ let ans := (count_up_to n).run; (pyLen ans ≤ n ∧ ∀ p ∈ pyIter ans, 2 ≤ p) ∧ ∀ p ∈ pyIter ans, p < n All goals completed! 🐙