Theorem: Finsupp.induction
File: Mathlib/Data/Finsupp/Defs.lean

tactic: rwa [support_eq_empty.1 hf]
state_before: α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s : Finset α
f : α →₀ M
hf : f.support = ∅
⊢ p f

tactic: suffices p (single a (f a) + f.erase a) by rwa [single_add_erase] at this
state_before: α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ p f

tactic: rwa [single_add_erase] at this
state_before: α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
this : p (single a (↑f a) + erase a f)
⊢ p f

tactic: apply ha
state_before: α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ p (single a (↑f a) + erase a f)

tactic: rw [support_erase, mem_erase]
state_before: case a
α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ ¬a ∈ (erase a f).support

tactic: exact fun H => H.1 rfl
state_before: case a
α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ ¬(a ≠ a ∧ a ∈ f.support)

tactic: rw [← mem_support_iff, hf]
state_before: case a
α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ ↑f a ≠ 0

tactic: exact mem_cons_self _ _
state_before: case a
α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ a ∈ cons a s has

tactic: apply ih _ _
state_before: case a
α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ p (erase a f)

tactic: rw [support_erase, hf, Finset.erase_cons]
state_before: α : Type u_1
β : Type ?u.314614
γ : Type ?u.314617
ι : Type ?u.314620
M : Type u_2
M' : Type ?u.314626
N : Type ?u.314629
P : Type ?u.314632
G : Type ?u.314635
H : Type ?u.314638
R : Type ?u.314641
S : Type ?u.314644
inst✝ : AddZeroClass M
p : (α →₀ M) → Prop
f✝ : α →₀ M
h0 : p 0
ha : ∀ (a : α) (b : M) (f : α →₀ M), ¬a ∈ f.support → b ≠ 0 → p f → p (single a b + f)
s✝ : Finset α
a : α
s : Finset α
has : ¬a ∈ s
ih : ∀ (f : α →₀ M), f.support = s → p f
f : α →₀ M
hf : f.support = cons a s has
⊢ (erase a f).support = s