Todd Waugh Ambridge, 5th October 2020.

A version of the Banach fixed-point theorem for ultracloseness spaces.

\begin{code}

{-# OPTIONS --safe --without-K #-}

open import UF.FunExt

module TWA.BanachFixedPointTheorem (fe : FunExt) where

open import MLTT.Spartan
open import CoNaturals.Type hiding (min)
open import TWA.Closeness fe
open import Naturals.Order
open import Notation.Order
open import Notation.CanonicalMap

\end{code}

(*) Definitions.

First we define a 'ultracloness space', which is a type equipped with
a cometric, but rather than triangle equality we have the ultrametric
property.

 A ultracloness space is a type X,
 equipped with a binary function c ꞉ X → X → ℕ∞,
 such that:

  (i)   Indistinguishable elements of X are equal,
        i.e. ∀ x y , c x y = ∞ → x = y

  (ii)  Every element of X is self-indistinguishable,
        i.e. ∀ x , c x x = ∞

  (iii) The binary function is symmetric,
        i.e. ∀ x y , c x y = c y x

  (iv)  The ultrametric property holds,
        i.e. ∀ x y z , min (c x y , c y z) ≤ c x z

In the code, we refer to the underlying type of a ultracloness
space (CUT) C as ⟨ C ⟩.
A CUT C is nonempty simply if we can exhibit a single element of ⟨ C ⟩.

\begin{code}

ClosenessSpace : 𝓤  ̇
ClosenessSpace {𝓤} = Σ X  𝓤 ̇ , Σ c  (X  X  ℕ∞) , is-closeness c

⟨_⟩ CUT-Nonempty : ClosenessSpace  𝓤 ̇
 X , _  = X
CUT-Nonempty = ⟨_⟩

\end{code}

Given a CUT C, the definition of a Cauchy sequence is as expected.

 A sequence s ꞉ (ℕ → ⟨ C ⟩) is Cauchy if for all ε ꞉ ℕ, there is an N ꞉ ℕ,
 such that for all m,n < N, we have ε < c s(m) s(n).

\begin{code}

CUT-CauchySequence : ClosenessSpace  𝓤 ̇
CUT-CauchySequence (X , c , _) = Σ s  (  X) , Π ε   , Σ N  
                                 ,  m n  (N < m) × (N < n)  ι ε  c (s m) (s n)

\end{code}

A CUT C is complete if every Cauchy sequence on C has a limit.

\begin{code}

has-limit : {X : 𝓤 ̇ }  (  X)  𝓤 ̇
has-limit {X} s = Σ i   , Π n   , (i  n  s n  s i)

CUT-Complete : ClosenessSpace  𝓤 ̇
CUT-Complete C = Π (s , _)  CUT-CauchySequence C , has-limit s

\end{code}

Finally, we give the definition of a contractive mapping for CUTs.

A map X → X' of metric spaces (X,d) and (X',d') is contractive if
there is r ∈ [0,1) such that for all x,y:X, we have

  d'(fx,fy) ≤ r·d(x,y).

Now, given a cometric space (X,c), we get a metric space (X,d) with d defined by

  d(x,y) = 2^{-c(x,y)}

with the usual convention that 2^{-∞} = 0. The converse is not always
possible. But, if (X,d) is ultrametric, then we can define a cometric
c from d by

 c(x,y) = sup { n:ℕ∞ | d(x,y)<2^{-n} }.

So, to translate the definition of contractibility to metric to
cometric, we need:

 (1) Restrict to particular contraction factors, namely of the form
     r=2^{-n}.

 (2) Define an operation (this set of contraction factors)×ℕ∞ → ℕ∞
     corresponding to multiplication. But actually, division by 2 is
     enough. And division by two corresponds to the successor function
     on ℕ∞.

     0  1   2   3   4   ⋯ ∞
     1 1/2 1/4 1/8 1/16   0

So the definition of contractive map for cometric spaces is
that there is an n > 0 such that,

 c(fx,fy) ≽ succ^{n} c(x,y).

\begin{code}

CUT-ContractionMapping : ClosenessSpace  𝓤 ̇
CUT-ContractionMapping (X , c , _)
 = Σ T  (X  X) , Σ n   , (0 < n) × (∀ x y  (Succ ^ n) (c x y)  c (T x) (T y))

\end{code}

(*) Lemma.

Given a type X, if the  sequence consisting of
iterations of f : X → X with starting point
x₀ ꞉ X has a limit, then it has a fixed point.

\begin{code}

iter : {X : 𝓤 ̇ }  X  (X  X)  (  X)
iter x₀ f n = (f ^ n) x₀

has-fixed-point : {X : 𝓤 ̇ }  (X  X)  𝓤 ̇
has-fixed-point {𝓤} {X} f = Σ x*  X , f x*  x*

limits-yield-fixed-points : {X : 𝓤 ̇ }
                           (f : X  X)
                           (x₀ : X)
                           has-limit (iter x₀ f)
                           has-fixed-point f
limits-yield-fixed-points f x₀ (n , l) = iter x₀ f n
                                       , l (succ n) (≤-succ n)

\end{code}

(*) Theorem.

We now prove the CUT version of the Banach fixed-point theorem.

The proof amounts to showing that the sequence of iterations of
a contraction mapping with some starting point in a complete CUT
has a limit. This is done by using the completeness property to
show that such a sequence is Cauchy.

\begin{code}

BanachFixedPointTheorem : (C : ClosenessSpace {𝓤})
                         CUT-Nonempty C
                         CUT-Complete C
                         ((T , _) : CUT-ContractionMapping C)
                         has-fixed-point T
BanachFixedPointTheorem (X , c , p) x₀ complete (T , succ k , _ , r)
 = limits-yield-fixed-points T x₀ limit
 where
  s :   X
  s = iter x₀ T
  limit : has-limit s
  limit = complete (s , λ ε  ε , γ ε)
   where
    γ : Π ε   , ((m n : )  (ε < m) × (ε < n)  ι ε  c (s m) (s n))
    γ ε (succ m) (succ n) (ε<sm , ε<sn)
      = ≺≼-gives-≺ (ι ε) ((Succ ^ succ k) (c (s m) (s n))) (c (T (s m)) (T (s n)))
                   (q k ε (ε<sm , ε<sn)) (r (s m) (s n))
     where
      q : (k : ) (ε : )  (ε < succ m) × (ε < succ n)
         ι ε  (Succ ^ succ k) (c (s m) (s n))
      q 0 0 _ = 0 , refl , refl
      q 0 (succ ε) (ε<sm , ε<sn)
       = ≺-Succ (ι ε) (c (s m) (s n)) (γ ε m n (ε<sm , ε<sn))
      q (succ k) ε ε<
       = ≺-Succ-r (ι ε) ((Succ ^ succ k) (c (s m) (s n))) (q k ε ε<)

\end{code}