| author | wenzelm | 
| Sun, 20 Nov 2011 16:59:37 +0100 | |
| changeset 45597 | ce23193a42a4 | 
| parent 32675 | 5fe601aff9be | 
| permissions | -rwxr-xr-x | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 1 | #!/usr/bin/perl -w | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 2 | # | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 3 | # eproof - run E and translate its output into TSTP format | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 4 | # | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 5 | # Author: Sascha Boehme, TU Muenchen | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 6 | # | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 7 | # This script is a port of a Bash script with the same name coming with | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 8 | # E 1.0-004 (written by Stephan Schulz). | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 9 | # | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 10 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 11 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 12 | use File::Basename qw/ dirname /; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 13 | use File::Temp qw/ tempfile /; | 
| 32675 | 14 | use English; | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 15 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 16 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 17 | # E executables | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 18 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 19 | my $edir = dirname($0); | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 20 | my $eprover = "$edir/eprover"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 21 | my $epclextract = "$edir/epclextract"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 22 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 23 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 24 | # build E command from given commandline arguments | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 25 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 26 | my $format = ""; | 
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 27 | my $timelimit = 2000000000; # effectively unlimited | 
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 28 | |
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 29 | my $eprover_cmd = "'$eprover'"; | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 30 | foreach (@ARGV) {
 | 
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 31 |   if (m/--cpu-limit=([0-9]+)/) {
 | 
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 32 | $timelimit = $1; | 
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 33 | } | 
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 34 | |
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 35 |   if (m/--tstp-out/) {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 36 | $format = $_; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 37 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 38 |   else {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 39 | $eprover_cmd = "$eprover_cmd '$_'"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 40 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 41 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 42 | $eprover_cmd = "$eprover_cmd -l4 -R -o- --pcl-terms-compressed --pcl-compact"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 43 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 44 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 45 | # run E, redirecting output into a temporary file | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 46 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 47 | my ($fh, $filename) = tempfile(UNLINK => 1); | 
| 32675 | 48 | my $r = system "$eprover_cmd > '$filename'"; | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 49 | exit ($r >> 8) if $r != 0; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 50 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 51 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 52 | # analyze E output | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 53 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 54 | my @lines = <$fh>; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 55 | my $content = join "", @lines[-60 .. -1]; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 56 | # Note: Like the original eproof, we only look at the last 60 lines. | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 57 | |
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 58 | if ($content =~ m/Total time\s*:\s*([0-9]+\.[0-9]+)/) {
 | 
| 32675 | 59 | $timelimit = int($timelimit - $1 - 1); | 
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 60 | |
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 61 |   if ($content =~ m/No proof found!/) {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 62 | print "# Problem is satisfiable (or invalid), " . | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 63 | "generating saturation derivation\n"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 64 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 65 |   elsif ($content =~ m/Proof found!/) {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 66 | print "# Problem is unsatisfiable (or provable), " . | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 67 | "constructing proof object\n"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 68 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 69 |   elsif ($content =~ m/Watchlist is empty!/) {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 70 | print "# All watchlist clauses generated, constructing derivation\n"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 71 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 72 |   else {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 73 | print "# Cannot determine problem status\n"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 74 | exit $r; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 75 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 76 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 77 | else {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 78 | print "# Cannot determine problem status within resource limit\n"; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 79 | exit $r; | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 80 | } | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 81 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 82 | |
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 83 | # translate E output | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 84 | |
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 85 | foreach (@lines) {
 | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 86 | print if (m/# SZS status/ or m/"# Failure"/); | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 87 | } | 
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 88 | $r = system ("exec bash -c \"ulimit -S -t $timelimit; " .
 | 
| 32675 | 89 | "'$epclextract' $format -f --competition-framing '$filename'\""); | 
| 32595 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 90 | # Note: Setting the user time is not supported on Cygwin, i.e., ulimit fails | 
| 
2953c3917e21
added time limit for extraction phase (not supported on Cygwin)
 boehmes parents: 
32593diff
changeset | 91 | # and prints and error message. How could we then limit the execution time? | 
| 32593 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 92 | exit ($r >> 8); | 
| 
3711565687a6
undo changes from revision 719426c9e1eb: removed Perl script for ATP invocation, measuring time using Bash-builtin "time";
 boehmes parents: diff
changeset | 93 |