src/HOL/Tools/ATP/watcher.ML
changeset 17435 0eed5a1c00c1
parent 17422 3b237822985d
child 17484 f6a225f97f0a
equal deleted inserted replaced
17434:c2efacfe8ab8 17435:0eed5a1c00c1
   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)