diff --git a/utp_rel_laws.thy b/utp_rel_laws.thy index 167f422..350942f 100644 --- a/utp_rel_laws.thy +++ b/utp_rel_laws.thy @@ -458,6 +458,27 @@ subsection \ Relation Algebra Laws \ theorem seqr_disj_cancel: "((P\<^sup>- ;; (\(P ;; Q))) \ (\Q)) = (\Q)" by pred_auto +theorem rel_RA1: "(P ;; (Q ;; R)) = ((P ;; Q) ;; R)" + by (simp add: seqr_assoc) + +theorem rel_RA2: "(P ;; II) = P" "(II ;; P) = P" + by simp_all + +theorem rel_RA3: "P\<^sup>-\<^sup>- = P" + by simp + +theorem rel_RA4: "(P ;; Q)\<^sup>- = (Q\<^sup>- ;; P\<^sup>-)" + by simp + +theorem rel_RA5: "(P \ Q)\<^sup>- = (P\<^sup>- \ Q\<^sup>-)" + by (pred_auto) + +theorem rel_RA6: "((P \ Q) ;; R) = (P;;R \ Q;;R)" + using seqr_or_distl by blast + +theorem rel_RA7: "((P\<^sup>- ;; (\(P ;; Q))) \ (\Q)) = (\Q)" + by (pred_auto) + subsection \ Kleene Algebra Laws \ lemma ustar_rep_eq [rel]: "\P\<^sup>\\\<^sub>U = \P\\<^sub>U\<^sup>*"