Tom de Jong, early January 2022.
We define when a dcpo is (structurally) continuous/algebraic and prove the
nullary, unary and binary interpolation properties of the way-below relation in
a continuous dcpo.
We also show that in a continuous dcpo being locally small is equivalent to the
way-below relation having small truth values. Further, being (structurally)
continuous is preserved by taking continuous retracts.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan hiding (J)
open import UF.FunExt
open import UF.PropTrunc
module DomainTheory.BasesAndContinuity.Continuity
(pt : propositional-truncations-exist)
(fe : Fun-Ext)
(π₯ : Universe)
where
open PropositionalTruncation pt
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import DomainTheory.Basics.Dcpo pt fe π₯
open import DomainTheory.Basics.Miscelanea pt fe π₯
open import DomainTheory.Basics.WayBelow pt fe π₯
open import DomainTheory.BasesAndContinuity.IndCompletion pt fe π₯
\end{code}
We first define an untruncated, non-propositional, version of continuity for
dcpos, which we call continuity data. The notion of a continuous dcpo will
then be given by truncating the type of continuity data.
The motivation for our definition of continuity is discussed in
ContinuityDiscussion.lagda.
We use record syntax to have descriptively named projections available without
having to add them as boilerplate.
\begin{code}
record continuity-data (π : DCPO {π€} {π£}) : π₯ βΊ β π€ β π£ Μ where
field
index-of-approximating-family : β¨ π β© β π₯ Μ
approximating-family : (x : β¨ π β©)
β (index-of-approximating-family x) β β¨ π β©
approximating-family-is-directed : (x : β¨ π β©)
β is-Directed π (approximating-family x)
approximating-family-is-way-below : (x : β¨ π β©)
β is-way-upperbound π x
(approximating-family x)
approximating-family-β-οΌ : (x : β¨ π β©)
β β π (approximating-family-is-directed x) οΌ x
approximating-family-β-β : (x : β¨ π β©)
β β π (approximating-family-is-directed x) ββ¨ π β© x
approximating-family-β-β x = οΌ-to-β π (approximating-family-β-οΌ x)
approximating-family-β-β : (x : β¨ π β©)
β x ββ¨ π β© β π (approximating-family-is-directed x)
approximating-family-β-β x = οΌ-to-β π (approximating-family-β-οΌ x)
\end{code}
NB. We previously used the terminology "structural continuity" instead of
"continuity data".
We now prefer the latter because the word "structure" suggests that we are
interested in preserving this data, but we are not. (E.g., preserving this data
would mean preserving the way-below relation which Scott continuous functions
rarely do, ruling out constant functions with non-compact values for example.)
We only want to stress that we are not dealing with a property and the word
"data" is better for this.
At the moment the code and its comments still use the old terminology, so for
now we have following aliases, although in the future we will likely update the
terminology throughout the development.
\begin{code}
module structurally-continuous = continuity-data
structurally-continuous = continuity-data
is-continuous-dcpo : DCPO {π€} {π£} β π₯ βΊ β π€ β π£ Μ
is-continuous-dcpo π = β₯ structurally-continuous π β₯
being-continuous-dcpo-is-prop : (π : DCPO {π€} {π£})
β is-prop (is-continuous-dcpo π)
being-continuous-dcpo-is-prop π = β₯β₯-is-prop
\end{code}
Similarly, we define when a dcpo has algebraicity data where the
approximating family is required to consist of compact elements.
\begin{code}
record algebraicity-data (π : DCPO {π€} {π£}) : π₯ βΊ β π€ β π£ Μ where
field
index-of-compact-family : β¨ π β© β π₯ Μ
compact-family : (x : β¨ π β©) β (index-of-compact-family x) β β¨ π β©
compact-family-is-directed : (x : β¨ π β©) β is-Directed π (compact-family x)
compact-family-is-compact : (x : β¨ π β©) (i : index-of-compact-family x)
β is-compact π (compact-family x i)
compact-family-β-οΌ : (x : β¨ π β©) β β π (compact-family-is-directed x) οΌ x
compact-family-is-upperbound : (x : β¨ π β©)
β is-upperbound (underlying-order π)
x (compact-family x)
compact-family-is-upperbound x i =
compact-family x i ββ¨ π β©[ β¦
1β¦ ]
β π (compact-family-is-directed x) ββ¨ π β©[ β¦
2β¦ ]
x ββ¨ π β©
where
β¦
1β¦ = β-is-upperbound π (compact-family-is-directed x) i
β¦
2β¦ = οΌ-to-β π (compact-family-β-οΌ x)
\end{code}
NB. We previously used the terminology "structural algebraicity" instead of
"algebraicity data". Again, we now prefer the latter for the reasons explained
above in the other comment on terminology.
At the moment the code and its comments still use the old terminology, so for
now we have following aliases, although in the future we will likely update the
terminology throughout the development.
\begin{code}
module structurally-algebraic = algebraicity-data
structurally-algebraic = algebraicity-data
is-algebraic-dcpo : (π : DCPO {π€} {π£}) β π₯ βΊ β π€ β π£ Μ
is-algebraic-dcpo π = β₯ structurally-algebraic π β₯
structurally-continuous-if-structurally-algebraic :
(π : DCPO {π€} {π£})
β structurally-algebraic π β structurally-continuous π
structurally-continuous-if-structurally-algebraic π sa =
record
{ index-of-approximating-family = index-of-compact-family
; approximating-family = compact-family
; approximating-family-is-directed = compact-family-is-directed
; approximating-family-is-way-below = Ξ³
; approximating-family-β-οΌ = compact-family-β-οΌ
}
where
open structurally-algebraic sa
Ξ³ : (x : β¨ π β©) β is-way-upperbound π x (compact-family x)
Ξ³ x i = βͺ-β-to-βͺ π (compact-family-is-compact x i)
(compact-family-is-upperbound x i)
is-continuous-dcpo-if-algebraic-dcpo : (π : DCPO {π€} {π£})
β is-algebraic-dcpo π
β is-continuous-dcpo π
is-continuous-dcpo-if-algebraic-dcpo π =
β₯β₯-functor (structurally-continuous-if-structurally-algebraic π)
\end{code}
We characterize the order in a structurally continuous dcpo using approximating
families.
\begin{code}
module _
(π : DCPO {π€} {π£})
(C : structurally-continuous π)
where
open structurally-continuous C
structurally-continuous-β-criterion :
{x y : β¨ π β©}
β ((i : index-of-approximating-family x) β approximating-family x i ββ¨ π β© y)
β x ββ¨ π β© y
structurally-continuous-β-criterion {x} {y} l =
transport (Ξ» - β - ββ¨ π β© y) (approximating-family-β-οΌ x) Ξ³
where
Ξ³ : β π (approximating-family-is-directed x) ββ¨ π β© y
Ξ³ = β-is-lowerbound-of-upperbounds π (approximating-family-is-directed x) y l
structurally-continuous-β-criterion' :
{x y : β¨ π β©}
β ((i : index-of-approximating-family x) β approximating-family x i βͺβ¨ π β© y)
β x ββ¨ π β© y
structurally-continuous-β-criterion' {x} {y} l =
structurally-continuous-β-criterion (Ξ» i β βͺ-to-β π (l i))
structurally-continuous-β-criterion'-converse :
{x y : β¨ π β©}
β x ββ¨ π β© y
β ((i : index-of-approximating-family x) β approximating-family x i βͺβ¨ π β© y)
structurally-continuous-β-criterion'-converse {x} {y} l i =
βͺ-β-to-βͺ π (approximating-family-is-way-below x i) l
structurally-continuous-β-criterion-converse :
{x y : β¨ π β©}
β x ββ¨ π β© y
β ((i : index-of-approximating-family x) β approximating-family x i ββ¨ π β© y)
structurally-continuous-β-criterion-converse {x} {y} l i =
βͺ-to-β π (structurally-continuous-β-criterion'-converse l i)
\end{code}
We also characterize the way-below relation in terms of the order and
approximating families.
\begin{code}
structurally-continuous-βͺ-criterion :
{x y : β¨ π β©}
β (β i κ index-of-approximating-family y , x ββ¨ π β© approximating-family y i)
β x βͺβ¨ π β© y
structurally-continuous-βͺ-criterion {x} {y} = β₯β₯-rec (βͺ-is-prop-valued π) Ξ³
where
Ξ³ : (Ξ£ i κ index-of-approximating-family y
, x ββ¨ π β© approximating-family y i)
β x βͺβ¨ π β© y
Ξ³ (i , l) = β-βͺ-to-βͺ π l (approximating-family-is-way-below y i)
structurally-continuous-βͺ-criterion-converse :
{x y : β¨ π β©}
β x βͺβ¨ π β© y
β (β i κ index-of-approximating-family y , x ββ¨ π β© approximating-family y i)
structurally-continuous-βͺ-criterion-converse {x} {y} wb =
wb (index-of-approximating-family y) (approximating-family y)
(approximating-family-is-directed y) (approximating-family-β-β y)
\end{code}
We set out to prove nullary, unary and binary interpolation for (structurally)
continuous dcpos.
\begin{code}
βͺ-nullary-interpolation-str : (x : β¨ π β©) β β y κ β¨ π β© , y βͺβ¨ π β© x
βͺ-nullary-interpolation-str x =
β₯β₯-functor Ξ³ (inhabited-if-Directed π (approximating-family x)
(approximating-family-is-directed x))
where
Ξ³ : index-of-approximating-family x β Ξ£ y κ β¨ π β© , y βͺβ¨ π β© x
Ξ³ i = (approximating-family x i , approximating-family-is-way-below x i)
\end{code}
Our proof of the unary interpolation property is inspired by Proposition 2.12 of
"Continuous categories and Exponentiable Toposes" by Peter Johnstone and AndrΓ©
Joyal. The idea is to approximate y by a family Ξ±α΅’, approximate each Ξ±α΅’ by
another family Ξ²α΅’β±Ό, and finally to approximate y as the "sum" of the Ξ²α΅’β±Όs.
\begin{code}
βͺ-unary-interpolation-str : {x y : β¨ π β©} β x βͺβ¨ π β© y
β β d κ β¨ π β© , (x βͺβ¨ π β© d) Γ (d βͺβ¨ π β© y)
βͺ-unary-interpolation-str {x} {y} x-way-below-y = interpol
where
IΚΈ : π₯ Μ
IΚΈ = index-of-approximating-family y
Ξ±ΚΈ : IΚΈ β β¨ π β©
Ξ±ΚΈ = approximating-family y
Ξ΄ΚΈ : is-Directed π Ξ±ΚΈ
Ξ΄ΚΈ = approximating-family-is-directed y
J : (i : IΚΈ) β π₯ Μ
J i = index-of-approximating-family (Ξ±ΚΈ i)
Ξ² : (i : IΚΈ) β J i β β¨ π β©
Ξ² i = approximating-family (Ξ±ΚΈ i)
Ξ΄ : (i : IΚΈ) β is-Directed π (Ξ² i)
Ξ΄ i = approximating-family-is-directed (Ξ±ΚΈ i)
open Ind-completion π
π : IΚΈ β Ind
π i = J i , Ξ² i , Ξ΄ i
π : Ind
π = Ind-β π (inhabited-if-Directed π Ξ±ΚΈ Ξ΄ΚΈ , Ο)
where
Ο : is-semidirected _β²_ π
Ο iβ iβ = β₯β₯-functor r (semidirected-if-Directed π Ξ±ΚΈ Ξ΄ΚΈ iβ iβ)
where
r : (Ξ£ i κ IΚΈ , (Ξ±ΚΈ iβ ββ¨ π β© Ξ±ΚΈ i) Γ (Ξ±ΚΈ iβ ββ¨ π β© Ξ±ΚΈ i))
β Ξ£ i κ IΚΈ , (π iβ β² π i) Γ (π iβ β² π i)
r (i , u , v) = i , lβ , lβ
where
w = approximating-family-β-β (Ξ±ΚΈ i)
lβ : π iβ β² π i
lβ j = approximating-family-is-way-below (Ξ±ΚΈ iβ) j (J i) (Ξ² i) (Ξ΄ i)
(Ξ±ΚΈ iβ ββ¨ π β©[ u ]
Ξ±ΚΈ i ββ¨ π β©[ w ]
β π (Ξ΄ i) ββ¨ π β©)
lβ : π iβ β² π i
lβ j = approximating-family-is-way-below (Ξ±ΚΈ iβ) j (J i) (Ξ² i) (Ξ΄ i)
(Ξ±ΚΈ iβ ββ¨ π β©[ v ]
Ξ±ΚΈ i ββ¨ π β©[ w ]
β π (Ξ΄ i) ββ¨ π β©)
K : π₯ Μ
K = prβ π
Ξ³ : K β β¨ π β©
Ξ³ = prβ (prβ π)
Ξ³-is-directed : is-Directed π Ξ³
Ξ³-is-directed = prβ (prβ π)
y-below-β-of-Ξ³ : y ββ¨ π β© β π Ξ³-is-directed
y-below-β-of-Ξ³ = structurally-continuous-β-criterion u
where
u : (i : IΚΈ) β Ξ±ΚΈ i ββ¨ π β© β π Ξ³-is-directed
u i = structurally-continuous-β-criterion v
where
v : (j : J i) β Ξ² i j ββ¨ π β© β π Ξ³-is-directed
v j = β-is-upperbound π Ξ³-is-directed (i , j)
x-below-Ξ³ : β k κ K , x ββ¨ π β© Ξ³ k
x-below-Ξ³ = x-way-below-y K Ξ³ Ξ³-is-directed y-below-β-of-Ξ³
interpol : β d κ β¨ π β© , (x βͺβ¨ π β© d) Γ (d βͺβ¨ π β© y)
interpol = β₯β₯-functor r lemma
where
r : (Ξ£ i κ IΚΈ , Ξ£ j κ J i , (x ββ¨ π β© Ξ² i j)
Γ (Ξ² i j βͺβ¨ π β© Ξ±ΚΈ i)
Γ (Ξ±ΚΈ i βͺβ¨ π β© y))
β Ξ£ d κ β¨ π β© , (x βͺβ¨ π β© d) Γ (d βͺβ¨ π β© y)
r (i , j , u , v , w) = (Ξ±ΚΈ i , β-βͺ-to-βͺ π u v , w)
lemma : β₯ Ξ£ i κ IΚΈ , Ξ£ j κ J i , (x ββ¨ π β© Ξ² i j)
Γ (Ξ² i j βͺβ¨ π β© Ξ±ΚΈ i)
Γ (Ξ±ΚΈ i βͺβ¨ π β© y) β₯
lemma = β₯β₯-functor s x-below-Ξ³
where
s : (Ξ£ k κ K , x ββ¨ π β© Ξ³ k)
β Ξ£ i κ IΚΈ , Ξ£ j κ J i , (x ββ¨ π β© Ξ² i j)
Γ (Ξ² i j βͺβ¨ π β© Ξ±ΚΈ i)
Γ (Ξ±ΚΈ i βͺβ¨ π β© y)
s ((i , j) , l) = (i , j , l ,
approximating-family-is-way-below (Ξ±ΚΈ i) j ,
approximating-family-is-way-below y i)
\end{code}
From the unary interpolation property, one quickly derives the binary version,
although the proof involves eliminating several propositional truncations. For
that reason, we use so-called do-notation (which is possible because β₯-β₯ is a
monad) to shorten the proof below. If we write x β t, then x : X and t : β₯ X β₯.
\begin{code}
βͺ-binary-interpolation-str : {x y z : β¨ π β©} β x βͺβ¨ π β© z β y βͺβ¨ π β© z
β β d κ β¨ π β© , (x βͺβ¨ π β© d)
Γ (y βͺβ¨ π β© d)
Γ (d βͺβ¨ π β© z)
βͺ-binary-interpolation-str {x} {y} {z} x-way-below-z y-way-below-z = do
let Ξ΄ = approximating-family-is-directed z
let l = approximating-family-β-β z
(dβ , x-way-below-dβ , dβ-way-below-z) β βͺ-unary-interpolation-str
x-way-below-z
(dβ , y-way-below-dβ , dβ-way-below-z) β βͺ-unary-interpolation-str
y-way-below-z
(iβ , dβ-below-zβ±β) β dβ-way-below-z _ _ Ξ΄ l
(iβ , dβ-below-zβ±β) β dβ-way-below-z _ _ Ξ΄ l
(i , zβ±β-below-zβ± , zβ±β-below-zβ±) β semidirected-if-Directed π _ Ξ΄ iβ iβ
let Ξ± = approximating-family z
let dβ-below-Ξ±β± = dβ ββ¨ π β©[ dβ-below-zβ±β ]
Ξ± iβ ββ¨ π β©[ zβ±β-below-zβ± ]
Ξ± i ββ¨ π β©
let dβ-below-Ξ±β± = dβ ββ¨ π β©[ dβ-below-zβ±β ]
Ξ± iβ ββ¨ π β©[ zβ±β-below-zβ± ]
Ξ± i ββ¨ π β©
β£ approximating-family z i , βͺ-β-to-βͺ π x-way-below-dβ dβ-below-Ξ±β±
, βͺ-β-to-βͺ π y-way-below-dβ dβ-below-Ξ±β±
, approximating-family-is-way-below z i β£
\end{code}
The interpolation properties for continuous dcpos now follow immediately.
\begin{code}
module _
(π : DCPO {π€} {π£})
(c : is-continuous-dcpo π)
where
βͺ-nullary-interpolation : (x : β¨ π β©) β β y κ β¨ π β© , y βͺβ¨ π β© x
βͺ-nullary-interpolation x =
β₯β₯-rec β₯β₯-is-prop (Ξ» C β βͺ-nullary-interpolation-str π C x) c
βͺ-unary-interpolation : {x y : β¨ π β©} β x βͺβ¨ π β© y
β β d κ β¨ π β© , (x βͺβ¨ π β© d) Γ (d βͺβ¨ π β© y)
βͺ-unary-interpolation x-way-below-y =
β₯β₯-rec β₯β₯-is-prop (Ξ» C β βͺ-unary-interpolation-str π C x-way-below-y) c
βͺ-binary-interpolation : {x y z : β¨ π β©} β x βͺβ¨ π β© z β y βͺβ¨ π β© z
β β d κ β¨ π β© , (x βͺβ¨ π β© d)
Γ (y βͺβ¨ π β© d)
Γ (d βͺβ¨ π β© z)
βͺ-binary-interpolation {x} {y} {z} u v =
β₯β₯-rec β₯β₯-is-prop (Ξ» C β βͺ-binary-interpolation-str π C u v) c
\end{code}
We show that in a (structurally) continuous dcpo local smallness is logically
equivalent to the way-below relation having small values.
\begin{code}
module _
(π : DCPO {π€} {π£})
(C : structurally-continuous π)
where
open structurally-continuous C
βͺ-is-small-valued-str : is-locally-small π
β (x y : β¨ π β©) β is-small (x βͺβ¨ π β© y)
βͺ-is-small-valued-str ls x y = (β i κ I , x ββ Ξ± i) , Ο
where
open is-locally-small ls
I : π₯ Μ
I = index-of-approximating-family y
Ξ± : I β β¨ π β©
Ξ± = approximating-family y
Ο = (β i κ I , x ββ Ξ± i) ββ¨ β-cong pt (Ξ» i β ββ-β-β) β©
(β i κ I , x ββ¨ π β© Ξ± i) ββ¨ e β©
x βͺβ¨ π β© y β
where
e = logically-equivalent-props-are-equivalent β-is-prop (βͺ-is-prop-valued π)
(structurally-continuous-βͺ-criterion π C)
(structurally-continuous-βͺ-criterion-converse π C)
βͺ-is-small-valued-str-converse : ((x y : β¨ π β©) β is-small (x βͺβ¨ π β© y))
β is-locally-small π
βͺ-is-small-valued-str-converse βͺ-is-small-valued =
β local-smallness-equivalent-definitions π ββ»ΒΉ Ξ³
where
_βͺβ_ : β¨ π β© β β¨ π β© β π₯ Μ
x βͺβ y = prβ (βͺ-is-small-valued x y)
βͺβ-β-βͺ : {x y : β¨ π β©} β x βͺβ y β x βͺβ¨ π β© y
βͺβ-β-βͺ {x} {y} = prβ (βͺ-is-small-valued x y)
Ξ³ : (x y : β¨ π β©) β is-small (x ββ¨ π β© y)
Ξ³ x y = (β (i : I) β Ξ± i βͺβ y) , Ο
where
I : π₯ Μ
I = index-of-approximating-family x
Ξ± : I β β¨ π β©
Ξ± = approximating-family x
Ο = (β (i : I) β Ξ± i βͺβ y) ββ¨ Ξ -cong fe fe (Ξ» i β βͺβ-β-βͺ) β©
(β (i : I) β Ξ± i βͺβ¨ π β© y) ββ¨ e β©
x ββ¨ π β© y β
where
e = logically-equivalent-props-are-equivalent
(Ξ -is-prop fe (Ξ» i β βͺ-is-prop-valued π)) (prop-valuedness π x y)
(structurally-continuous-β-criterion' π C)
(structurally-continuous-β-criterion'-converse π C)
module _
(pe : Prop-Ext)
(π : DCPO {π€} {π£})
(c : is-continuous-dcpo π)
where
open import UF.Size hiding (is-small ; is-locally-small)
abstract
βͺ-is-small-valued : is-locally-small π
β (x y : β¨ π β©) β is-small (x βͺβ¨ π β© y)
βͺ-is-small-valued ls x y = β₯β₯-rec p (Ξ» C β βͺ-is-small-valued-str π C ls x y) c
where
p : is-prop (is-small (x βͺβ¨ π β© y))
p = prop-being-small-is-prop (Ξ» _ β pe) (Ξ» _ _ β fe)
(x βͺβ¨ π β© y) (βͺ-is-prop-valued π)
βͺ-is-small-valued-converse : ((x y : β¨ π β©) β is-small (x βͺβ¨ π β© y))
β is-locally-small π
βͺ-is-small-valued-converse ws =
β₯β₯-rec (being-locally-small-is-prop π (Ξ» _ β pe))
(Ξ» C β βͺ-is-small-valued-str-converse π C ws) c
\end{code}
Finally, we prove that (structural) continuity is preserved by continuous
retracts.
\begin{code}
module _
(π : DCPO {π€} {π£})
(π : DCPO {π€'} {π£'})
(Ο : π continuous-retract-of π)
where
open _continuous-retract-of_ Ο
structural-continuity-of-dcpo-preserved-by-continuous-retract :
structurally-continuous π
β structurally-continuous π
structural-continuity-of-dcpo-preserved-by-continuous-retract C =
record
{ index-of-approximating-family = Ξ» x β index-of-approximating-family
(s x)
; approximating-family = Ξ» x β r β approximating-family (s x)
; approximating-family-is-directed = lemmaβ
; approximating-family-is-way-below = lemmaβ
; approximating-family-β-οΌ = lemmaβ
}
where
open structurally-continuous C
Ξ± : (y : β¨ π β©) β index-of-approximating-family y β β¨ π β©
Ξ± = approximating-family
lemmaβ : (x : β¨ π β©) β is-Directed π (r β Ξ± (s x))
lemmaβ x = image-is-directed' π π π£
(approximating-family-is-directed (s x))
lemmaβ : (x : β¨ π β©) β is-way-upperbound π x (r β Ξ± (s x))
lemmaβ x i = continuous-retraction-βͺ-criterion π π Ο (Ξ± (s x) i) x
(approximating-family-is-way-below (s x) i)
lemmaβ : (x : β¨ π β©) β β π (lemmaβ x) οΌ x
lemmaβ x = β π (lemmaβ x) οΌβ¨ β¦
1β¦ β©
r (β π Ξ΄) οΌβ¨ β¦
2β¦ β©
r (s x) οΌβ¨ β¦
3β¦ β©
x β
where
Ξ΄ : is-Directed π (Ξ± (s x))
Ξ΄ = approximating-family-is-directed (s x)
β¦
1β¦ = (continuous-β-οΌ π π π£ Ξ΄) β»ΒΉ
β¦
2β¦ = ap r (approximating-family-β-οΌ (s x))
β¦
3β¦ = s-section-of-r x
continuity-of-dcpo-preserved-by-continuous-retract : is-continuous-dcpo π
β is-continuous-dcpo π
continuity-of-dcpo-preserved-by-continuous-retract =
β₯β₯-functor structural-continuity-of-dcpo-preserved-by-continuous-retract
\end{code}
Added 8 July 2024.
The purpose of the following construction is to show that structural continuity
is not a property of a dcpo.
\begin{code}
structurally-continuous-+-construction :
(π : DCPO {π€} {π£})
β structurally-continuous π
β structurally-continuous π
structurally-continuous-+-construction π sc =
record
{ index-of-approximating-family = Ξ» x β I x + I x
; approximating-family = [Ξ±,Ξ±]
; approximating-family-is-directed = Ξ΄'
; approximating-family-is-way-below = wb'
; approximating-family-β-οΌ = eq'
}
where
open structurally-continuous sc
renaming (index-of-approximating-family to I ;
approximating-family to Ξ± ;
approximating-family-is-directed to Ξ΄ ;
approximating-family-is-way-below to wb ;
approximating-family-β-οΌ to eq)
[Ξ±,Ξ±] : (x : β¨ π β©) β I x + I x β β¨ π β©
[Ξ±,Ξ±] x = cases (Ξ± x) (Ξ± x)
lemmaβ : {x : β¨ π β©} (i : I x) β β j κ I x + I x , Ξ± x i ββ¨ π β© [Ξ±,Ξ±] x j
lemmaβ {x} i = β£ inl i , reflexivity π (Ξ± x i) β£
lemmaβ : {x : β¨ π β©} (j : I x + I x) β β i κ I x , [Ξ±,Ξ±] x j ββ¨ π β© Ξ± x i
lemmaβ {x} (inl i) = β£ i , reflexivity π (Ξ± x i) β£
lemmaβ {x} (inr i) = β£ i , reflexivity π (Ξ± x i) β£
Ξ΄' : (x : β¨ π β©) β is-Directed π ([Ξ±,Ξ±] x)
Ξ΄' x = directed-if-bicofinal π lemmaβ lemmaβ (Ξ΄ x)
wb' : (x : β¨ π β©) β is-way-upperbound π x ([Ξ±,Ξ±] x)
wb' x (inl i) = wb x i
wb' x (inr i) = wb x i
eq' : (x : β¨ π β©) β β π (Ξ΄' x) οΌ x
eq' x = β-οΌ-if-bicofinal π lemmaβ lemmaβ (Ξ΄' x) (Ξ΄ x) β eq x
\end{code}