Theorem: Poly.induction
File: Mathlib/NumberTheory/Dioph.lean

tactic: cases' f with f pf
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : Poly α
⊢ C f
state_after: case mk
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
pf : IsPoly f
⊢ C ⟨f, pf⟩

tactic: induction' pf with i n f g pf pg ihf ihg f g pf pg ihf ihg
state_before: case mk
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
pf : IsPoly f
⊢ C ⟨f, pf⟩
state_after: case mk.proj
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
i : α
⊢ C ⟨fun x => ↑(x i), ⋯⟩

case mk.const
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
n : ℤ
⊢ C ⟨fun x => n, ⋯⟩

case mk.sub
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f✝ f g : (α → ℕ) → ℤ
pf : IsPoly f
pg : IsPoly g
ihf : C ⟨f, pf⟩
ihg : C ⟨g, pg⟩
⊢ C ⟨fun x => f x - g x, ⋯⟩

case mk.mul
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f✝ f g : (α → ℕ) → ℤ
pf : IsPoly f
pg : IsPoly g
ihf : C ⟨f, pf⟩
ihg : C ⟨g, pg⟩
⊢ C ⟨fun x => f x * g x, ⋯⟩

tactic: apply H1
state_before: case mk.proj
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
i : α
⊢ C ⟨fun x => ↑(x i), ⋯⟩
state_after: no goals

tactic: apply H2
state_before: case mk.const
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f : (α → ℕ) → ℤ
n : ℤ
⊢ C ⟨fun x => n, ⋯⟩
state_after: no goals

tactic: apply H3 _ _ ihf ihg
state_before: case mk.sub
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f✝ f g : (α → ℕ) → ℤ
pf : IsPoly f
pg : IsPoly g
ihf : C ⟨f, pf⟩
ihg : C ⟨g, pg⟩
⊢ C ⟨fun x => f x - g x, ⋯⟩
state_after: no goals

tactic: apply H4 _ _ ihf ihg
state_before: case mk.mul
α : Type u_1
β : Type u_2
γ : Type u_3
C : Poly α → Prop
H1 : ∀ (i : α), C (proj i)
H2 : ∀ (n : ℤ), C (const n)
H3 : ∀ (f g : Poly α), C f → C g → C (f - g)
H4 : ∀ (f g : Poly α), C f → C g → C (f * g)
f✝ f g : (α → ℕ) → ℤ
pf : IsPoly f
pg : IsPoly g
ihf : C ⟨f, pf⟩
ihg : C ⟨g, pg⟩
⊢ C ⟨fun x => f x * g x, ⋯⟩
state_after: no goals