Martin Escardo, 26 Feb 2024 We implement Pataraia's result that every monotone endomap of a dcpo (directed complete poset) with a least element has a least fixed point in topos logic. This is Corollary-2·1 below. Pataraia [1] was the first to give a constructive proof of this in topos logic. A version of his proof is published in [2] by Escardo, with Pataraia's permission. Pataraia himself didn't publish the result. An earlier, less general, theorem was proved by Coquand [3] for *bounded complete* dcpos, with an easier proof. The proof given here follows [2] closely and is impredicative (as is the one given in [3]). For a predicative version, see the module Various.Pataraia-Taylor. [1] Dito Pataraia. A constructive proof of Tarski’s fixed-point theorem for dcpo’s. Presented at the 65th Peripatetic Seminar on Sheaves and Logic, Aarhus, Denmark, November 1997. [2] Martin Escardo. Joins in the frame of nuclei. Applied Categorical Structures 11: 117–124, 2003. https://doi.org/10.1023/A:1023555514029 [3] Thierry Coquand. A topos theoretic fix point theorem. Unpublished manuscript, June 1995. https://web.archive.org/web/20110822085930/ https://www.cse.chalmers.se/~coquand/fix.pdf We prove the following from [2]. Lemma 2·1. The set of all monotone inflationary maps on any dcpo has a common fixed point. Theorem 2·2. Any set F of monotone inflationary maps on a dcpo 𝓓 with a least element ⊥ has a least common fixed point. Moreover, any subset of D that has ⊥ as a member, is closed under every f in F, and is closed under directed suprema has the least common fixed point as a member. Corollary 2·1. Any monotone endomap of a dcpo with ⊥ has a least fixed point. Notice that Corollary 2.1 doesn't generalize from single monotone maps to sets of monotone maps, as exemplified by any poset with a least element and two maximal elements and by the two constant endomaps that fix each of these two maximal elements. I am not sure why the publisher gave the number 2.1 to the corollary that follows Theorem 2.2. One minor difference here is that we work with families of functions rather than sets of functions, which is more natural in dependent type theory. \begin{code} {-# OPTIONS --safe --without-K #-} open import MLTT.Spartan open import UF.FunExt open import UF.PropTrunc module Various.Pataraia (pt : propositional-truncations-exist) (fe : Fun-Ext) (𝓤 : Universe) where open PropositionalTruncation pt open import DomainTheory.Basics.Dcpo pt fe 𝓤 open import DomainTheory.Basics.Miscelanea pt fe 𝓤 open import UF.Sets open import UF.Sets-Properties open import UF.Size open import UF.Subsingletons open import UF.Subsingletons-FunExt \end{code} The following is Lemma 2.1 of [2]. \begin{code} module lemma₂·₁ (𝓔 : DCPO {𝓤} {𝓤}) where private E = ⟨ 𝓔 ⟩ _⊑_ = underlying-order 𝓔 \end{code} We now define the pointed type MI of monotone inflationary endomaps of the underlying set E of the dcpo 𝓔. Notice that E is allowed to be empty. \begin{code} MI : 𝓤 ̇ MI = Σ f ꞉ (E → E) , is-monotone 𝓔 𝓔 f × is-inflationary 𝓔 f 𝕚𝕕 : MI 𝕚𝕕 = id , id-is-monotone 𝓔 , id-is-inflationary 𝓔 \end{code} We use the following auxiliary function Γ : E → MI → E to define a function γ : E → E with suitable properties. For each x : E we get a directed family Γ x : MI → E, and we define γ x to be the supremum of this family. \begin{code} Γ : E → MI → E Γ x (f , _) = f x Γ-is-semidirected : (x : E) → is-Semidirected 𝓔 (Γ x) Γ-is-semidirected x 𝕗@(f , fm , fi) 𝕘@(g , gm , gi) = ∣ 𝕙 , f-le-h , g-le-h ∣ where h = g ∘ f 𝕙 : MI 𝕙 = (h , ∘-is-monotone 𝓔 𝓔 𝓔 f g fm gm , ∘-is-inflationary 𝓔 f g fi gi) f-le-h : f x ⊑ h x f-le-h = gi (f x) g-le-h : g x ⊑ h x g-le-h = gm x (f x) (fi x) Γ-is-directed : (x : E) → is-Directed 𝓔 (Γ x) Γ-is-directed x = ∣ 𝕚𝕕 ∣ , Γ-is-semidirected x γ : E → E γ x = ∐ 𝓔 (Γ-is-directed x) \end{code} So the function γ is the pointwise supremum of the monotone inflationary endomaps of E. \begin{code} γ-is-monotone : is-monotone 𝓔 𝓔 γ γ-is-monotone x y l = ∐-is-monotone 𝓔 (Γ-is-directed x) (Γ-is-directed y) l' where l' : (𝕗 : MI) → Γ x 𝕗 ⊑ Γ y 𝕗 l' (f , fm , fi) = fm x y l \end{code} From this it is easy to conclude that γ is the greatest monotone inflationary map for any x : E. \begin{code} γ-is-greatest-mi-map : ((f , fm , fi) : MI) (x : E) → f x ⊑ γ x γ-is-greatest-mi-map 𝕗 x = ∐-is-upperbound 𝓔 (Γ-is-directed x) 𝕗 γ-is-inflationary : is-inflationary 𝓔 γ γ-is-inflationary = γ-is-greatest-mi-map 𝕚𝕕 \end{code} And, in turn, from this we conclude that γ x is a fixed point of any monotone inflationary map f : E → E. \begin{code} γ-is-fixed-point : ((f , fm , fi) : MI) (x : E) → f (γ x) = γ x γ-is-fixed-point (f , fm , fi) x = antisymmetry 𝓔 _ _ I II where I : f (γ x) ⊑ γ x I = γ-is-greatest-mi-map (f ∘ γ , ∘-is-monotone 𝓔 𝓔 𝓔 γ f γ-is-monotone fm , ∘-is-inflationary 𝓔 γ f γ-is-inflationary fi) x II : γ x ⊑ f (γ x) II = fi (γ x) \end{code} This concludes the proof of Lemma 2·1, which we use to prove Theorem 2·2. \begin{code} module theorem₂·₂ (ρ : Propositional-Resizing) (𝓓 : DCPO {𝓤} {𝓤}) ((⊥ , ⊥-is-least) : has-bottom 𝓓) (I : 𝓤 ̇ ) (f : I → ⟨ 𝓓 ⟩ → ⟨ 𝓓 ⟩) (fm : (i : I) → is-monotone 𝓓 𝓓 (f i)) (fi : (i : I) → is-inflationary 𝓓 (f i)) where private D = ⟨ 𝓓 ⟩ _⊑_ = underlying-order 𝓓 open import UF.Logic open import UF.Powerset open import UF.Powerset-Resizing fe ρ open import UF.SubtypeClassifier hiding (⊥) open AllCombinators pt fe C₁ : (D → Ω 𝓤) → Ω (𝓤 ⁺) C₁ = is-closed-under-directed-supsₚ 𝓓 C₂ : (D → Ω 𝓤) → Ω 𝓤 C₂ = λ A → ⊥ ∈ₚ A C₃ : (D → Ω 𝓤) → Ω 𝓤 C₃ = λ A → Ɐ i ꞉ I , Ɐ x ꞉ D , x ∈ₚ A ⇒ f i x ∈ₚ A C : (D → Ω 𝓤) → Ω (𝓤 ⁺) C = λ A → A ∈ₚ C₁ ∧ A ∈ₚ C₂ ∧ A ∈ₚ C₃ B₁ : ⋂ C ∈ C₁ B₁ {I} α δ κ = to-⋂ C (∐ 𝓓 δ) (λ A c@(c₁ , c₂ , c₃) → c₁ α δ (λ (i : I) → from-⋂ C (α i) (κ i) A c)) B₂ : ⋂ C ∈ C₂ B₂ = to-⋂ C ⊥ (λ A (c₁ , c₂ , c₃) → c₂) B₃ : ⋂ C ∈ C₃ B₃ i x x-in-⋂ = to-⋂ C (f i x) (λ A c@(c₁ , c₂ , c₃) → c₃ i x (from-⋂ C x x-in-⋂ A c)) B : ⋂ C ∈ C B = B₁ , B₂ , B₃ private 𝓔 : DCPO 𝓔 = subdcpoₚ 𝓓 (⋂ C) B₁ E = ⟨ 𝓔 ⟩ _≤_ : E → E → 𝓤 ̇ s ≤ t = s ⊑⟨ 𝓔 ⟩ t ι : E → D ι (x , c) = x τ : (t : E) → ι t ∈ ⋂ C τ (x , c) = c ⊥𝓔 : E ⊥𝓔 = ⊥ , B₂ \end{code} The monotone inflationary functions fᵢ : D → D restrict to monotone inflationary functions 𝓯ᵢ : E → E. \begin{code} private 𝓯 : I → E → E 𝓯 i (x , c) = f i x , B₃ i x c 𝓯-is-monotone : (i : I) (s t : E) → s ≤ t → 𝓯 i s ≤ 𝓯 i t 𝓯-is-monotone i (x , _) (y , _) = fm i x y 𝓯-is-inflationary : (i : I) (t : E) → t ≤ 𝓯 i t 𝓯-is-inflationary i (x , c) = fi i x \end{code} So now we can apply lemma₂·₁. \begin{code} open lemma₂·₁ 𝓔 𝕗 : I → MI 𝕗 i = (𝓯 i , 𝓯-is-monotone i , 𝓯-is-inflationary i) e₀ : E e₀ = γ ⊥𝓔 e₀-is-fp : (i : I) → 𝓯 i e₀ = e₀ e₀-is-fp i = γ-is-fixed-point (𝕗 i) ⊥𝓔 d₀ : D d₀ = ι e₀ \end{code} d₀ is a common fixed point of the family f. \begin{code} d₀-is-fp : (i : I) → f i d₀ = d₀ d₀-is-fp i = ap ι (e₀-is-fp i) fp-induction : (S : D → Ω 𝓤) → S ∈ C → d₀ ∈ S fp-induction = from-⋂ C d₀ (τ e₀) \end{code} d₀ is the least common pre-fixed point of the family f. \begin{code} d₀-is-lpfp : (x : D) → ((i : I) → f i x ⊑ x) → d₀ ⊑ x d₀-is-lpfp x le = fp-induction S S-in-C where S : D → Ω 𝓤 S = λ (d : D) → (d ⊑ x , prop-valuedness 𝓓 d x) S-in-C : S ∈ C S-in-C = (λ α δ α-in-S → ∐-is-lowerbound-of-upperbounds 𝓓 δ x α-in-S) , ⊥-is-least x , (λ i d d-in-S → f i d ⊑⟨ 𝓓 ⟩[ fm i d x d-in-S ] f i x ⊑⟨ 𝓓 ⟩[ le i ] x ∎⟨ 𝓓 ⟩) \end{code} And so it is the least common fixed point. \begin{code} d₀-is-lfp : (x : D) → ((i : I) → f i x = x) → d₀ ⊑ x d₀-is-lfp x e = d₀-is-lpfp x (λ i → =-to-⊑ 𝓓 (e i)) \end{code} This concludes the proof of Theorem 2·2, which has the following corollary. \begin{code} module corollary₂·₁ (ρ : Propositional-Resizing) (𝓒 : DCPO {𝓤} {𝓤}) ((⊥ , ⊥-is-least) : has-bottom 𝓒) (f : ⟨ 𝓒 ⟩ → ⟨ 𝓒 ⟩) (fm : is-monotone 𝓒 𝓒 f) where 𝓓 : DCPO 𝓓 = subdcpo 𝓒 (λ x → x ⊑⟨ 𝓒 ⟩ f x) (λ x → prop-valuedness 𝓒 x (f x)) (λ {I} α δ le → ∐-is-lowerbound-of-upperbounds 𝓒 δ (f (∐ 𝓒 δ)) (λ i → α i ⊑⟨ 𝓒 ⟩[ le i ] f (α i) ⊑⟨ 𝓒 ⟩[ fm (α i) (∐ 𝓒 δ) (∐-is-upperbound 𝓒 δ i) ] f (∐ 𝓒 δ) ∎⟨ 𝓒 ⟩)) 𝓯 : ⟨ 𝓓 ⟩ → ⟨ 𝓓 ⟩ 𝓯 (x , le) = f x , fm x (f x) le 𝓯-is-monotone : (s t : ⟨ 𝓓 ⟩) → s ⊑⟨ 𝓓 ⟩ t → 𝓯 s ⊑⟨ 𝓓 ⟩ 𝓯 t 𝓯-is-monotone (x , _) (y , _) = fm x y 𝓯-is-inflationary : (t : ⟨ 𝓓 ⟩) → t ⊑⟨ 𝓓 ⟩ 𝓯 t 𝓯-is-inflationary (x , c) = c 𝓓-has-bottom : has-bottom 𝓓 𝓓-has-bottom = (⊥ , ⊥-is-least (f ⊥)) , (λ (x , _) → ⊥-is-least x) open theorem₂·₂ ρ 𝓓 𝓓-has-bottom 𝟙 (λ _ → 𝓯) (λ _ → 𝓯-is-monotone) (λ _ → 𝓯-is-inflationary) ι : ⟨ 𝓓 ⟩ → ⟨ 𝓒 ⟩ ι (x , le) = x τ : (d : ⟨ 𝓓 ⟩) → d ⊑⟨ 𝓓 ⟩ 𝓯 d τ (x , le) = le c₀ : ⟨ 𝓒 ⟩ c₀ = ι d₀ c₀-is-fp : f c₀ = c₀ c₀-is-fp = ap ι (d₀-is-fp ⋆) c₀-is-lfp : (c : ⟨ 𝓒 ⟩) → f c = c → c₀ ⊑⟨ 𝓒 ⟩ c c₀-is-lfp c e = d₀-is-lfp (c , =-to-⊑ 𝓒 (e ⁻¹)) (λ _ → to-subtype-= (λ x → prop-valuedness 𝓒 x (f x)) e) \end{code} This concludes the proof of Corollary 2·1, which we repackage as follows. \begin{code} Pataraia : Propositional-Resizing → (𝓒 : DCPO {𝓤} {𝓤}) → has-bottom 𝓒 → (f : ⟨ 𝓒 ⟩ → ⟨ 𝓒 ⟩) → is-monotone 𝓒 𝓒 f → Σ c₀ ꞉ ⟨ 𝓒 ⟩ , (f c₀ = c₀) × ((c : ⟨ 𝓒 ⟩) → f c = c → c₀ ⊑⟨ 𝓒 ⟩ c) Pataraia ρ 𝓒 hb f fm = c₀ , c₀-is-fp , c₀-is-lfp where open corollary₂·₁ ρ 𝓒 hb f fm \end{code} See the module Various.Pataraia-Taylor for a proof that doesn't assume propositional resizing.