Theorem: List.formPerm_apply_mem_of_mem
File: Mathlib/GroupTheory/Perm/List.lean

tactic: cases' l with y l
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
l : List α
x : α
h : x ∈ l
⊢ l.formPerm x ∈ l
state_after: case nil
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x : α
h : x ∈ []
⊢ [].formPerm x ∈ []

case cons
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x y : α
l : List α
h : x ∈ y :: l
⊢ (y :: l).formPerm x ∈ y :: l

tactic: induction' l with z l IH generalizing x y
state_before: case cons
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x y : α
l : List α
h : x ∈ y :: l
⊢ (y :: l).formPerm x ∈ y :: l
state_after: case cons.nil
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x y : α
h : x ∈ [y]
⊢ [y].formPerm x ∈ [y]

case cons.cons
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l

tactic: simp at h
state_before: case nil
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x : α
h : x ∈ []
⊢ [].formPerm x ∈ []
state_after: no goals

tactic: simpa using h
state_before: case cons.nil
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
x y : α
h : x ∈ [y]
⊢ [y].formPerm x ∈ [y]
state_after: no goals

tactic: by_cases hx : x ∈ z :: l
state_before: case cons.cons
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l
state_after: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l

case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∉ z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l

tactic: rw [formPerm_cons_cons, mul_apply, swap_apply_def]
state_before: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l
state_after: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
⊢ (if (z :: l).formPerm x = y then z else if (z :: l).formPerm x = z then y else (z :: l).formPerm x) ∈ y :: z :: l

tactic: split_ifs
state_before: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
⊢ (if (z :: l).formPerm x = y then z else if (z :: l).formPerm x = z then y else (z :: l).formPerm x) ∈ y :: z :: l
state_after: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝ : (z :: l).formPerm x = y
⊢ z ∈ y :: z :: l

case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝¹ : ¬(z :: l).formPerm x = y
h✝ : (z :: l).formPerm x = z
⊢ y ∈ y :: z :: l

case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝¹ : ¬(z :: l).formPerm x = y
h✝ : ¬(z :: l).formPerm x = z
⊢ (z :: l).formPerm x ∈ y :: z :: l

tactic: simp [IH _ hx]
state_before: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝ : (z :: l).formPerm x = y
⊢ z ∈ y :: z :: l
state_after: no goals

tactic: simp
state_before: case pos
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝¹ : ¬(z :: l).formPerm x = y
h✝ : (z :: l).formPerm x = z
⊢ y ∈ y :: z :: l
state_after: no goals

tactic: simp [*]
state_before: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∈ z :: l
h✝¹ : ¬(z :: l).formPerm x = y
h✝ : ¬(z :: l).formPerm x = z
⊢ (z :: l).formPerm x ∈ y :: z :: l
state_after: no goals

tactic: replace h : x = y := Or.resolve_right (mem_cons.1 h) hx
state_before: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
h : x ∈ y :: z :: l
hx : x ∉ z :: l
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l
state_after: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
hx : x ∉ z :: l
h : x = y
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l

tactic: simp [formPerm_apply_of_not_mem hx, ← h]
state_before: case neg
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
z : α
l : List α
IH : ∀ {x : α} (y : α), x ∈ y :: l → (y :: l).formPerm x ∈ y :: l
x y : α
hx : x ∉ z :: l
h : x = y
⊢ (y :: z :: l).formPerm x ∈ y :: z :: l
state_after: no goals