{-# OPTIONS --without-K #-}
module Deltaplus where
Type = Set
data Empty : Type where
data ⊤ : Type where
* : ⊤
data ℕ : Type where
O : ℕ
S : (n : ℕ) → ℕ
data Fin : ℕ → Type where
fz : {n : ℕ} → Fin (S n)
fs : {n : ℕ} → Fin n → Fin (S n)
_>fin_ : {n : ℕ} → (i j : Fin n) → Set
fz >fin i = Empty
fs j >fin fz = ⊤
fs j >fin fs i = j >fin i
is-increasing : {m n : ℕ} → (Fin m → Fin n) → Type
is-increasing {m} {n} f = {j i : Fin m} → (j >fin i) → ((f j) >fin (f i))
infixr 1 _,_
record Σ (A : Type) (B : A → Type) : Type where
constructor _,_
field
fst : A
snd : B fst
_⇒+_ : ℕ → ℕ → Set
m ⇒+ n = Σ (Fin m → Fin n) is-increasing
_∘+_ : {l m n : ℕ} → (m ⇒+ n) → (l ⇒+ m) → (l ⇒+ n)
(g , p₂) ∘+ (f , p₁) = (λ i → g(f(i))) , (λ p → p₂ (p₁ p))
idΔ₊ : ∀ {n} → n ⇒+ n
idΔ₊ = (λ x → x) , (λ p → p)
infix 3 _==_
data _==_ {A : Type} (a : A) : A → Type where
idp : a == a
id-comp : ∀ {m n} → (f : m ⇒+ n) → (idΔ₊ ∘+ f) == f
id-comp f = idp
comp-id : ∀ {m n} → (f : m ⇒+ n) → (f ∘+ idΔ₊) == f
comp-id f = idp
comp-assoc : ∀ {i j m n} → (f : i ⇒+ j) → (g : j ⇒+ m) → (h : m ⇒+ n)
→ h ∘+ (g ∘+ f) == (h ∘+ g) ∘+ f
comp-assoc f g h = idp