Fixpoint raw_for_all_between (m: Raw.tree) : bool :=
  match m with
  | Raw.Leaf => true
  | Raw.Node _ l x r =>
      if above_low_bound x
      then if below_high_bound x
           then raw_for_all_between l && pred x && raw_for_all_between r
           else raw_for_all_between l
      else raw_for_all_between r
  end.Definition for_all_between (m: t) : bool := raw_for_all_between m.(MSet.this).

(* Specifications: *)
Lemma raw_for_all_between_1: forall x m, Raw.bst m -> raw_for_all_between m = true -> Raw.In x m -> above_low_bound x = true -> below_high_bound x = true -> pred x = true.
Lemma raw_for_all_between_2: forall m, Raw.bst m -> (forall x, Raw.In x m -> above_low_bound x = true -> below_high_bound x = true -> pred x = true) -> raw_for_all_between m = true.
Theorem for_all_between_iff: forall s, for_all_between s = true <-> (forall x, In x s -> above_low_bound x = true -> below_high_bound x = true -> pred x = true).
Lemma raw_for_all_between_1: forall x m, Raw.bst m -> raw_for_all_between m = true -> Raw.In x m -> above_low_bound x = true -> below_high_bound x = true -> pred x = true.
Lemma raw_for_all_between_2: forall m, Raw.bst m -> (forall x, Raw.In x m -> above_low_bound x = true -> below_high_bound x = true -> pred x = true) -> raw_for_all_between m = true.
Theorem for_all_between_iff: forall s, for_all_between s = true <-> (forall x, In x s -> above_low_bound x = true -> below_high_bound x = true -> pred x = true).