Theorem: Complex.differentiable_one_div_Gamma
File: Mathlib/Analysis/SpecialFunctions/Gamma/Beta.lean

tactic: rcases exists_nat_gt (-s.re) with ⟨n, hs⟩
state_before: s : ℂ
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
state_after: case intro
s : ℂ
n : ℕ
hs : -s.re < ↑n
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s

tactic: induction n generalizing s with
| zero =>
  rw [Nat.cast_zero, neg_lt_zero] at hs
  suffices ∀ m : ℕ, s ≠ -↑m from (differentiableAt_Gamma _ this).inv (Gamma_ne_zero this)
  rintro m rfl
  apply hs.not_le
  simp
| succ n ihn =>
  rw [funext one_div_Gamma_eq_self_mul_one_div_Gamma_add_one]
  specialize ihn (s + 1) (by rwa [add_re, one_re, neg_add', sub_lt_iff_lt_add, ← Nat.cast_succ])
  exact differentiableAt_id.mul (ihn.comp s <| differentiableAt_id.add_const _)
state_before: case intro
s : ℂ
n : ℕ
hs : -s.re < ↑n
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
state_after: no goals

tactic: rw [Nat.cast_zero, neg_lt_zero] at hs
state_before: case intro.zero
s : ℂ
hs : -s.re < ↑0
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
state_after: case intro.zero
s : ℂ
hs : 0 < s.re
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s

tactic: suffices ∀ m : ℕ, s ≠ -↑m from (differentiableAt_Gamma _ this).inv (Gamma_ne_zero this)
state_before: case intro.zero
s : ℂ
hs : 0 < s.re
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
state_after: case intro.zero
s : ℂ
hs : 0 < s.re
⊢ ∀ (m : ℕ), s ≠ -↑m

tactic: rintro m rfl
state_before: case intro.zero
s : ℂ
hs : 0 < s.re
⊢ ∀ (m : ℕ), s ≠ -↑m
state_after: case intro.zero
m : ℕ
hs : 0 < (-↑m).re
⊢ False

tactic: apply hs.not_le
state_before: case intro.zero
m : ℕ
hs : 0 < (-↑m).re
⊢ False
state_after: case intro.zero
m : ℕ
hs : 0 < (-↑m).re
⊢ (-↑m).re ≤ 0

tactic: simp
state_before: case intro.zero
m : ℕ
hs : 0 < (-↑m).re
⊢ (-↑m).re ≤ 0
state_after: no goals

tactic: rw [funext one_div_Gamma_eq_self_mul_one_div_Gamma_add_one]
state_before: case intro.succ
n : ℕ
ihn : ∀ (s : ℂ), -s.re < ↑n → DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
s : ℂ
hs : -s.re < ↑(n + 1)
⊢ DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
state_after: case intro.succ
n : ℕ
ihn : ∀ (s : ℂ), -s.re < ↑n → DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
s : ℂ
hs : -s.re < ↑(n + 1)
⊢ DifferentiableAt ℂ (fun x => x * (Gamma (x + 1))⁻¹) s

tactic: specialize ihn (s + 1) (by rwa [add_re, one_re, neg_add', sub_lt_iff_lt_add, ← Nat.cast_succ])
state_before: case intro.succ
n : ℕ
ihn : ∀ (s : ℂ), -s.re < ↑n → DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
s : ℂ
hs : -s.re < ↑(n + 1)
⊢ DifferentiableAt ℂ (fun x => x * (Gamma (x + 1))⁻¹) s
state_after: case intro.succ
n : ℕ
s : ℂ
hs : -s.re < ↑(n + 1)
ihn : DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) (s + 1)
⊢ DifferentiableAt ℂ (fun x => x * (Gamma (x + 1))⁻¹) s

tactic: exact differentiableAt_id.mul (ihn.comp s <| differentiableAt_id.add_const _)
state_before: case intro.succ
n : ℕ
s : ℂ
hs : -s.re < ↑(n + 1)
ihn : DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) (s + 1)
⊢ DifferentiableAt ℂ (fun x => x * (Gamma (x + 1))⁻¹) s
state_after: no goals

tactic: rwa [add_re, one_re, neg_add', sub_lt_iff_lt_add, ← Nat.cast_succ]
state_before: n : ℕ
ihn : ∀ (s : ℂ), -s.re < ↑n → DifferentiableAt ℂ (fun s => (Gamma s)⁻¹) s
s : ℂ
hs : -s.re < ↑(n + 1)
⊢ -(s + 1).re < ↑n
state_after: no goals