Theorem: CoxeterSystem.simple_induction_left
File: Mathlib/GroupTheory/Coxeter/Basic.lean

tactic: let p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop :=
  fun w _ ↦ p w
state_before: B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
⊢ p w
state_after: B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
⊢ p w

tactic: have := cs.submonoid_closure_range_simple.symm ▸ Submonoid.mem_top w
state_before: B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
⊢ p w
state_after: B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ p w

tactic: apply Submonoid.closure_induction_left (p := p')
state_before: B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ p w
state_after: case one
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ p' 1 ⋯

case mul_left
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ ∀ (x : W) (hx : x ∈ Set.range cs.simple) (y : W) (hy : y ∈ Submonoid.closure (Set.range cs.simple)),
    p' y hy → p' (x * y) ⋯

case h
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ w ∈ Submonoid.closure (Set.range cs.simple)

tactic: exact one
state_before: case one
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ p' 1 ⋯
state_after: no goals

tactic: rintro _ ⟨i, rfl⟩ y _
state_before: case mul_left
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ ∀ (x : W) (hx : x ∈ Set.range cs.simple) (y : W) (hy : y ∈ Submonoid.closure (Set.range cs.simple)),
    p' y hy → p' (x * y) ⋯
state_after: case mul_left.intro
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
i : B
y : W
hy✝ : y ∈ Submonoid.closure (Set.range cs.simple)
⊢ p' y hy✝ → p' (cs.simple i * y) ⋯

tactic: exact mul_simple_left y i
state_before: case mul_left.intro
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
i : B
y : W
hy✝ : y ∈ Submonoid.closure (Set.range cs.simple)
⊢ p' y hy✝ → p' (cs.simple i * y) ⋯
state_after: no goals

tactic: exact this
state_before: case h
B : Type u_1
B' : Type u_2
e : B ≃ B'
W : Type u_3
H : Type u_4
inst✝¹ : Group W
inst✝ : Group H
M : CoxeterMatrix B
cs : CoxeterSystem M W
p : W → Prop
w : W
one : p 1
mul_simple_left : ∀ (w : W) (i : B), p w → p (cs.simple i * w)
p' : (w : W) → w ∈ Submonoid.closure (Set.range cs.simple) → Prop := fun w x => p w
this : w ∈ Submonoid.closure (Set.range cs.simple)
⊢ w ∈ Submonoid.closure (Set.range cs.simple)
state_after: no goals