(* Specifications: *)
Theorem Or_comm : forall r r', r || r' =R= r' || r.
Theorem Or_assoc : forall r r' r'', (r || r') || r'' =R= r || (r' || r'').
Lemma And_comm : forall r r', And r r' =R= And r' r.
Lemma And_assoc : forall r r' r'', And (And r r') r'' =R= And r (And r' r'').
Theorem Or_left_id : forall r, Empty || r =R= r.
Theorem Or_right_id : forall r, r || Empty =R= r.
Theorem Or_idem : forall r, r || r =R= r.
Lemma derive_Char_is_id : forall a r, derive a (Char a ++ r) =R= r.
Lemma matches_Star_right : forall r, Star r =R= Eps || (r ++ Star r).
Lemma matches_Star_left : forall r, Star r =R= Eps || (Star r ++ r).
Theorem Cat_left_zero : forall r, Empty ++ r =R= Empty.
Theorem Cat_right_zero : forall r, r ++ Empty =R= Empty.
Theorem Cat_left_id : forall r, Eps ++ r =R= r.
Theorem Cat_right_id : forall r, r ++ Eps =R= r.
Theorem Cat_assoc : forall r r' r'', (r ++ r') ++ r'' =R= r ++ (r' ++ r'').
Lemma Cat_left_distr : forall r r' r'', (r ++ (r' || r'')) =R= ((r ++ r') || (r ++ r'')).
Lemma Cat_right_distr : forall r r' r'', ((r || r') ++ r'') =R= ((r ++ r'') || (r' ++ r'')).