Todd Waugh Ambridge, January 2024
# Sequences
\begin{code}
{-# OPTIONS --without-K --safe #-}
open import MLTT.Spartan
open import Notation.Order
open import Naturals.Order
open import UF.DiscreteAndSeparated
open import NotionsOfDecidability.Complemented
module TWA.Thesis.Chapter2.Sequences where
repeat : {X : š¤ Ģ } ā X ā ā ā X
repeat α _ = α
map : {X : š¤ Ģ } {Y : š„ Ģ }
ā (X ā Y) ā (ā ā X) ā (ā ā Y)
map f α n = f (α n)
zipWith : {X : š¤ Ģ } {Y : š„ Ģ } {Z : š¦ Ģ }
ā (X ā Y ā Z) ā (ā ā X) ā (ā ā Y) ā (ā ā Z)
zipWith f α β n = f (α n) (β n)
head : {X : š¤ Ģ } ā (ā ā X) ā X
head α = α 0
tail : {X : š¤ Ģ } ā (ā ā X) ā (ā ā X)
tail α = α ā succ
_ā·_ : {T : ā ā š¤ Ģ } ā T 0 ā Ī (T ā succ) ā Ī T
(h ⷠα) 0 = h
(h ⷠα) (succ n) = α n
_ā¼āæ_ : {X : ā ā š¤ Ģ } ā Ī X ā Ī X ā ā ā š¤ Ģ
(α ā¼āæ β) n = (i : ā) ā i < n ā α i ļ¼ Ī² i
ā¼āæ-sym : {X : ā ā š¤ Ģ } (α β : Ī X) (n : ā)
ā (α ā¼āæ β) n
ā (β ā¼āæ α) n
ā¼āæ-sym α β n f i i<n = f i i<n ā»Ā¹
bounded-decidable-Ī : {X : ā ā š¤ Ģ }
ā is-complemented X
ā (n : ā)
ā is-decidable (Ī i ź ā , (i < n ā X i))
bounded-decidable-Ī d 0 = inl (Ī» _ ())
bounded-decidable-Ī {š¤} {X} d (succ n)
= Cases (bounded-decidable-Ī d n) γā (inr ā γā)
where
γā : ((i : ā) ā (i < n ā X i))
ā is-decidable ((i : ā) ā (i < succ n ā X i))
γā f = Cases (d n) (inl ā γāā) (inr ā γāā)
where
γāā : X n ā (i : ā) ā i < succ n ā X i
γāā Xn i i<sn
= Cases (<-split i n i<sn) (f i) (Ī» e ā transport X (e ā»Ā¹) Xn)
γāā : ¬ X n ā ¬ ((i : ā) ā i < succ n ā X i)
γāā g f = g (f n (<-succ n))
γā : ¬ ((i : ā) ā i < n ā X i) ā ¬ ((i : ā) ā i < succ n ā X i)
γā g f = g (Ī» i i<n ā f i (<-trans i n (succ n) i<n (<-succ n)))
bounded-decidable-Ī£ : {X : ā ā š¤ Ģ } ā is-complemented X
ā (n : ā)
ā is-decidable (Ī£ i ź ā , ((i < n) Ć X i))
bounded-decidable-Ī£ d 0 = inr (Ī» (i , i<0 , _) ā i<0)
bounded-decidable-Ī£ {š¤} {X} d (succ n)
= Cases (bounded-decidable-Ī£ d n)
(Ī» (i , i<n , Xi)
ā inl (i , <-trans i n (succ n) i<n (<-succ n) , Xi))
(Ī» ¬Σi<n ā Cases (d n)
(Ī» Xn ā inl (n , <-succ n , Xn))
(Ī» ¬Xn ā inr (Ī» (i , i<sn , Xi) ā Cases (<-split i n i<sn)
(Ī» i<n ā ¬Σi<n (i , i<n , Xi))
(Ī» iļ¼n ā ¬Xn (transport X iļ¼n Xi)))))
ā¼āæ-decidable
: {X : ā ā š¤ Ģ }
ā ((n : ā) ā is-discrete (X n))
ā (α β : Ī X) ā (n : ā) ā is-decidable ((α ā¼āæ β) n)
ā¼āæ-decidable ds α β = bounded-decidable-Ī (Ī» n ā ds n (α n) (β n))
\end{code}