@@ -54,11 +54,12 @@ theorem fib_neg_natCast (n : ℕ) : fib (-n) = (-1) ^ (n + 1) * n.fib := by
5454 · simp [fib, hn, pow_add]
5555 · simp [fib_of_odd, hn]
5656
57+ theorem fib_neg (n : ℤ) : fib (-n) = if Even n then -fib n else fib n := by
58+ obtain ⟨n, _⟩ := n.eq_nat_or_neg
59+ aesop (add safe (by rw [fib_neg_natCast]))
60+
5761theorem coe_fib_neg (n : ℤ) : (fib (-n) : ℚ) = (-1 ) ^ (n + 1 ) * fib n := by
58- obtain ⟨n, (rfl | rfl)⟩ := n.eq_nat_or_neg
59- · exact_mod_cast fib_neg_natCast _
60- · rw [fib_neg_natCast, pow_add, Rat.zpow_add (by simp)]
61- simp
62+ aesop (add safe (by rw [fib_neg, neg_one_zpow_eq_ite]))
6263
6364theorem fib_add_two (n : ℤ) : fib (n + 2 ) = fib n + fib (n + 1 ) := by
6465 rcases n with (n | n)
@@ -149,24 +150,13 @@ theorem fib_two_mul_add_two (n : ℤ) :
149150 rw [← mul_add_one, fib_two_mul]
150151 grind [fib_add_two]
151152
152- theorem fib_gcd (m n : ℤ) : fib (gcd m n) = gcd (fib m) (fib n) := by
153+ theorem gcd_fib (m n : ℤ) : gcd (fib m) (fib n) = Nat.fib (gcd m n) := by
153154 obtain ⟨m, (rfl | rfl)⟩ := m.eq_nat_or_neg
154- · obtain ⟨n, (rfl | rfl)⟩ := n.eq_nat_or_neg
155- · simp [Nat.fib_gcd]
156- · simp only [gcd_neg, Int.gcd_natCast_natCast, fib_natCast, Nat.fib_gcd, fib_neg_natCast,
157- reduceNeg, Nat.cast_inj]
158- rcases neg_one_pow_eq_or ℤ (n + 1 ) with (h | h) <;> simp [h]
159- · obtain ⟨n, (rfl | rfl)⟩ := n.eq_nat_or_neg
160- · simp only [neg_gcd, Int.gcd_natCast_natCast, fib_natCast, Nat.fib_gcd, fib_neg_natCast,
161- reduceNeg, Nat.cast_inj]
162- rcases neg_one_pow_eq_or ℤ (m + 1 ) with (h | h) <;> simp [h]
163- · simp only [gcd_neg, neg_gcd, Int.gcd_natCast_natCast, fib_natCast, Nat.fib_gcd,
164- fib_neg_natCast, reduceNeg, Nat.cast_inj]
165- rcases neg_one_pow_eq_or ℤ (n + 1 ) with (h | h) <;>
166- rcases neg_one_pow_eq_or ℤ (m + 1 ) with (h' | h') <;> simp [h, h']
155+ <;> obtain ⟨n, (rfl | rfl)⟩ := n.eq_nat_or_neg
156+ <;> simp [fib_neg, Nat.fib_gcd, apply_ite, apply_ite_left]
167157
168158private theorem fib_natCast_dvd {m : ℕ} {n : ℤ} (h : (m : ℤ) ∣ n) : fib m ∣ fib n := by
169- rwa [← gcd_eq_left_iff_dvd (by simp), ← fib_gcd, gcd_eq_left_iff_dvd (by simp) |> .mpr]
159+ rwa [← gcd_eq_left_iff_dvd (by simp), gcd_fib, ← fib_natCast, ( gcd_eq_left_iff_dvd (by simp)) .mpr]
170160
171161theorem fib_dvd (m n : ℤ) (h : m ∣ n) : fib m ∣ fib n := by
172162 obtain ⟨m, (rfl | rfl)⟩ := m.eq_nat_or_neg
0 commit comments