------------------------------------------------------------------------------ -- FOTC combinators for lists, colists, streams, etc. ------------------------------------------------------------------------------ {-# OPTIONS --exact-split #-} {-# OPTIONS --no-sized-types #-} {-# OPTIONS --no-universe-polymorphism #-} {-# OPTIONS --without-K #-} module FOTC.Base.List where open import FOTC.Base infixr 5 _∷_ ------------------------------------------------------------------------------ -- List constants. postulate [] cons head tail null : D -- FOTC partial lists. -- Definitions abstract _∷_ : D → D → D x ∷ xs = cons · x · xs -- {-# ATP definition _∷_ #-} head₁ : D → D head₁ xs = head · xs -- {-# ATP definition head₁ #-} tail₁ : D → D tail₁ xs = tail · xs -- {-# ATP definition tail₁ #-} null₁ : D → D null₁ xs = null · xs -- {-# ATP definition null₁ #-} ------------------------------------------------------------------------------ -- Conversion rules -- Conversion rules for null. -- null-[] : null · [] ≡ true -- null-∷ : ∀ x xs → null · (cons · x · xs) ≡ false postulate null-[] : null₁ [] ≡ true null-∷ : ∀ x xs → null₁ (x ∷ xs) ≡ false -- Conversion rule for head. -- head-∷ : ∀ x xs → head · (cons · x · xs) ≡ x postulate head-∷ : ∀ x xs → head₁ (x ∷ xs) ≡ x {-# ATP axiom head-∷ #-} -- Conversion rule for tail. -- tail-∷ : ∀ x xs → tail · (cons · x · xs) ≡ xs postulate tail-∷ : ∀ x xs → tail₁ (x ∷ xs) ≡ xs {-# ATP axiom tail-∷ #-} ------------------------------------------------------------------------------ -- Discrimination rules -- postulate []≢cons : ∀ {x xs} → [] ≢ cons · x · xs postulate []≢cons : ∀ {x xs} → [] ≢ x ∷ xs