Theorem: Finsupp.mapDomain_injOn
File: Mathlib/Data/Finsupp/Basic.lean

tactic: intro v₁ hv₁ v₂ hv₂ eq
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁ v₂ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
⊢ Set.InjOn (mapDomain f) {w | ↑w.support ⊆ S}

tactic: ext a
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
⊢ v₁ = v₂

tactic: by_cases h : a ∈ v₁.support ∪ v₂.support
state_before: case h
α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
a : α
⊢ ↑v₁ a = ↑v₂ a

tactic: apply Set.union_subset hv₁ hv₂
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
a : α
h : a ∈ v₁.support ∪ v₂.support
⊢ a ∈ S

tactic: exact_mod_cast h
state_before: case a
α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
a : α
h : a ∈ v₁.support ∪ v₂.support
⊢ a ∈ ↑v₁.support ∪ ↑v₂.support

tactic: simp only [not_or, mem_union, not_not, mem_support_iff] at h
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
a : α
h : ¬a ∈ v₁.support ∪ v₂.support
⊢ ↑v₁ a = ↑v₂ a

tactic: simp [h]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type ?u.292155
ι : Type ?u.292158
M : Type u_3
M' : Type ?u.292164
N : Type ?u.292167
P : Type ?u.292170
G : Type ?u.292173
H : Type ?u.292176
R : Type ?u.292179
S✝ : Type ?u.292182
inst✝ : AddCommMonoid M
v v₁✝ v₂✝ : α →₀ M
S : Set α
f : α → β
hf : Set.InjOn f S
v₁ : α →₀ M
hv₁ : v₁ ∈ {w | ↑w.support ⊆ S}
v₂ : α →₀ M
hv₂ : v₂ ∈ {w | ↑w.support ⊆ S}
eq : mapDomain f v₁ = mapDomain f v₂
a : α
h : ↑v₁ a = 0 ∧ ↑v₂ a = 0
⊢ ↑v₁ a = ↑v₂ a