(* QuickChick plus_comm *)

Fixpoint double (n:nat) :=
  match n with
  | O => O
  | S n' => S (S (double n'))
  end.

(* Specifications: *)
Lemma double_plus : forall n, double n = n + n .
Theorem evenb_S : forall n : nat, evenb (S n) = negb (evenb n).
Theorem mult_0_plus' : forall n m : nat, (0 + n) * m = n * m.
Theorem plus_rearrange : forall n m p q : nat, (n + m) + (p + q) = (m + n) + (p + q).
Theorem plus_assoc' : forall n m p : nat, n + (m + p) = (n + m) + p.
Theorem plus_swap : forall n m p : nat, n + (m + p) = m + (n + p).
Theorem mult_comm : forall m n : nat, m * n = n * m.
Theorem leb_refl : forall n:nat, true = leb n n.
Theorem zero_nbeq_S : forall n:nat, beq_nat 0 (S n) = false.
Theorem andb_false_r : forall b : bool, andb b false = false.
Theorem plus_ble_compat_l : forall n m p : nat, leb n m = true -> leb (p + n) (p + m) = true.
Theorem S_nbeq_0 : forall n:nat, beq_nat (S n) 0 = false.
Theorem mult_1_l : forall n:nat, 1 * n = n.
Theorem all3_spec : forall b c : bool, orb (andb b c) (orb (negb b) (negb c)) = true.
Theorem mult_plus_distr_r : forall n m p : nat, (n + m) * p = (n * p) + (m * p).
Theorem mult_assoc : forall n m p : nat, n * (m * p) = (n * m) * p.
Theorem beq_nat_refl : forall n : nat, true = beq_nat n n.
Theorem plus_swap' : forall n m p : nat, n + (m + p) = m + (n + p).