612 status |
612 status |
613 end |
613 end |
614 |
614 |
615 |
615 |
616 fun createWatcher (thm,clause_arr, num_of_clauses) = |
616 fun createWatcher (thm,clause_arr, num_of_clauses) = |
617 let val mychild = childInfo (setupWatcher(thm,clause_arr, num_of_clauses)) |
617 let val (childpid,(childin,childout)) = |
618 val streams = snd mychild |
618 childInfo (setupWatcher(thm,clause_arr, num_of_clauses)) |
619 val childin = fst streams |
619 fun decr_watched() = |
620 val childout = snd streams |
620 (goals_being_watched := (!goals_being_watched) - 1; |
621 val childpid = fst mychild |
621 if !goals_being_watched = 0 |
|
622 then |
|
623 (File.append (File.tmp_path (Path.basic "reap_found")) |
|
624 ("Reaping a watcher, childpid = "^ |
|
625 LargeWord.toString (Posix.Process.pidToWord childpid)^"\n"); |
|
626 killWatcher childpid; reapWatcher (childpid,childin, childout); ()) |
|
627 else ()) |
622 val sign = sign_of_thm thm |
628 val sign = sign_of_thm thm |
623 val prems = prems_of thm |
629 val prems = prems_of thm |
624 val prems_string = Meson.concat_with_and (map (Sign.string_of_term sign) prems) |
630 val prems_string = Meson.concat_with_and (map (Sign.string_of_term sign) prems) |
625 val _ = debug ("subgoals forked to createWatcher: "^prems_string); |
631 val _ = debug ("subgoals forked to createWatcher: "^prems_string); |
626 (*FIXME: do we need an E proofHandler??*) |
632 (*FIXME: do we need an E proofHandler??*) |
627 fun vampire_proofHandler n = |
633 fun vampire_proofHandler n = |
628 (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
634 (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
629 VampComm.getVampInput childin; Pretty.writeln(Pretty.str (oct_char "361"))) |
635 VampComm.getVampInput childin; Pretty.writeln(Pretty.str (oct_char "361"))) |
637 in (* if a proof has been found and sent back as a reconstruction proof *) |
643 in (* if a proof has been found and sent back as a reconstruction proof *) |
638 if substring (reconstr, 0,1) = "[" |
644 if substring (reconstr, 0,1) = "[" |
639 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
645 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
640 Recon_Transfer.apply_res_thm reconstr goalstring; |
646 Recon_Transfer.apply_res_thm reconstr goalstring; |
641 Pretty.writeln(Pretty.str (oct_char "361")); |
647 Pretty.writeln(Pretty.str (oct_char "361")); |
642 |
648 decr_watched()) |
643 goals_being_watched := (!goals_being_watched) - 1; |
|
644 |
|
645 if !goals_being_watched = 0 |
|
646 then |
|
647 let val _ = File.write (File.tmp_path (Path.basic "reap_found")) |
|
648 ("Reaping a watcher, goals watched now "^ |
|
649 string_of_int (!goals_being_watched)^"\n") |
|
650 in |
|
651 killWatcher childpid; reapWatcher (childpid,childin, childout); () |
|
652 end |
|
653 else () ) |
|
654 (* if there's no proof, but a message from Spass *) |
649 (* if there's no proof, but a message from Spass *) |
655 else if substring (reconstr, 0,5) = "SPASS" |
650 else if substring (reconstr, 0,5) = "SPASS" |
656 then (goals_being_watched := (!goals_being_watched) -1; |
651 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
657 Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
|
658 Pretty.writeln(Pretty.str ((Recon_Transfer.restore_linebreaks goalstring)^reconstr)); |
652 Pretty.writeln(Pretty.str ((Recon_Transfer.restore_linebreaks goalstring)^reconstr)); |
659 Pretty.writeln(Pretty.str (oct_char "361")); |
653 Pretty.writeln(Pretty.str (oct_char "361")); |
660 if (!goals_being_watched = 0) |
654 decr_watched()) |
661 then (File.write (File.tmp_path (Path.basic "foo_reap_comp")) |
|
662 ("Reaping a watcher, goals watched is: " ^ |
|
663 (string_of_int (!goals_being_watched))^"\n"); |
|
664 killWatcher childpid; reapWatcher (childpid,childin, childout); ()) |
|
665 else () ) |
|
666 (* print out a list of rules used from clasimpset*) |
655 (* print out a list of rules used from clasimpset*) |
667 else if substring (reconstr, 0,5) = "Rules" |
656 else if substring (reconstr, 0,5) = "Rules" |
668 then (goals_being_watched := (!goals_being_watched) -1; |
657 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
669 Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
|
670 Pretty.writeln(Pretty.str (goalstring^reconstr)); |
658 Pretty.writeln(Pretty.str (goalstring^reconstr)); |
671 Pretty.writeln(Pretty.str (oct_char "361")); |
659 Pretty.writeln(Pretty.str (oct_char "361")); |
672 if (!goals_being_watched = 0) |
660 decr_watched()) |
673 then (File.write (File.tmp_path (Path.basic "foo_reap_comp")) |
|
674 ("Reaping a watcher, goals watched is: " ^ |
|
675 (string_of_int (!goals_being_watched))^"\n"); |
|
676 killWatcher childpid; reapWatcher (childpid,childin, childout);() |
|
677 ) |
|
678 else () ) |
|
679 (* if proof translation failed *) |
661 (* if proof translation failed *) |
680 else if substring (reconstr, 0,5) = "Proof" |
662 else if substring (reconstr, 0,5) = "Proof" |
681 then (goals_being_watched := (!goals_being_watched) -1; |
663 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
682 Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
|
683 Pretty.writeln(Pretty.str (goalstring^(Recon_Transfer.restore_linebreaks reconstr))); |
664 Pretty.writeln(Pretty.str (goalstring^(Recon_Transfer.restore_linebreaks reconstr))); |
684 Pretty.writeln(Pretty.str (oct_char "361")); |
665 Pretty.writeln(Pretty.str (oct_char "361")); |
685 if (!goals_being_watched = 0) |
666 decr_watched()) |
686 then (File.write (File.tmp_path (Path.basic "foo_reap_comp")) |
|
687 ("Reaping a watcher, goals watched is: " ^ |
|
688 (string_of_int (!goals_being_watched))^"\n"); |
|
689 killWatcher childpid; reapWatcher (childpid,childin, childout);() |
|
690 ) |
|
691 else () ) |
|
692 |
|
693 else if substring (reconstr, 0,1) = "%" |
667 else if substring (reconstr, 0,1) = "%" |
694 then (goals_being_watched := (!goals_being_watched) -1; |
668 then (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
695 Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
|
696 Pretty.writeln(Pretty.str (goalstring^(Recon_Transfer.restore_linebreaks reconstr))); |
669 Pretty.writeln(Pretty.str (goalstring^(Recon_Transfer.restore_linebreaks reconstr))); |
697 Pretty.writeln(Pretty.str (oct_char "361")); |
670 Pretty.writeln(Pretty.str (oct_char "361")); |
698 if (!goals_being_watched = 0) |
671 decr_watched()) |
699 then (File.write (File.tmp_path (Path.basic "foo_reap_comp")) |
|
700 ("Reaping a watcher, goals watched is: " ^ |
|
701 (string_of_int (!goals_being_watched))^"\n"); |
|
702 killWatcher childpid; reapWatcher (childpid,childin, childout);() |
|
703 ) |
|
704 else () ) |
|
705 |
|
706 else (* add something here ?*) |
672 else (* add something here ?*) |
707 (goals_being_watched := (!goals_being_watched) -1; |
673 (Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
708 Pretty.writeln(Pretty.str ( (concat[(oct_char "360"), (oct_char "377")]))); |
|
709 Pretty.writeln(Pretty.str ("Ran out of options in handler")); |
674 Pretty.writeln(Pretty.str ("Ran out of options in handler")); |
710 Pretty.writeln(Pretty.str (oct_char "361")); |
675 Pretty.writeln(Pretty.str (oct_char "361")); |
711 if (!goals_being_watched = 0) |
676 decr_watched()) |
712 then (File.write (File.tmp_path (Path.basic "foo_reap_comp")) |
|
713 ("Reaping a watcher, goals watched is: " ^ |
|
714 (string_of_int (!goals_being_watched))^"\n"); |
|
715 killWatcher childpid; reapWatcher (childpid,childin, childout);() |
|
716 ) |
|
717 else () ) |
|
718 end) |
677 end) |
719 |
678 |
720 in IsaSignal.signal (IsaSignal.usr1, IsaSignal.SIG_HANDLE vampire_proofHandler); |
679 in IsaSignal.signal (IsaSignal.usr1, IsaSignal.SIG_HANDLE vampire_proofHandler); |
721 IsaSignal.signal (IsaSignal.usr2, IsaSignal.SIG_HANDLE spass_proofHandler); |
680 IsaSignal.signal (IsaSignal.usr2, IsaSignal.SIG_HANDLE spass_proofHandler); |
722 (childin, childout, childpid) |
681 (childin, childout, childpid) |