import Mathlib.Data.Finset.Basic import Mathlib.GroupTheory.Commutator import Mathlib.GroupTheory.GroupAction.Basic import Mathlib.Topology.Basic import Mathlib.Topology.Separation import Rubin.Tactic import Rubin.Support import Rubin.Topology import Rubin.InteriorClosure import Rubin.RigidStabilizer namespace Rubin section RegularSupport_def variable {G : Type _} variable (α : Type _) variable [Group G] variable [MulAction G α] variable [TopologicalSpace α] -- The "regular support" is the `Support` of `g : G` in `α` (aka the elements in `α` which are moved by `g`), -- transformed with the interior closure. def RegularSupport (g: G) : Set α := InteriorClosure (Support α g) #align regular_support Rubin.RegularSupport theorem RegularSupport.def {G : Type _} (α : Type _) [Group G] [MulAction G α] [TopologicalSpace α] (g: G) : RegularSupport α g = interior (closure (Support α g)) := by simp [RegularSupport] theorem regularSupport_open [MulAction G α] (g : G) : IsOpen (RegularSupport α g) := by unfold RegularSupport simp theorem regularSupport_regular [MulAction G α] (g : G) : Regular (RegularSupport α g) := by apply interiorClosure_regular #align regular_regular_support Rubin.regularSupport_regular end RegularSupport_def section RegularSupport_continuous variable {G α : Type _} variable [Group G] variable [TopologicalSpace α] variable [MulAction G α] variable [ContinuousConstSMul G α] theorem support_subset_regularSupport [T2Space α] {g : G} : Support α g ⊆ RegularSupport α g := by apply interiorClosure_subset apply support_isOpen (α := α) (g := g) #align support_in_regular_support Rubin.support_subset_regularSupport theorem regularSupport_subset {g : G} {U : Set α} : Regular U → Support α g ⊆ U → RegularSupport α g ⊆ U := by intro U_reg h rw [<-U_reg] apply interiorClosure_mono exact h theorem regularSupport_subset_closure_support {g : G} : RegularSupport α g ⊆ closure (Support α g) := by unfold RegularSupport simp exact interior_subset theorem regularSupport_subset_of_rigidStabilizer {g : G} {U : Set α} (U_reg : Regular U) : g ∈ RigidStabilizer G U → RegularSupport α g ⊆ U := by intro g_in_rist apply regularSupport_subset · assumption · apply rigidStabilizer_support.mp assumption theorem regularSupport_subset_iff_rigidStabilizer [T2Space α] {g : G} {U : Set α} (U_reg : Regular U) : g ∈ RigidStabilizer G U ↔ RegularSupport α g ⊆ U := by constructor · apply regularSupport_subset_of_rigidStabilizer U_reg · intro rs_subset rw [rigidStabilizer_support] apply subset_trans apply support_subset_regularSupport exact rs_subset #align mem_regular_support Rubin.regularSupport_subset_of_rigidStabilizer theorem regularSupport_smulImage {f g : G} : f •'' (RegularSupport α g) = RegularSupport α (f * g * f⁻¹) := by unfold RegularSupport rw [support_conjugate] rw [interiorClosure_smulImage] theorem rigidStabilizer_iInter_regularSupport (F : Set G) : G•[⋂ (g ∈ F), RegularSupport α g] = (⨅ (g ∈ F), G•[RegularSupport α g]) := by let S := { RegularSupport α g | g ∈ F } have h₁ : ⋂ (g ∈ F), RegularSupport α g = ⋂₀ S := by ext x simp have h₂ : ⨅ (g ∈ F), G•[RegularSupport α g] = ⨅ (s ∈ S), G•[s] := by ext x rw [<-sInf_image] simp rw [Subgroup.mem_iInf] simp only [Subgroup.mem_iInf, and_imp, forall_apply_eq_imp_iff₂] rw [h₁, h₂] rw [rigidStabilizer_sInter] theorem rigidStabilizer_iInter_regularSupport' (F : Finset G) : G•[⋂ (g ∈ F), RegularSupport α g] = (⨅ (g ∈ F), G•[RegularSupport α g]) := by have h₁ : G•[⋂ (g ∈ F), RegularSupport α g] = G•[⋂ (g ∈ (F : Set G)), RegularSupport α g] := by simp have h₂ : ⨅ (g ∈ F), G•[RegularSupport α g] = ⨅ (g ∈ (F : Set G)), G•[RegularSupport α g] := by simp rw [h₁, h₂, rigidStabilizer_iInter_regularSupport] end RegularSupport_continuous end Rubin