(* QuickChick app_assoc. *)

Fixpoint rev (l:natlist) : natlist :=
  match l with
  | nil    => nil
  | h :: t => rev t ++ [h]
  end.

(* Specifications: *)
Theorem app_length : forall l1 l2 : natlist, length (l1 ++ l2) = (length l1) + (length l2).
Theorem rev_length : forall l : natlist, length (rev l) = length l.
Theorem app_nil_r : forall l : natlist, l ++ [] = l.
Theorem rev_app_distr: forall l1 l2 : natlist, rev (l1 ++ l2) = rev l2 ++ rev l1.
Theorem rev_involutive : forall l : natlist, rev (rev l) = l.
Theorem app_assoc4 : forall l1 l2 l3 l4 : natlist, l1 ++ (l2 ++ (l3 ++ l4)) = ((l1 ++ l2) ++ l3) ++ l4.
Theorem ble_n_Sn : forall n, leb n (S n) = true.