| Ast.Meta (index, substs) ->
sprintf "%d[%s]" index
(String.concat "; "
- (List.map (function None -> "_" | Some t -> pp_term t) substs))
+ (List.map (function None -> "?" | Some t -> pp_term t) substs))
| Ast.Num (num, _) -> num
| Ast.Sort `Set -> "Set"
| Ast.Sort `Prop -> "Prop"
let rec pp_cic_appl_pattern = function
| Ast.UriPattern uri -> UriManager.string_of_uri uri
| Ast.VarPattern name -> name
- | Ast.ImplicitPattern -> "_"
+ | Ast.ImplicitPattern -> "?"
| Ast.ApplPattern aps ->
sprintf "(%s)" (String.concat " " (List.map pp_cic_appl_pattern aps))
let anonymous_premise = C.Name "UNNAMED"
-let mk_exp_args hd tl classes synth =
+let mk_exp_args hd tl classes synth qs =
+ let exp = ref 0 in
let meta id = C.AImplicit (id, None) in
let map v (cl, b) =
- if I.overlaps synth cl && b then v else meta ""
+ if I.overlaps synth cl then
+ let w = if H.is_atomic (H.cic v) then v else meta "" in
+ if b then v, v else meta "", w
+ else
+ meta "", meta ""
in
- let rec aux b = function
- | [] -> b, []
+ let rec rev a = function
+ | [] -> a
| hd :: tl ->
- if hd = meta "" then aux true tl else b, List.rev (hd :: tl)
+ if snd hd <> meta "" then incr exp;
+ rev (snd hd :: a) tl
+ in
+ let rec aux = function
+ | [] -> []
+ | hd :: tl ->
+ if fst hd = meta "" then aux tl else rev [] (hd :: tl)
in
let args = T.list_rev_map2 map tl classes in
- let b, args = aux false args in
- if args = [] then b, hd else b, C.AAppl ("", hd :: args)
+ let args = aux args in
+ let part = !exp < List.length tl in
+ if args = [] then part, hd, qs else part, C.AAppl ("", hd :: args), qs
let mk_convert st ?name sty ety note =
let ppterm t =
let diff = goal_arity - decurry in
if diff < 0 then
let text = Printf.sprintf "partial application: %i" diff in
+ prerr_endline ("Procedural 2: " ^ text);
[T.Exact (what, dtext ^ text)]
else
let classes = Cl.adjust st.context tl ?goal classes in
in
if List.length qs <> List.length names then
let qs = proc_bkd_proofs (next st) synth [] classes tl in
- let b, hd = mk_exp_args hd tl classes synth in
+ let b, hd, qs = mk_exp_args hd tl classes synth qs in
script @ [tactic b hd (dtext ^ text); T.Branch (qs, "")]
else if is_rewrite_right st hd then
script2 @ mk_rewrite st dtext where qs tl2 false what ety
| _ ->
let names = get_sub_names hd tl in
let qs = proc_bkd_proofs (next st) synth names classes tl in
- let b, hd = mk_exp_args hd tl classes synth in
+ let b, hd, qs = mk_exp_args hd tl classes synth qs in
script @ [tactic b hd (dtext ^ text); T.Branch (qs, "")]
else
[T.Exact (what, dtext)]
| "default" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
| "include" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
| "inline" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
+ | "pump" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
| "qed" { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s }
| "elim" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
| "apply" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
| "intros" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
| "assume" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
| "the" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
+ | "rewrite" { let s = Lexing.lexeme lexbuf in out "PS" s; P.PS s }
| IDENT { let s = Lexing.lexeme lexbuf in out "ID" s; P.ID s }
| "." SPC { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s }
| "." { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s }