Implicit Types k l p q r : nat.(** The [between] type expresses the concept
      [forall i: nat, k <= i < l -> P i.]. *)
  Inductive between k : nat -> Prop :=
    | bet_emp : between k k
    | bet_S : forall l, between k l -> P l -> between k (S l).(** The [between] type expresses the concept
      [forall i: nat, k <= i < l -> P i.]. *)
  Inductive between k : nat -> Prop :=
    | bet_emp : between k k
    | bet_S : forall l, between k l -> P l -> between k (S l).(** The [between] type expresses the concept
      [forall i: nat, k <= i < l -> P i.]. *)
  Inductive between k : nat -> Prop :=
    | bet_emp : between k k
    | bet_S : forall l, between k l -> P l -> between k (S l).

(* Specifications: *)
Lemma bet_eq : forall k l, l = k -> between k l.
Lemma between_le : forall k l, between k l -> k <= l.
Lemma between_Sk_l : forall k l, between k l -> S k <= l -> between (S k) l.
Lemma between_restr : forall k l (m:nat), k <= l -> l <= m -> between k m -> between l m.