Theorem: swap_mem_closure_isSwap
File: Mathlib/GroupTheory/Perm/ClosureSwap.lean

tactic: refine ⟨fun h ↦ ⟨⟨swap x y, h⟩, swap_apply_right x y⟩, fun hf ↦ ?_⟩
state_before: G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
⊢ swap x y ∈ closure S ↔ x ∈ orbit (↥(closure S)) y
state_after: G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
⊢ swap x y ∈ closure S

tactic: by_contra h
state_before: G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
⊢ swap x y ∈ closure S
state_after: G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ False

tactic: have := exists_smul_not_mem_of_subset_orbit_closure S {x | swap x y ∈ closure S}
  (fun f hf ↦ ?_) (fun z hz ↦ ?_) h ⟨y, ?_⟩
state_before: G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ False
state_after: case refine_4
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
this : ∃ σ ∈ S, ∃ a ∈ {x | swap x y ∈ closure S}, σ • a ∉ {x | swap x y ∈ closure S}
⊢ False

case refine_1
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf✝ : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
f : Equiv.Perm α
hf : f ∈ S
⊢ f⁻¹ ∈ S

case refine_2
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
z : α
hz : z ∈ {x | swap x y ∈ closure S}
⊢ z ∈ orbit (↥(closure S)) x

case refine_3
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ y ∈ {x | swap x y ∈ closure S}

tactic: obtain ⟨σ, hσ, a, ha, hσa⟩ := this
state_before: case refine_4
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
this : ∃ σ ∈ S, ∃ a ∈ {x | swap x y ∈ closure S}, σ • a ∉ {x | swap x y ∈ closure S}
⊢ False
state_after: case refine_4.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
σ : Equiv.Perm α
hσ : σ ∈ S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
hσa : σ • a ∉ {x | swap x y ∈ closure S}
⊢ False

tactic: obtain ⟨z, w, hzw, rfl⟩ := hS σ hσ
state_before: case refine_4.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
σ : Equiv.Perm α
hσ : σ ∈ S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
hσa : σ • a ∉ {x | swap x y ∈ closure S}
⊢ False
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
⊢ False

tactic: have := ne_of_mem_of_not_mem ha hσa
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
⊢ False
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a ≠ swap z w • a
⊢ False

tactic: rw [Perm.smul_def, ne_comm, swap_apply_ne_self_iff, and_iff_right hzw] at this
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a ≠ swap z w • a
⊢ False
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a = z ∨ a = w
⊢ False

tactic: refine hσa (SubmonoidClass.swap_mem_trans (closure S) ?_ ha)
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a = z ∨ a = w
⊢ False
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a = z ∨ a = w
⊢ swap (swap z w • a) a ∈ closure S

tactic: obtain rfl | rfl := this <;> simpa [swap_comm] using subset_closure hσ
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
a : α
ha : a ∈ {x | swap x y ∈ closure S}
z w : α
hzw : z ≠ w
hσ : swap z w ∈ S
hσa : swap z w • a ∉ {x | swap x y ∈ closure S}
this : a = z ∨ a = w
⊢ swap (swap z w • a) a ∈ closure S
state_after: no goals

tactic: obtain ⟨x, y, -, rfl⟩ := hS f hf
state_before: case refine_1
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf✝ : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
f : Equiv.Perm α
hf : f ∈ S
⊢ f⁻¹ ∈ S
state_after: case refine_1.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x✝ y✝ : α
hf✝ : x✝ ∈ orbit (↥(closure S)) y✝
h : swap x✝ y✝ ∉ closure S
x y : α
hf : swap x y ∈ S
⊢ (swap x y)⁻¹ ∈ S

tactic: rwa [swap_inv]
state_before: case refine_1.intro.intro.intro
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x✝ y✝ : α
hf✝ : x✝ ∈ orbit (↥(closure S)) y✝
h : swap x✝ y✝ ∉ closure S
x y : α
hf : swap x y ∈ S
⊢ (swap x y)⁻¹ ∈ S
state_after: no goals

tactic: exact orbit_eq_iff.mpr hf ▸ ⟨⟨swap z y, hz⟩, swap_apply_right z y⟩
state_before: case refine_2
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
z : α
hz : z ∈ {x | swap x y ∈ closure S}
⊢ z ∈ orbit (↥(closure S)) x
state_after: no goals

tactic: rw [mem_setOf, swap_self]
state_before: case refine_3
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ y ∈ {x | swap x y ∈ closure S}
state_after: case refine_3
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ Equiv.refl α ∈ closure S

tactic: apply one_mem
state_before: case refine_3
G : Type u_1
α : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : DecidableEq α
S : Set (Equiv.Perm α)
hS : ∀ f ∈ S, f.IsSwap
x y : α
hf : x ∈ orbit (↥(closure S)) y
h : swap x y ∉ closure S
⊢ Equiv.refl α ∈ closure S
state_after: no goals