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

tactic: rcases cs.exists_reduced_word w with ⟨ω, h, rfl⟩
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
hw : w ≠ 1
⊢ ∃ i, cs.IsLeftDescent w i
state_after: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hw : cs.wordProd ω ≠ 1
h : ω.length = cs.length (cs.wordProd ω)
⊢ ∃ i, cs.IsLeftDescent (cs.wordProd ω) i

tactic: have h₁ : ω ≠ [] := by rintro rfl; simp at hw
state_before: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hw : cs.wordProd ω ≠ 1
h : ω.length = cs.length (cs.wordProd ω)
⊢ ∃ i, cs.IsLeftDescent (cs.wordProd ω) i
state_after: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hw : cs.wordProd ω ≠ 1
h : ω.length = cs.length (cs.wordProd ω)
h₁ : ω ≠ []
⊢ ∃ i, cs.IsLeftDescent (cs.wordProd ω) i

tactic: rcases List.exists_cons_of_ne_nil h₁ with ⟨i, ω', rfl⟩
state_before: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hw : cs.wordProd ω ≠ 1
h : ω.length = cs.length (cs.wordProd ω)
h₁ : ω ≠ []
⊢ ∃ i, cs.IsLeftDescent (cs.wordProd ω) i
state_after: case intro.intro.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ ∃ i_1, cs.IsLeftDescent (cs.wordProd (i :: ω')) i_1

tactic: use i
state_before: case intro.intro.intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ ∃ i_1, cs.IsLeftDescent (cs.wordProd (i :: ω')) i_1
state_after: case h
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ cs.IsLeftDescent (cs.wordProd (i :: ω')) i

tactic: rw [IsLeftDescent, ← h, wordProd_cons, simple_mul_simple_cancel_left]
state_before: case h
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ cs.IsLeftDescent (cs.wordProd (i :: ω')) i
state_after: case h
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ cs.length (cs.wordProd ω') < (i :: ω').length

tactic: calc
  ℓ (π ω') ≤ ω'.length                := cs.length_wordProd_le ω'
  _        < (i :: ω').length         := by simp
state_before: case h
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ cs.length (cs.wordProd ω') < (i :: ω').length
state_after: no goals

tactic: rintro rfl
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
hw : cs.wordProd ω ≠ 1
h : ω.length = cs.length (cs.wordProd ω)
⊢ ω ≠ []
state_after: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
hw : cs.wordProd [] ≠ 1
h : [].length = cs.length (cs.wordProd [])
⊢ False

tactic: simp at hw
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
hw : cs.wordProd [] ≠ 1
h : [].length = cs.length (cs.wordProd [])
⊢ False
state_after: no goals

tactic: simp
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω' : List B
hw : cs.wordProd (i :: ω') ≠ 1
h : (i :: ω').length = cs.length (cs.wordProd (i :: ω'))
h₁ : i :: ω' ≠ []
⊢ ω'.length < (i :: ω').length
state_after: no goals