(** ** Monotonicity of [includes] *)

(* Specifications: *)
Lemma includes_right_Or_monotone : forall x y z, x <= y -> (x || z) <= (y || z).
Lemma includes_left_Or_monotone : forall x y z, x <= y -> (z || x) <= (z || y).
Lemma includes_right_Cat_monotone : forall x y z, x <= y -> (x ++ z) <= (y ++ z).
Lemma includes_left_Cat_monotone : forall x y z, x <= y -> (z ++ x) <= (z ++ y).
Lemma includes_Star_monotone : forall x y, x <= y -> (Star x) <= (Star y).
(** ** Axioms for [includes] *)
(** See also lemma [matches_Star_right] which is stronger lemma. *)
Theorem Star_right : forall r, (Eps || (r ++ Star r)) <= Star r.
(** See also lemma [matches_Star_left] which is stronger lemma. *)
Theorem Star_left : forall r, (Eps || (Star r ++ r)) <= Star r.
Lemma Star_eq_left_s : forall s a b x, (b || (a ++ x)) <= x ->
((Star a) ++ b) ~== s -> x ~== s.
Theorem Star_eq_left : forall a b x, (b || (a ++ x)) <= x -> ((Star a) ++ b) <= x.
Theorem Star_eq_right_s : forall s a b x, (b || (x ++ a)) <= x ->
(b ++ (Star a)) ~== s -> x ~== s.
Theorem Star_eq_right : forall a b x, (b || (x ++ a)) <= x -> (b ++ (Star a)) <= x.