src/HOLCF/ax_ops/thy_axioms.ML
author clasohm
Tue, 24 Oct 1995 14:45:35 +0100
changeset 1294 1358dc040edb
parent 1274 ea0668a1c0ba
child 3621 d3e248853428
permissions -rw-r--r--
added calls of init_html and make_chart; added usage of qed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     1
(*
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     2
    ID:         $Id$
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     3
    Author:     Tobias Mayr
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     4
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     5
Additional theory file section for HOLCF: axioms 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     6
There's an elaborate but german description of this program
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     7
and a short english description of the new sections,
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     8
write to mayrt@informatik.tu-muenchen.de.
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     9
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    10
TODO:
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    11
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    12
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    13
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    14
(*** new section of HOLCF : axioms 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    15
     since rules are already internally called axioms,
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    16
     the new section is internally called ext_axioms res. eaxms *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    17
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    18
signature THY_AXIOMS =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    19
sig
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    20
 (* theory extenders : *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    21
 val add_ext_axioms   : (string * string) list -> (string * string) list
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    22
                        -> (string * string) list -> theory -> theory;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    23
 val add_ext_axioms_i : (string * (typ option)) list -> 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    24
                        (string * (typ option)) list ->
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    25
                        (string * term) list -> theory -> theory;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    26
 val axioms_keywords    : string list;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    27
 val axioms_sections    : (string * (ThyParse.token list -> 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    28
                        (string * string) * ThyParse.token list)) list;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    29
end;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    30
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    31
structure ThyAxioms : THY_AXIOMS =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    32
struct
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    33
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    34
open HOLCFlogic;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    35
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    36
(** library ******************************************************)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    37
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    38
fun apsnd_of_three f = fn (a,b,c) => (a,f b,c);
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    39
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    40
fun is_elem e list = exists (fn y => e=y) list
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    41
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    42
fun without l1 l2 = (* l1 without the elements of l2 *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    43
  filter (fn x => (not (is_elem x l2))) l1;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    44
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    45
fun conc [e:string] = e
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    46
  | conc (head::tail) = head^", "^(conc tail)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    47
  | conc [] = "";
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    48
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    49
fun appear varlist = (* all (x,_) for which (x,_) is in varlist *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    50
  filter (fn x => (exists (fn y => (fst x)=(fst y)) varlist)) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    51
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    52
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    53
(* all non unique elements of a list *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    54
fun doubles (hd::tl) = if   (is_elem hd tl)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    55
                       then (hd::(doubles tl))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    56
                       else (doubles tl)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    57
  | doubles _ = [];
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    58
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    59
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    60
(* The main functions are the section parser ext_axiom_decls and the 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    61
   theory extender add_ext_axioms. *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    62
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    63
(** theory extender : add_ext_axioms *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    64
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    65
(* forms a function from constrained varnames to their constraints 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    66
   these constraints are then used local to each axiom, as an argument
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    67
   of read_def_cterm. Called by add_ext_axioms. *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    68
fun get_constraints_of_str sign ((vname,vtyp)::tail) = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    69
   if (vtyp <> "")
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    70
   then ((fn (x,_)=> if x=vname 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    71
                      then Some (#T (rep_ctyp (read_ctyp sign vtyp)))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    72
                      else raise Match)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    73
        orelf (get_constraints_of_str sign tail))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    74
   else (get_constraints_of_str sign tail)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    75
  | get_constraints_of_str sign [] = K None;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    76
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    77
(* does the same job for allready parsed optional constraints. 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    78
   Called by add_ext_axioms_i. *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    79
fun get_constraints_of_typ sign ((vname,vtyp)::tail) = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    80
   if (is_some vtyp)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    81
   then ((fn (x,_)=> if x=vname 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    82
                      then vtyp
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    83
                      else raise Match)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    84
        orelf (get_constraints_of_typ sign tail))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    85
   else (get_constraints_of_typ sign tail)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    86
  | get_constraints_of_typ sign [] = K None;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    87
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    88
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    89
(* applies mkNotEqUU_in on the axiom and every Free that appears in the list
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    90
   and in the axiom. Called by check_and_extend. *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    91
fun add_prem axiom [] = axiom
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    92
  | add_prem axiom (vname::tl) =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    93
 let val vterm = find_first (fn x => ((#1 o dest_Free) x = vname))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    94
                            (term_frees axiom)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    95
 in 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    96
   add_prem  
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    97
     (if (is_some vterm) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    98
      then mkNotEqUU_in (the vterm) axiom
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    99
      else axiom)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   100
     tl
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   101
 end
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   102
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   103
(* checks for uniqueness and completeness of var/defvar declarations, 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   104
   and enriches the axiom term with premises. Called by add_ext_axioms(_i).*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   105
fun check_and_extend sign defvarl varl axiom =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   106
  let
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   107
   val names_of_frees =  map (fst o dest_Free) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   108
                             (term_frees axiom);
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   109
   val all_decl_varnames = (defvarl @ varl);
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   110
   val undeclared = without names_of_frees all_decl_varnames;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   111
   val doubles = doubles all_decl_varnames
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   112
  in
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   113
   if (doubles <> [])
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   114
   then 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   115
    (error("Multiple declarations of one identifier in section axioms :\n"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   116
           ^(conc doubles)))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   117
   else ();
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   118
   if (undeclared <> [])
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   119
   then 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   120
    (error("Undeclared identifiers in section axioms : \n"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   121
           ^(conc undeclared)))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   122
   else (); 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   123
   add_prem axiom (rev defvarl)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   124
  end; 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   125
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   126
(* the next five only differ from the original add_axioms' subfunctions
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   127
   in the constraints argument for read_def_cterm *) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   128
local
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   129
 fun err_in_axm name =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   130
   error ("The error(s) above occurred in axiom " ^ quote name); 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   131
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   132
 fun no_vars tm =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   133
   if null (term_vars tm) andalso null (term_tvars tm) then tm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   134
   else error "Illegal schematic variable(s) in term"; 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   135
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   136
 fun read_ext_cterm sign constraints = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   137
   #1 o read_def_cterm (sign, constraints, K None) [] true;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   138
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   139
 (* only for add_ext_axioms (working on strings) *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   140
 fun read_ext_axm sg constraints (name,str) =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   141
   (name, no_vars (term_of (read_ext_cterm sg constraints (str, propT))))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   142
    handle ERROR => err_in_axm name;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   143
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   144
 (* only for add_ext_axioms_i (working on terms) *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   145
 fun read_ext_axm_terms sg constraints (name,term) =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   146
   (name, no_vars (#2(Sign.infer_types sg constraints  (K None) [] true 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   147
                                       ([term], propT))))
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   148
    handle ERROR => err_in_axm name;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   149
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   150
in
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   151
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   152
(******* THE THEORY EXTENDERS THEMSELVES *****)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   153
 fun add_ext_axioms varlist defvarlist axioms theory =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   154
  let val {sign, ...} = rep_theory theory;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   155
      val constraints = get_constraints_of_str sign (defvarlist@varlist)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   156
  in
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   157
    add_axioms_i (map (apsnd 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   158
     (check_and_extend sign (map fst defvarlist) (map fst varlist)) o
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   159
               (read_ext_axm sign constraints)) axioms) theory
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   160
  end 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   161
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   162
 fun add_ext_axioms_i varlist defvarlist axiom_terms theory =
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   163
  let val {sign, ...} = rep_theory theory;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   164
      val constraints = get_constraints_of_typ sign (defvarlist@varlist)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   165
  in
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   166
    add_axioms_i (map (apsnd (check_and_extend sign 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   167
                               (map fst defvarlist) (map fst varlist)) o
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   168
                   (read_ext_axm_terms sign constraints)) axiom_terms) theory
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   169
  end
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   170
end;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   171
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   172
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   173
(******** SECTION PARSER : ext_axiom_decls **********)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   174
local 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   175
 open ThyParse 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   176
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   177
 (* as in the pure section 'rules' : 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   178
    making the "val thmname = get_axiom thy thmname" list *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   179
 val mk_list_of_pairs = mk_big_list o map (mk_pair o apfst quote);
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   180
 fun mk_val ax = "val " ^ ax ^ " = get_axiom thy " ^ quote ax ^ ";";
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   181
 val mk_vals = cat_lines o map mk_val;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   182
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   183
 (* making the call for the theory extender *) 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   184
 fun mk_eaxms_decls ((vars,defvars),axms) = 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   185
     ( "|> ThyAxioms.add_ext_axioms \n  " ^ 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   186
       (mk_list_of_pairs vars) ^ "\n  " ^
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   187
       (mk_list_of_pairs defvars) ^ "\n  " ^
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   188
       (mk_list_of_pairs axms),
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   189
       mk_vals (map fst axms));
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   190
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   191
 (* parsing the concrete syntax *)    
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   192
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   193
 val axiom_decls = (repeat1 (ident -- !! string));
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   194
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   195
 val varlist = "vars" $$-- 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   196
                 repeat1 (ident -- optional ("::" $$-- string) "\"\"");
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   197
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   198
 val defvarlist = "defvars" $$-- 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   199
                    repeat1 (ident -- optional ("::" $$-- string) "\"\""); 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   200
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   201
in
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   202
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   203
 val ext_axiom_decls = (optional varlist []) -- (optional defvarlist [])
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   204
                         -- ("in" $$-- axiom_decls) >> mk_eaxms_decls;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   205
end; (* local *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   206
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   207
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   208
(**** new keywords and sections ************************************)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   209
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   210
val axioms_keywords = ["vars", "defvars","in"];
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   211
     (* "::" is already a pure keyword *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   212
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   213
val axioms_sections = [("axioms" , ext_axiom_decls)]
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   214
                       
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   215
end; (* the structure *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   216