Module

SpectralClosedRestriction.lean

Nyll.SchemeTheory.Topology.SpectralClosedRestriction
7 declarations indexed from sourceView source ↗

Clopen restriction along a closed subset of a spectral space

If every point closure meets a closed subset in a connected nonempty set, every clopen partition of the closed subset extends uniquely to the whole space. This proves the topological partition step of Stacks Project, tag 0CAM, used in the sheaf restriction theorem 09ZG.

The proof constructs the generalization closures of the two parts. They are closed in the constructible topology by compactness, and the connected intersection hypothesis makes them stable under specialization.

References: https://stacks.math.columbia.edu/tag/0CAM and https://stacks.math.columbia.edu/tag/09ZG. The Lean proofs are original.

Imports5
  • Mathlib.Topology.Connected.Clopen
  • Mathlib.Topology.LocallyConstant.Basic
  • Mathlib.Topology.Sets.Closeds
  • Mathlib.Topology.Spectral.Basic
  • Mathlib.Topology.Spectral.ConstructibleTopology
Imported by4

Declarations

SchemeTheory.generizations_eq_iInter_compactOpens
Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
lemma generizations_eq_iInter_compactOpens [PrespectralSpace X]
    {A : Set X} (hA : IsCompact A) :
    {x : X | ∃ z ∈ A, x ⤳ z} =
      ⋂ U : {U : Set X // IsOpen U ∧ IsCompact U ∧ A ⊆ U}, (U : Set X)
SchemeTheory.isClosed_constructible_generizations
Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
lemma isClosed_constructible_generizations [PrespectralSpace X]
    {A : Set X} (hA : IsCompact A) :
    IsClosed ((WithTopology.ofTopology : WithConstructibleTopology X → X) ⁻¹'
      {x : X | ∃ z ∈ A, x ⤳ z})
SchemeTheory.exists_specializes_of_mem_closure

A point in the closure of a constructibly closed subset specializes from a point of that subset. The compactness used here is compactness of the constructible topology of the actual spectral space.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
lemma exists_specializes_of_mem_closure [SpectralSpace X]
    {A : Set X}
    (hA : IsClosed ((WithTopology.ofTopology : WithConstructibleTopology X → X) ⁻¹' A))
    {x : X} (hx : x ∈ closure A) : ∃ a ∈ A, a ⤳ x
SchemeTheory.isClosed_of_constructible_closed_specialization
Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
lemma isClosed_of_constructible_closed_specialization [SpectralSpace X]
    {A : Set X}
    (hA : IsClosed ((WithTopology.ofTopology : WithConstructibleTopology X → X) ⁻¹' A))
    (hstable : ∀ ⦃x y : X⦄, x ∈ A → x ⤳ y → y ∈ A) : IsClosed A
SchemeTheory.exists_clopen_partition_of_connected_closed_intersections

A closed partition extends along a closed subset meeting every point closure in a connected nonempty set.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
theorem exists_clopen_partition_of_connected_closed_intersections [SpectralSpace X]
    {Z A B : Set X} (hA : IsClosed A) (hB : IsClosed B)
    (hAB : A ∪ B = Z) (hdisjoint : Disjoint A B)
    (hconnected : ∀ x : X, IsConnected (Z ∩ closure ({x} : Set X))) :
    ∃ W : Set X, IsClopen W ∧ W ∩ Z = A ∧ Wᶜ ∩ Z = B
SchemeTheory.clopen_restriction_bijective

Restriction gives a bijection on actual clopen subsets.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
theorem clopen_restriction_bijective [SpectralSpace X] {Z : Set X}
    (hZ : IsClosed Z)
    (hconnected : ∀ x : X, IsConnected (Z ∩ closure ({x} : Set X))) :
    Function.Bijective (fun W : Clopens X =>
      (⟨Subtype.val ⁻¹' (W : Set X),
        W.isClopen.preimage continuous_subtype_val⟩ : Clopens Z)) := by
  classical
  constructor
  · intro U V hUV
    apply Clopens.ext
    ext x
    obtain ⟨z, hzZ, hxz⟩ := (hconnected x).nonempty
    have hspec : x ⤳ z := specializes_iff_mem_closure.mpr hxz
    have hzUV : z ∈ U ↔ z ∈ V :=
      Iff.of_eq (congrArg (fun W : Clopens Z => (⟨z, hzZ⟩ : Z) ∈ W) hUV)
    constructor
    · intro hxU
      exact hspec.mem_open V.isOpen (hzUV.mp (hspec.mem_closed U.isClosed hxU))
    · intro hxV
      exact hspec.mem_open U.isOpen (hzUV.mpr (hspec.mem_closed V.isClosed hxV))
  · intro U
    let A : Set X := Subtype.val '' (U : Set Z)
    let B : Set X := Subtype.val '' (U : Set Z)ᶜ
    have hA : IsClosed A := hZ.isClosedMap_subtype_val _ U.isClosed
    have hB : IsClosed B := hZ.isClosedMap_subtype_val _ U.isOpen.isClosed_compl
    have hAB : A ∪ B = Z := by
      ext x
      constructor
      · rintro (⟨z, hz, rfl⟩ | ⟨z, hz, rfl⟩) <;> exact z.2
      · intro hx
        by_cases hxU : (⟨x, hx⟩ : Z) ∈ U
        · exact Or.inl ⟨⟨x, hx⟩, hxU, rfl⟩
        · exact Or.inr ⟨⟨x, hx⟩, hxU, rfl⟩
    have hdis : Disjoint A B := by
      apply Set.disjoint_left.mpr
      rintro x ⟨a, ha, hax⟩ ⟨b, hb, hbx⟩
      have hab : a = b := Subtype.ext (hax.trans hbx.symm)
      exact hb (hab ▸ ha)
    obtain ⟨W, hW, hWA, hWB⟩ :=
      exists_clopen_partition_of_connected_closed_intersections
        hA hB hAB hdis hconnected
    refine ⟨⟨W, hW⟩, Clopens.ext ?_⟩
    ext z
    change z.1 ∈ W ↔ z ∈ U
    constructor
    · intro hzW
      have hzA : z.1 ∈ A := hWA ▸ ⟨hzW, z.2⟩
      obtain ⟨a, ha, haz⟩ := hzA
      exact (Subtype.ext haz : a = z) ▸ ha
    · intro hzU
      have hzA : z.1 ∈ A := ⟨z, hzU, rfl⟩
      exact (show z.1 ∈ W ∩ Z from hWA.symm ▸ hzA).1
SchemeTheory.locallyConstant_restriction_bijective

Every locally constant function on the closed subset extends uniquely. This is the constant-sheaf case needed in Stacks 09ZG; the value type need not be finite.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
universe u
open Set TopologicalSpace Topology
namespace SchemeTheory
variable {X : Type u} [TopologicalSpace X]
theorem locallyConstant_restriction_bijective [SpectralSpace X] {Z : Set X}
    (hZ : IsClosed Z)
    (hconnected : ∀ x : X, IsConnected (Z ∩ closure ({x} : Set X)))
    (S : Type*) :
    Function.Bijective (LocallyConstant.comap
      (⟨Subtype.val, continuous_subtype_val⟩ : C(Z, X)) :
        LocallyConstant X S → LocallyConstant Z S)