(** Since applying a theorem with hypotheses to some goal has the
    effect of generating as many subgoals as there are hypotheses for
    that theorem, we can apply [and_intro] to achieve the same effect
    as [split]. *)

Example and_example' : 3 + 4 = 7 /\ 2 * 2 = 4.(** **** Exercise: 2 stars (and_exercise)  *)
Example and_exercise :
  forall n m : nat, n + m = 0 -> n = 0 /\ m = 0.

(* Specifications: *)
Lemma and_example2 : forall n m : nat, n = 0 /\ m = 0 -> n + m = 0.
Lemma and_example2' : forall n m : nat, n = 0 /\ m = 0 -> n + m = 0.
Lemma and_example2'' : forall n m : nat, n = 0 -> m = 0 -> n + m = 0.
Lemma and_example3 : forall n m : nat, n + m = 0 -> n * m = 0.
Lemma proj1 : forall P Q : Prop, P /\ Q -> P.
Lemma proj2 : forall P Q : Prop, P /\ Q -> Q.
Theorem and_commut : forall P Q : Prop, P /\ Q -> Q /\ P.
Theorem and_assoc : forall P Q R : Prop, P /\ (Q /\ R) -> (P /\ Q) /\ R.
Lemma or_example : forall n m : nat, n = 0 \/ m = 0 -> n * m = 0.
Lemma or_intro : forall A B : Prop, A -> A \/ B.
Lemma zero_or_succ : forall n : nat, n = 0 \/ n = S (pred n).
Lemma mult_eq_0 : forall n m, n * m = 0 -> n = 0 \/ m = 0.
Theorem or_commut : forall P Q : Prop, P \/ Q -> Q \/ P.