Documentation

LeanPool.DomainTheory.ContinuousLattice.InverseLimits

Inverse limits of continuous lattices (Scott 1972, §4) #

We formalize Scott's Proposition 4.1: the inverse limit D_∞ of an ω-system of continuous lattices ⟨Dₙ, jₙ⟩ with each jₙ : D_{n+1} → Dₙ a projection is again a continuous lattice.

Scott proves this through injectivity (D_∞ is an injective T₀-space, hence — Theorem 2.12 — a continuous lattice), using the maximal-extension Proposition 3.8 and the compatibility Lemma 3.9. The retraction of ∏ Dₙ onto D_∞ that Scott's argument constructs (extend the identity of D_∞ along its inclusion) is realized here order-theoretically and without topology:

Thus D_∞ is a (Scott-continuous) retract of the continuous lattice ∏ Dₙ (Prop 2.9a), so by Prop 2.10a it is a continuous lattice. This is exactly the retraction Scott builds via injectivity, obtained here as the adjoint of the inclusion.

theorem Domain.ContinuousLattice.projection_galoisConnection (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) :
GaloisConnection (P n).incl (P n).retr

The embedding–projection pair of a projection is a Galois connection iₙ ⊣ jₙ: from jₙ ∘ iₙ = id and iₙ ∘ jₙ ⊑ id we get iₙ xyx ⊑ jₙ y. In particular jₙ (the upper adjoint) preserves arbitrary infima.

def Domain.ContinuousLattice.Compatible (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (x : (n : ) → D n) :

Compatibility of a sequence: jₙ(x_{n+1}) = xₙ for all n.

Equations
Instances For
    @[reducible, inline]
    abbrev Domain.ContinuousLattice.InverseLimit (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) :

    Scott 1972, §4. The inverse limit D_∞ as the subspace of compatible sequences.

    Equations
    Instances For
      theorem Domain.ContinuousLattice.retr_sInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (A : Set (D (n + 1))) :
      (P n).retr (sInf A) = sInf ((P n).retr '' A)

      jₙ preserves arbitrary infima (it is the upper adjoint of iₙ).

      theorem Domain.ContinuousLattice.compatible_sInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (S : Set (InverseLimit D P)) :

      The pointwise infimum of compatible sequences is compatible.

      @[implicit_reducible]
      noncomputable instance Domain.ContinuousLattice.instInfSetInverseLimit (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) :
      Equations
      theorem Domain.ContinuousLattice.coe_sInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (S : Set (InverseLimit D P)) :
      (sInf S) = sInf (Subtype.val '' S)
      theorem Domain.ContinuousLattice.isGLB_sInf' (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (S : Set (InverseLimit D P)) :
      IsGLB S (sInf S)
      theorem Domain.ContinuousLattice.coe_sSup_of_directed (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (S : Set (InverseLimit D P)) (hSne : S.Nonempty) (hSdir : DirectedOn (fun (x1 x2 : InverseLimit D P) => x1 x2) S) :
      (sSup S) = sSup (Subtype.val '' S)

      For a directed, nonempty family, the inverse-limit supremum is computed pointwise (each jₙ is Scott-continuous, so the pointwise sup of compatible sequences is compatible and is the least upper bound in D_∞).

      The inclusion D_∞ ↪ ∏ Dₙ preserves directed suprema.

      noncomputable def Domain.ContinuousLattice.invLimRetr (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (y : (n : ) → D n) :

      Scott's retraction r : ∏ Dₙ → D_∞, realized as the left adjoint of the inclusion: r y = ⊓ { x ∈ D_∞ : yx }, the least compatible sequence above y.

      Equations
      Instances For
        theorem Domain.ContinuousLattice.le_coe_invLimRetr (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (y : (n : ) → D n) :
        y (invLimRetr D P y)

        r ⊣ incl: the retraction is left adjoint to the inclusion.

        The retraction preserves directed suprema (a left adjoint preserves all suprema).

        theorem Domain.ContinuousLattice.invLimRetr_incl (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (x : InverseLimit D P) :
        invLimRetr D P x = x

        r ∘ incl = id: the retraction fixes D_∞.

        noncomputable def Domain.ContinuousLattice.inverseLimitRetraction (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) :

        D_∞ is a Scott-continuous retract of the product ∏ Dₙ.

        Equations
        Instances For
          theorem Domain.ContinuousLattice.proposition_4_1 (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (hD : ∀ (n : ), IsContinuousLattice (D n)) :

          Scott 1972, Proposition 4.1. The inverse limit D_∞ of an ω-system of continuous lattices with projection bonding maps is itself a continuous lattice. The product ∏ Dₙ is a continuous lattice (Prop 2.9a) and D_∞ is a retract of it (inverseLimitRetraction), so Prop 2.10a applies.

          Proposition 4.2: the maps j_{∞n} are projections #

          We construct Scott's embeddings i_{n∞} : Dₙ → D_∞ and show that ⟨i_{n∞}, j_{∞n}⟩ is a projection, where j_{∞n}(x) = xₙ. The component i_{n∞}(x)_m climbs the tower of embeddings iₖ = (P k).incl for m ≥ n (embLE) and descends the tower of projections jₖ = (P k).retr for m < n (projLE).

          def Domain.ContinuousLattice.embLE (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h : n m) (x : D n) :
          D m

          Climb the tower of embeddings: for n ≤ m, embLE h = i_{m-1} ∘ … ∘ iₙ : Dₙ → D_m.

          Equations
          Instances For
            theorem Domain.ContinuousLattice.embLE_self (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n : } (h : n n) (x : D n) :
            embLE D P h x = x
            theorem Domain.ContinuousLattice.embLE_succ (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h1 : n m) (h2 : n m + 1) (x : D n) :
            embLE D P h2 x = (P m).incl (embLE D P h1 x)
            theorem Domain.ContinuousLattice.embLE_succ_left (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h1 : n m) (h2 : n + 1 m) (x : D n) :
            embLE D P h2 ((P n).incl x) = embLE D P h1 x
            theorem Domain.ContinuousLattice.embLE_mono (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h : n m) {x y : D n} (hxy : x y) :
            embLE D P h x embLE D P h y
            def Domain.ContinuousLattice.projLE (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m n : } (h : m n) (x : D n) :
            D m

            Descend the tower of projections: for m ≤ n, projLE h = j_m ∘ … ∘ j_{n-1} : D_n → Dₘ.

            Equations
            Instances For
              theorem Domain.ContinuousLattice.projLE_self (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m : } (h : m m) (x : D m) :
              projLE D P h x = x
              theorem Domain.ContinuousLattice.projLE_succ (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m n : } (h1 : m n) (h2 : m n + 1) (z : D (n + 1)) :
              projLE D P h2 z = projLE D P h1 ((P n).retr z)
              theorem Domain.ContinuousLattice.projLE_mono (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m n : } (h : m n) {x y : D n} (hxy : x y) :
              projLE D P h x projLE D P h y
              theorem Domain.ContinuousLattice.projLE_retr (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m n : } (h : m + 1 n) (x : D n) :
              (P m).retr (projLE D P h x) = projLE D P x

              Peeling the last projection: (P m).retr ∘ projLE (m+1 ≤ n) = projLE (m ≤ n).

              def Domain.ContinuousLattice.iComp (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) (m : ) :
              D m

              Scott's embedding component i_{n∞}(x)_m: climb for m ≥ n, descend for m < n.

              Equations
              Instances For
                theorem Domain.ContinuousLattice.iComp_of_le (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h : n m) (x : D n) :
                iComp D P n x m = embLE D P h x
                theorem Domain.ContinuousLattice.iComp_of_ge (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h : ¬n m) (x : D n) :
                iComp D P n x m = projLE D P x
                theorem Domain.ContinuousLattice.iComp_self (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) :
                iComp D P n x n = x
                theorem Domain.ContinuousLattice.iComp_compatible (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) :
                Compatible D P (iComp D P n x)

                The sequence i_{n∞}(x) is compatible, hence a genuine point of D_∞.

                theorem Domain.ContinuousLattice.projLE_compatible (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m : } (y : InverseLimit D P) {n : } (h : m n) :
                projLE D P h (y n) = y m

                For a compatible sequence y, descending from level n to m ≤ n recovers yₘ.

                theorem Domain.ContinuousLattice.embLE_le (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n : } (y : InverseLimit D P) {m : } (h : n m) :
                embLE D P h (y n) y m

                For a compatible sequence y, climbing yₙ up to level m ≥ n stays below yₘ.

                theorem Domain.ContinuousLattice.iComp_incl_le (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (y : InverseLimit D P) (m : ) :
                iComp D P n (y n) m y m

                i_{n∞}(yₙ) ⊑ y coordinatewise (the heart of incl_retr_le for j_{∞n}).

                theorem Domain.ContinuousLattice.embLE_preservesDirectedSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {n m : } (h : n m) :

                The tower of embeddings is Scott-continuous (a composite of the iₖ).

                theorem Domain.ContinuousLattice.projLE_preservesDirectedSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {m n : } (h : m n) :

                The tower of projections is Scott-continuous (a composite of the jₖ).

                theorem Domain.ContinuousLattice.iComp_preservesDirectedSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n m : ) :
                PreservesDirectedSup fun (x : D n) => iComp D P n x m
                theorem Domain.ContinuousLattice.iComp_monotone (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n m : ) :
                Monotone fun (x : D n) => iComp D P n x m
                def Domain.ContinuousLattice.embInfFun (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) :

                The embedding i_{n∞} : Dₙ → D_∞ as a bare function into the inverse limit.

                Equations
                Instances For
                  @[simp]
                  theorem Domain.ContinuousLattice.embInfFun_coe (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) :
                  (embInfFun D P n x) = iComp D P n x
                  theorem Domain.ContinuousLattice.embInf_monotone (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) :
                  def Domain.ContinuousLattice.projInfFun (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (y : InverseLimit D P) :
                  D n

                  The projection j_{∞n} : D_∞ → Dₙ as a bare function.

                  Equations
                  Instances For
                    noncomputable def Domain.ContinuousLattice.embInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) :

                    The embedding i_{n∞} : Dₙ → D_∞, Scott-continuous.

                    Equations
                    Instances For
                      noncomputable def Domain.ContinuousLattice.projInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) :

                      The projection j_{∞n} : D_∞ → Dₙ, Scott-continuous.

                      Equations
                      Instances For
                        noncomputable def Domain.ContinuousLattice.proposition_4_2 (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) :

                        Scott 1972, Proposition 4.2. Each j_{∞n} : D_∞ → Dₙ is a projection of continuous lattices, with embedding i_{n∞} = embInf n.

                        Equations
                        Instances For
                          theorem Domain.ContinuousLattice.embInf_succ (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (n : ) (x : D n) :
                          (embInf D P (n + 1)) ((P n).incl x) = (embInf D P n) x

                          Scott 1972, §4 (recursion equation). i_{n∞} = i_{(n+1)∞} ∘ iₙ.

                          theorem Domain.ContinuousLattice.embInf_le_succ (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (x : InverseLimit D P) (n : ) :
                          (embInf D P n) (x n) (embInf D P (n + 1)) (x (n + 1))

                          The family n ↦ i_{n∞}(xₙ) is monotone (the lub defining x is monotone).

                          theorem Domain.ContinuousLattice.embInf_family_directed (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (x : InverseLimit D P) :
                          DirectedOn (fun (x1 x2 : InverseLimit D P) => x1 x2) (Set.range fun (n : ) => (embInf D P n) (x n))
                          theorem Domain.ContinuousLattice.inverseLimit_eq_iSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (x : InverseLimit D P) :
                          x = ⨆ (n : ), (embInf D P n) (x n)

                          Scott 1972, §4. Each x ∈ D_∞ is the (monotone) lub of its projections: x = ⨆ₙ i_{n∞}(xₙ).

                          theorem Domain.ContinuousLattice.idInf_eq_iSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) :
                          ScottMap.idMap = ⨆ (n : ), (embInf D P n).comp (projInf D P n)

                          Scott 1972, §4 (functional equation, "the remark following 4.2"). The identity of D_∞ is the directed lub of the approximating projections rₙ = i_{n∞} ∘ j_{∞n}: id = ⨆ₙ i_{n∞} ∘ j_{∞n}. This is the algebraic identity at the heart of Theorem 4.4.

                          theorem Domain.ContinuousLattice.lemma_4_5 (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) (u : (n : ) → D (n + 1)) (hu : ∀ (n : ), (P (n + 1)).retr (u (n + 1)) = u n) (n : ) :
                          (⨆ (k : ), (embInf D P (k + 1)) (u k)) (n + 1) = u n

                          Scott 1972, Lemma 4.5. A criterion for recognizing projections out of the limit: if a sequence u : ∀ n, D_{n+1} satisfies the (shifted) recursion j_{n+1}(u_{n+2}) = u_{n+1}, then the monotone limit u_∞ = ⨆ₙ i_{(n+1)∞}(uₙ) has j_{∞(n+1)}(u_∞) = uₙ.

                          Proof: extend u to a compatible sequence w (w₀ = j₀(u₀), w_{k+1} = u_k); then w is a point of D_∞, and since the family k ↦ i_{k∞}(w_k) is monotone, dropping its 0-th term does not change the lub (Monotone.iSup_nat_add), so u_∞ = ⨆ₖ i_{k∞}(w_k) = w by inverseLimit_eq_iSup. Hence j_{∞(n+1)}(u_∞) = w_{n+1} = uₙ.

                          Corollary 4.3: D_∞ is also the direct limit #

                          Given continuous fₙ : Dₙ → D' into any complete lattice with fₙ = f_{n+1} ∘ iₙ, the map f∞(x) = ⨆ₙ fₙ(xₙ) is the unique continuous mediating map with fₙ = f∞ ∘ i_{n∞}.

                          def Domain.ContinuousLattice.coconeInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (x : InverseLimit D P) :
                          D'

                          The mediating map of Corollary 4.3: f∞(x) = ⨆ₙ fₙ(xₙ).

                          Equations
                          Instances For
                            theorem Domain.ContinuousLattice.coconeInf_apply (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (x : InverseLimit D P) :
                            coconeInf D P f x = ⨆ (n : ), (f n) (x n)
                            theorem Domain.ContinuousLattice.coconeInf_climb (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (hf : ∀ (n : ) (x : D n), (f n) x = (f (n + 1)) ((P n).incl x)) {n : } (x : D n) {m : } (h : n m) :
                            (f m) (embLE D P h x) = (f n) x

                            Climbing then applying f is constant: f_m(i_{m-1}…iₙ x) = fₙ(x).

                            theorem Domain.ContinuousLattice.coconeInf_descend (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (hf : ∀ (n : ) (x : D n), (f n) x = (f (n + 1)) ((P n).incl x)) {m n : } (h : m n) (x : D n) :
                            (f m) (projLE D P h x) (f n) x

                            Descending then applying f only decreases: f_m(j_m…j_{n-1} x) ⊑ fₙ(x).

                            theorem Domain.ContinuousLattice.coconeInf_comp_embInf (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (hf : ∀ (n : ) (x : D n), (f n) x = (f (n + 1)) ((P n).incl x)) (n : ) (x : D n) :
                            coconeInf D P f ((embInf D P n) x) = (f n) x

                            Scott 1972, Corollary 4.3 (factorization). fₙ = f∞ ∘ i_{n∞}.

                            theorem Domain.ContinuousLattice.coconeInf_preservesDirectedSup (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') :

                            f∞ is Scott-continuous: f∞(⊔S) = ⊔ f∞(S) for directed S (each fₙ is continuous and a double over ℕ × S commutes).

                            theorem Domain.ContinuousLattice.corollary_4_3 (D : Type u) [(n : ) → CompleteLattice (D n)] (P : (n : ) → IsContinuousLatticeProjection (D n) (D (n + 1))) {D' : Type u_1} [CompleteLattice D'] (f : (n : ) → ScottMap (D n) D') (hf : ∀ (n : ) (x : D n), (f n) x = (f (n + 1)) ((P n).incl x)) :
                            ∃! g : ScottMap (InverseLimit D P) D', ∀ (n : ) (x : D n), (f n) x = g ((embInf D P n) x)

                            Scott 1972, Corollary 4.3. Within complete lattices, D_∞ is also the direct limit of the Dₙ along the embeddings iₙ: for every compatible cocone fₙ : Dₙ → D' (continuous, with fₙ = f_{n+1} ∘ iₙ) there is a unique continuous f∞ : D_∞ → D' with fₙ = f∞ ∘ i_{n∞}, namely f∞(x) = ⨆ₙ fₙ(xₙ).