src/HOL/Tools/ATP/scripts/remote_atp
author blanchet
Thu, 27 Aug 2015 20:10:40 +0200
changeset 61029 b09461b3bc05
parent 60584 6ac3172985d4
child 68848 8825efd1c2cf
permissions -rwxr-xr-x
reverted 6ac3172985d4 -- the old URL has been restored
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     1
#!/usr/bin/env perl
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     2
#
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     3
# Wrapper for custom remote provers on SystemOnTPTP
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     4
# Author: Fabian Immler, TU Muenchen
38062
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
     5
# Author: Jasmin Blanchette, TU Muenchen
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     6
#
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     7
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     8
use warnings;
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
     9
use strict;
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    10
use Getopt::Std;
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    11
use HTTP::Request::Common;
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    12
use LWP;
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    13
31833
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    14
my $SystemOnTPTPFormReplyURL =
61029
b09461b3bc05 reverted 6ac3172985d4 -- the old URL has been restored
blanchet
parents: 60584
diff changeset
    15
  "http://www.cs.miami.edu/~tptp/cgi-bin/SystemOnTPTPFormReply";
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    16
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    17
# default parameters
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    18
my %URLParameters = (
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    19
    "NoHTML" => 1,
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    20
    "QuietFlag" => "-q01",
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    21
    "SubmitButton" => "RunSelectedSystems",
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    22
    "ProblemSource" => "UPLOAD",
32435
711d680eab26 New option ForceSystem that makes sure we *really* get the system we ask for
nipkow
parents: 32327
diff changeset
    23
    "ForceSystem" => "-force",
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    24
    );
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    25
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    26
#----Get format and transform options if specified
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    27
my %Options;
42970
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    28
getopts("hws:t:c:q:",\%Options);
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    29
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    30
#----Usage
30874
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    31
sub usage() {
38062
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    32
  print("Usage: remote_atp [<options>] <file_name>\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    33
  print("Options:\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    34
  print("    -h              print this help\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    35
  print("    -w              list available ATPs\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    36
  print("    -s<system>      ATP to use\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    37
  print("    -t<time_limit>  CPU time limit for ATP\n");
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    38
  print("    -c<command>     custom ATP invocation command\n");
42970
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    39
  print("    -q<num>         quietness level (0 = most verbose, 3 = least verbose)\n");
38062
a7c9cc973ca1 fiddled with usage text
blanchet
parents: 38061
diff changeset
    40
  print("    <file_name>     TPTP problem file\n");
30874
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    41
  exit(0);
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    42
}
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    43
if (exists($Options{'h'})) {
30874
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    44
  usage();
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    45
}
31833
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    46
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    47
#----What systems flag
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    48
if (exists($Options{'w'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    49
    $URLParameters{"SubmitButton"} = "ListSystems";
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    50
    delete($URLParameters{"ProblemSource"});
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    51
}
31833
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    52
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    53
#----X2TPTP
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    54
if (exists($Options{'x'})) {
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    55
    $URLParameters{"X2TPTP"} = "-S";
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    56
}
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
    57
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    58
#----Selected system
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    59
my $System;
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    60
if (exists($Options{'s'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    61
    $System = $Options{'s'};
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    62
} else {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    63
    # use Vampire as default
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    64
    $System = "Vampire---9.0";
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    65
}
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    66
$URLParameters{"System___$System"} = $System;
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    67
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    68
#----Time limit
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    69
if (exists($Options{'t'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    70
    $URLParameters{"TimeLimit___$System"} = $Options{'t'};
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    71
}
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    72
#----Custom command
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    73
if (exists($Options{'c'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    74
    $URLParameters{"Command___$System"} = $Options{'c'};
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    75
}
42970
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    76
#----Quietness
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    77
if (exists($Options{'q'})) {
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    78
    $URLParameters{"QuietFlag"} = "-q" . $Options{'q'};
05d1dc9fefdb added quietness flag
blanchet
parents: 39152
diff changeset
    79
}
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    80
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    81
#----Get single file name
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    82
if (exists($URLParameters{"ProblemSource"})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    83
    if (scalar(@ARGV) >= 1) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    84
        $URLParameters{"UPLOADProblem"} = [shift(@ARGV)];
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    85
    } else {
30874
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    86
      print("Missing problem file\n");
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    87
      usage();
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
    88
      die;
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    89
    }
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    90
}
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    91
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    92
# Query Server
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
    93
my $Agent = LWP::UserAgent->new;
39152
f09b378cb252 make remote ATP invocation work for those people who need to go through a proxy;
blanchet
parents: 38094
diff changeset
    94
$Agent->env_proxy;
46241
1a0b8f529b96 allow use of proxy for remote SMT solver invocations, just like in the "remote_atp" script
blanchet
parents: 43528
diff changeset
    95
$Agent->agent("Sledgehammer");
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    96
if (exists($Options{'t'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    97
  # give server more time to respond
43528
35f74aafc878 give slightly more time to server to respond, to avoid leaving too much garbage on Geoff's servers
blanchet
parents: 42970
diff changeset
    98
  $Agent->timeout($Options{'t'} + 15);
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
    99
}
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
   100
my $Request = POST($SystemOnTPTPFormReplyURL,
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
   101
	Content_Type => 'form-data',Content => \%URLParameters);
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
   102
my $Response = $Agent->request($Request);
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   103
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   104
#catch errors / failure
31833
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
   105
if(!$Response->is_success) {
38065
9069e1ad1527 improved ATP error handling some more
blanchet
parents: 38062
diff changeset
   106
  my $message = $Response->message;
9069e1ad1527 improved ATP error handling some more
blanchet
parents: 38062
diff changeset
   107
  $message =~ s/ \(Bad hostname ['"][^'"]*['"]\)//;
38094
d01b8119b2e0 better error and minimizer output
blanchet
parents: 38065
diff changeset
   108
  print "HTTP error: " . $message . "\n";
30535
db8b10fd51a4 show certain errors to the user
immler@in.tum.de
parents: 30534
diff changeset
   109
  exit(-1);
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   110
} elsif (exists($Options{'w'})) {
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   111
  print $Response->content;
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   112
  exit (0);
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   113
} elsif ($Response->content =~ /WARNING: (\S*) does not exist/) {
38065
9069e1ad1527 improved ATP error handling some more
blanchet
parents: 38062
diff changeset
   114
  print "The ATP \"$1\" is not available at SystemOnTPTP\n";
29590
479a2fce65e6 modified remote script;
immler@in.tum.de
parents: 29588
diff changeset
   115
  exit(-1);
38042
ef45bcccc9fd remove needless "-x" option, now that (1) we can't handle remote SPASS anymore; and (2) we can a priori parse the SPASS syntax in "Sledgehammer_Proof_Reconstruct" anyway
blanchet
parents: 38041
diff changeset
   116
} else {
31833
9ab1326ed98d use X2TPTP optionally and only for remote_spass;
immler@in.tum.de
parents: 30979
diff changeset
   117
  print $Response->content;
30874
34927a1e0ae8 reverted to explicitly check the presence of a refutation
immler@in.tum.de
parents: 30535
diff changeset
   118
  exit(0);
28573
6403f0e16269 ** Update from Fabian **
wenzelm
parents:
diff changeset
   119
}