src/Pure/sorts.ML
changeset 16399 0c9265f1ce31
parent 15570 8d8c70b41bab
child 16400 f2ab5797bbd0
equal deleted inserted replaced
16398:7f0faa30f602 16399:0c9265f1ce31
    17   type classes
    17   type classes
    18   type arities
    18   type arities
    19   val class_eq: classes -> class * class -> bool
    19   val class_eq: classes -> class * class -> bool
    20   val class_less: classes -> class * class -> bool
    20   val class_less: classes -> class * class -> bool
    21   val class_le: classes -> class * class -> bool
    21   val class_le: classes -> class * class -> bool
       
    22   val construct_dep: classes -> class * class list -> class list * class
    22   val sort_eq: classes -> sort * sort -> bool
    23   val sort_eq: classes -> sort * sort -> bool
    23   val sort_less: classes -> sort * sort -> bool
    24   val sort_less: classes -> sort * sort -> bool
    24   val sort_le: classes -> sort * sort -> bool
    25   val sort_le: classes -> sort * sort -> bool
    25   val sorts_le: classes -> sort list * sort list -> bool
    26   val sorts_le: classes -> sort list * sort list -> bool
    26   val inter_class: classes -> class * sort -> sort
    27   val inter_class: classes -> class * sort -> sort
   101 
   102 
   102 fun class_eq (_: classes) (c1, c2:class) = c1 = c2;
   103 fun class_eq (_: classes) (c1, c2:class) = c1 = c2;
   103 val class_less: classes -> class * class -> bool = Graph.is_edge;
   104 val class_less: classes -> class * class -> bool = Graph.is_edge;
   104 fun class_le classes (c1, c2) = c1 = c2 orelse class_less classes (c1, c2);
   105 fun class_le classes (c1, c2) = c1 = c2 orelse class_less classes (c1, c2);
   105 
   106 
       
   107 fun construct_dep classes (subc, supercs) =
       
   108   (hd o Library.flat) (map (fn superc =>
       
   109     map (fn path => (path, superc)) (Graph.find_paths classes (subc, superc))
       
   110   ) supercs)
   106 
   111 
   107 (* sorts *)
   112 (* sorts *)
   108 
   113 
   109 fun sort_le classes (S1, S2) =
   114 fun sort_le classes (S1, S2) =
   110   forall (fn c2 => exists  (fn c1 => class_le classes (c1, c2)) S1) S2;
   115   forall (fn c2 => exists  (fn c1 => class_le classes (c1, c2)) S1) S2;