Documentation

LeanPool.DomainTheory.ContinuousLattice.FunctionSpaceTower

The function-space tower and Scott's D_∞ ≅ [D_∞ → D_∞] (Scott 1972, §4, #

Theorem 4.4)

Starting from a continuous lattice D₀ together with a chosen projection j₀ : [D₀ → D₀] → D₀ (Proposition 3.13 provides one), we build the recursively-defined ω-system

D_{n+1} = [D_n → D_n], j_{n+1} = [j_n → j_n] (the function-space functor, Proposition 3.7),

and form its inverse limit D_∞. Theorem 4.4 is that D_∞ is homeomorphic to its own function space [D_∞ → D_∞].

A complete lattice bundled with its instance, used to define the function-space tower by recursion on (the type at level n+1 depends on the lattice structure at level n).

Instances For
    noncomputable def Domain.ContinuousLattice.towerCLat (D₀ : CLat) :
    CLat

    The tower D₀, [D₀→D₀], [[D₀→D₀]→[D₀→D₀]], … as bundled complete lattices.

    Equations
    Instances For

      The carrier Dₙ of the function-space tower.

      Equations
      Instances For
        theorem Domain.ContinuousLattice.towerType_succ (D₀ : CLat) (n : ) :
        towerType D₀ (n + 1) = ScottMap (towerType D₀ n) (towerType D₀ n)

        D_{n+1} is definitionally the function space [Dₙ → Dₙ].

        def Domain.ContinuousLattice.towerToMap {D₀ : CLat} {n : } (f : towerType D₀ (n + 1)) :
        ScottMap (towerType D₀ n) (towerType D₀ n)

        View an element of D_{n+1} as the Scott map [Dₙ → Dₙ] it definitionally is.

        Equations
        Instances For
          @[implicit_reducible]
          instance Domain.ContinuousLattice.towerCoeFun {D₀ : CLat} {n : } :
          CoeFun (towerType D₀ (n + 1)) fun (x : towerType D₀ (n + 1)) => towerType D₀ ntowerType D₀ n

          Apply an element of D_{n+1} as a function Dₙ → Dₙ (definitional via towerType_succ).

          Equations
          theorem Domain.ContinuousLattice.towerToMap_coe {D₀ : CLat} {n : } (f : towerType D₀ (n + 1)) :

          The map view of a tower element is definitionally the original element.

          The function-space functor on projections (Proposition 3.7, continuous #

          form)

          proposition37Projection builds the embedding/projection pair on function spaces as plain functions; here we upgrade them to genuine Scott maps, so that [Dₙ → Dₙ] is a continuous-lattice projection of [D_{n+1} → D_{n+1}]. The map f ↦ post ∘ f ∘ pre (conjugation) is Scott-continuous because directed suprema of function spaces are computed pointwise.

          Conjugation f ↦ post ∘ f ∘ pre as a bare function [Y → Y] → [W → Z].

          Equations
          Instances For
            theorem Domain.ContinuousLattice.conjMapFun_apply {Y Z W : Type u} [CompleteLattice Y] [CompleteLattice Z] [CompleteLattice W] (post : ScottMap Y Z) (pre : ScottMap W Y) (f : ScottMap Y Y) (x : W) :
            (conjMapFun post pre f) x = post (f (pre x))
            theorem Domain.ContinuousLattice.conjMap_preservesDirectedSup_apply {Y Z W : Type u} [CompleteLattice Y] [CompleteLattice Z] [CompleteLattice W] (post : ScottMap Y Z) (pre : ScottMap W Y) (F : Set (ScottMap Y Y)) (hF : F.Nonempty) (hFdir : DirectedOn (fun (x1 x2 : ScottMap Y Y) => x1 x2) F) (y : W) :
            post ((sSup F) (pre y)) = (sSup (conjMapFun post pre '' F)) y
            noncomputable def Domain.ContinuousLattice.conjMap {Y Z W : Type u} [CompleteLattice Y] [CompleteLattice Z] [CompleteLattice W] (post : ScottMap Y Z) (pre : ScottMap W Y) :

            Conjugation f ↦ post ∘ f ∘ pre as a Scott map [Y → Y] → [W → Z].

            Equations
            Instances For
              @[simp]
              theorem Domain.ContinuousLattice.conjMap_apply {Y Z W : Type u} [CompleteLattice Y] [CompleteLattice Z] [CompleteLattice W] (post : ScottMap Y Z) (pre : ScottMap W Y) (f : ScottMap Y Y) (x : W) :
              ((conjMap post pre) f) x = post (f (pre x))

              Scott 1972, Proposition 3.7 (continuous projection on the diagonal). If D is a continuous-lattice projection of D', then [D → D] is a projection of [D' → D'] via i_{[·]}(f) = i ∘ f ∘ j and j_{[·]}(g) = j ∘ g ∘ i.

              Equations
              Instances For

                The projection tower j_{n+1} = [j_n → j_n], anchored at a chosen base projection j₀ : [D₀ → D₀] → D₀.

                Equations
                Instances For
                  theorem Domain.ContinuousLattice.towerProj_succ_incl_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (x y : towerType D₀ (n + 1)) :
                  (towerToMap ((towerProj D₀ j₀ (n + 1)).incl x)) y = (towerProj D₀ j₀ n).incl ((towerToMap x) ((towerProj D₀ j₀ n).retr y))

                  Scott 1972, §4 (recursion for the embeddings). i_{n+1}(x) = iₙ ∘ x ∘ jₙ.

                  theorem Domain.ContinuousLattice.towerProj_succ_retr_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (x' : towerType D₀ (n + 2)) (y : towerType D₀ n) :
                  (towerToMap ((towerProj D₀ j₀ (n + 1)).retr x')) y = (towerProj D₀ j₀ n).retr ((towerToMap x') ((towerProj D₀ j₀ n).incl y))

                  Scott 1972, §4 (recursion for the projections). j_{n+1}(x') = jₙ ∘ x' ∘ iₙ.

                  theorem Domain.ContinuousLattice.towerProj_incl_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (f : towerType D₀ (n + 1)) (x : towerType D₀ n) :
                  (towerProj D₀ j₀ n).incl ((towerToMap f) x) = (towerToMap ((towerProj D₀ j₀ (n + 1)).incl f)) ((towerProj D₀ j₀ n).incl x)

                  Scott 1972, §4 (application is preserved). iₙ(f(x)) = i_{n+1}(f)(iₙ(x)) for f ∈ D_{n+1}, x ∈ Dₙ. The embeddings turn functional application into application one level up.

                  Theorem 4.4(a): the limit maps i_∞ and j_∞ #

                  We now wire the concrete inverse limit D_∞ of the function-space tower and write down Scott's pair

                  i_∞(x) = ⨆ₙ (i_{n∞} ∘ x_{n+1} ∘ j_{∞n})      : D_∞ → [D_∞ → D_∞]
                  j_∞(f) = ⨆ₙ i_{(n+1)∞}(j_{∞n} ∘ f ∘ i_{n∞})  : [D_∞ → D_∞] → D_∞
                  

                  Each summand is itself a Scott map (a composite of conjMap, embInf, projInf), so each of i_∞, j_∞ is a supremum of Scott maps and is therefore Scott-continuous automatically: by Theorem 3.3 the function space [A → B] is a complete lattice in which suprema are computed pointwise. No bespoke continuity argument is needed.

                  @[reducible, inline]

                  The inverse limit D_∞ of the function-space tower ⟨Dₙ, jₙ⟩.

                  Equations
                  Instances For
                    @[reducible, inline]

                    The function space [D_∞ → D_∞].

                    Equations
                    Instances For
                      noncomputable def Domain.ContinuousLattice.iInfTerm (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) :
                      ScottMap (DInf D₀ j₀) (DInfFn D₀ j₀)

                      The n-th summand of i_∞: the Scott map x ↦ i_{n∞} ∘ x_{n+1} ∘ j_{∞n}, where x_{n+1} is the (n+1)-st component of x ∈ D_∞. As a map D_∞ → [D_∞ → D_∞] it is the composite of the component projection j_{∞(n+1)} with conjugation by (i_{n∞}, j_{∞n}).

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        @[simp]
                        theorem Domain.ContinuousLattice.iInfTerm_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (x z : DInf D₀ j₀) :
                        ((iInfTerm D₀ j₀ n) x) z = (embInf (towerType D₀) (towerProj D₀ j₀) n) ((towerToMap (x (n + 1))) ((projInf (towerType D₀) (towerProj D₀ j₀) n) z))
                        noncomputable def Domain.ContinuousLattice.embInfInf (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) :
                        ScottMap (DInf D₀ j₀) (DInfFn D₀ j₀)

                        Scott 1972, §4 (Theorem 4.4). The embedding i_∞ : D_∞ → [D_∞ → D_∞], i_∞(x) = ⨆ₙ i_{n∞} ∘ x_{n+1} ∘ j_{∞n}. It is Scott-continuous because it is a supremum of the Scott maps iInfTerm n (suprema in [D_∞ → [D_∞ → D_∞]] are computed pointwise).

                        Equations
                        Instances For
                          theorem Domain.ContinuousLattice.embInfInf_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x : DInf D₀ j₀) :
                          (embInfInf D₀ j₀) x = ⨆ (n : ), (iInfTerm D₀ j₀ n) x

                          i_∞ evaluated at x is the pointwise supremum of the summands iInfTerm n x.

                          noncomputable def Domain.ContinuousLattice.jInfTerm (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) :
                          ScottMap (DInfFn D₀ j₀) (DInf D₀ j₀)

                          The n-th summand of j_∞: the Scott map f ↦ i_{(n+1)∞}(j_{∞n} ∘ f ∘ i_{n∞}). As a map [D_∞ → D_∞] → D_∞ it is conjugation by (j_{∞n}, i_{n∞}) (landing in D_{n+1}) followed by the embedding i_{(n+1)∞}.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            @[simp]
                            theorem Domain.ContinuousLattice.jInfTerm_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (f : DInfFn D₀ j₀) :
                            (jInfTerm D₀ j₀ n) f = (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) ((conjMap (projInf (towerType D₀) (towerProj D₀ j₀) n) (embInf (towerType D₀) (towerProj D₀ j₀) n)) f)
                            noncomputable def Domain.ContinuousLattice.projInfInf (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) :
                            ScottMap (DInfFn D₀ j₀) (DInf D₀ j₀)

                            Scott 1972, §4 (Theorem 4.4). The projection j_∞ : [D_∞ → D_∞] → D_∞, j_∞(f) = ⨆ₙ i_{(n+1)∞}(j_{∞n} ∘ f ∘ i_{n∞}). Scott-continuous as a supremum of the Scott maps jInfTerm n.

                            Equations
                            Instances For
                              theorem Domain.ContinuousLattice.projInfInf_apply (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (f : DInfFn D₀ j₀) :
                              (projInfInf D₀ j₀) f = ⨆ (n : ), (jInfTerm D₀ j₀ n) f

                              j_∞ evaluated at f is the supremum of the summands jInfTerm n f.

                              i_∞ is Scott-continuous (it is a bundled ScottMap).

                              j_∞ is Scott-continuous (it is a bundled ScottMap).

                              Theorem 4.4(b): j_∞ ∘ i_∞ = id on D_∞ #

                              Scott's calculation (~lines 1290–1294): expand j_∞(i_∞(x)) as a double sup, collapse the monotone double limit to the diagonal using projInf ∘ embInf = id on each summand, then recognize x via inverseLimit_eq_iSup (with a one-step index shift).

                              theorem Domain.ContinuousLattice.conjMap_iSup (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (post : ScottMap (DInf D₀ j₀) (towerType D₀ n)) (pre : ScottMap (towerType D₀ n) (DInf D₀ j₀)) (f : ScottMap (DInf D₀ j₀) (DInf D₀ j₀)) (hf : Monotone f) :
                              (conjMap post pre) (⨆ (m : ), f m) = ⨆ (m : ), (conjMap post pre) (f m)

                              Conjugation commutes with a supremum indexed by (the range is directed when f is monotone). Since conjMap post pre is itself a Scott map, this is just preservation of directed suprema.

                              theorem Domain.ContinuousLattice.embInf_succ_iSup (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (f : towerType D₀ (n + 1)) (hf : Monotone f) :
                              (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) (⨆ (m : ), f m) = ⨆ (m : ), (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) (f m)

                              The inverse-limit embedding commutes with a supremum in D_{n+1} (monotone ⇒ directed).

                              theorem Domain.ContinuousLattice.conj_iInfTerm_eq (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (x : DInf D₀ j₀) :
                              (conjMap (projInf (towerType D₀) (towerProj D₀ j₀) n) (embInf (towerType D₀) (towerProj D₀ j₀) n)) ((iInfTerm D₀ j₀ n) x) = x (n + 1)

                              Diagonal simplification. conjMap (j_{∞n}, i_{n∞}) applied to the n-th summand of i_∞ recovers the component x_{n+1}. This is exactly j_{[·]} ∘ i_{[·]} = id for the function-space projection built from proposition_4_2.

                              theorem Domain.ContinuousLattice.incl_projInf_le_projInf_succ (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (w : DInf D₀ j₀) :
                              (towerProj D₀ j₀ n).incl ((projInf (towerType D₀) (towerProj D₀ j₀) n) w) (projInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) w

                              i_{n∞}(yₙ) ⊑ y_{n+1}: climbing one level and embedding stays below the next component.

                              theorem Domain.ContinuousLattice.iInfTerm_le_succ (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x : DInf D₀ j₀) (m : ) :
                              (iInfTerm D₀ j₀ m) x (iInfTerm D₀ j₀ (m + 1)) x

                              i_∞ is monotone in its summand index.

                              theorem Domain.ContinuousLattice.iInfTerm_monotone (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x : DInf D₀ j₀) :
                              Monotone fun (m : ) => (iInfTerm D₀ j₀ m) x
                              theorem Domain.ContinuousLattice.iSup₂_monotone_eq_diagonal {α : Type u_1} [CompleteLattice α] (f : α) (hfm : ∀ (n : ), Monotone (f n)) (hfn : ∀ (m : ), Monotone fun (n : ) => f n m) :
                              ⨆ (n : ), ⨆ (m : ), f n m = ⨆ (n : ), f n n

                              A monotone double iSup over ℕ × ℕ equals the diagonal iSup.

                              theorem Domain.ContinuousLattice.conjMap_incl_le_conjMap_succ (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (f : DInfFn D₀ j₀) :
                              (towerProj D₀ j₀ (n + 1)).incl ((conjMap (projInf (towerType D₀) (towerProj D₀ j₀) n) (embInf (towerType D₀) (towerProj D₀ j₀) n)) f) (conjMap (projInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1))) f

                              Conjugation climbs the tower (one step). Lifting conjMap (j_{∞n}, i_{n∞}) f along i_{n+1} stays below conjMap (j_{∞(n+1)}, i_{(n+1)∞}) f. Both sides live in D_{n+2}; the inequality is the algebraic content that makes the double sup defining j_∞ ∘ i_∞ monotone in the level index n.

                              theorem Domain.ContinuousLattice.projInfInf_embInfInf_eq (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x : DInf D₀ j₀) :
                              (projInfInf D₀ j₀) ((embInfInf D₀ j₀) x) = ⨆ (n : ), (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) (x (n + 1))

                              j_∞(i_∞(x)) = ⨆ₙ i_{(n+1)∞}(x_{n+1}).

                              Scott 1972, §4 (Theorem 4.4, first half). j_∞ ∘ i_∞ = id on D_∞.

                              Theorem 4.4(c): i_∞ ∘ j_∞ = id on [D_∞ → D_∞] #

                              This is the converse half (Scott ~lines 1322–1335). The restrictions u_n = j_{∞n} ∘ f ∘ i_{n∞} ∈ D_{n+1} satisfy the Lemma-4.5 recursion j_{n+1}(u_{n+2}) = u_{n+1} (towerProj_retr_conjMap_succ), so Lemma 4.5 identifies the components of j_∞(f). Expanding i_∞(j_∞(f)) then yields the approximation ⨆ₙ rₙ ∘ f ∘ rₙ with rₙ = i_{n∞} ∘ j_{∞n}, and the functional equation id = ⨆ₙ rₙ (via inverseLimit_eq_iSup) plus continuity of f collapse this to f.

                              theorem Domain.ContinuousLattice.towerProj_retr_conjMap_succ (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (n : ) (f : DInfFn D₀ j₀) :
                              (towerProj D₀ j₀ (n + 1)).retr ((conjMap (projInf (towerType D₀) (towerProj D₀ j₀) (n + 1)) (embInf (towerType D₀) (towerProj D₀ j₀) (n + 1))) f) = (conjMap (projInf (towerType D₀) (towerProj D₀ j₀) n) (embInf (towerType D₀) (towerProj D₀ j₀) n)) f

                              Step 1 (Lemma-4.5 recursion). j_{n+1}(j_{∞(n+1)} ∘ f ∘ i_{(n+1)∞}) = j_{∞n} ∘ f ∘ i_{n∞}. This is the equality counterpart of conjMap_incl_le_conjMap_succ; it is the hypothesis Lemma 4.5 needs to recognize j_∞(f) from its restrictions.

                              Scott 1972, §4 (Theorem 4.4, second half). i_∞ ∘ j_∞ = id on [D_∞ → D_∞].

                              Theorem 4.4(d): capstone D_∞ ≅ [D_∞ → D_∞] #

                              Package the mutually-inverse Scott maps from (b) and (c). Scott's homeomorphism follows because i_∞ and j_∞ are Scott-continuous (embInfInf / projInfInf are bundled ScottMaps).

                              theorem Domain.ContinuousLattice.projInfInf_embInfInf (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x : DInf D₀ j₀) :
                              (projInfInf D₀ j₀) ((embInfInf D₀ j₀) x) = x
                              theorem Domain.ContinuousLattice.embInfInf_projInfInf (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (f : DInfFn D₀ j₀) :
                              (embInfInf D₀ j₀) ((projInfInf D₀ j₀) f) = f
                              theorem Domain.ContinuousLattice.embInfInf_le_iff (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) (x y : DInf D₀ j₀) :
                              (embInfInf D₀ j₀) x (embInfInf D₀ j₀) y x y

                              Scott 1972, §4 (Theorem 4.4). The inverse limit D_∞ of the function-space tower is order-isomorphic to its own function space [D_∞ → D_∞] via the mutually-inverse Scott maps i_∞ = embInfInf and j_∞ = projInfInf.

                              noncomputable def Domain.ContinuousLattice.theorem44OrderIso (D₀ : CLat) (j₀ : IsContinuousLatticeProjection D₀.carrier (ScottMap D₀.carrier D₀.carrier)) :
                              DInf D₀ j₀ ≃o DInfFn D₀ j₀

                              The order isomorphism D_∞ ≃o [D_∞ → D_∞] witnessing Theorem 4.4. Both directions are Scott-continuous (they are bundled ScottMaps), so this is the order-theoretic half of Scott's homeomorphism.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For