Theorem: Set.Countable.exists_cycleOn
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: obtain hs' | hs' := s.finite_or_infinite
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s

case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s

tactic: refine ⟨hs'.toFinset.toList.formPerm, ?_, fun x hx => by
  simpa using List.mem_of_formPerm_apply_ne hx⟩
state_before: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ hs'.toFinset.toList.formPerm.IsCycleOn s

tactic: convert hs'.toFinset.nodup_toList.isCycleOn_formPerm
state_before: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ hs'.toFinset.toList.formPerm.IsCycleOn s
state_after: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ s = {a | a ∈ hs'.toFinset.toList}

tactic: simp
state_before: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
⊢ s = {a | a ∈ hs'.toFinset.toList}
state_after: no goals

tactic: simpa using List.mem_of_formPerm_apply_ne hx
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Finite
x : α
hx : x ∈ {x | hs'.toFinset.toList.formPerm x ≠ x}
⊢ x ∈ s
state_after: no goals

tactic: haveI := hs.to_subtype
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this : Countable ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s

tactic: haveI := hs'.to_subtype
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this : Countable ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s

tactic: obtain ⟨f⟩ : Nonempty (ℤ ≃ s) := inferInstance
state_before: case inr
ι : Type u_1
α : Type u_2
β : Type u_3
f : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inr.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s

tactic: refine ⟨(Equiv.addRight 1).extendDomain f, ?_, fun x hx =>
  of_not_not fun h => hx <| Perm.extendDomain_apply_not_subtype _ _ h⟩
state_before: case inr.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ ∃ f, f.IsCycleOn s ∧ {x | f x ≠ x} ⊆ s
state_after: case inr.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ ((Equiv.addRight 1).extendDomain f).IsCycleOn s

tactic: convert Int.addRight_one_isCycle.isCycleOn.extendDomain f
state_before: case inr.intro
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ ((Equiv.addRight 1).extendDomain f).IsCycleOn s
state_after: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ s = Subtype.val ∘ ⇑f '' {x | (Equiv.addRight 1) x ≠ x}

tactic: rw [Set.image_comp, Equiv.image_eq_preimage]
state_before: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ s = Subtype.val ∘ ⇑f '' {x | (Equiv.addRight 1) x ≠ x}
state_after: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ s = Subtype.val '' (⇑f.symm ⁻¹' {x | (Equiv.addRight 1) x ≠ x})

tactic: ext
state_before: case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
⊢ s = Subtype.val '' (⇑f.symm ⁻¹' {x | (Equiv.addRight 1) x ≠ x})
state_after: case h.e'_3.h
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
x✝ : α
⊢ x✝ ∈ s ↔ x✝ ∈ Subtype.val '' (⇑f.symm ⁻¹' {x | (Equiv.addRight 1) x ≠ x})

tactic: simp
state_before: case h.e'_3.h
ι : Type u_1
α : Type u_2
β : Type u_3
f✝ : Perm α
s : Set α
hs : s.Countable
hs' : s.Infinite
this✝ : Countable ↑s
this : Infinite ↑s
f : ℤ ≃ ↑s
x✝ : α
⊢ x✝ ∈ s ↔ x✝ ∈ Subtype.val '' (⇑f.symm ⁻¹' {x | (Equiv.addRight 1) x ≠ x})
state_after: no goals