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