wenzelm@28573
|
1 |
#!/usr/bin/env perl
|
wenzelm@28573
|
2 |
#
|
wenzelm@28573
|
3 |
# Wrapper for custom remote provers on SystemOnTPTP
|
wenzelm@28573
|
4 |
# Author: Fabian Immler, TU Muenchen
|
wenzelm@28573
|
5 |
#
|
wenzelm@28573
|
6 |
|
wenzelm@28573
|
7 |
use warnings;
|
wenzelm@28573
|
8 |
use strict;
|
wenzelm@28573
|
9 |
use Getopt::Std;
|
wenzelm@28573
|
10 |
use HTTP::Request::Common;
|
immler@29590
|
11 |
use LWP;
|
wenzelm@28573
|
12 |
|
wenzelm@28573
|
13 |
my $SystemOnTPTPFormReplyURL = "http://www.cs.miami.edu/~tptp/cgi-bin/SystemOnTPTPFormReply";
|
wenzelm@28573
|
14 |
|
immler@29590
|
15 |
# default parameters
|
wenzelm@28573
|
16 |
my %URLParameters = (
|
wenzelm@28573
|
17 |
"NoHTML" => 1,
|
wenzelm@28573
|
18 |
"QuietFlag" => "-q01",
|
wenzelm@28573
|
19 |
"X2TPTP" => "-S",
|
wenzelm@28573
|
20 |
"SubmitButton" => "RunSelectedSystems",
|
wenzelm@28573
|
21 |
"ProblemSource" => "UPLOAD",
|
immler@29590
|
22 |
);
|
immler@29590
|
23 |
|
immler@29590
|
24 |
#----Get format and transform options if specified
|
immler@29590
|
25 |
my %Options;
|
immler@29590
|
26 |
getopts("hws:t:c:",\%Options);
|
immler@29590
|
27 |
|
immler@29590
|
28 |
#----Usage
|
immler@30874
|
29 |
sub usage() {
|
immler@30874
|
30 |
print("Usage: remote [<options>] <File name>\n");
|
immler@30874
|
31 |
print(" <options> are ...\n");
|
immler@30874
|
32 |
print(" -h - print this help\n");
|
immler@30874
|
33 |
print(" -w - list available ATP systems\n");
|
immler@30874
|
34 |
print(" -s<system> - specified system to use\n");
|
immler@30874
|
35 |
print(" -t<timelimit> - CPU time limit for system\n");
|
immler@30874
|
36 |
print(" -c<command> - custom command for system\n");
|
immler@30874
|
37 |
print(" <File name> - TPTP problem file\n");
|
immler@30874
|
38 |
exit(0);
|
immler@30874
|
39 |
}
|
immler@29590
|
40 |
if (exists($Options{'h'})) {
|
immler@30874
|
41 |
usage();
|
immler@29590
|
42 |
}
|
immler@29590
|
43 |
#----What systems flag
|
immler@29590
|
44 |
if (exists($Options{'w'})) {
|
immler@29590
|
45 |
$URLParameters{"SubmitButton"} = "ListSystems";
|
immler@29590
|
46 |
delete($URLParameters{"ProblemSource"});
|
immler@29590
|
47 |
}
|
immler@29590
|
48 |
#----Selected system
|
immler@29590
|
49 |
my $System;
|
immler@29590
|
50 |
if (exists($Options{'s'})) {
|
immler@29590
|
51 |
$System = $Options{'s'};
|
immler@29590
|
52 |
} else {
|
immler@29590
|
53 |
# use Vampire as default
|
immler@29590
|
54 |
$System = "Vampire---9.0";
|
immler@29590
|
55 |
}
|
immler@29590
|
56 |
$URLParameters{"System___$System"} = $System;
|
immler@29590
|
57 |
|
immler@29590
|
58 |
#----Time limit
|
immler@29590
|
59 |
if (exists($Options{'t'})) {
|
immler@29590
|
60 |
$URLParameters{"TimeLimit___$System"} = $Options{'t'};
|
immler@29590
|
61 |
}
|
immler@29590
|
62 |
#----Custom command
|
immler@29590
|
63 |
if (exists($Options{'c'})) {
|
immler@29590
|
64 |
$URLParameters{"Command___$System"} = $Options{'c'};
|
immler@29590
|
65 |
}
|
immler@29590
|
66 |
|
immler@29590
|
67 |
#----Get single file name
|
immler@29590
|
68 |
if (exists($URLParameters{"ProblemSource"})) {
|
immler@29590
|
69 |
if (scalar(@ARGV) >= 1) {
|
immler@29590
|
70 |
$URLParameters{"UPLOADProblem"} = [shift(@ARGV)];
|
immler@29590
|
71 |
} else {
|
immler@30874
|
72 |
print("Missing problem file\n");
|
immler@30874
|
73 |
usage();
|
immler@30874
|
74 |
die;
|
immler@29590
|
75 |
}
|
immler@29590
|
76 |
}
|
wenzelm@28573
|
77 |
|
wenzelm@28573
|
78 |
# Query Server
|
wenzelm@28573
|
79 |
my $Agent = LWP::UserAgent->new;
|
immler@29590
|
80 |
if (exists($Options{'t'})) {
|
immler@29590
|
81 |
# give server more time to respond
|
immler@30534
|
82 |
$Agent->timeout($Options{'t'} + 10);
|
immler@29590
|
83 |
}
|
wenzelm@28573
|
84 |
my $Request = POST($SystemOnTPTPFormReplyURL,
|
wenzelm@28573
|
85 |
Content_Type => 'form-data',Content => \%URLParameters);
|
wenzelm@28573
|
86 |
my $Response = $Agent->request($Request);
|
immler@29590
|
87 |
|
immler@29590
|
88 |
#catch errors / failure
|
immler@29590
|
89 |
if(! $Response->is_success){
|
immler@30535
|
90 |
print "HTTP-Error: " . $Response->message . "\n";
|
immler@30535
|
91 |
exit(-1);
|
immler@29590
|
92 |
} elsif (exists($Options{'w'})) {
|
immler@29590
|
93 |
print $Response->content;
|
immler@29590
|
94 |
exit (0);
|
immler@29590
|
95 |
} elsif ($Response->content =~ /WARNING: (\S*) does not exist/) {
|
immler@29590
|
96 |
print "Specified System $1 does not exist\n";
|
immler@29590
|
97 |
exit(-1);
|
immler@30874
|
98 |
} elsif ($Response->content =~ /%\s*Result\s*:\s*Unsatisfiable.*\n%\s*Output\s*:\s*(CNF)?Refutation.*\n%/) {
|
immler@30874
|
99 |
my @lines = split( /\n/, $Response->content);
|
immler@30874
|
100 |
my $extract = "";
|
immler@30874
|
101 |
foreach my $line (@lines){
|
immler@30874
|
102 |
#ignore comments
|
immler@30874
|
103 |
if ($line !~ /^%/ && !($line eq "")) {
|
immler@30874
|
104 |
$extract .= "$line";
|
immler@30874
|
105 |
}
|
immler@30874
|
106 |
}
|
immler@30874
|
107 |
# insert newlines after ').'
|
immler@30874
|
108 |
$extract =~ s/\s//g;
|
immler@30874
|
109 |
$extract =~ s/\)\.cnf/\)\.\ncnf/g;
|
immler@30874
|
110 |
|
immler@30874
|
111 |
# orientation for res_reconstruct.ML
|
immler@30874
|
112 |
print "# SZS output start CNFRefutation.\n";
|
immler@30874
|
113 |
print "$extract\n";
|
immler@30874
|
114 |
print "# SZS output end CNFRefutation.\n";
|
immler@30874
|
115 |
exit(0);
|
immler@30874
|
116 |
} else {
|
immler@30874
|
117 |
print "Remote-script could not extract proof:\n".$Response->content;
|
immler@29590
|
118 |
exit(-1);
|
wenzelm@28573
|
119 |
}
|
wenzelm@28573
|
120 |
|