Module And.
Inductive and (P Q : Prop) : Prop :=
| conj : P -> Q -> and P Q.
End And.
(** Notice the similarity with the definition of the [prod] type, given in chapter [Poly]; the only difference is that [prod] takes [Type] arguments, whereas [and] takes [Prop] arguments. *)
Print prod.
(* ===> Inductive prod (X Y : Type) : Type := | pair : X -> Y -> X * Y. *)
(** This should clarify why [destruct] and [intros] patterns can be used on a conjunctive hypothesis.  Case analysis allows us to consider all possible ways in which [P /\ Q] was proved -- here just one (the [conj] constructor).  Similarly, the [split] tactic actually works for any inductively defined proposition with only one constructor.  In particular, it works for [and]: *)

Lemma and_comm : forall P Q : Prop, P /\ Q <-> Q /\ P.