(***********************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* nat. (** [Empty_set] has no inhabitant *) Inductive Empty_set:Set :=. (** [identity A a] is the family of datatypes on [A] whose sole non-empty member is the singleton datatype [identity A a a] whose 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] *) (* Syntax defined in Specif.v *) 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.