Theorem: FreeGroup.lift.range_le
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: rintro _ ⟨⟨L⟩, rfl⟩
state_before: α : Type u
L L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
⊢ (lift f).range ≤ s
state_after: case intro.mk
α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
⊢ (lift f) (Quot.mk Red.Step L) ∈ s

tactic: exact
  List.recOn L s.one_mem fun ⟨x, b⟩ tl ih =>
    Bool.recOn b (by simp at ih ⊢; exact s.mul_mem (s.inv_mem <| H ⟨x, rfl⟩) ih)
      (by simp at ih ⊢; exact s.mul_mem (H ⟨x, rfl⟩) ih)
state_before: case intro.mk
α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
⊢ (lift f) (Quot.mk Red.Step L) ∈ s
state_after: no goals

tactic: simp at ih ⊢
state_before: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (lift f) (Quot.mk Red.Step tl) ∈ s
x : α
b : Bool
⊢ (lift f) (Quot.mk Red.Step ((x, false) :: tl)) ∈ s
state_after: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
x : α
b : Bool
⊢ (f x)⁻¹ * (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s

tactic: exact s.mul_mem (s.inv_mem <| H ⟨x, rfl⟩) ih
state_before: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
x : α
b : Bool
⊢ (f x)⁻¹ * (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
state_after: no goals

tactic: simp at ih ⊢
state_before: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (lift f) (Quot.mk Red.Step tl) ∈ s
x : α
b : Bool
⊢ (lift f) (Quot.mk Red.Step ((x, true) :: tl)) ∈ s
state_after: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
x : α
b : Bool
⊢ f x * (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s

tactic: exact s.mul_mem (H ⟨x, rfl⟩) ih
state_before: α : Type u
L✝ L₁ L₂ L₃ L₄ : List (α × Bool)
β : Type v
inst✝ : Group β
f : α → β
x✝¹ y : FreeGroup α
s : Subgroup β
H : Set.range f ⊆ ↑s
w✝ : FreeGroup α
L : List (α × Bool)
x✝ : α × Bool
tl : List (α × Bool)
ih : (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
x : α
b : Bool
⊢ f x * (List.map (fun x => bif x.2 then f x.1 else (f x.1)⁻¹) tl).prod ∈ s
state_after: no goals