1 theory Relations = Main:
3 ML "Pretty.setmargin 64"
5 (*Id is only used in UNITY*)
6 (*refl, antisym,trans,univalent,\<dots> ho hum*)
9 @{thm[display]"Id_def"}
14 @{thm[display]"comp_def"}
19 @{thm[display]"R_O_Id"}
24 @{thm[display]"comp_mono"}
29 @{thm[display]"converse_iff"}
30 \rulename{converse_iff}
34 @{thm[display]"converse_comp"}
35 \rulename{converse_comp}
39 @{thm[display]"Image_iff"}
44 @{thm[display]"Image_UN"}
49 @{thm[display]"Domain_iff"}
54 @{thm[display]"Range_iff"}
59 @{thm[display]"relpow.simps"}
60 \rulename{relpow.simps}
62 @{thm[display]"rtrancl_unfold"}
63 \rulename{rtrancl_unfold}
65 @{thm[display]"rtrancl_refl"}
66 \rulename{rtrancl_refl}
68 @{thm[display]"r_into_rtrancl"}
69 \rulename{r_into_rtrancl}
71 @{thm[display]"rtrancl_trans"}
72 \rulename{rtrancl_trans}
74 @{thm[display]"rtrancl_induct"}
75 \rulename{rtrancl_induct}
77 @{thm[display]"rtrancl_idemp"}
78 \rulename{rtrancl_idemp}
80 @{thm[display]"r_into_trancl"}
81 \rulename{r_into_trancl}
83 @{thm[display]"trancl_trans"}
84 \rulename{trancl_trans}
86 @{thm[display]"trancl_into_rtrancl"}
87 \rulename{trancl_into_rtrancl}
89 @{thm[display]"trancl_converse"}
90 \rulename{trancl_converse}
93 text{*Relations. transitive closure*}
95 lemma rtrancl_converseD: "(x,y) \<in> (r^-1)^* \<Longrightarrow> (y,x) \<in> r^*"
96 apply (erule rtrancl_induct)
97 apply (rule rtrancl_refl)
98 apply (blast intro: r_into_rtrancl rtrancl_trans)
102 proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ \isadigit{1}\isanewline
104 goal\ {\isacharparenleft}lemma\ rtrancl{\isacharunderscore}converseD{\isacharparenright}{\isacharcolon}\isanewline
105 {\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}r{\isacharcircum}{\isacharminus}\isadigit{1}{\isacharparenright}{\isacharcircum}{\isacharasterisk}\ {\isasymLongrightarrow}\ {\isacharparenleft}y{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ r{\isacharcircum}{\isacharasterisk}\isanewline
106 \ \isadigit{1}{\isachardot}\ {\isacharparenleft}x{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ r{\isacharcircum}{\isacharasterisk}\isanewline
107 \ \isadigit{2}{\isachardot}\ {\isasymAnd}y\ z{\isachardot}\ {\isasymlbrakk}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}r{\isacharcircum}{\isacharminus}\isadigit{1}{\isacharparenright}{\isacharcircum}{\isacharasterisk}{\isacharsemicolon}\ {\isacharparenleft}y{\isacharcomma}\ z{\isacharparenright}\ {\isasymin}\ r{\isacharcircum}{\isacharminus}\isadigit{1}{\isacharsemicolon}\ {\isacharparenleft}y{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ r{\isacharcircum}{\isacharasterisk}{\isasymrbrakk}\isanewline
108 \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ {\isacharparenleft}z{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ r{\isacharcircum}{\isacharasterisk}
111 lemma rtrancl_converseI: "(y,x) \<in> r^* \<Longrightarrow> (x,y) \<in> (r^-1)^*"
112 apply (erule rtrancl_induct)
113 apply (rule rtrancl_refl)
114 apply (blast intro: r_into_rtrancl rtrancl_trans)
117 lemma rtrancl_converse: "(r^-1)^* = (r^*)^-1"
118 apply (auto intro: rtrancl_converseI dest: rtrancl_converseD)
122 lemma "A \<subseteq> Id"
128 proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ \isadigit{1}\isanewline
130 goal\ {\isacharparenleft}lemma{\isacharparenright}{\isacharcolon}\isanewline
131 A\ {\isasymsubseteq}\ Id\isanewline
132 \ \isadigit{1}{\isachardot}\ {\isasymAnd}x{\isachardot}\ x\ {\isasymin}\ A\ {\isasymLongrightarrow}\ x\ {\isasymin}\ Id
134 proof\ {\isacharparenleft}prove{\isacharparenright}{\isacharcolon}\ step\ \isadigit{2}\isanewline
136 goal\ {\isacharparenleft}lemma{\isacharparenright}{\isacharcolon}\isanewline
137 A\ {\isasymsubseteq}\ Id\isanewline
138 \ \isadigit{1}{\isachardot}\ {\isasymAnd}a\ b{\isachardot}\ {\isacharparenleft}a{\isacharcomma}\ b{\isacharparenright}\ {\isasymin}\ A\ {\isasymLongrightarrow}\ a\ {\isacharequal}\ b
141 text{*questions: do we cover force? (Why not?)
142 Do we include tables of operators in ASCII and X-symbol notation like in the Logics manuals?*}
147 lemma "(a \<in> {z. P z} \<union> {y. Q y}) = P a \<or> Q a"
151 text{*Pow, Inter too little used*}
153 lemma "(A \<subset> B) = (A \<subseteq> B \<and> A \<noteq> B)"
154 apply (simp add: psubset_def)