Theorem: Combinatorics.Line.coe_injective
File: Mathlib/Combinatorics/HalesJewett.lean

Proof steps:
state_before: η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l : Line α ι
i : ι
a x : α
inst✝ : Nontrivial α
⊢ Injective fun x x_1 i => (x.idxFun i).getD x_1
state_after: η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i : ι
a x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
⊢ l = m
tactic: rintro l m hlm
state_before: η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i : ι
a x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
⊢ l = m
state_after: case idxFun.h.a
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
i : ι
a : α
⊢ a ∈ l.idxFun i ↔ a ∈ m.idxFun i
tactic: ext i a
state_before: case idxFun.h.a
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
i : ι
a : α
⊢ a ∈ l.idxFun i ↔ a ∈ m.idxFun i
state_after: case idxFun.h.a.intro
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
i : ι
a b : α
hba : b ≠ a
⊢ a ∈ l.idxFun i ↔ a ∈ m.idxFun i
tactic: obtain ⟨b, hba⟩ := exists_ne a
state_before: case idxFun.h.a.intro
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
hlm : (fun x x_1 i => (x.idxFun i).getD x_1) l = (fun x x_1 i => (x.idxFun i).getD x_1) m
i : ι
a b : α
hba : b ≠ a
⊢ a ∈ l.idxFun i ↔ a ∈ m.idxFun i
state_after: case idxFun.h.a.intro
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
i : ι
a b : α
hba : b ≠ a
hlm : ∀ (a : α) (a_1 : ι), (l.idxFun a_1).getD a = (m.idxFun a_1).getD a
⊢ l.idxFun i = some a ↔ m.idxFun i = some a
tactic: simp only [Option.mem_def, funext_iff] at hlm ⊢
state_before: case idxFun.h.a.intro
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
i : ι
a b : α
hba : b ≠ a
hlm : ∀ (a : α) (a_1 : ι), (l.idxFun a_1).getD a = (m.idxFun a_1).getD a
⊢ l.idxFun i = some a ↔ m.idxFun i = some a
state_after: case idxFun.h.a.intro.refine_1
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
i : ι
a b : α
hba : b ≠ a
hlm : ∀ (a : α) (a_1 : ι), (l.idxFun a_1).getD a = (m.idxFun a_1).getD a
h : l.idxFun i = some a
⊢ m.idxFun i = some a

case idxFun.h.a.intro.refine_2
η : Type u_1
α : Type u_2
ι : Type u_3
κ : Type u_4
l✝ : Line α ι
i✝ : ι
a✝ x : α
inst✝ : Nontrivial α
l m : Line α ι
i : ι
a b : α
hba : b ≠ a
hlm : ∀ (a : α) (a_1 : ι), (l.idxFun a_1).getD a = (m.idxFun a_1).getD a
h : m.idxFun i = some a
⊢ l.idxFun i = some a
tactic: refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩