src/Pure/General/set.ML
changeset 77814 53c5ad1a7ac0
parent 77813 622ba814e01c
child 77816 aa814dc5a685
equal deleted inserted replaced
77813:622ba814e01c 77814:53c5ad1a7ac0
    47   Leaf3 of elem * elem * elem |
    47   Leaf3 of elem * elem * elem |
    48   Branch2 of T * elem * T |
    48   Branch2 of T * elem * T |
    49   Branch3 of T * elem * T * elem * T |
    49   Branch3 of T * elem * T * elem * T |
    50   Size of int * T;
    50   Size of int * T;
    51 
    51 
    52 (*literal copy from table.ML*)
       
    53 fun make2 (Empty, e, Empty) = Leaf1 e
    52 fun make2 (Empty, e, Empty) = Leaf1 e
    54   | make2 (Branch2 (Empty, e1, Empty), e2, right) = make2 (Leaf1 e1, e2, right)
    53   | make2 (Branch2 (Empty, e1, Empty), e2, right) = make2 (Leaf1 e1, e2, right)
    55   | make2 (left, e1, Branch2 (Empty, e2, Empty)) = make2 (left, e1, Leaf1 e2)
    54   | make2 (left, e1, Branch2 (Empty, e2, Empty)) = make2 (left, e1, Leaf1 e2)
    56   | make2 (Branch3 (Empty, e1, Empty, e2, Empty), e3, right) = make2 (Leaf2 (e1, e2), e3, right)
    55   | make2 (Branch3 (Empty, e1, Empty, e2, Empty), e3, right) = make2 (Leaf2 (e1, e2), e3, right)
    57   | make2 (left, e1, Branch3 (Empty, e2, Empty, e3, Empty)) = make2 (left, e1, Leaf2 (e2, e3))
    56   | make2 (left, e1, Branch3 (Empty, e2, Empty, e3, Empty)) = make2 (left, e1, Leaf2 (e2, e3))
    60   | make2 (Leaf1 e1, e2, Leaf1 e3) = Leaf3 (e1, e2, e3)
    59   | make2 (Leaf1 e1, e2, Leaf1 e3) = Leaf3 (e1, e2, e3)
    61   | make2 (Leaf2 (e1, e2), e3, Empty) = Leaf3 (e1, e2, e3)
    60   | make2 (Leaf2 (e1, e2), e3, Empty) = Leaf3 (e1, e2, e3)
    62   | make2 (Empty, e1, Leaf2 (e2, e3)) = Leaf3 (e1, e2, e3)
    61   | make2 (Empty, e1, Leaf2 (e2, e3)) = Leaf3 (e1, e2, e3)
    63   | make2 arg = Branch2 arg;
    62   | make2 arg = Branch2 arg;
    64 
    63 
    65 (*literal copy from table.ML*)
       
    66 fun make3 (Empty, e1, Empty, e2, Empty) = Leaf2 (e1, e2)
    64 fun make3 (Empty, e1, Empty, e2, Empty) = Leaf2 (e1, e2)
    67   | make3 (Branch2 (Empty, e1, Empty), e2, mid, e3, right) = make3 (Leaf1 e1, e2, mid, e3, right)
    65   | make3 (Branch2 (Empty, e1, Empty), e2, mid, e3, right) = make3 (Leaf1 e1, e2, mid, e3, right)
    68   | make3 (left, e1, Branch2 (Empty, e2, Empty), e3, right) = make3 (left, e1, Leaf1 e2, e3, right)
    66   | make3 (left, e1, Branch2 (Empty, e2, Empty), e3, right) = make3 (left, e1, Leaf1 e2, e3, right)
    69   | make3 (left, e1, mid, e2, Branch2 (Empty, e3, Empty)) = make3 (left, e1, mid, e2, Leaf1 e3)
    67   | make3 (left, e1, mid, e2, Branch2 (Empty, e3, Empty)) = make3 (left, e1, mid, e2, Leaf1 e3)
    70   | make3 (Leaf1 e1, e2, Empty, e3, Empty) = Leaf3 (e1, e2, e3)
    68   | make3 (Leaf1 e1, e2, Empty, e3, Empty) = Leaf3 (e1, e2, e3)
    71   | make3 (Empty, e1, Leaf1 e2, e3, Empty) = Leaf3 (e1, e2, e3)
    69   | make3 (Empty, e1, Leaf1 e2, e3, Empty) = Leaf3 (e1, e2, e3)
    72   | make3 (Empty, e1, Empty, e2, Leaf1 e3) = Leaf3 (e1, e2, e3)
    70   | make3 (Empty, e1, Empty, e2, Leaf1 e3) = Leaf3 (e1, e2, e3)
    73   | make3 arg = Branch3 arg;
    71   | make3 arg = Branch3 arg;
    74 
    72 
    75 (*literal copy from table.ML*)
       
    76 fun unmake (Leaf1 e) = Branch2 (Empty, e, Empty)
    73 fun unmake (Leaf1 e) = Branch2 (Empty, e, Empty)
    77   | unmake (Leaf2 (e1, e2)) = Branch3 (Empty, e1, Empty, e2, Empty)
    74   | unmake (Leaf2 (e1, e2)) = Branch3 (Empty, e1, Empty, e2, Empty)
    78   | unmake (Leaf3 (e1, e2, e3)) =
    75   | unmake (Leaf3 (e1, e2, e3)) =
    79       Branch2 (Branch2 (Empty, e1, Empty), e2, Branch2 (Empty, e3, Empty))
    76       Branch2 (Branch2 (Empty, e1, Empty), e2, Branch2 (Empty, e3, Empty))
    80   | unmake (Size (_, arg)) = arg
    77   | unmake (Size (_, arg)) = arg
   339 
   336 
   340 fun if_equal ord x y = if is_equal ord then x else y;
   337 fun if_equal ord x y = if is_equal ord then x else y;
   341 
   338 
   342 exception UNDEF of elem;
   339 exception UNDEF of elem;
   343 
   340 
   344 (*literal copy from table.ML*)
       
   345 fun del (SOME k) Empty = raise UNDEF k
   341 fun del (SOME k) Empty = raise UNDEF k
   346   | del NONE Empty = raise Match
   342   | del NONE Empty = raise Match
   347   | del NONE (Leaf1 p) = (p, (true, Empty))
   343   | del NONE (Leaf1 p) = (p, (true, Empty))
   348   | del NONE (Leaf2 (p, q)) = (p, (false, Leaf1 q))
   344   | del NONE (Leaf2 (p, q)) = (p, (false, Leaf1 q))
   349   | del k (Leaf1 p) =
   345   | del k (Leaf1 p) =