You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rubin-lean4/Rubin/RegularSupport.lean

131 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 [ContinuousMulAction G α]
theorem support_subset_regularSupport [T2Space α] {g : G} :
Support α g ⊆ RegularSupport α g :=
by
apply interiorClosure_subset
apply support_open (α := α) (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