src/HOL/Relation.thy
changeset 24286 7619080e49f0
parent 23709 fd31da8f752a
child 24915 fc90277c0dd7
equal deleted inserted replaced
24285:066bb557570f 24286:7619080e49f0
   110   by (simp add: diag_def) 
   110   by (simp add: diag_def) 
   111 
   111 
   112 lemma diag_eqI: "a = b ==> a : A ==> (a, b) : diag A"
   112 lemma diag_eqI: "a = b ==> a : A ==> (a, b) : diag A"
   113   by (simp add: diag_def)
   113   by (simp add: diag_def)
   114 
   114 
   115 lemma diagI [intro!]: "a : A ==> (a, a) : diag A"
   115 lemma diagI [intro!,noatp]: "a : A ==> (a, a) : diag A"
   116   by (rule diag_eqI) (rule refl)
   116   by (rule diag_eqI) (rule refl)
   117 
   117 
   118 lemma diagE [elim!]:
   118 lemma diagE [elim!]:
   119   "c : diag A ==> (!!x. x : A ==> c = (x, x) ==> P) ==> P"
   119   "c : diag A ==> (!!x. x : A ==> c = (x, x) ==> P) ==> P"
   120   -- {* The general elimination rule. *}
   120   -- {* The general elimination rule. *}
   323   by (unfold sym_def) blast
   323   by (unfold sym_def) blast
   324 
   324 
   325 
   325 
   326 subsection {* Domain *}
   326 subsection {* Domain *}
   327 
   327 
       
   328 declare Domain_def [noatp]
       
   329 
   328 lemma Domain_iff: "(a : Domain r) = (EX y. (a, y) : r)"
   330 lemma Domain_iff: "(a : Domain r) = (EX y. (a, y) : r)"
   329   by (unfold Domain_def) blast
   331   by (unfold Domain_def) blast
   330 
   332 
   331 lemma DomainI [intro]: "(a, b) : r ==> a : Domain r"
   333 lemma DomainI [intro]: "(a, b) : r ==> a : Domain r"
   332   by (iprover intro!: iffD2 [OF Domain_iff])
   334   by (iprover intro!: iffD2 [OF Domain_iff])
   409   done
   411   done
   410 
   412 
   411 
   413 
   412 subsection {* Image of a set under a relation *}
   414 subsection {* Image of a set under a relation *}
   413 
   415 
       
   416 declare Image_def [noatp]
       
   417 
   414 lemma Image_iff: "(b : r``A) = (EX x:A. (x, b) : r)"
   418 lemma Image_iff: "(b : r``A) = (EX x:A. (x, b) : r)"
   415   by (simp add: Image_def)
   419   by (simp add: Image_def)
   416 
   420 
   417 lemma Image_singleton: "r``{a} = {b. (a, b) : r}"
   421 lemma Image_singleton: "r``{a} = {b. (a, b) : r}"
   418   by (simp add: Image_def)
   422   by (simp add: Image_def)
   419 
   423 
   420 lemma Image_singleton_iff [iff]: "(b : r``{a}) = ((a, b) : r)"
   424 lemma Image_singleton_iff [iff]: "(b : r``{a}) = ((a, b) : r)"
   421   by (rule Image_iff [THEN trans]) simp
   425   by (rule Image_iff [THEN trans]) simp
   422 
   426 
   423 lemma ImageI [intro]: "(a, b) : r ==> a : A ==> b : r``A"
   427 lemma ImageI [intro,noatp]: "(a, b) : r ==> a : A ==> b : r``A"
   424   by (unfold Image_def) blast
   428   by (unfold Image_def) blast
   425 
   429 
   426 lemma ImageE [elim!]:
   430 lemma ImageE [elim!]:
   427     "b : r `` A ==> (!!x. (x, b) : r ==> x : A ==> P) ==> P"
   431     "b : r `` A ==> (!!x. (x, b) : r ==> x : A ==> P) ==> P"
   428   by (unfold Image_def) (iprover elim!: CollectE bexE)
   432   by (unfold Image_def) (iprover elim!: CollectE bexE)