(* QuickChick Prelude *)
Set Warnings "-extraction-opaque-accessed,-extraction".
Set Warnings "-notation-overridden,-parsing".
Set Bullet Behavior "Strict Subproofs".
(* End prelude *)
Require Export Tactics.
Example and_exercise :
forall n m : nat, n + m = 0 -> n = 0 /\ m = 0.
Admitted. (* 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 _ ) |}.
Admitted. (* QuickChick and_example2''. *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Instance testSuchThat_Disj {A B : Type} (P : A -> Prop) (Q : B -> Prop)
(prop : A -> B -> Prop)
`{Checkable (forall a, P a -> forall b, prop a b)}
`{Checkable (forall b, Q b -> forall a, prop a b)} :
Checkable (forall a b, P a \/ Q b -> prop a b) :=
{| checker f :=
disjoin (Datatypes.cons (checker (fun a P b => f a b _ ))
(Datatypes.cons (checker (fun b Q a => f a b _))
Datatypes.nil)) |}.
Admitted. (* Higher Order *)
Admitted. (* QuickChick zero_or_succ. *)
Admitted. (* OUT-OF-SCOPE *)
Admitted. (* Higher Order *)
Fact not_implies_our_not : forall (P:Prop),
~ P -> (forall (Q:Prop), P -> Q).
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* QuickChick not_true_is_false. *)
Admitted. (* QuickChick not_true_is_false'. *)
Admitted. (* Higher Order *)
Admitted. (* Leo: TODO *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* Higher Order *)
Admitted. (* OUT-OF-SCOPE *)
Admitted. (* Higher Order *)
Admitted. (* OUT-OF-SCOPE *)
Admitted. (* OUT-OF-SCOPE *)
Admitted. (* Higher-Order *)
Admitted. (* Higher-Order *)
Fixpoint In {A : Type} (x : A) (l : list A) : Prop :=
match l with
| [] => False
| x' :: l' => x' = x \/ In x l'
end.
Admitted. (* Higher Order *)
Admitted. (* Higher-Order *)
Admitted. (* WTF *)
Admitted. (* QuickChick plus_comm3. *)
Admitted. (* QuickChick plus_comm3_take2. *)
Admitted. (* QuickChick plus_comm3_take3. *)
Fixpoint rev_append {X} (l1 l2 : list X) : list X :=
match l1 with
| [] => l2
| x :: l1' => rev_append l1' (x :: l2)
end.
Definition tr_rev {X} (l : list X) : list X :=
rev_append l [].
Admitted. (* Higher Order *)
Admitted.  (* QuickChick evenb_double. *)
Admitted. (* Existential *)

Theorem even_bool_prop : forall n,
evenb n = true <-> exists k, n = double k.