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) |