Theorem: Equiv.Perm.exists_mem_support_of_mem_support_prod
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: contrapose! hx
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
l : List (Perm α)
x : α
hx : x ∈ support (List.prod l)
⊢ ∃ f, f ∈ l ∧ x ∈ support f

tactic: simp_rw [mem_support, not_not] at hx⊢
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
l : List (Perm α)
x : α
hx : ∀ (f : Perm α), f ∈ l → ¬x ∈ support f
⊢ ¬x ∈ support (List.prod l)

tactic: induction' l with f l ih
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
l : List (Perm α)
x : α
hx : ∀ (f : Perm α), f ∈ l → ↑f x = x
⊢ ↑(List.prod l) x = x

tactic: rfl
state_before: case nil
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
l : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l → ↑f x = x
hx : ∀ (f : Perm α), f ∈ [] → ↑f x = x
⊢ ↑(List.prod []) x = x

tactic: rw [List.prod_cons, mul_apply, ih, hx]
state_before: case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
⊢ ↑(List.prod (f :: l)) x = x

tactic: simp only [List.find?, List.mem_cons, true_or]
state_before: case cons._
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
⊢ f ∈ f :: l

case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
⊢ ∀ (f : Perm α), f ∈ l → ↑f x = x

tactic: intros f' hf'
state_before: case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
⊢ ∀ (f : Perm α), f ∈ l → ↑f x = x

tactic: refine' hx f' _
state_before: case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
f' : Perm α
hf' : f' ∈ l
⊢ ↑f' x = x

tactic: simp only [List.find?, List.mem_cons]
state_before: case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
f' : Perm α
hf' : f' ∈ l
⊢ f' ∈ f :: l

tactic: exact Or.inr hf'
state_before: case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g : Perm α
l✝ : List (Perm α)
x : α
hx✝ : ∀ (f : Perm α), f ∈ l✝ → ↑f x = x
f : Perm α
l : List (Perm α)
ih : (∀ (f : Perm α), f ∈ l → ↑f x = x) → ↑(List.prod l) x = x
hx : ∀ (f_1 : Perm α), f_1 ∈ f :: l → ↑f_1 x = x
f' : Perm α
hf' : f' ∈ l
⊢ f' = f ∨ f' ∈ l