{-
\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 = [] : []