(* QuickChick Prelude *)
Set Warnings "-extraction-opaque-accessed,-extraction".
Set Warnings "-notation-overridden,-parsing".
Set Bullet Behavior "Strict Subproofs".
(* End prelude *)
Require Export Poly.
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* Higher-order *)
(*     true = beq_nat n 5  -> *)
Admitted. (* (*N*) QuickChick silly3_firsttry. *)
Admitted. (* (*N*) QuickChick rev_exercise1. *)
Admitted. (* (*N*) QuickChick trans_eq. *)
Example trans_eq_example' : forall (a b c d e f : nat),
[a;b] = [c;d] ->
[c;d] = [e;f] ->
[a;b] = [e;f].
Admitted. (* Leo: OUT-OF-SCOPE *)
Example trans_eq_exercise : forall (n m o p : nat),
m = (minustwo o) ->
(n + p) = m ->
(n + p) = (minustwo o).
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* (*N*) QuickChick beq_nat_0_l. *)
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* Leo: CoArb Weirdness *)
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* Leo: OUT-OF-SCOPE *)
Admitted. (* (*N*) QuickChick beq_id_true. *)
Admitted. (* (*N*) QuickChick nth_error_after_last. *)
Definition square n := n * n.
Admitted. (* QuickChick square_mult *)
Definition foo (x: nat) := 5.
Fact silly_fact_1 : forall m, foo m + 1 = foo (m + 1) + 1.
Admitted. (* QuickChick silly_fact_1. *)
Definition bar x :=
match x with
| O => 5
| S _ => 5
end.
Fact silly_fact_2 : forall m, bar m + 1 = bar (m + 1) + 1.
Admitted. (* QuickChick silly_fact_2. *)
Definition sillyfun (n : nat) : bool :=
if beq_nat n 3 then false
else if beq_nat n 5 then false
else false.
Admitted. (* QuickChick sillyfun_false. *)
Definition sillyfun1 (n : nat) : bool :=
if beq_nat n 3 then true
else if beq_nat n 5 then true
else false.
Admitted. (* Leo: OUT-OF-SCOPE *)

Theorem bool_fn_applied_thrice :
forall (f : bool -> bool) (b : bool),
f (f (f b)) = f b.