paulson@10341
|
1 |
(* ID: $Id$ *)
|
paulson@10294
|
2 |
theory Relations = Main:
|
paulson@10294
|
3 |
|
paulson@10294
|
4 |
ML "Pretty.setmargin 64"
|
paulson@10294
|
5 |
|
paulson@10294
|
6 |
(*Id is only used in UNITY*)
|
paulson@10294
|
7 |
(*refl, antisym,trans,univalent,\<dots> ho hum*)
|
paulson@10294
|
8 |
|
paulson@10294
|
9 |
text{*
|
paulson@10864
|
10 |
@{thm[display] Id_def[no_vars]}
|
paulson@10294
|
11 |
\rulename{Id_def}
|
paulson@10294
|
12 |
*}
|
paulson@10294
|
13 |
|
paulson@10294
|
14 |
text{*
|
paulson@10864
|
15 |
@{thm[display] comp_def[no_vars]}
|
paulson@10294
|
16 |
\rulename{comp_def}
|
paulson@10294
|
17 |
*}
|
paulson@10294
|
18 |
|
paulson@10294
|
19 |
text{*
|
paulson@10864
|
20 |
@{thm[display] R_O_Id[no_vars]}
|
paulson@10294
|
21 |
\rulename{R_O_Id}
|
paulson@10294
|
22 |
*}
|
paulson@10294
|
23 |
|
paulson@10294
|
24 |
text{*
|
paulson@10864
|
25 |
@{thm[display] comp_mono[no_vars]}
|
paulson@10294
|
26 |
\rulename{comp_mono}
|
paulson@10294
|
27 |
*}
|
paulson@10294
|
28 |
|
paulson@10294
|
29 |
text{*
|
paulson@10864
|
30 |
@{thm[display] converse_iff[no_vars]}
|
paulson@10294
|
31 |
\rulename{converse_iff}
|
paulson@10294
|
32 |
*}
|
paulson@10294
|
33 |
|
paulson@10294
|
34 |
text{*
|
paulson@10864
|
35 |
@{thm[display] converse_comp[no_vars]}
|
paulson@10294
|
36 |
\rulename{converse_comp}
|
paulson@10294
|
37 |
*}
|
paulson@10294
|
38 |
|
paulson@10294
|
39 |
text{*
|
paulson@10864
|
40 |
@{thm[display] Image_iff[no_vars]}
|
paulson@10294
|
41 |
\rulename{Image_iff}
|
paulson@10294
|
42 |
*}
|
paulson@10294
|
43 |
|
paulson@10294
|
44 |
text{*
|
paulson@10864
|
45 |
@{thm[display] Image_UN[no_vars]}
|
paulson@10294
|
46 |
\rulename{Image_UN}
|
paulson@10294
|
47 |
*}
|
paulson@10294
|
48 |
|
paulson@10294
|
49 |
text{*
|
paulson@10864
|
50 |
@{thm[display] Domain_iff[no_vars]}
|
paulson@10294
|
51 |
\rulename{Domain_iff}
|
paulson@10294
|
52 |
*}
|
paulson@10294
|
53 |
|
paulson@10294
|
54 |
text{*
|
paulson@10864
|
55 |
@{thm[display] Range_iff[no_vars]}
|
paulson@10294
|
56 |
\rulename{Range_iff}
|
paulson@10294
|
57 |
*}
|
paulson@10294
|
58 |
|
paulson@10294
|
59 |
text{*
|
paulson@10864
|
60 |
@{thm[display] relpow.simps[no_vars]}
|
paulson@10294
|
61 |
\rulename{relpow.simps}
|
paulson@10294
|
62 |
|
paulson@10864
|
63 |
@{thm[display] rtrancl_unfold[no_vars]}
|
paulson@10294
|
64 |
\rulename{rtrancl_unfold}
|
paulson@10294
|
65 |
|
paulson@10864
|
66 |
@{thm[display] rtrancl_refl[no_vars]}
|
paulson@10294
|
67 |
\rulename{rtrancl_refl}
|
paulson@10294
|
68 |
|
paulson@10864
|
69 |
@{thm[display] r_into_rtrancl[no_vars]}
|
paulson@10294
|
70 |
\rulename{r_into_rtrancl}
|
paulson@10294
|
71 |
|
paulson@10864
|
72 |
@{thm[display] rtrancl_trans[no_vars]}
|
paulson@10294
|
73 |
\rulename{rtrancl_trans}
|
paulson@10294
|
74 |
|
paulson@10864
|
75 |
@{thm[display] rtrancl_induct[no_vars]}
|
paulson@10294
|
76 |
\rulename{rtrancl_induct}
|
paulson@10294
|
77 |
|
paulson@10864
|
78 |
@{thm[display] rtrancl_idemp[no_vars]}
|
paulson@10294
|
79 |
\rulename{rtrancl_idemp}
|
paulson@10294
|
80 |
|
paulson@10864
|
81 |
@{thm[display] r_into_trancl[no_vars]}
|
paulson@10294
|
82 |
\rulename{r_into_trancl}
|
paulson@10294
|
83 |
|
paulson@10864
|
84 |
@{thm[display] trancl_trans[no_vars]}
|
paulson@10294
|
85 |
\rulename{trancl_trans}
|
paulson@10294
|
86 |
|
paulson@10864
|
87 |
@{thm[display] trancl_into_rtrancl[no_vars]}
|
paulson@10294
|
88 |
\rulename{trancl_into_rtrancl}
|
paulson@10294
|
89 |
|
paulson@10864
|
90 |
@{thm[display] trancl_converse[no_vars]}
|
paulson@10294
|
91 |
\rulename{trancl_converse}
|
paulson@10294
|
92 |
*}
|
paulson@10294
|
93 |
|
paulson@10294
|
94 |
text{*Relations. transitive closure*}
|
paulson@10294
|
95 |
|
paulson@11080
|
96 |
lemma rtrancl_converseD: "(x,y) \<in> (r\<inverse>)\<^sup>* \<Longrightarrow> (y,x) \<in> r\<^sup>*"
|
paulson@10864
|
97 |
apply (erule rtrancl_induct)
|
paulson@10864
|
98 |
txt{*
|
paulson@10864
|
99 |
@{subgoals[display,indent=0,margin=65]}
|
paulson@10864
|
100 |
*};
|
paulson@10864
|
101 |
apply (rule rtrancl_refl)
|
paulson@11080
|
102 |
apply (blast intro: rtrancl_trans)
|
paulson@10864
|
103 |
done
|
paulson@10294
|
104 |
|
paulson@10294
|
105 |
|
paulson@11080
|
106 |
lemma rtrancl_converseI: "(y,x) \<in> r\<^sup>* \<Longrightarrow> (x,y) \<in> (r\<inverse>)\<^sup>*"
|
paulson@10864
|
107 |
apply (erule rtrancl_induct)
|
paulson@10864
|
108 |
apply (rule rtrancl_refl)
|
paulson@11080
|
109 |
apply (blast intro: rtrancl_trans)
|
paulson@10864
|
110 |
done
|
paulson@10294
|
111 |
|
paulson@11080
|
112 |
lemma rtrancl_converse: "(r\<inverse>)\<^sup>* = (r\<^sup>*)\<inverse>"
|
paulson@10864
|
113 |
by (auto intro: rtrancl_converseI dest: rtrancl_converseD)
|
paulson@10294
|
114 |
|
paulson@11080
|
115 |
lemma rtrancl_converse: "(r\<inverse>)\<^sup>* = (r\<^sup>*)\<inverse>"
|
paulson@10864
|
116 |
apply (intro equalityI subsetI)
|
paulson@10864
|
117 |
txt{*
|
paulson@10864
|
118 |
after intro rules
|
paulson@10294
|
119 |
|
paulson@10864
|
120 |
@{subgoals[display,indent=0,margin=65]}
|
paulson@10864
|
121 |
*};
|
paulson@10864
|
122 |
apply clarify
|
paulson@10864
|
123 |
txt{*
|
paulson@10864
|
124 |
after splitting
|
paulson@10864
|
125 |
@{subgoals[display,indent=0,margin=65]}
|
paulson@10864
|
126 |
*};
|
paulson@10864
|
127 |
oops
|
paulson@10294
|
128 |
|
paulson@10294
|
129 |
|
paulson@10864
|
130 |
lemma "(\<forall>u v. (u,v) \<in> A \<longrightarrow> u=v) \<Longrightarrow> A \<subseteq> Id"
|
paulson@10864
|
131 |
apply (rule subsetI)
|
paulson@10864
|
132 |
txt{*
|
paulson@10864
|
133 |
@{subgoals[display,indent=0,margin=65]}
|
paulson@10294
|
134 |
|
paulson@10864
|
135 |
after subsetI
|
paulson@10864
|
136 |
*};
|
paulson@10864
|
137 |
apply clarify
|
paulson@10864
|
138 |
txt{*
|
paulson@10864
|
139 |
@{subgoals[display,indent=0,margin=65]}
|
paulson@10864
|
140 |
|
paulson@10864
|
141 |
subgoals after clarify
|
paulson@10864
|
142 |
*};
|
paulson@10864
|
143 |
by blast
|
paulson@10864
|
144 |
|
paulson@10864
|
145 |
|
paulson@10294
|
146 |
|
paulson@10294
|
147 |
|
paulson@10294
|
148 |
text{*rejects*}
|
paulson@10294
|
149 |
|
paulson@10294
|
150 |
lemma "(a \<in> {z. P z} \<union> {y. Q y}) = P a \<or> Q a"
|
paulson@10864
|
151 |
apply (blast)
|
paulson@10864
|
152 |
done
|
paulson@10294
|
153 |
|
paulson@10294
|
154 |
text{*Pow, Inter too little used*}
|
paulson@10294
|
155 |
|
paulson@10294
|
156 |
lemma "(A \<subset> B) = (A \<subseteq> B \<and> A \<noteq> B)"
|
paulson@10864
|
157 |
apply (simp add: psubset_def)
|
paulson@10864
|
158 |
done
|
paulson@10294
|
159 |
|
paulson@10294
|
160 |
end
|