unit is a singleton datatype with sole inhabitant tt
|
Inductive unit : Set := tt : unit.
bool is the datatype of the booleans values true and false
|
Inductive bool : Set := true : bool
| false : bool.
Add Printing If bool.
nat is the datatype of natural numbers built from O and successor S; note that zero is the letter O, not the numeral 0
|
Inductive nat : Set := O : nat
| S : nat->nat.
Empty_set has no inhabitants
|
identity A a is a singleton datatype containing only a of type A; the sole inhabitant is denoted refl_identity A a
|
Inductive identity [A:Set; a:A] : A->Set :=
refl_identity: (identity A a a).
Hints Resolve refl_identity : core v62.
option A is the extension of A with a dummy element None
|
Inductive option [A:Set] : Set := Some : A -> (option A) | None : (option A).
sum A B, equivalently A + B, is the disjoint sum of A and B
|
Inductive sum [A,B:Set] : Set
:= inl : A -> (sum A B)
| inr : B -> (sum A B).
prod A B, written A * B, is the product of A and B; the pair pair A B a b of a and b is abbreviated (a,b)
|
Inductive prod [A,B:Set] : Set := pair : A -> B -> (prod A B).
Add Printing Let prod.
Section projections.
Variables A,B:Set.
Definition fst := [p:(prod A B)]Cases p of (pair x y) => x end.
Definition snd := [p:(prod A B)]Cases p of (pair x y) => y end.
End projections.
Syntactic Definition Fst := (fst ? ?).
Syntactic Definition Snd := (snd ? ?).
Hints Resolve pair inl inr : core v62.