@@ -37,20 +37,9 @@ theorem special_factorial_func_correct {n : Nat} :
3737 special_factorial n = n.brazilianFactorial := by
3838 simp [special_factorial]
3939 suffices ∀ (curr fact brazilFact : Nat), fact = curr ! → brazilFact = curr.brazilianFactorial →
40- curr ≤ n → special_factorial.go n fact brazilFact curr = n.brazilianFactorial by
41- apply this
42- · simp [Nat.factorial]
43- · simp [Nat.brazilianFactorial]
44- · simp
45- intro curr fact brazil_fact h₁ h₂ h₃
46- fun_induction special_factorial.go with
47- | case1 fact brazil_fact curr h =>
48- rw [h₂, (show curr = n by omega)]
49- | case2 fact brazilFact curr h fact' brazilFact' ih =>
50- simp only [ge_iff_le, Nat.not_le] at h
51- simp only [h₁, Nat.succ_eq_add_one, Nat.factorial_succ, h₂, Nat.brazilianFactorial_succ,
52- Nat.succ_le_of_lt h, forall_const, fact', brazilFact'] at ih
53- simp only [← ih, fact', h₁, brazilFact', h₂]
40+ curr ≤ n → special_factorial.go n fact brazilFact curr = n.brazilianFactorial by
41+ apply this <;> simp [Nat.factorial, Nat.brazilianFactorial]
42+ intros; fun_induction special_factorial.go <;> grind [Nat.factorial, Nat.brazilianFactorial]
5443
5544theorem test1 : special_factorial 4 = 288 := by native_decide
5645theorem test2 : special_factorial 5 = 34560 := by native_decide
0 commit comments