(** * Logical or

  - arities: (1,1)
*)

Notation or_e := plus_e (only parsing).(** * Multiplication

  - arities: (2,0)
*)

Definition mult_e : BC :=
  rec (zero_e 1 0)
      (comp 2 1 plus_e ((proj 2 0 1) :: nil) ((proj 2 1 2) :: nil))
      (comp 2 1 plus_e ((proj 2 0 1) :: nil) ((proj 2 1 2) :: nil)).(** Logical and

  - arities: (2,0)
*)

Notation and_e := mult_e (only parsing).(** * Minus (with reversed arguments)

  - arities: (1,1)
*)

Definition minus_rev_e : BC :=
  rec (proj 0 1 0)
      (comp 1 2 pred nil ((proj 1 2 1) :: nil))
      (comp 1 2 pred nil ((proj 1 2 1) :: nil)).(** * Less than predicate

  - arities: (1,1)
*)

Notation lt_e := minus_rev_e.

(* Specifications: *)
Lemma unary_tl l : unary l = true -> unary (tl l) = true.