{-

\begin{verbatim} Time-stamp: "98/03/01 22:37:15 peter" \end{verbatim}

\newcommand{\defocc}[1]{\framebox{\emph{#1}}} % Defining occurrence

An attempt at a standard prelude .

\tableofcontents

-}
 

{-

\section{ General utilities }

-}


Pow ( A : Type ) 
    = {-  the Type of set-valued functions defined on A -}
      ( a : A )-> Set 
    : Type,

Fam ( A : Type ) 
    = {-  the Type of functions into A -} 
      sig { I : Set, g : ( i : I )-> A } : Type,


OP ( A : Type ) 
   = {-  the Type of unary operators on type A -}
     ( a : A )-> A 
   : Type, 

BINOP ( A : Type )
   = {-  The Type of binary OPerators on a type A -} 
     ( a : A )-> OP A 
   : Type ,

op = {-  the unary OPerator from a set to the set of unary operators on it -}
     \ A -> ( a : A )-> A 
   : OP Set,

binop
   = {-  The unary OPerator from a set to the set of binary operators on it. -}
     \ A -> ( a : A )-> op A 
   : OP Set, 

Connective 
   = {-  the Type of binary (non-dependent) operators on sets -} 
     BINOP Set
   : Type,

Quantifier ( A : Type ) 
   = {-  The Type of quantifiers (second level predicates) over $A$ -} 
     Pow (Pow A) 
   : Type,

or = {-  the Connective for the co-product of two sets -} 
     \ A B -> data { $inl ( a : A ), $inr ( b : B ) } 
   : Connective,

Sigma ( A : Set ) 
   = {-  the Quantifier on $A$ which holds of inhabited predicates -} 
     \ B -> sig { p : A , q : B p } 
   : Quantifier A,

and = {-  the Connective for the product of two sets -} 
     \ A B -> Sigma A (\ junk -> B) 
    : Connective,

Pi ( A : Set ) 
      = {-  the Quantifier on A which holds of predicates true everywhere. -}
        \ B -> ( a : A )-> B a 
      : Quantifier A,

arrow = {-  the Connective for the set of functions between two sets -}
        \ A B -> Pi A (\ junk -> B) 
      : Connective,
fun = arrow : Connective,

maybe = {-  the OPerator on sets which adds in a new element. -} 
        \ A -> data { $fail, $unit ( a : A ) } 
      : OP Set, 


{-

\section { Useful inductively defined sets. }

-}


Nat = {-  the set of natural numbers -} 
      data { $0, $S ( pred : Nat ) } 
    : Set, 

W ( A : Set ) 
  = {-  The W quantifier on A -} 
    \ B -> let { W' = data { $sup ( a : A , phi : fun (B a) W' ) } 
                    : Set }
           in W' 
  : Quantifier A , 

              
 
end_of_prelude = [] : []