src/HOL/Relation.thy
changeset 46689 f559866a7aa2
parent 46664 1f6c140f9c72
child 46691 72d81e789106
equal deleted inserted replaced
46675:f4ce220d2799 46689:f559866a7aa2
    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