module F = Filename
module L = List
module P = Printf
-module S = String
+(* module S = String *)
module U = NUri
module R = NReference
module T = TeX
module O = TeXOutput
module A = Anticipate
+(* module M = Meta *)
module N = Alpha
type status = {
let malformed s =
X.error ("engine: malformed term: " ^ s)
-let missing s =
- X.log ("engine: missing macro for " ^ s)
+let missing s l =
+ X.log (P.sprintf "engine: missing macro for %s (%u)" s l)
(* generic term processing *)
let get_macro s l =
let rec aux = function
- | [] -> "", 0
+ | [] ->
+ if !G.log_missing then missing s l;
+ "", 0
| (r, m, a, x) :: _ when r = s && a = l -> m, x
| _ :: tl -> aux tl
in
let get_head = function
| C.Const c :: ts ->
let s, _ = K.resolve_reference c in
- let macro, x = get_macro s (L.length ts) in
- if macro <> "" then
- let ts1, ts2 = X.split_at x ts in
- Some (macro, s, ts1, ts2)
- else begin
- if !G.log_missing then missing s;
- None
+ let l = L.length ts in
+ let macro, x = get_macro s l in
+ begin match macro with
+ | ""
+ | "APPL" -> None
+ | _ ->
+ let ts1, ts2 = X.split_at x ts in
+ Some (macro, s, ts1, ts2)
end
| _ -> None
-let proc_sort st is = function
+let proc_sort _st is = function
| C.Prop -> T.Macro "PROP" :: is
| C.Type [`Type, u] -> T.Macro "TYPE" :: T.arg (U.string_of_uri u) :: is
| C.Type [`CProp, u] -> T.Macro "CROP" :: T.arg (U.string_of_uri u) :: is
proc_sort st is s
| C.Const c ->
let s, name = K.resolve_reference c in
- T.Macro "GREF" :: T.arg (mk_gname name) :: T.free s :: is
+ let macro, _ = get_macro s 0 in
+ if macro = "" || macro = "APPL" then
+ T.Macro "GREF" :: T.arg (mk_gname name) :: T.free s :: is
+ else
+ T.Macro macro :: T.free s :: is
| C.Match (w, u, v, ts) ->
let is_w = proc_term st [] (C.Const w) in
let is_u = proc_term st [] u in
let ris = T.Macro "STEP" :: mk_inferred st t ris in
let tts = L.rev_map (proc_term st []) rts in
mk_exit st (T.rev_mk_args tts ris)
- | C.Match (w, u, v, ts) ->
+ | C.Match (_w, _u, v, ts) ->
let rts = X.rev_neg_filter (K.not_prop2 st.c) [v] ts in
let ris = T.Macro "DEST" :: mk_inferred st t ris in
let tts = L.rev_map (proc_term st []) rts in
note :: T.Macro "begin" :: T.arg item :: T.arg (mk_gname s) :: T.free ss :: proc_term st is tt
let proc_top_proof s ss t =
+ if !G.no_proofs then [] else
let st = init ss in
let t0 = A.process_top_term s t in (* anticipation *)
let tt = N.process_top_term s t0 in (* alpha-conversion *)
open_out (F.concat !G.out_dir fname)
let proc_pair s ss u = function
- | None ->
+ | None ->
+ let text_u =
+ if K.not_prop1 [] u then proc_item "assumption"
+ else proc_item "axiom"
+ in
let name = X.rev_map_concat X.id "." "type" ss in
let och = open_out_tex name in
- O.out_text och (proc_item "axiom" s name u);
+ O.out_text och (text_u s name u);
close_out och
| Some t ->
let text_u, text_t =
O.out_text och (text_t s name t);
close_out och
-let proc_fun ss (r, s, i, u, t) =
+let proc_fun ss (_r, s, _i, u, t) =
proc_pair s (s :: ss) u (Some t)
-let proc_constructor ss (r, s, u) =
+let proc_constructor ss (_r, s, u) =
proc_pair s (s :: ss) u None
-let proc_type ss (r, s, u, cs) =
+let proc_type ss (_r, s, u, cs) =
proc_pair s (s :: ss) u None;
L.iter (proc_constructor ss) cs