packages feed

cubical-0.2.0: examples/integer.cub

module integer where

import gradLemma

Z : U 
Z = or N N

zeroZ : Z
zeroZ = inr zero

auxsucZ : N -> Z
auxsucZ = split 
         zero -> inr zero
         suc n -> inl n

sucZ : Z -> Z
sucZ = split
         inl u -> auxsucZ u
         inr v -> inr (suc v)

auxpredZ : N -> Z
auxpredZ = split 
         zero -> inl zero
         suc n -> inr n

predZ : Z -> Z
predZ = split
         inl u -> inl (suc u)
         inr v -> auxpredZ v

sucpredZ : (x:Z) -> Id Z (sucZ (predZ x)) x
sucpredZ = 
 split
  inl u -> lem1 u
   where
    lem1 : (u:N) -> Id Z (sucZ (predZ (inl u))) (inl u)
    lem1 = split
            zero -> refl Z (inl zero)
            suc n -> refl Z (inl (suc n))
  inr v -> lem2 v
   where
    lem2 : (u:N) -> Id Z (sucZ (predZ (inr u))) (inr u)
    lem2 = split
            zero -> refl Z (inr zero)
            suc n -> refl Z (inr (suc n))

predsucZ : (x:Z) -> Id Z (predZ (sucZ x)) x
predsucZ = 
 split
  inl u -> lem1 u
   where
    lem1 : (u:N) -> Id Z (predZ (sucZ (inl u))) (inl u)
    lem1 = split
            zero -> refl Z (inl zero)
            suc n -> refl Z (inl (suc n))
  inr v -> lem2 v
   where
    lem2 : (u:N) -> Id Z (predZ (sucZ (inr u))) (inr u)
    lem2 = split
            zero -> refl Z (inr zero)
            suc n -> refl Z (inr (suc n))

sucIdZ : Id U Z Z
sucIdZ = isoId Z Z sucZ predZ sucpredZ predsucZ