85 -> (unit -> (string * real) list) -> string, |
85 -> (unit -> (string * real) list) -> string, |
86 proof_delims : (string * string) list, |
86 proof_delims : (string * string) list, |
87 known_failures : (failure * string) list, |
87 known_failures : (failure * string) list, |
88 conj_sym_kind : formula_kind, |
88 conj_sym_kind : formula_kind, |
89 prem_kind : formula_kind, |
89 prem_kind : formula_kind, |
90 best_slices : |
90 best_slices : Proof.context -> (real * (bool * (slice_spec * string))) list} |
91 Proof.context |
|
92 -> (real * (bool * ((int * atp_format * string * string) * string))) list} |
|
93 |
91 |
94 (* "best_slices" must be found empirically, taking a wholistic approach since |
92 (* "best_slices" must be found empirically, taking a wholistic approach since |
95 the ATPs are run in parallel. The "real" component gives the faction of the |
93 the ATPs are run in parallel. The "real" component gives the faction of the |
96 time available given to the slice and should add up to 1.0. The "bool" |
94 time available given to the slice and should add up to 1.0. The first "bool" |
97 component indicates whether the slice's strategy is complete; the "int", the |
95 component indicates whether the slice's strategy is complete; the "int", the |
98 preferred number of facts to pass; the first "string", the preferred type |
96 preferred number of facts to pass; the first "string", the preferred type |
99 system (which should be sound or quasi-sound); the second "string", the |
97 system (which should be sound or quasi-sound); the second "string", the |
100 preferred lambda translation scheme; the third "string", extra information to |
98 preferred lambda translation scheme; the second "bool", whether uncurried |
|
99 aliased should be generated; the third "string", extra information to |
101 the prover (e.g., SOS or no SOS). |
100 the prover (e.g., SOS or no SOS). |
102 |
101 |
103 The last slice should be the most "normal" one, because it will get all the |
102 The last slice should be the most "normal" one, because it will get all the |
104 time available if the other slices fail early and also because it is used if |
103 time available if the other slices fail early and also because it is used if |
105 slicing is disabled (e.g., by the minimizer). *) |
104 slicing is disabled (e.g., by the minimizer). *) |
246 prem_kind = Conjecture, |
245 prem_kind = Conjecture, |
247 best_slices = fn ctxt => |
246 best_slices = fn ctxt => |
248 let val method = effective_e_weight_method ctxt in |
247 let val method = effective_e_weight_method ctxt in |
249 (* FUDGE *) |
248 (* FUDGE *) |
250 if method = e_smartN then |
249 if method = e_smartN then |
251 [(0.333, (true, ((500, FOF, "mono_tags??", combsN), e_fun_weightN))), |
250 [(0.333, (true, ((500, FOF, "mono_tags??", combsN, false), |
252 (0.334, (true, ((50, FOF, "mono_guards??", combsN), e_fun_weightN))), |
251 e_fun_weightN))), |
253 (0.333, (true, ((1000, FOF, "mono_tags??", combsN), |
252 (0.334, (true, ((50, FOF, "mono_guards??", combsN, false), |
|
253 e_fun_weightN))), |
|
254 (0.333, (true, ((1000, FOF, "mono_tags??", combsN, false), |
254 e_sym_offset_weightN)))] |
255 e_sym_offset_weightN)))] |
255 else |
256 else |
256 [(1.0, (true, ((500, FOF, "mono_tags??", combsN), method)))] |
257 [(1.0, (true, ((500, FOF, "mono_tags??", combsN, false), method)))] |
257 end} |
258 end} |
258 |
259 |
259 val e = (eN, e_config) |
260 val e = (eN, e_config) |
260 |
261 |
261 |
262 |
276 [(TimedOut, "CPU time limit exceeded, terminating")], |
277 [(TimedOut, "CPU time limit exceeded, terminating")], |
277 conj_sym_kind = Axiom, |
278 conj_sym_kind = Axiom, |
278 prem_kind = Hypothesis, |
279 prem_kind = Hypothesis, |
279 best_slices = fn ctxt => |
280 best_slices = fn ctxt => |
280 (* FUDGE *) |
281 (* FUDGE *) |
281 [(0.667, (false, ((150, leo2_thf0, "mono_simple_higher", liftingN), |
282 [(0.667, (false, ((150, leo2_thf0, "mono_simple_higher", liftingN, false), |
282 sosN))), |
283 sosN))), |
283 (0.333, (true, ((50, leo2_thf0, "mono_simple_higher", liftingN), |
284 (0.333, (true, ((50, leo2_thf0, "mono_simple_higher", liftingN, false), |
284 no_sosN)))] |
285 no_sosN)))] |
285 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
286 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
286 else I)} |
287 else I)} |
287 |
288 |
288 val leo2 = (leo2N, leo2_config) |
289 val leo2 = (leo2N, leo2_config) |
336 (InternalError, "Please report this error")], |
337 (InternalError, "Please report this error")], |
337 conj_sym_kind = Hypothesis, |
338 conj_sym_kind = Hypothesis, |
338 prem_kind = Conjecture, |
339 prem_kind = Conjecture, |
339 best_slices = fn ctxt => |
340 best_slices = fn ctxt => |
340 (* FUDGE *) |
341 (* FUDGE *) |
341 [(0.333, (false, ((150, DFG DFG_Unsorted, "mono_tags??", liftingN), |
342 [(0.333, (false, ((150, DFG DFG_Unsorted, "mono_tags??", liftingN, false), |
342 sosN))), |
343 sosN))), |
343 (0.333, (false, ((300, DFG DFG_Unsorted, "poly_tags??", liftingN), |
344 (0.333, (false, ((300, DFG DFG_Unsorted, "poly_tags??", liftingN, false), |
344 sosN))), |
345 sosN))), |
345 (0.334, (false, ((50, DFG DFG_Unsorted, "mono_tags??", liftingN), |
346 (0.334, (false, ((50, DFG DFG_Unsorted, "mono_tags??", liftingN, false), |
346 no_sosN)))] |
347 no_sosN)))] |
347 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
348 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
348 else I)} |
349 else I)} |
349 |
350 |
350 val spass = (spassN, spass_config) |
351 val spass = (spassN, spass_config) |
351 |
352 |
352 val spass_new_macro_slice_1 = (300, DFG DFG_Sorted, "mono_simple", combsN) |
353 val spass_new_slice_1 = (300, DFG DFG_Sorted, "mono_simple", combsN, true) |
353 val spass_new_macro_slice_2 = (50, DFG DFG_Sorted, "mono_simple", combsN) |
354 val spass_new_slice_2 = (50, DFG DFG_Sorted, "mono_simple", combsN, true) |
354 val spass_new_macro_slice_3 = (150, DFG DFG_Sorted, "mono_simple", liftingN) |
355 val spass_new_slice_3 = (150, DFG DFG_Sorted, "mono_simple", liftingN, true) |
355 |
356 |
356 (* Experimental *) |
357 (* Experimental *) |
357 val spass_new_config : atp_config = |
358 val spass_new_config : atp_config = |
358 {exec = ("ISABELLE_ATP", "scripts/spass_new"), |
359 {exec = ("ISABELLE_ATP", "scripts/spass_new"), |
359 required_execs = |
360 required_execs = |
366 known_failures = #known_failures spass_config, |
367 known_failures = #known_failures spass_config, |
367 conj_sym_kind = #conj_sym_kind spass_config, |
368 conj_sym_kind = #conj_sym_kind spass_config, |
368 prem_kind = #prem_kind spass_config, |
369 prem_kind = #prem_kind spass_config, |
369 best_slices = fn _ => |
370 best_slices = fn _ => |
370 (* FUDGE *) |
371 (* FUDGE *) |
371 [(0.300, (true, (spass_new_macro_slice_1, ""))), |
372 [(0.300, (true, (spass_new_slice_1, ""))), |
372 (0.333, (true, (spass_new_macro_slice_2, ""))), |
373 (0.333, (true, (spass_new_slice_2, ""))), |
373 (0.333, (true, (spass_new_macro_slice_3, "")))]} |
374 (0.333, (true, (spass_new_slice_3, "")))]} |
374 |
375 |
375 val spass_new = (spass_newN, spass_new_config) |
376 val spass_new = (spass_newN, spass_new_config) |
376 |
377 |
377 |
378 |
378 (* Vampire *) |
379 (* Vampire *) |
408 conj_sym_kind = Conjecture, |
409 conj_sym_kind = Conjecture, |
409 prem_kind = Conjecture, |
410 prem_kind = Conjecture, |
410 best_slices = fn ctxt => |
411 best_slices = fn ctxt => |
411 (* FUDGE *) |
412 (* FUDGE *) |
412 (if is_old_vampire_version () then |
413 (if is_old_vampire_version () then |
413 [(0.333, (false, ((150, FOF, "poly_guards??", combs_or_liftingN), |
414 [(0.333, (false, ((150, FOF, "poly_guards??", combs_or_liftingN, false), |
414 sosN))), |
415 sosN))), |
415 (0.333, (false, ((500, FOF, "mono_tags??", combs_or_liftingN), sosN))), |
416 (0.333, (false, ((500, FOF, "mono_tags??", combs_or_liftingN, false), |
416 (0.334, (true, ((50, FOF, "mono_guards??", combs_or_liftingN), |
417 sosN))), |
|
418 (0.334, (true, ((50, FOF, "mono_guards??", combs_or_liftingN, false), |
417 no_sosN)))] |
419 no_sosN)))] |
418 else |
420 else |
419 [(0.333, (false, ((150, vampire_tff0, "poly_guards??", |
421 [(0.333, (false, ((150, vampire_tff0, "poly_guards??", |
420 combs_or_liftingN), sosN))), |
422 combs_or_liftingN, false), sosN))), |
421 (0.333, (false, ((500, vampire_tff0, "mono_simple", combs_or_liftingN), |
423 (0.333, (false, ((500, vampire_tff0, "mono_simple", combs_or_liftingN, |
422 sosN))), |
424 false), sosN))), |
423 (0.334, (true, ((50, vampire_tff0, "mono_simple", combs_or_liftingN), |
425 (0.334, (true, ((50, vampire_tff0, "mono_simple", combs_or_liftingN, |
424 no_sosN)))]) |
426 false), no_sosN)))]) |
425 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
427 |> (if Config.get ctxt force_sos then hd #> apfst (K 1.0) #> single |
426 else I)} |
428 else I)} |
427 |
429 |
428 val vampire = (vampireN, vampire_config) |
430 val vampire = (vampireN, vampire_config) |
429 |
431 |
441 known_failures = known_szs_status_failures, |
443 known_failures = known_szs_status_failures, |
442 conj_sym_kind = Hypothesis, |
444 conj_sym_kind = Hypothesis, |
443 prem_kind = Hypothesis, |
445 prem_kind = Hypothesis, |
444 best_slices = |
446 best_slices = |
445 (* FUDGE *) |
447 (* FUDGE *) |
446 K [(0.5, (false, ((250, z3_tff0, "mono_simple", combsN), ""))), |
448 K [(0.5, (false, ((250, z3_tff0, "mono_simple", combsN, false), ""))), |
447 (0.25, (false, ((125, z3_tff0, "mono_simple", combsN), ""))), |
449 (0.25, (false, ((125, z3_tff0, "mono_simple", combsN, false), ""))), |
448 (0.125, (false, ((62, z3_tff0, "mono_simple", combsN), ""))), |
450 (0.125, (false, ((62, z3_tff0, "mono_simple", combsN, false), ""))), |
449 (0.125, (false, ((31, z3_tff0, "mono_simple", combsN), "")))]} |
451 (0.125, (false, ((31, z3_tff0, "mono_simple", combsN, false), "")))]} |
450 |
452 |
451 val z3_tptp = (z3_tptpN, z3_tptp_config) |
453 val z3_tptp = (z3_tptpN, z3_tptp_config) |
452 |
454 |
453 |
455 |
454 (* Not really a prover: Experimental Polymorphic TFF and THF output *) |
456 (* Not really a prover: Experimental Polymorphic TFF and THF output *) |
462 conj_sym_kind = Hypothesis, |
464 conj_sym_kind = Hypothesis, |
463 prem_kind = Hypothesis, |
465 prem_kind = Hypothesis, |
464 best_slices = |
466 best_slices = |
465 K [(1.0, (false, ((200, format, type_enc, |
467 K [(1.0, (false, ((200, format, type_enc, |
466 if is_format_higher_order format then keep_lamsN |
468 if is_format_higher_order format then keep_lamsN |
467 else combsN), "")))]} |
469 else combsN, false), "")))]} |
468 |
470 |
469 val dummy_tff1_format = TFF (TPTP_Polymorphic, TPTP_Explicit) |
471 val dummy_tff1_format = TFF (TPTP_Polymorphic, TPTP_Explicit) |
470 val dummy_tff1_config = dummy_config dummy_tff1_format "poly_simple" |
472 val dummy_tff1_config = dummy_config dummy_tff1_format "poly_simple" |
471 val dummy_tff1 = (dummy_tff1N, dummy_tff1_config) |
473 val dummy_tff1 = (dummy_tff1N, dummy_tff1_config) |
472 |
474 |
513 fun remote_config system_name system_versions proof_delims known_failures |
515 fun remote_config system_name system_versions proof_delims known_failures |
514 conj_sym_kind prem_kind best_slice : atp_config = |
516 conj_sym_kind prem_kind best_slice : atp_config = |
515 {exec = ("ISABELLE_ATP", "scripts/remote_atp"), |
517 {exec = ("ISABELLE_ATP", "scripts/remote_atp"), |
516 required_execs = [], |
518 required_execs = [], |
517 arguments = fn _ => fn _ => fn _ => fn timeout => fn _ => |
519 arguments = fn _ => fn _ => fn _ => fn timeout => fn _ => |
518 "-t " ^ string_of_int (Int.min (max_remote_secs, to_secs 1 timeout)) |
520 "-t " ^ string_of_int (Int.min (max_remote_secs, to_secs 1 timeout)) ^ |
519 ^ " -s " ^ the_system system_name system_versions, |
521 " -s " ^ the_system system_name system_versions, |
520 proof_delims = union (op =) tstp_proof_delims proof_delims, |
522 proof_delims = union (op =) tstp_proof_delims proof_delims, |
521 known_failures = known_failures @ known_perl_failures @ known_says_failures, |
523 known_failures = known_failures @ known_perl_failures @ known_says_failures, |
522 conj_sym_kind = conj_sym_kind, |
524 conj_sym_kind = conj_sym_kind, |
523 prem_kind = prem_kind, |
525 prem_kind = prem_kind, |
524 best_slices = fn ctxt => |
526 best_slices = fn ctxt => [(1.0, (false, (best_slice ctxt, "")))]} |
525 let val (max_relevant, format, type_enc, lam_trans) = best_slice ctxt in |
|
526 [(1.0, (false, ((max_relevant, format, type_enc, lam_trans), "")))] |
|
527 end} |
|
528 |
527 |
529 fun remotify_config system_name system_versions best_slice |
528 fun remotify_config system_name system_versions best_slice |
530 ({proof_delims, known_failures, conj_sym_kind, prem_kind, ...} |
529 ({proof_delims, known_failures, conj_sym_kind, prem_kind, ...} |
531 : atp_config) : atp_config = |
530 : atp_config) : atp_config = |
532 remote_config system_name system_versions proof_delims known_failures |
531 remote_config system_name system_versions proof_delims known_failures |
543 |
542 |
544 val explicit_tff0 = TFF (TPTP_Monomorphic, TPTP_Explicit) |
543 val explicit_tff0 = TFF (TPTP_Monomorphic, TPTP_Explicit) |
545 |
544 |
546 val remote_e = |
545 val remote_e = |
547 remotify_atp e "EP" ["1.0", "1.1", "1.2"] |
546 remotify_atp e "EP" ["1.0", "1.1", "1.2"] |
548 (K (750, FOF, "mono_tags??", combsN) (* FUDGE *)) |
547 (K (750, FOF, "mono_tags??", combsN, false) (* FUDGE *)) |
549 val remote_leo2 = |
548 val remote_leo2 = |
550 remotify_atp leo2 "LEO-II" ["1.2.8", "1.2.6"] |
549 remotify_atp leo2 "LEO-II" ["1.2.8", "1.2.6"] |
551 (K (100, leo2_thf0, "mono_simple_higher", liftingN) (* FUDGE *)) |
550 (K (100, leo2_thf0, "mono_simple_higher", liftingN, false) (* FUDGE *)) |
552 val remote_satallax = |
551 val remote_satallax = |
553 remotify_atp satallax "Satallax" ["2.1", "2.0", "2"] |
552 remotify_atp satallax "Satallax" ["2.1", "2.0", "2"] |
554 (K (100, satallax_thf0, "mono_simple_higher", keep_lamsN) (* FUDGE *)) |
553 (K (100, satallax_thf0, "mono_simple_higher", keep_lamsN, false) |
|
554 (* FUDGE *)) |
555 val remote_vampire = |
555 val remote_vampire = |
556 remotify_atp vampire "Vampire" ["1.8"] |
556 remotify_atp vampire "Vampire" ["1.8"] |
557 (K (250, FOF, "mono_guards??", combs_or_liftingN) (* FUDGE *)) |
557 (K (250, FOF, "mono_guards??", combs_or_liftingN, false) (* FUDGE *)) |
558 val remote_z3_tptp = |
558 val remote_z3_tptp = |
559 remotify_atp z3_tptp "Z3" ["3.0"] |
559 remotify_atp z3_tptp "Z3" ["3.0"] |
560 (K (250, z3_tff0, "mono_simple", combsN) (* FUDGE *)) |
560 (K (250, z3_tff0, "mono_simple", combsN, false) (* FUDGE *)) |
561 val remote_e_sine = |
561 val remote_e_sine = |
562 remote_atp e_sineN "SInE" ["0.4"] [] (#known_failures e_config) Axiom |
562 remote_atp e_sineN "SInE" ["0.4"] [] (#known_failures e_config) Axiom |
563 Conjecture (K (500, FOF, "mono_guards??", combsN) (* FUDGE *)) |
563 Conjecture (K (500, FOF, "mono_guards??", combsN, false) (* FUDGE *)) |
564 val remote_iprover = |
564 val remote_iprover = |
565 remote_atp iproverN "iProver" [] [] [] Axiom Conjecture |
565 remote_atp iproverN "iProver" [] [] [] Axiom Conjecture |
566 (K (150, FOF, "mono_guards??", liftingN) (* FUDGE *)) |
566 (K (150, FOF, "mono_guards??", liftingN, false) (* FUDGE *)) |
567 val remote_iprover_eq = |
567 val remote_iprover_eq = |
568 remote_atp iprover_eqN "iProver-Eq" [] [] [] Axiom Conjecture |
568 remote_atp iprover_eqN "iProver-Eq" [] [] [] Axiom Conjecture |
569 (K (150, FOF, "mono_guards??", liftingN) (* FUDGE *)) |
569 (K (150, FOF, "mono_guards??", liftingN, false) (* FUDGE *)) |
570 val remote_snark = |
570 val remote_snark = |
571 remote_atp snarkN "SNARK" ["20080805r029", "20080805r024"] |
571 remote_atp snarkN "SNARK" ["20080805r029", "20080805r024"] |
572 [("refutation.", "end_refutation.")] [] Hypothesis Hypothesis |
572 [("refutation.", "end_refutation.")] [] Hypothesis Hypothesis |
573 (K (100, explicit_tff0, "mono_simple", liftingN) (* FUDGE *)) |
573 (K (100, explicit_tff0, "mono_simple", liftingN, false) (* FUDGE *)) |
574 val remote_e_tofof = |
574 val remote_e_tofof = |
575 remote_atp e_tofofN "ToFoF" ["0.1"] [] (#known_failures e_config) Axiom |
575 remote_atp e_tofofN "ToFoF" ["0.1"] [] (#known_failures e_config) Axiom |
576 Hypothesis |
576 Hypothesis |
577 (K (150, explicit_tff0, "mono_simple", liftingN) (* FUDGE *)) |
577 (K (150, explicit_tff0, "mono_simple", liftingN, false) (* FUDGE *)) |
578 val remote_waldmeister = |
578 val remote_waldmeister = |
579 remote_atp waldmeisterN "Waldmeister" ["710"] |
579 remote_atp waldmeisterN "Waldmeister" ["710"] |
580 [("#START OF PROOF", "Proved Goals:")] |
580 [("#START OF PROOF", "Proved Goals:")] |
581 [(OutOfResources, "Too many function symbols"), |
581 [(OutOfResources, "Too many function symbols"), |
582 (Crashed, "Unrecoverable Segmentation Fault")] |
582 (Crashed, "Unrecoverable Segmentation Fault")] |
583 Hypothesis Hypothesis |
583 Hypothesis Hypothesis |
584 (K (50, CNF_UEQ, "mono_tags??", combsN) (* FUDGE *)) |
584 (K (50, CNF_UEQ, "mono_tags??", combsN, false) (* FUDGE *)) |
585 |
585 |
586 (* Setup *) |
586 (* Setup *) |
587 |
587 |
588 fun add_atp (name, config) thy = |
588 fun add_atp (name, config) thy = |
589 Data.map (Symtab.update_new (name, (config, stamp ()))) thy |
589 Data.map (Symtab.update_new (name, (config, stamp ()))) thy |