src/HOL/ex/Executable_Relation.thy
changeset 47435 e1b761c216ac
parent 47308 9caab698dbe4
parent 47433 07f4bf913230
child 47894 2c6454643be6
equal deleted inserted replaced
47326:b4490e1a0732 47435:e1b761c216ac
    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