(** The [exists_between] type expresses the concept [exists i: nat, k <= i < l /\ Q i]. *)
Inductive exists_between k : nat -> Prop :=
| exists_S : forall l, exists_between k l -> exists_between k (S l)
| exists_le : forall l, k <= l -> Q l -> exists_between k (S l).
#[local]
Hint Constructors exists_between: core.

(* Specifications: *)
Lemma exists_le_S : forall k l, exists_between k l -> S k <= l.
Lemma exists_lt : forall k l, exists_between k l -> k < l.
Proof exists_le_S.