Theorem: HNNExtension.NormalWord.ext
File: Mathlib/GroupTheory/HNNExtension.lean

Proof steps:
state_before: G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
w w' : NormalWord d
h1 : w.head = w'.head
h2 : w.toList = w'.toList
⊢ w = w'
state_after: case mk.mk
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
w' : NormalWord d
head✝ : G
toList✝ : List (ℤˣ × G)
chain✝ : List.Chain' (fun a b => a.2 ∈ toSubgroup A B a.1 → a.1 = b.1) toList✝
mem_set✝ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ { head := head✝, toList := toList✝, chain := chain✝ }.toList → g ∈ d.set u
h1 : { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ }.head = w'.head
h2 : { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ }.toList = w'.toList
⊢ { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ } = w'
tactic: rcases w with ⟨⟨⟩, _⟩
state_before: case mk.mk
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
w' : NormalWord d
head✝ : G
toList✝ : List (ℤˣ × G)
chain✝ : List.Chain' (fun a b => a.2 ∈ toSubgroup A B a.1 → a.1 = b.1) toList✝
mem_set✝ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ { head := head✝, toList := toList✝, chain := chain✝ }.toList → g ∈ d.set u
h1 : { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ }.head = w'.head
h2 : { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ }.toList = w'.toList
⊢ { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝ } = w'
state_after: case mk.mk.mk
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
head✝ : G
toList✝ : List (ℤˣ × G)
chain✝ : List.Chain' (fun a b => a.2 ∈ toSubgroup A B a.1 → a.1 = b.1) toList✝
mem_set✝¹ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ { head := head✝, toList := toList✝, chain := chain✝ }.toList → g ∈ d.set u
toReducedWord✝ : ReducedWord G A B
mem_set✝ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ toReducedWord✝.toList → g ∈ d.set u
h1 :
  { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ }.head =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }.head
h2 :
  { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ }.toList =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }.toList
⊢ { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ } =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }
tactic: cases w'
state_before: case mk.mk.mk
G : Type u_1
inst✝² : Group G
A B : Subgroup G
φ : ↥A ≃* ↥B
H : Type u_2
inst✝¹ : Group H
M : Type u_3
inst✝ : Monoid M
d : TransversalPair G A B
head✝ : G
toList✝ : List (ℤˣ × G)
chain✝ : List.Chain' (fun a b => a.2 ∈ toSubgroup A B a.1 → a.1 = b.1) toList✝
mem_set✝¹ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ { head := head✝, toList := toList✝, chain := chain✝ }.toList → g ∈ d.set u
toReducedWord✝ : ReducedWord G A B
mem_set✝ : ∀ (u : ℤˣ) (g : G), (u, g) ∈ toReducedWord✝.toList → g ∈ d.set u
h1 :
  { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ }.head =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }.head
h2 :
  { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ }.toList =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }.toList
⊢ { head := head✝, toList := toList✝, chain := chain✝, mem_set := mem_set✝¹ } =
    { toReducedWord := toReducedWord✝, mem_set := mem_set✝ }
state_after: no goals
tactic: simp_all