equal
deleted
inserted
replaced
25 "(rel_raw X R) Un (rel_raw Y S) = rel_raw (X Un Y) (R Un S)" |
25 "(rel_raw X R) Un (rel_raw Y S) = rel_raw (X Un Y) (R Un S)" |
26 unfolding rel_raw_def by auto |
26 unfolding rel_raw_def by auto |
27 |
27 |
28 lemma comp_Id_on: |
28 lemma comp_Id_on: |
29 "Id_on X O R = Set.project (%(x, y). x : X) R" |
29 "Id_on X O R = Set.project (%(x, y). x : X) R" |
30 by (auto intro!: rel_compI) |
30 by (auto intro!: relcompI) |
31 |
31 |
32 lemma comp_Id_on': |
32 lemma comp_Id_on': |
33 "R O Id_on X = Set.project (%(x, y). y : X) R" |
33 "R O Id_on X = Set.project (%(x, y). y : X) R" |
34 by auto |
34 by auto |
35 |
35 |
36 lemma project_Id_on: |
36 lemma project_Id_on: |
37 "Set.project (%(x, y). x : X) (Id_on Y) = Id_on (X Int Y)" |
37 "Set.project (%(x, y). x : X) (Id_on Y) = Id_on (X Int Y)" |
38 by auto |
38 by auto |
39 |
39 |
40 lemma rel_comp_raw: |
40 lemma relcomp_raw: |
41 "(rel_raw X R) O (rel_raw Y S) = rel_raw (X Int Y) (Set.project (%(x, y). y : Y) R Un (Set.project (%(x, y). x : X) S Un R O S))" |
41 "(rel_raw X R) O (rel_raw Y S) = rel_raw (X Int Y) (Set.project (%(x, y). y : Y) R Un (Set.project (%(x, y). x : X) S Un R O S))" |
42 unfolding rel_raw_def |
42 unfolding rel_raw_def |
43 apply simp |
43 apply simp |
44 apply (simp add: comp_Id_on) |
44 apply (simp add: comp_Id_on) |
45 apply (simp add: project_Id_on) |
45 apply (simp add: project_Id_on) |
77 |
77 |
78 quotient_definition rel where "rel :: 'a set => ('a * 'a) set => 'a rel" is rel_raw done |
78 quotient_definition rel where "rel :: 'a set => ('a * 'a) set => 'a rel" is rel_raw done |
79 |
79 |
80 subsubsection {* Constant definitions on relations *} |
80 subsubsection {* Constant definitions on relations *} |
81 |
81 |
82 hide_const (open) converse rel_comp rtrancl Image |
82 hide_const (open) converse relcomp rtrancl Image |
83 |
83 |
84 quotient_definition member :: "'a * 'a => 'a rel => bool" where |
84 quotient_definition member :: "'a * 'a => 'a rel => bool" where |
85 "member" is "Set.member :: 'a * 'a => ('a * 'a) set => bool" done |
85 "member" is "Set.member :: 'a * 'a => ('a * 'a) set => bool" done |
86 |
86 |
87 quotient_definition converse :: "'a rel => 'a rel" |
87 quotient_definition converse :: "'a rel => 'a rel" |
90 |
90 |
91 quotient_definition union :: "'a rel => 'a rel => 'a rel" |
91 quotient_definition union :: "'a rel => 'a rel => 'a rel" |
92 where |
92 where |
93 "union" is "Set.union :: ('a * 'a) set => ('a * 'a) set => ('a * 'a) set" done |
93 "union" is "Set.union :: ('a * 'a) set => ('a * 'a) set => ('a * 'a) set" done |
94 |
94 |
95 quotient_definition rel_comp :: "'a rel => 'a rel => 'a rel" |
95 quotient_definition relcomp :: "'a rel => 'a rel => 'a rel" |
96 where |
96 where |
97 "rel_comp" is "Relation.rel_comp :: ('a * 'a) set => ('a * 'a) set => ('a * 'a) set" done |
97 "relcomp" is "Relation.relcomp :: ('a * 'a) set => ('a * 'a) set => ('a * 'a) set" done |
98 |
98 |
99 quotient_definition rtrancl :: "'a rel => 'a rel" |
99 quotient_definition rtrancl :: "'a rel => 'a rel" |
100 where |
100 where |
101 "rtrancl" is "Transitive_Closure.rtrancl :: ('a * 'a) set => ('a * 'a) set" done |
101 "rtrancl" is "Transitive_Closure.rtrancl :: ('a * 'a) set => ('a * 'a) set" done |
102 |
102 |
119 lemma [code]: |
119 lemma [code]: |
120 "union (rel X R) (rel Y S) = rel (X Un Y) (R Un S)" |
120 "union (rel X R) (rel Y S) = rel (X Un Y) (R Un S)" |
121 by (lifting union_raw) |
121 by (lifting union_raw) |
122 |
122 |
123 lemma [code]: |
123 lemma [code]: |
124 "rel_comp (rel X R) (rel Y S) = rel (X Int Y) (Set.project (%(x, y). y : Y) R Un (Set.project (%(x, y). x : X) S Un R O S))" |
124 "relcomp (rel X R) (rel Y S) = rel (X Int Y) (Set.project (%(x, y). y : Y) R Un (Set.project (%(x, y). x : X) S Un R O S))" |
125 by (lifting rel_comp_raw) |
125 by (lifting relcomp_raw) |
126 |
126 |
127 lemma [code]: |
127 lemma [code]: |
128 "rtrancl (rel X R) = rel UNIV (R^+)" |
128 "rtrancl (rel X R) = rel UNIV (R^+)" |
129 by (lifting rtrancl_raw) |
129 by (lifting rtrancl_raw) |
130 |
130 |