ProCGroups.InverseSystems.CofinalityAndDensity

6 Theorem | 4 Definition

This module supplies the topological part of the construction. It checks continuity and stagewise neighborhood properties so that the completed object inherits the required topology.

import
Imported by

Declarations

theorem exists_projection_preimage_subset [Nonempty I]
    (hdir : Directed (· ≤ ·) (id : I → I)) {x : S.inverseLimit} {U : Set S.inverseLimit}
    (hU : IsOpen U) (hx : x ∈ U) :
    ∃ i, ∃ V : Set (S.X i), IsOpen V ∧ S.projection i x ∈ V ∧ S.projection i ⁻¹' V ⊆ U

Every open neighborhood in the inverse limit contains the inverse image of an open set along one projection.

Show proof
theorem denseRange_lift {X : Type w} [Nonempty I]
    (ρ : ∀ i, X → S.X i) (hρ : S.CompatibleMaps ρ)
    (hsurj : ∀ i, Function.Surjective (ρ i)) (hdir : Directed (· ≤ ·) (id : I → I)) :
    DenseRange (S.inverseLimitLift ρ hρ)

A compatible family of surjections induces a dense map to the inverse limit. The proof records the usual convention that a directed index preorder is nonempty.

Show proof
def reindex {K : Type w} [Preorder K] (σ : K → I) (hσ : Monotone σ) :
    InverseSystem (I := K) where
  X := fun k => S.X (σ k)
  topologicalSpace := fun k => inferInstance
  map := fun {i j} hij => S.map (hσ hij)
  continuous_map := fun {i j} hij => S.continuous_map (hσ hij)
  map_id := fun k => by
    simpa using S.map_id (σ k)
  map_comp := fun {i j k} hij hjk => by
    simpa using S.map_comp (hσ hij) (hσ hjk)

Reindexing an inverse system along a monotone map.

def restrict (J : Set I) : InverseSystem (I := J) :=
  S.reindex (fun j : J => j.1) (fun {_ _} hij => hij)

The inverse system obtained by restricting the index preorder to a subset.

noncomputable def homeomorph_reindex_cofinal {K : Type w} [Preorder K]
    (σ : K → I) (hσ : Monotone σ) (hdirK : Directed (· ≤ ·) (id : K → K))
    (hcofinal : ∀ i : I, ∃ k : K, i ≤ σ k) :
    S.inverseLimit ≃ₜ (S.reindex σ hσ).inverseLimit := by
  classical
  let R := S.reindex σ hσ
  have hcompatR : R.CompatibleMaps (fun k => S.projection (σ k)) := by
    intro i j hij
    funext x
    exact S.projection_compatible x (σ i) (σ j) (hσ hij)
  let r : S.inverseLimit → R.inverseLimit := R.inverseLimitLift (fun k => S.projection (σ k)) hcompatR
  choose τ hτ using hcofinal
  let ψ : ∀ i, R.inverseLimit → S.X i := fun i => S.map (hτ i) ∘ R.projection (τ i)
  have hψ_eq :
      ∀ {i : I} (k : K) (hik : i ≤ σ k) (x : R.inverseLimit),
        ψ i x = S.map hik (R.projection k x) := by
    intro i k hik x
    rcases hdirK (τ i) k with ⟨ℓ, hτℓ, hkℓ⟩
    calc
      ψ i x = S.map (hτ i) (R.projection (τ i) x) := rfl
      _ = S.map (hτ i) (S.map (hσ hτℓ) (R.projection ℓ x)) := by
        simpa [R, reindex] using congrArg (S.map (hτ i)) ((R.projection_compatible x (τ i) ℓ hτℓ).symm)
      _ = S.map ((hτ i).trans (hσ hτℓ)) (R.projection ℓ x) := by
        rw [S.map_comp_apply (hτ i) (hσ hτℓ)]
      _ = S.map (hik.trans (hσ hkℓ)) (R.projection ℓ x) := by
        have hproof : (hτ i).trans (hσ hτℓ) = hik.trans (hσ hkℓ) := Subsingleton.elim _ _
        rw [hproof]
      _ = S.map hik (S.map (hσ hkℓ) (R.projection ℓ x)) := by
        rw [S.map_comp_apply hik (hσ hkℓ)]
      _ = S.map hik (R.projection k x) := by
        simpa [R, reindex] using congrArg (S.map hik) (R.projection_compatible x k ℓ hkℓ)
  have hcompatψ : S.CompatibleMaps ψ := by
    intro i j hij
    funext x
    calc
      S.map hij (ψ j x) = S.map hij (S.map (hτ j) (R.projection (τ j) x)) := rfl
      _ = S.map (hij.trans (hτ j)) (R.projection (τ j) x) := by
        rw [S.map_comp_apply hij (hτ j)]
      _ = ψ i x := by
        symm
        exact hψ_eq (k := τ j) (hik := hij.trans (hτ j)) x
  let s : R.inverseLimit → S.inverseLimit := S.inverseLimitLift ψ hcompatψ
  refine
    { toFun := r
      invFun := s
      left_inv := ?_
      right_inv := ?_
      continuous_toFun := R.continuous_inverseLimitLift (fun k => S.projection (σ k))
        (fun k => S.continuous_projection (σ k)) hcompatR
      continuous_invFun := S.continuous_inverseLimitLift ψ
        (fun i => (S.continuous_map (hτ i)).comp (R.continuous_projection (τ i))) hcompatψ } <;>
    intro x
  · apply S.ext
    intro i
    calc
      S.projection i (s (r x)) = ψ i (r x) := by
        rfl
      _ = S.map (hτ i) (R.projection (τ i) (r x)) := rfl
      _ = S.map (hτ i) (S.projection (σ (τ i)) x) := by
        exact congrArg (S.map (hτ i))
          (by simpa [r, Function.comp] using
            congrFun (R.projection_comp_inverseLimitLift (fun k => S.projection (σ k)) hcompatR (τ i)) x)
      _ = S.projection i x := S.projection_compatible x i (σ (τ i)) (hτ i)
  · apply R.ext
    intro k
    calc
      R.projection k (r (s x)) = S.projection (σ k) (s x) := by
        simpa [r, Function.comp] using
          congrFun (R.projection_comp_inverseLimitLift (fun k => S.projection (σ k)) hcompatR k) (s x)
      _ = ψ (σ k) x := by
        rfl
      _ = S.map (le_rfl : σ k ≤ σ k) (R.projection k x) := by
        exact hψ_eq (k := k) (hik := le_rfl) x
      _ = R.projection k x := by
        exact S.map_id_apply (σ k) (R.projection k x)

The inverse limit is unchanged after reindexing along a monotone cofinal map.

@[simp 900] theorem π_comp_homeomorph_reindex_cofinal {K : Type w} [Preorder K]
    (σ : K → I) (hσ : Monotone σ) (hdirK : Directed (· ≤ ·) (id : K → K))
    (hcofinal : ∀ i : I, ∃ k : K, i ≤ σ k) (k : K) :
    (S.reindex σ hσ).projection k ∘ S.homeomorph_reindex_cofinal σ hσ hdirK hcofinal = S.projection (σ k)

After cofinal reindexing, the projection to \(k\) composed with the reindexing homeomorphism is the original projection to \(\sigma k\).

Show proof
noncomputable def homeomorph_restrict_cofinal (J : Set I)
    (hdirJ : Directed (· ≤ ·) (id : J → J)) (hcofinal : ∀ i, ∃ j : J, i ≤ j.1) :
    S.inverseLimit ≃ₜ (S.restrict J).inverseLimit :=
  S.homeomorph_reindex_cofinal (fun j : J => j.1) (fun {_ _} hij => hij) hdirJ hcofinal

The cofinal reindexing homeomorphism is characterized by its projections.

@[simp 900] theorem π_comp_homeomorph_restrict_cofinal (J : Set I)
    (hdirJ : Directed (· ≤ ·) (id : J → J)) (hcofinal : ∀ i, ∃ j : J, i ≤ j.1) (j : J) :
    (S.restrict J).projection j ∘ S.homeomorph_restrict_cofinal J hdirJ hcofinal = S.projection j.1

For a cofinal restriction, projecting to \(j\) after the restriction homeomorphism is the same as the original projection to the underlying index of \(j\).

Show proof
theorem surjective_π [∀ i, CompactSpace (S.X i)] [∀ i, T2Space (S.X i)]
    (hdir : Directed (· ≤ ·) (id : I → I))
    (hsurj : ∀ {i j : I} (hij : i ≤ j), Function.Surjective (S.map hij)) (j : I) :
    Function.Surjective (S.projection j)

In a surjective inverse system of compact Hausdorff nonempty spaces, each projection from the inverse limit is surjective.

Show proof
theorem InverseSystem.isTopologicalBasis_projection_preimages {I : Type u} [Preorder I]
    (S : InverseSystem (I := I)) [Nonempty I] (hdir : Directed (· ≤ ·) (id : I → I))
    (B : ∀ i, Set (Set (S.X i))) (hB : ∀ i, TopologicalSpace.IsTopologicalBasis (B i)) :
    TopologicalSpace.IsTopologicalBasis
      {W : Set S.inverseLimit | ∃ i, ∃ V ∈ B i, W = S.projection i ⁻¹' V}

If each component has a chosen basis, then the inverse images of basis elements under the projection maps form a basis of the inverse limit.

Show proof