Theorem: Monoid.PushoutI.NormalWord.ext
File: Mathlib/GroupTheory/PushoutI.lean

Proof steps:
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
w₁ w₂ : NormalWord d
hhead : w₁.head = w₂.head
hlist : w₁.toList = w₂.toList
⊢ w₁ = w₂
state_after: case mk.mk
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
w₂ : NormalWord d
head✝ : H
toList✝ : List ((i : ι) × G i)
ne_one✝ : ∀ l ∈ toList✝, l.snd ≠ 1
chain_ne✝ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝
normalized✝ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝ }.toList → g ∈ d.set i
hhead :
  { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.head =
    w₂.head
hlist :
  { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.toList =
    w₂.toList
⊢ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ } = w₂
tactic: rcases w₁ with ⟨⟨_, _, _⟩, _, _⟩
state_before: case mk.mk
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
w₂ : NormalWord d
head✝ : H
toList✝ : List ((i : ι) × G i)
ne_one✝ : ∀ l ∈ toList✝, l.snd ≠ 1
chain_ne✝ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝
normalized✝ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝ }.toList → g ∈ d.set i
hhead :
  { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.head =
    w₂.head
hlist :
  { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.toList =
    w₂.toList
⊢ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ } = w₂
state_after: case mk.mk.mk.mk
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
head✝¹ : H
toList✝¹ : List ((i : ι) × G i)
ne_one✝¹ : ∀ l ∈ toList✝¹, l.snd ≠ 1
chain_ne✝¹ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝¹
normalized✝¹ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹ }.toList → g ∈ d.set i
head✝ : H
toList✝ : List ((i : ι) × G i)
ne_one✝ : ∀ l ∈ toList✝, l.snd ≠ 1
chain_ne✝ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝
normalized✝ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝ }.toList → g ∈ d.set i
hhead :
  { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹, normalized := normalized✝¹ }.head =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.head
hlist :
  { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹,
        normalized := normalized✝¹ }.toList =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.toList
⊢ { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹, normalized := normalized✝¹ } =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }
tactic: rcases w₂ with ⟨⟨_, _, _⟩, _, _⟩
state_before: case mk.mk.mk.mk
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
head✝¹ : H
toList✝¹ : List ((i : ι) × G i)
ne_one✝¹ : ∀ l ∈ toList✝¹, l.snd ≠ 1
chain_ne✝¹ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝¹
normalized✝¹ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹ }.toList → g ∈ d.set i
head✝ : H
toList✝ : List ((i : ι) × G i)
ne_one✝ : ∀ l ∈ toList✝, l.snd ≠ 1
chain_ne✝ : Chain' (fun l l' => l.fst ≠ l'.fst) toList✝
normalized✝ :
  ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝ }.toList → g ∈ d.set i
hhead :
  { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹, normalized := normalized✝¹ }.head =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.head
hlist :
  { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹,
        normalized := normalized✝¹ }.toList =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }.toList
⊢ { toList := toList✝¹, ne_one := ne_one✝¹, chain_ne := chain_ne✝¹, head := head✝¹, normalized := normalized✝¹ } =
    { toList := toList✝, ne_one := ne_one✝, chain_ne := chain_ne✝, head := head✝, normalized := normalized✝ }
state_after: no goals
tactic: simp_all