contrib/SystemOnTPTP/remote
author wenzelm
Wed, 08 Apr 2009 20:29:15 +0200
changeset 30887 fde434961f57
parent 30874 34927a1e0ae8
permissions -rwxr-xr-x
Added tag isa2009-test for changeset dda08b76fa99
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