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

tactic: rwa [support_eq_empty.1 hf]
state_before: α : Type u_1
β : Type ?u.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
s : Finset α
f : α →₀ M
hf : f.support = ∅
⊢ p f

tactic: suffices p (f.erase a + single a (f a)) by rwa [erase_add_single] at this
state_before: α : Type u_1
β : Type ?u.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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 [erase_add_single] at this
state_before: α : Type u_1
β : Type ?u.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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 (erase a f + single a (↑f a))
⊢ p f

tactic: apply ha
state_before: α : Type u_1
β : Type ?u.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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 + single a (↑f a))

tactic: rw [support_erase, mem_erase]
state_before: case a
α : Type u_1
β : Type ?u.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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.320386
γ : Type ?u.320389
ι : Type ?u.320392
M : Type u_2
M' : Type ?u.320398
N : Type ?u.320401
P : Type ?u.320404
G : Type ?u.320407
H : Type ?u.320410
R : Type ?u.320413
S : Type ?u.320416
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 (f + single a b)
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