Theorem: Complex.differentiableAt_GammaAux
File: Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean

tactic: induction' n with n hn generalizing s
state_before: s : ℂ
n : ℕ
h1 : 1 - s.re < ↑n
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (GammaAux n) s
state_after: case zero
s : ℂ
h1 : 1 - s.re < ↑0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (GammaAux 0) s

case succ
n : ℕ
hn : ∀ (s : ℂ), 1 - s.re < ↑n → (∀ (m : ℕ), s ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) s
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (GammaAux (n + 1)) s

tactic: refine (hasDerivAt_GammaIntegral ?_).differentiableAt
state_before: case zero
s : ℂ
h1 : 1 - s.re < ↑0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (GammaAux 0) s
state_after: case zero
s : ℂ
h1 : 1 - s.re < ↑0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ 0 < s.re

tactic: rw [Nat.cast_zero] at h1
state_before: case zero
s : ℂ
h1 : 1 - s.re < ↑0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ 0 < s.re
state_after: case zero
s : ℂ
h1 : 1 - s.re < 0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ 0 < s.re

tactic: linarith
state_before: case zero
s : ℂ
h1 : 1 - s.re < 0
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ 0 < s.re
state_after: no goals

tactic: dsimp only [GammaAux]
state_before: case succ
n : ℕ
hn : ∀ (s : ℂ), 1 - s.re < ↑n → (∀ (m : ℕ), s ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) s
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (GammaAux (n + 1)) s
state_after: case succ
n : ℕ
hn : ∀ (s : ℂ), 1 - s.re < ↑n → (∀ (m : ℕ), s ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) s
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s

tactic: specialize hn (s + 1)
state_before: case succ
n : ℕ
hn : ∀ (s : ℂ), 1 - s.re < ↑n → (∀ (m : ℕ), s ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) s
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s
state_after: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s

tactic: have a : 1 - (s + 1).re < ↑n := by
  rw [Nat.cast_succ] at h1; rw [Complex.add_re, Complex.one_re]; linarith
state_before: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s
state_after: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s

tactic: have b : ∀ m : ℕ, s + 1 ≠ -m := by
  intro m; have := h2 (1 + m)
  contrapose! this
  rw [← eq_sub_iff_add_eq] at this
  simpa using this
state_before: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s
state_after: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s

tactic: refine DifferentiableAt.div (DifferentiableAt.comp _ (hn a b) ?_) ?_ ?_
state_before: case succ
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => GammaAux n (s + 1) / s) s
state_after: case succ.refine_1
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s + 1) s

case succ.refine_2
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s) s

case succ.refine_3
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ s ≠ 0

tactic: rw [Nat.cast_succ] at h1
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ 1 - (s + 1).re < ↑n
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑n + 1
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ 1 - (s + 1).re < ↑n

tactic: rw [Complex.add_re, Complex.one_re]
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑n + 1
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ 1 - (s + 1).re < ↑n
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑n + 1
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ 1 - (s.re + 1) < ↑n

tactic: linarith
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑n + 1
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
⊢ 1 - (s.re + 1) < ↑n
state_after: no goals

tactic: intro m
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
⊢ ∀ (m : ℕ), s + 1 ≠ -↑m
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
⊢ s + 1 ≠ -↑m

tactic: have := h2 (1 + m)
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
⊢ s + 1 ≠ -↑m
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s ≠ -↑(1 + m)
⊢ s + 1 ≠ -↑m

tactic: contrapose! this
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s ≠ -↑(1 + m)
⊢ s + 1 ≠ -↑m
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s + 1 = -↑m
⊢ s = -↑(1 + m)

tactic: rw [← eq_sub_iff_add_eq] at this
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s + 1 = -↑m
⊢ s = -↑(1 + m)
state_after: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s = -↑m - 1
⊢ s = -↑(1 + m)

tactic: simpa using this
state_before: n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
m : ℕ
this : s = -↑m - 1
⊢ s = -↑(1 + m)
state_after: no goals

tactic: rw [differentiableAt_add_const_iff (1 : ℂ)]
state_before: case succ.refine_1
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s + 1) s
state_after: case succ.refine_1
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s) s

tactic: exact differentiableAt_id
state_before: case succ.refine_1
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s) s
state_after: no goals

tactic: exact differentiableAt_id
state_before: case succ.refine_2
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ DifferentiableAt ℂ (fun s => s) s
state_after: no goals

tactic: simpa using h2 0
state_before: case succ.refine_3
n : ℕ
s : ℂ
h1 : 1 - s.re < ↑(n + 1)
h2 : ∀ (m : ℕ), s ≠ -↑m
hn : 1 - (s + 1).re < ↑n → (∀ (m : ℕ), s + 1 ≠ -↑m) → DifferentiableAt ℂ (GammaAux n) (s + 1)
a : 1 - (s + 1).re < ↑n
b : ∀ (m : ℕ), s + 1 ≠ -↑m
⊢ s ≠ 0
state_after: no goals