245 $$ "'" |-- Scan.repeat (~$$ "'") --| $$ "'" |
245 $$ "'" |-- Scan.repeat (~$$ "'") --| $$ "'" |
246 >> implode >> repair_waldmeister_step_name |
246 >> implode >> repair_waldmeister_step_name |
247 || Scan.repeat ($$ "$") -- Scan.many1 Symbol.is_letdig |
247 || Scan.repeat ($$ "$") -- Scan.many1 Symbol.is_letdig |
248 >> (fn (ss1, ss2) => implode ss1 ^ implode ss2) |
248 >> (fn (ss1, ss2) => implode ss1 ^ implode ss2) |
249 |
249 |
250 val dummy_phi = AAtom (ATerm ("", [])) |
250 val skip_term = |
251 |
|
252 fun skip_formula ss = |
|
253 let |
251 let |
254 fun skip _ [] = [] |
252 fun skip _ accum [] = (accum, []) |
255 | skip 0 (ss as "," :: _) = ss |
253 | skip 0 accum (ss as "," :: _) = (accum, ss) |
256 | skip 0 (ss as ")" :: _) = ss |
254 | skip 0 accum (ss as ")" :: _) = (accum, ss) |
257 | skip 0 (ss as "]" :: _) = ss |
255 | skip 0 accum (ss as "]" :: _) = (accum, ss) |
258 | skip n ("(" :: ss) = skip (n + 1) ss |
256 | skip n accum ((s as "(") :: ss) = skip (n + 1) (s :: accum) ss |
259 | skip n ("[" :: ss) = skip (n + 1) ss |
257 | skip n accum ((s as "[") :: ss) = skip (n + 1) (s :: accum) ss |
260 | skip n ("]" :: ss) = skip (n - 1) ss |
258 | skip n accum ((s as "]") :: ss) = skip (n - 1) (s :: accum) ss |
261 | skip n (")" :: ss) = skip (n - 1) ss |
259 | skip n accum ((s as ")") :: ss) = skip (n - 1) (s :: accum) ss |
262 | skip n (_ :: ss) = skip n ss |
260 | skip n accum (s :: ss) = skip n (s :: accum) ss |
263 in (dummy_phi, skip 0 ss) end |
261 in skip 0 [] #>> (rev #> implode) end |
264 |
262 |
265 datatype source = |
263 datatype source = |
266 File_Source of string * string option | |
264 File_Source of string * string option | |
267 Inference_Source of string * string list |
265 Inference_Source of string * string list |
268 |
266 |
269 fun parse_dependencies x = |
267 val dummy_phi = AAtom (ATerm ("", [])) |
270 (scan_general_id ::: Scan.repeat ($$ "," |-- scan_general_id)) x |
268 val dummy_inference = Inference_Source ("", []) |
|
269 |
|
270 fun parse_dependencies x = (skip_term ::: Scan.repeat ($$ "," |-- skip_term)) x |
271 |
271 |
272 fun parse_source x = |
272 fun parse_source x = |
273 (Scan.this_string "file" |-- $$ "(" |-- scan_general_id -- |
273 (Scan.this_string "file" |-- $$ "(" |-- scan_general_id -- |
274 Scan.option ($$ "," |-- scan_general_id) --| $$ ")" |
274 Scan.option ($$ "," |-- scan_general_id) --| $$ ")" |
275 >> File_Source |
275 >> File_Source |
276 || Scan.this_string "inference" |-- $$ "(" |-- scan_general_id |
276 || Scan.this_string "inference" |-- $$ "(" |-- scan_general_id |
277 --| skip_formula --| $$ "," --| skip_formula --| $$ "," --| $$ "[" |
277 --| skip_term --| $$ "," --| skip_term --| $$ "," --| $$ "[" |
278 -- parse_dependencies --| $$ "]" --| $$ ")" |
278 -- parse_dependencies --| $$ "]" --| $$ ")" |
279 >> Inference_Source) x |
279 >> Inference_Source |
|
280 || skip_term >> K dummy_inference) x |
280 |
281 |
281 fun list_app (f, args) = |
282 fun list_app (f, args) = |
282 fold (fn arg => fn f => ATerm (tptp_app, [f, arg])) args f |
283 fold (fn arg => fn f => ATerm (tptp_app, [f, arg])) args f |
283 |
284 |
284 (* We ignore TFF and THF types for now. *) |
285 (* We ignore TFF and THF types for now. *) |
343 >> (fn ((q, ts), phi) => |
344 >> (fn ((q, ts), phi) => |
344 (* We ignore TFF and THF types for now. *) |
345 (* We ignore TFF and THF types for now. *) |
345 AQuant (q, map (rpair NONE o ho_term_head) ts, phi))) x |
346 AQuant (q, map (rpair NONE o ho_term_head) ts, phi))) x |
346 |
347 |
347 val parse_tstp_extra_arguments = |
348 val parse_tstp_extra_arguments = |
348 Scan.optional ($$ "," |-- parse_source |
349 Scan.optional ($$ "," |-- parse_source --| Scan.option ($$ "," |-- skip_term)) |
349 --| Scan.option ($$ "," |-- skip_formula)) |
350 dummy_inference |
350 (Inference_Source ("", [])) |
|
351 |
351 |
352 val waldmeister_conjecture = "conjecture_1" |
352 val waldmeister_conjecture = "conjecture_1" |
353 |
353 |
354 val tofof_fact_prefix = "fof_" |
354 val tofof_fact_prefix = "fof_" |
355 |
355 |
397 The <num> could be an identifier, but we assume integers. *) |
397 The <num> could be an identifier, but we assume integers. *) |
398 fun parse_tstp_line problem = |
398 fun parse_tstp_line problem = |
399 ((Scan.this_string tptp_cnf || Scan.this_string tptp_fof |
399 ((Scan.this_string tptp_cnf || Scan.this_string tptp_fof |
400 || Scan.this_string tptp_tff || Scan.this_string tptp_thf) -- $$ "(") |
400 || Scan.this_string tptp_tff || Scan.this_string tptp_thf) -- $$ "(") |
401 |-- scan_general_id --| $$ "," -- Symbol.scan_id --| $$ "," |
401 |-- scan_general_id --| $$ "," -- Symbol.scan_id --| $$ "," |
402 -- (parse_formula || skip_formula) -- parse_tstp_extra_arguments --| $$ ")" |
402 -- (parse_formula || skip_term >> K dummy_phi) -- parse_tstp_extra_arguments |
403 --| $$ "." |
403 --| $$ ")" --| $$ "." |
404 >> (fn (((num, role), phi), deps) => |
404 >> (fn (((num, role), phi), deps) => |
405 let |
405 let |
406 val (name, rule, deps) = |
406 val (name, rule, deps) = |
407 (* Waldmeister isn't exactly helping. *) |
407 (* Waldmeister isn't exactly helping. *) |
408 case deps of |
408 case deps of |