Example and_exercise :
  forall n m : nat, n + m = 0 -> n = 0 /\ m = 0.(* OUT-OF-SCOPE *)

Instance testSuchThat_Conj {A B : Type} (P : A -> Prop) (Q : B -> Prop)
         (prop : A -> B -> Prop)
         `{Checkable (forall a, P a -> forall b, Q b -> prop a b)} :
  Checkable (forall a b, P a /\ Q b -> prop a b) :=
  {| checker f := 
       checker (fun a P b Q => f a b _ ) |}.

(* 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 proj1 : forall P Q : Prop, P /\ Q -> P.
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.