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

tactic: constructor
state_before: α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
⊢ single a₁ b₁ = single a₂ b₂ ↔ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: intro eq
state_before: case mp
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
⊢ single a₁ b₁ = single a₂ b₂ → a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: by_cases h : a₁ = a₂
state_before: case mp
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq : single a₁ b₁ = single a₂ b₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: refine' Or.inl ⟨h, _⟩
state_before: case pos
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq : single a₁ b₁ = single a₂ b₂
h : a₁ = a₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: rwa [h, (single_injective a₂).eq_iff] at eq
state_before: case pos
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq : single a₁ b₁ = single a₂ b₂
h : a₁ = a₂
⊢ b₁ = b₂

tactic: rw [FunLike.ext_iff] at eq
state_before: case neg
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq : single a₁ b₁ = single a₂ b₂
h : ¬a₁ = a₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: have h₁ := eq a₁
state_before: case neg
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq✝ : single a₁ b₁ = single a₂ b₂
eq : ∀ (x : α), ↑(single a₁ b₁) x = ↑(single a₂ b₂) x
h : ¬a₁ = a₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: have h₂ := eq a₂
state_before: case neg
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq✝ : single a₁ b₁ = single a₂ b₂
eq : ∀ (x : α), ↑(single a₁ b₁) x = ↑(single a₂ b₂) x
h : ¬a₁ = a₂
h₁ : ↑(single a₁ b₁) a₁ = ↑(single a₂ b₂) a₁
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: simp only [single_eq_same, single_eq_of_ne h, single_eq_of_ne (Ne.symm h)] at h₁ h₂
state_before: case neg
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq✝ : single a₁ b₁ = single a₂ b₂
eq : ∀ (x : α), ↑(single a₁ b₁) x = ↑(single a₂ b₂) x
h : ¬a₁ = a₂
h₁ : ↑(single a₁ b₁) a₁ = ↑(single a₂ b₂) a₁
h₂ : ↑(single a₁ b₁) a₂ = ↑(single a₂ b₂) a₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: exact Or.inr ⟨h₁, h₂.symm⟩
state_before: case neg
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
eq✝ : single a₁ b₁ = single a₂ b₂
eq : ∀ (x : α), ↑(single a₁ b₁) x = ↑(single a₂ b₂) x
h : ¬a₁ = a₂
h₁ : b₁ = 0
h₂ : 0 = b₂
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0

tactic: rintro (⟨rfl, rfl⟩ | ⟨rfl, rfl⟩)
state_before: case mpr
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
b₁ b₂ : M
⊢ a₁ = a₂ ∧ b₁ = b₂ ∨ b₁ = 0 ∧ b₂ = 0 → single a₁ b₁ = single a₂ b₂

tactic: rfl
state_before: case mpr.inl.intro
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ : α
b₁ : M
⊢ single a₁ b₁ = single a₁ b₁

tactic: rw [single_zero, single_zero]
state_before: case mpr.inr.intro
α : Type u_1
β : Type ?u.55526
γ : Type ?u.55529
ι : Type ?u.55532
M : Type u_2
M' : Type ?u.55538
N : Type ?u.55541
P : Type ?u.55544
G : Type ?u.55547
H : Type ?u.55550
R : Type ?u.55553
S : Type ?u.55556
inst✝ : Zero M
a a' : α
b : M
a₁ a₂ : α
⊢ single a₁ 0 = single a₂ 0