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

tactic: haveI : Fintype s := Set.Finite.fintype hs
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
⊢ g ∈ stabilizer G s ↔ g • s ⊆ s
state_after: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this : Fintype ↑s
⊢ g ∈ stabilizer G s ↔ g • s ⊆ s

tactic: haveI : Fintype (g • s : Set α) := Fintype.ofFinite _
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this : Fintype ↑s
⊢ g ∈ stabilizer G s ↔ g • s ⊆ s
state_after: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g ∈ stabilizer G s ↔ g • s ⊆ s

tactic: rw [mem_stabilizer_iff]
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g ∈ stabilizer G s ↔ g • s ⊆ s
state_after: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s = s ↔ g • s ⊆ s

tactic: constructor
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s = s ↔ g • s ⊆ s
state_after: case mp
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s = s → g • s ⊆ s

case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s ⊆ s → g • s = s

tactic: exact Eq.subset
state_before: case mp
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s = s → g • s ⊆ s

case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s ⊆ s → g • s = s
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s ⊆ s → g • s = s

tactic: rw [← Set.toFinset_inj, ← Set.toFinset_subset_toFinset]
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ g • s ⊆ s → g • s = s
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ (g • s).toFinset ⊆ s.toFinset → (g • s).toFinset = s.toFinset

tactic: intro h
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
⊢ (g • s).toFinset ⊆ s.toFinset → (g • s).toFinset = s.toFinset
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ (g • s).toFinset = s.toFinset

tactic: apply Finset.eq_of_subset_of_card_le h
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ (g • s).toFinset = s.toFinset
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ s.toFinset.card ≤ (g • s).toFinset.card

tactic: apply le_of_eq
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ s.toFinset.card ≤ (g • s).toFinset.card
state_after: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ s.toFinset.card = (g • s).toFinset.card

tactic: suffices (g • s).toFinset = Finset.map ⟨_, MulAction.injective g⟩ hs.toFinset by
  rw [this, Finset.card_map, Set.toFinite_toFinset]
state_before: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ s.toFinset.card = (g • s).toFinset.card
state_after: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ (g • s).toFinset = Finset.map { toFun := fun x => g • x, inj' := ⋯ } hs.toFinset

tactic: rw [← Finset.coe_inj]
state_before: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ (g • s).toFinset = Finset.map { toFun := fun x => g • x, inj' := ⋯ } hs.toFinset
state_after: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ ↑(g • s).toFinset = ↑(Finset.map { toFun := fun x => g • x, inj' := ⋯ } hs.toFinset)

tactic: simp only [Set.coe_toFinset, Set.toFinite_toFinset, Finset.coe_map,
  Function.Embedding.coeFn_mk, Set.image_smul]
state_before: case mpr.a
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝ : Fintype ↑s
this : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
⊢ ↑(g • s).toFinset = ↑(Finset.map { toFun := fun x => g • x, inj' := ⋯ } hs.toFinset)
state_after: no goals

tactic: rw [this, Finset.card_map, Set.toFinite_toFinset]
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : MulAction G α
s : Set α
hs : s.Finite
g : G
this✝¹ : Fintype ↑s
this✝ : Fintype ↑(g • s)
h : (g • s).toFinset ⊆ s.toFinset
this : (g • s).toFinset = Finset.map { toFun := fun x => g • x, inj' := ⋯ } hs.toFinset
⊢ s.toFinset.card = (g • s).toFinset.card
state_after: no goals