src/HOL/Tools/res_lib.ML
author berghofe
Fri, 11 Feb 2005 18:51:00 +0100
changeset 15530 6f43714517ee
parent 15347 14585bc8fa09
child 15604 6fb06b768f67
permissions -rw-r--r--
Fully qualified refl and trans to avoid confusion with theorems in Lattice_Locales.partial_order.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     1
(*  Author: Jia Meng, Cambridge University Computer Laboratory
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     2
    ID: $Id$
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     3
    Copyright 2004 University of Cambridge
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     4
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     5
some frequently used functions by files in this directory.
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     6
*)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     7
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     8
signature RES_LIB =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     9
sig
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    10
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    11
val flat_noDup : ''a list list -> ''a list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    12
val list2str_sep : string -> string list -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    13
val list_to_string : string list -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    14
val list_to_string' : string list -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    15
val no_BDD : string -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    16
val no_blanks : string -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    17
val no_blanks_dots : string -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    18
val no_blanks_dots_dashes : string -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    19
val no_dots : string -> string
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    20
val no_rep_add : ''a -> ''a list -> ''a list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    21
val no_rep_app : ''a list -> ''a list -> ''a list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    22
val pair_ins : 'a -> 'b list -> ('a * 'b) list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    23
val rm_rep : ''a list -> ''a list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    24
val unzip : ('a * 'b) list -> 'a list * 'b list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    25
val write_strs : TextIO.outstream -> TextIO.vector list -> unit
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    26
val writeln_strs : TextIO.outstream -> TextIO.vector list -> unit
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    27
val zip : 'a list -> 'b list -> ('a * 'b) list
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    28
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    29
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    30
end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    31
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    32
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    33
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    34
structure ResLib : RES_LIB =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    35
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    36
struct
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    37
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    38
(*** convert a list of strings into one single string; surrounded by backets ***)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    39
fun list_to_string strings =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    40
    let fun str_of [s] = s 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    41
          | str_of (s1::ss) = s1 ^ "," ^ (str_of ss)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    42
          | str_of _ = ""
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    43
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    44
	"(" ^ str_of strings ^ ")"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    45
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    46
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    47
fun list_to_string' strings =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    48
    let fun str_of [s] = s 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    49
          | str_of (s1::ss) = s1 ^ "," ^ (str_of ss)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    50
          | str_of _ = ""
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    51
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    52
	"[" ^ str_of strings ^ "]"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    53
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    54
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    55
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    56
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    57
(*** remove some chars (not allowed by TPTP format) from a string ***)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    58
fun no_blanks " " = "_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    59
  | no_blanks c   = c;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    60
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    61
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    62
fun no_dots "." = "_dot_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    63
  | no_dots c   = c;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    64
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    65
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    66
fun no_blanks_dots " " = "_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    67
  | no_blanks_dots "." = "_dot_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    68
  | no_blanks_dots c   = c;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    69
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    70
fun no_blanks_dots_dashes " " = "_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    71
  | no_blanks_dots_dashes "." = "_dot_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    72
  | no_blanks_dots_dashes "'" = "_da_"
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    73
  | no_blanks_dots_dashes c   = c;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    74
    
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    75
fun no_BDD cs = implode (map no_blanks_dots_dashes (explode cs));
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    76
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    77
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    78
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    79
fun no_rep_add x [] = [x]
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    80
  | no_rep_add x (y :: z) = if (x = y) then (y :: z)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    81
                             else y :: (no_rep_add x z); 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    82
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    83
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    84
fun no_rep_app l1 [] = l1
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    85
  | no_rep_app l1 (x::y) = no_rep_app (no_rep_add x l1) y;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    86
 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    87
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    88
fun rm_rep [] = []
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    89
  | rm_rep (x::y) = if (x mem y) then rm_rep y else x::(rm_rep y);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    90
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    91
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    92
fun unzip [] = ([],[])
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    93
  | unzip ((x1,y1)::zs) = 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    94
    let val (xs,ys) = unzip zs
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    95
    in
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    96
        (x1::xs,y1::ys)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    97
    end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    98
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    99
fun zip [] [] = [] 
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   100
   | zip(x::xs) (y::ys) = (x,y)::(zip xs ys);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   101
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   102
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   103
fun flat_noDup [] = []
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   104
  | flat_noDup (x::y) = no_rep_app x (flat_noDup y);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   105
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   106
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   107
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   108
fun list2str_sep delim [] = delim
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   109
  | list2str_sep delim (s::ss) = (s ^ delim) ^ (list2str_sep delim ss);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   110
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   111
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   112
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   113
fun write_strs _ [] = ()
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   114
  | write_strs out (s::ss) = (TextIO.output(out,s);write_strs out ss);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   115
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   116
fun writeln_strs _ [] = ()
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   117
  | writeln_strs out (s::ss) = (TextIO.output(out,s);TextIO.output(out,"\n");writeln_strs out ss);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   118
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   119
(* pair the first argument with each of the element in the second input list *)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   120
fun pair_ins x [] = []
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   121
  | pair_ins x (y::ys) = (x,y) :: (pair_ins x ys);
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   122
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   123
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
   124
end;