Theorem: CoxeterSystem.length_inv
File: Mathlib/GroupTheory/Coxeter/Length.lean

tactic: apply Nat.le_antisymm
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
⊢ cs.length w⁻¹ = cs.length w
state_after: case h₁
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
⊢ cs.length w⁻¹ ≤ cs.length w

case h₂
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
⊢ cs.length w ≤ cs.length w⁻¹

tactic: rcases cs.exists_reduced_word w with ⟨ω, hω, rfl⟩
state_before: case h₁
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
⊢ cs.length w⁻¹ ≤ cs.length w
state_after: case h₁.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hω : ω.length = cs.length (cs.wordProd ω)
⊢ cs.length (cs.wordProd ω)⁻¹ ≤ cs.length (cs.wordProd ω)

tactic: have := cs.length_wordProd_le (List.reverse ω)
state_before: case h₁.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hω : ω.length = cs.length (cs.wordProd ω)
⊢ cs.length (cs.wordProd ω)⁻¹ ≤ cs.length (cs.wordProd ω)
state_after: case h₁.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hω : ω.length = cs.length (cs.wordProd ω)
this : cs.length (cs.wordProd ω.reverse) ≤ ω.reverse.length
⊢ cs.length (cs.wordProd ω)⁻¹ ≤ cs.length (cs.wordProd ω)

tactic: rwa [wordProd_reverse, length_reverse, hω] at this
state_before: case h₁.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hω : ω.length = cs.length (cs.wordProd ω)
this : cs.length (cs.wordProd ω.reverse) ≤ ω.reverse.length
⊢ cs.length (cs.wordProd ω)⁻¹ ≤ cs.length (cs.wordProd ω)
state_after: no goals

tactic: rcases cs.exists_reduced_word w⁻¹ with ⟨ω, hω, h'ω⟩
state_before: case h₂
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
⊢ cs.length w ≤ cs.length w⁻¹
state_after: case h₂.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
ω : List B
hω : ω.length = cs.length w⁻¹
h'ω : w⁻¹ = cs.wordProd ω
⊢ cs.length w ≤ cs.length w⁻¹

tactic: have := cs.length_wordProd_le (List.reverse ω)
state_before: case h₂.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
ω : List B
hω : ω.length = cs.length w⁻¹
h'ω : w⁻¹ = cs.wordProd ω
⊢ cs.length w ≤ cs.length w⁻¹
state_after: case h₂.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
ω : List B
hω : ω.length = cs.length w⁻¹
h'ω : w⁻¹ = cs.wordProd ω
this : cs.length (cs.wordProd ω.reverse) ≤ ω.reverse.length
⊢ cs.length w ≤ cs.length w⁻¹

tactic: rwa [wordProd_reverse, length_reverse, ← h'ω, hω, inv_inv] at this
state_before: case h₂.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
ω : List B
hω : ω.length = cs.length w⁻¹
h'ω : w⁻¹ = cs.wordProd ω
this : cs.length (cs.wordProd ω.reverse) ≤ ω.reverse.length
⊢ cs.length w ≤ cs.length w⁻¹
state_after: no goals