Theorem: MulAction.mem_fixedPoints_iff_card_orbit_eq_one
File: Mathlib/GroupTheory/GroupAction/Basic.lean

tactic: rw [Fintype.card_eq_one_iff, mem_fixedPoints]
state_before: M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ a ∈ fixedPoints M α ↔ Fintype.card ↑(orbit M a) = 1
state_after: M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∀ (m : M), m • a = a) ↔ ∃ x, ∀ (y : ↑(orbit M a)), y = x

tactic: constructor
state_before: M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∀ (m : M), m • a = a) ↔ ∃ x, ∀ (y : ↑(orbit M a)), y = x
state_after: case mp
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∀ (m : M), m • a = a) → ∃ x, ∀ (y : ↑(orbit M a)), y = x

case mpr
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∃ x, ∀ (y : ↑(orbit M a)), y = x) → ∀ (m : M), m • a = a

tactic: exact fun h => ⟨⟨a, mem_orbit_self _⟩, fun ⟨a, ⟨x, hx⟩⟩ => Subtype.eq <| by simp [h x, hx.symm]⟩
state_before: case mp
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∀ (m : M), m • a = a) → ∃ x, ∀ (y : ↑(orbit M a)), y = x
state_after: no goals

tactic: simp [h x, hx.symm]
state_before: M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a✝ : α
inst✝ : Fintype ↑(orbit M a✝)
h : ∀ (m : M), m • a✝ = a✝
x✝ : ↑(orbit M a✝)
a : α
x : M
hx : (fun m => m • a✝) x = a
⊢ ↑⟨a, ⋯⟩ = ↑⟨a✝, ⋯⟩
state_after: no goals

tactic: intro h x
state_before: case mpr
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
⊢ (∃ x, ∀ (y : ↑(orbit M a)), y = x) → ∀ (m : M), m • a = a
state_after: case mpr
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
h : ∃ x, ∀ (y : ↑(orbit M a)), y = x
x : M
⊢ x • a = a

tactic: rcases h with ⟨⟨z, hz⟩, hz₁⟩
state_before: case mpr
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
h : ∃ x, ∀ (y : ↑(orbit M a)), y = x
x : M
⊢ x • a = a
state_after: case mpr.intro.mk
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
x : M
z : α
hz : z ∈ orbit M a
hz₁ : ∀ (y : ↑(orbit M a)), y = ⟨z, hz⟩
⊢ x • a = a

tactic: calc
  x • a = z := Subtype.mk.inj (hz₁ ⟨x • a, mem_orbit _ _⟩)
  _ = a := (Subtype.mk.inj (hz₁ ⟨a, mem_orbit_self _⟩)).symm
state_before: case mpr.intro.mk
M : Type u
inst✝³ : Monoid M
α : Type v
inst✝² : MulAction M α
β : Type u_1
inst✝¹ : MulAction M β
a : α
inst✝ : Fintype ↑(orbit M a)
x : M
z : α
hz : z ∈ orbit M a
hz₁ : ∀ (y : ↑(orbit M a)), y = ⟨z, hz⟩
⊢ x • a = a
state_after: no goals