MathlibAnnex/Topology/ClosureSpace/ComponentKernel.lean
Exact source · gss-v0.5.0
Fixed commit original · Raw UTF-8 source · Back to GSS Companion
Select a source link from a manuscript to highlight its exact range.
Technical identity
- Commit
ac405356bb98afed954da9b9c795d23cc8d5d149- SHA-256
d023a77ffe687360b1f94d04bbbef93487d6cb9a731175679fade16da6acfe6c- Bytes
- 6773
1/-2Copyright (c) 2026 Ryotaro Tanaka. All rights reserved.3Released under Apache 2.0 license as described in the file LICENSE.4Authors: Ryotaro Tanaka5-/6module78public import MathlibAnnex.Topology.ClosureSpace.ComponentQuotient9public import MathlibAnnex.Topology.ClosureSpace.HullKernel1011/-!12# Intersections of components in a hull-kernel space1314For a family of proper subsets of an arbitrary set, intersect the members of15one component. These intersections are themselves actual subsets of the16ambient set. No submodule, ideal or other algebraic structure is assumed.1718The component-closure and intersection representations are different types;19the equivalence below uses intersection in one direction and hull in the other.20Empty indexed intersections retain their ordinary value `univ`.21-/2223@[expose] public section2425set_option autoImplicit false2627universe u2829namespace ClosureSpace30namespace HullKernel3132variable {X : Type u} (F : Set (Set X)) (hF : Set.univ ∉ F)3334/-- Intersect the members of the component of a hull-kernel point. -/35def componentKernel (I : F) : Set X := kernel F ((space F hF).component I)3637/-- Closing a selection of members does not change their intersection. -/38@[simp]39theorem kernel_space_closure (S : Set F) :40kernel F ((space F hF).closure S) = kernel F S := kernel_hull_kernel F S4142theorem componentKernel_subset (I : F) : componentKernel F hF I ⊆ I.val :=43fun _ hx => hx I ((space F hF).mem_component I)4445theorem componentKernel_ne_univ (I : F) : componentKernel F hF I ≠ Set.univ := by46intro h47have hI : I.val = Set.univ := Set.Subset.antisymm (Set.subset_univ _) (by48rw [← h]49exact componentKernel_subset F hF I)50exact hF (hI ▸ I.property)5152theorem componentKernel_eq_of_related {I J : F} (h : (space F hF).Related I J) :53componentKernel F hF I = componentKernel F hF J :=54congrArg (kernel F) ((space F hF).component_eq_of_related h)5556/-- The closure of a component is the hull of its intersection. -/57theorem componentClosure_eq_hull_componentKernel (I : F) :58(space F hF).componentClosure I = hull F (componentKernel F hF I) := rfl5960@[simp]61theorem kernel_componentClosure (I : F) :62kernel F ((space F hF).componentClosure I) = componentKernel F hF I :=63kernel_hull_kernel F ((space F hF).component I)6465/-- Equality of component closures is exactly equality of their intersections. -/66theorem componentClosure_eq_iff_componentKernel_eq (I J : F) :67(space F hF).componentClosure I = (space F hF).componentClosure J ↔68componentKernel F hF I = componentKernel F hF J :=69closure_eq_iff_kernel_eq F hF ((space F hF).component I) ((space F hF).component J)7071/-- The family of component intersections. Repeated subsets give one member. -/72def componentKernelFamily : Set (Set X) := Set.range (componentKernel F hF)7374/-- Points of the component-intersection family, as subsets of the ambient set. -/75abbrev ComponentKernelPoint : Type u := {J : Set X // J ∈ componentKernelFamily F hF}7677/-- Send an original family member to its component intersection. -/78def toComponentKernelPoint (I : F) : ComponentKernelPoint F hF :=79⟨componentKernel F hF I, ⟨I, rfl⟩⟩8081theorem toComponentKernelPoint_surjective :82Function.Surjective (toComponentKernelPoint F hF) := by83rintro ⟨J, I, rfl⟩84exact ⟨I, rfl⟩8586theorem univ_notMem_componentKernelFamily : Set.univ ∉ componentKernelFamily F hF := by87rintro ⟨I, hI⟩88exact componentKernel_ne_univ F hF I hI8990/-- Hull-kernel closure on the component-intersection family. -/91def componentKernelClosure : ClosureSpace (ComponentKernelPoint F hF) :=92space (componentKernelFamily F hF) (univ_notMem_componentKernelFamily F hF)9394/-- Intersect the carrier of a P-point. -/95def pPointToComponentKernelPoint (p : (space F hF).PPoint) : ComponentKernelPoint F hF :=96⟨kernel F p.val, by97obtain ⟨I, hI⟩ := p.property98exact ⟨I, (kernel_componentClosure F hF I).symm.trans (congrArg (kernel F) hI)⟩⟩99100/-- Recover the closed component as the hull of its intersection. -/101def componentKernelPointToPPoint (J : ComponentKernelPoint F hF) : (space F hF).PPoint :=102⟨hull F J.val, by103obtain ⟨I, hI⟩ := J.property104exact ⟨I, (componentClosure_eq_hull_componentKernel F hF I).trans105(congrArg (hull F) hI)⟩⟩106107/-- The intersection/hull equivalence; both inverse laws are actual set equalities. -/108def pPointEquivComponentKernelPoint : (space F hF).PPoint ≃ ComponentKernelPoint F hF where109toFun := pPointToComponentKernelPoint F hF110invFun := componentKernelPointToPPoint F hF111left_inv p := by112apply Subtype.ext113change (space F hF).closure p.val = p.val114exact ((space F hF).isClosed_iff p.val).mp ((space F hF).isClosed_pPoint p)115right_inv J := by116apply Subtype.ext117change kernel F (hull F J.val) = J.val118obtain ⟨I, hI⟩ := J.property119rw [← hI]120exact kernel_hull_kernel F ((space F hF).component I)121122@[simp]123theorem pPointEquivComponentKernelPoint_toPPoint (I : F) :124pPointEquivComponentKernelPoint F hF ((space F hF).toPPoint I) =125toComponentKernelPoint F hF I := Subtype.ext (kernel_componentClosure F hF I)126127/-- The kernel of a selected family of component intersections equals the128kernel of all original members whose component intersection was selected. -/129theorem kernel_componentKernelFamily (T : Set (ComponentKernelPoint F hF)) :130kernel (componentKernelFamily F hF) T =131kernel F (toComponentKernelPoint F hF ⁻¹' T) := by132apply Set.ext133intro x134constructor135· intro hx I hI136exact componentKernel_subset F hF I (hx (toComponentKernelPoint F hF I) hI)137· intro hx J hJ138obtain ⟨I, hI⟩ := J.property139change x ∈ J.val140rw [← hI]141intro I' hI'142apply hx I'143have heq : toComponentKernelPoint F hF I' = J := by144apply Subtype.ext145exact (componentKernel_eq_of_related F hF hI').symm.trans hI146change toComponentKernelPoint F hF I' ∈ T147rw [heq]148exact hJ149150/-- Membership in the new hull-kernel closure expressed in the original space.151This is the component-intersection criterion, before any G/P identification. -/152theorem mem_componentKernelClosure_iff (I : F) (T : Set (ComponentKernelPoint F hF)) :153toComponentKernelPoint F hF I ∈ (componentKernelClosure F hF).closure T ↔154(space F hF).componentClosure I ⊆155(space F hF).closure (toComponentKernelPoint F hF ⁻¹' T) := by156change (kernel (componentKernelFamily F hF) T ⊆ componentKernel F hF I) ↔ _157rw [kernel_componentKernelFamily F hF T]158constructor159· intro h160exact hull_antitone F h161· intro h162have hk := kernel_antitone F h163simpa only [componentKernel, componentClosure, space_closure, kernel_hull_kernel] using hk164165end HullKernel166end ClosureSpace