23 "_SUP" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_\<in>_./ _)" [0, 0, 10] 10) |
23 "_SUP" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_\<in>_./ _)" [0, 0, 10] 10) |
24 |
24 |
25 |
25 |
26 subsection {* Classical rules for reasoning on predicates *} |
26 subsection {* Classical rules for reasoning on predicates *} |
27 |
27 |
|
28 (* CANDIDATE declare predicate1I [Pure.intro!, intro!] *) |
28 declare predicate1D [Pure.dest?, dest?] |
29 declare predicate1D [Pure.dest?, dest?] |
|
30 (* CANDIDATE declare predicate1D [Pure.dest, dest] *) |
29 declare predicate2I [Pure.intro!, intro!] |
31 declare predicate2I [Pure.intro!, intro!] |
30 declare predicate2D [Pure.dest, dest] |
32 declare predicate2D [Pure.dest, dest] |
31 declare bot1E [elim!] |
33 declare bot1E [elim!] |
32 declare bot2E [elim!] |
34 declare bot2E [elim!] |
33 declare top1I [intro!] |
35 declare top1I [intro!] |
68 by (simp add: subset_iff le_fun_def) |
70 by (simp add: subset_iff le_fun_def) |
69 |
71 |
70 lemma pred_subset_eq2 [pred_set_conv]: "((\<lambda>x y. (x, y) \<in> R) \<le> (\<lambda>x y. (x, y) \<in> S)) \<longleftrightarrow> (R \<subseteq> S)" |
72 lemma pred_subset_eq2 [pred_set_conv]: "((\<lambda>x y. (x, y) \<in> R) \<le> (\<lambda>x y. (x, y) \<in> S)) \<longleftrightarrow> (R \<subseteq> S)" |
71 by (simp add: subset_iff le_fun_def) |
73 by (simp add: subset_iff le_fun_def) |
72 |
74 |
73 lemma bot_empty_eq: "\<bottom> = (\<lambda>x. x \<in> {})" |
75 lemma bot_empty_eq (* CANDIDATE [pred_set_conv] *): "\<bottom> = (\<lambda>x. x \<in> {})" |
74 by (auto simp add: fun_eq_iff) |
76 by (auto simp add: fun_eq_iff) |
75 |
77 |
76 lemma bot_empty_eq2: "\<bottom> = (\<lambda>x y. (x, y) \<in> {})" |
78 lemma bot_empty_eq2 (* CANDIDATE [pred_set_conv] *): "\<bottom> = (\<lambda>x y. (x, y) \<in> {})" |
77 by (auto simp add: fun_eq_iff) |
79 by (auto simp add: fun_eq_iff) |
|
80 |
|
81 (* CANDIDATE lemma top_empty_eq [pred_set_conv]: "\<top> = (\<lambda>x. x \<in> UNIV)" |
|
82 by (auto simp add: fun_eq_iff) *) |
|
83 |
|
84 (* CANDIDATE lemma top_empty_eq2 [pred_set_conv]: "\<top> = (\<lambda>x y. (x, y) \<in> UNIV)" |
|
85 by (auto simp add: fun_eq_iff) *) |
78 |
86 |
79 lemma inf_Int_eq [pred_set_conv]: "(\<lambda>x. x \<in> R) \<sqinter> (\<lambda>x. x \<in> S) = (\<lambda>x. x \<in> R \<inter> S)" |
87 lemma inf_Int_eq [pred_set_conv]: "(\<lambda>x. x \<in> R) \<sqinter> (\<lambda>x. x \<in> S) = (\<lambda>x. x \<in> R \<inter> S)" |
80 by (simp add: inf_fun_def) |
88 by (simp add: inf_fun_def) |
81 |
89 |
82 lemma inf_Int_eq2 [pred_set_conv]: "(\<lambda>x y. (x, y) \<in> R) \<sqinter> (\<lambda>x y. (x, y) \<in> S) = (\<lambda>x y. (x, y) \<in> R \<inter> S)" |
90 lemma inf_Int_eq2 [pred_set_conv]: "(\<lambda>x y. (x, y) \<in> R) \<sqinter> (\<lambda>x y. (x, y) \<in> S) = (\<lambda>x y. (x, y) \<in> R \<inter> S)" |
86 by (simp add: sup_fun_def) |
94 by (simp add: sup_fun_def) |
87 |
95 |
88 lemma sup_Un_eq2 [pred_set_conv]: "(\<lambda>x y. (x, y) \<in> R) \<squnion> (\<lambda>x y. (x, y) \<in> S) = (\<lambda>x y. (x, y) \<in> R \<union> S)" |
96 lemma sup_Un_eq2 [pred_set_conv]: "(\<lambda>x y. (x, y) \<in> R) \<squnion> (\<lambda>x y. (x, y) \<in> S) = (\<lambda>x y. (x, y) \<in> R \<union> S)" |
89 by (simp add: sup_fun_def) |
97 by (simp add: sup_fun_def) |
90 |
98 |
91 lemma INF_INT_eq: "(\<Sqinter>i. (\<lambda>x. x \<in> r i)) = (\<lambda>x. x \<in> (\<Inter>i. r i))" |
99 lemma INF_INT_eq (* CANDIDATE [pred_set_conv] *): "(\<Sqinter>i. (\<lambda>x. x \<in> r i)) = (\<lambda>x. x \<in> (\<Inter>i. r i))" |
92 by (simp add: INF_apply fun_eq_iff) |
100 by (simp add: INF_apply fun_eq_iff) |
93 |
101 |
94 lemma INF_INT_eq2: "(\<Sqinter>i. (\<lambda>x y. (x, y) \<in> r i)) = (\<lambda>x y. (x, y) \<in> (\<Inter>i. r i))" |
102 lemma INF_INT_eq2 (* CANDIDATE [pred_set_conv] *): "(\<Sqinter>i. (\<lambda>x y. (x, y) \<in> r i)) = (\<lambda>x y. (x, y) \<in> (\<Inter>i. r i))" |
95 by (simp add: INF_apply fun_eq_iff) |
103 by (simp add: INF_apply fun_eq_iff) |
96 |
104 |
97 lemma SUP_UN_eq [pred_set_conv]: "(\<Squnion>i. (\<lambda>x. x \<in> r i)) = (\<lambda>x. x \<in> (\<Union>i. r i))" |
105 lemma SUP_UN_eq [pred_set_conv]: "(\<Squnion>i. (\<lambda>x. x \<in> r i)) = (\<lambda>x. x \<in> (\<Union>i. r i))" |
98 by (simp add: SUP_apply fun_eq_iff) |
106 by (simp add: SUP_apply fun_eq_iff) |
99 |
107 |
944 "_INF" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Sqinter>_\<in>_./ _)" [0, 0, 10] 10) |
952 "_INF" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Sqinter>_\<in>_./ _)" [0, 0, 10] 10) |
945 "_SUP1" :: "pttrns \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_./ _)" [0, 10] 10) |
953 "_SUP1" :: "pttrns \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_./ _)" [0, 10] 10) |
946 "_SUP" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_\<in>_./ _)" [0, 0, 10] 10) |
954 "_SUP" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b \<Rightarrow> 'b" ("(3\<Squnion>_\<in>_./ _)" [0, 0, 10] 10) |
947 |
955 |
948 end |
956 end |
|
957 |