Theorem: CoxeterSystem.rightInvSeq_concat
File: Mathlib/GroupTheory/Coxeter/Inversion.lean

tactic: induction' ω with j ω ih
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
i : B
⊢ cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
state_after: case nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ cs.rightInvSeq ([].concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq [])).concat (cs.simple i)

case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ cs.rightInvSeq ((j :: ω).concat i) =
    (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq (j :: ω))).concat (cs.simple i)

tactic: simp
state_before: case nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ cs.rightInvSeq ([].concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq [])).concat (cs.simple i)
state_after: no goals

tactic: dsimp [rightInvSeq]
state_before: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ cs.rightInvSeq ((j :: ω).concat i) =
    (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq (j :: ω))).concat (cs.simple i)
state_after: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ (cs.wordProd (ω.concat i))⁻¹ * cs.simple j * cs.wordProd (ω.concat i) :: cs.rightInvSeq (ω.concat i) =
    (cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * (cs.simple i)⁻¹ ::
          List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat
      (cs.simple i)

tactic: rw [ih]
state_before: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ (cs.wordProd (ω.concat i))⁻¹ * cs.simple j * cs.wordProd (ω.concat i) :: cs.rightInvSeq (ω.concat i) =
    (cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * (cs.simple i)⁻¹ ::
          List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat
      (cs.simple i)
state_after: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ (cs.wordProd (ω.concat i))⁻¹ * cs.simple j * cs.wordProd (ω.concat i) ::
      (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i) =
    (cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * (cs.simple i)⁻¹ ::
          List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat
      (cs.simple i)

tactic: simp only [concat_eq_append, wordProd_append, wordProd_cons, wordProd_nil, mul_one, mul_inv_rev,
  inv_simple, cons_append, cons.injEq, and_true]
state_before: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ (cs.wordProd (ω.concat i))⁻¹ * cs.simple j * cs.wordProd (ω.concat i) ::
      (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i) =
    (cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * (cs.simple i)⁻¹ ::
          List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat
      (cs.simple i)
state_after: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ cs.simple i * (cs.wordProd ω)⁻¹ * cs.simple j * (cs.wordProd ω * cs.simple i) =
    cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * cs.simple i

tactic: group
state_before: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i j : B
ω : List B
ih : cs.rightInvSeq (ω.concat i) = (List.map (⇑(MulAut.conj (cs.simple i))) (cs.rightInvSeq ω)).concat (cs.simple i)
⊢ cs.simple i * (cs.wordProd ω)⁻¹ * cs.simple j * (cs.wordProd ω * cs.simple i) =
    cs.simple i * ((cs.wordProd ω)⁻¹ * cs.simple j * cs.wordProd ω) * cs.simple i
state_after: no goals