Theorem: DFinsupp.mk_injective
File: Mathlib/Data/DFinsupp/Basic.lean

Proof steps:
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x : (i : ↑↑s✝) → β ↑i
i : ι
s : Finset ι
⊢ Function.Injective (mk s)
state_after: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
⊢ x = y
tactic: intro x y H
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
⊢ x = y
state_after: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ↑↑s
⊢ x i = y i
tactic: ext i
state_before: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ↑↑s
⊢ x i = y i
state_after: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ↑↑s
h1 : (mk s x) ↑i = (mk s y) ↑i
⊢ x i = y i
tactic: have h1 : (mk s x : ∀ i, β i) i = (mk s y : ∀ i, β i) i := by rw [H]
state_before: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ↑↑s
h1 : (mk s x) ↑i = (mk s y) ↑i
⊢ x i = y i
state_after: case h.mk
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ι
hi : i ∈ s
h1 : (mk s x) ↑⟨i, hi⟩ = (mk s y) ↑⟨i, hi⟩
⊢ x ⟨i, hi⟩ = y ⟨i, hi⟩
tactic: obtain ⟨i, hi : i ∈ s⟩ := i
state_before: case h.mk
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ι
hi : i ∈ s
h1 : (mk s x) ↑⟨i, hi⟩ = (mk s y) ↑⟨i, hi⟩
⊢ x ⟨i, hi⟩ = y ⟨i, hi⟩
state_after: case h.mk
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ι
hi : i ∈ s
h1 : (if H : i ∈ s then x ⟨i, H⟩ else 0) = if H : i ∈ s then y ⟨i, H⟩ else 0
⊢ x ⟨i, hi⟩ = y ⟨i, hi⟩
tactic: dsimp only [mk_apply, Subtype.coe_mk] at h1
state_before: case h.mk
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s✝ : Finset ι
x✝ : (i : ↑↑s✝) → β ↑i
i✝ : ι
s : Finset ι
x y : (i : ↑↑s) → β ↑i
H : mk s x = mk s y
i : ι
hi : i ∈ s
h1 : (if H : i ∈ s then x ⟨i, H⟩ else 0) = if H : i ∈ s then y ⟨i, H⟩ else 0
⊢ x ⟨i, hi⟩ = y ⟨i, hi⟩
state_after: no goals
tactic: simpa only [dif_pos hi] using h1