src/HOL/Tools/ATP/system_on_tptp.scala
author wenzelm
Sat, 13 Mar 2021 14:08:25 +0100
changeset 73422 fc7a0ea94c43
parent 73420 2c5d58e58fd2
child 73423 53cba4441cfb
permissions -rw-r--r--
support timeout, similar to perl LWP::UserAgent;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73418
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     1
/*  Title:      HOL/Tools/ATP/system_on_tptp.scala
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     3
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     4
Support for remote ATPs via SystemOnTPTP.
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     5
*/
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     6
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     7
package isabelle.atp
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     8
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
     9
import isabelle._
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    10
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    11
import java.net.URL
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    12
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    13
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    14
object SystemOnTPTP
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    15
{
73420
wenzelm
parents: 73419
diff changeset
    16
  /* requests */
wenzelm
parents: 73419
diff changeset
    17
73418
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    18
  def get_url(options: Options): URL = Url(options.string("SystemOnTPTP"))
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    19
73422
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    20
  def post_request(
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    21
    url: URL,
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    22
    parameters: List[(String, Any)],
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    23
    timeout: Time = HTTP.Client.default_timeout): HTTP.Content =
73420
wenzelm
parents: 73419
diff changeset
    24
  {
wenzelm
parents: 73419
diff changeset
    25
    val parameters0 =
73422
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    26
      List("NoHTML" -> 1, "QuietFlag" -> "-q01")
73420
wenzelm
parents: 73419
diff changeset
    27
        .filterNot(p0 => parameters.exists(p => p0._1 == p._1))
73422
fc7a0ea94c43 support timeout, similar to perl LWP::UserAgent;
wenzelm
parents: 73420
diff changeset
    28
    HTTP.Client.post(url, parameters0 ::: parameters, timeout = timeout, user_agent = "Sledgehammer")
73420
wenzelm
parents: 73419
diff changeset
    29
  }
wenzelm
parents: 73419
diff changeset
    30
wenzelm
parents: 73419
diff changeset
    31
wenzelm
parents: 73419
diff changeset
    32
  /* list systems */
wenzelm
parents: 73419
diff changeset
    33
wenzelm
parents: 73419
diff changeset
    34
  def proper_lines(content: HTTP.Content): List[String] =
wenzelm
parents: 73419
diff changeset
    35
    Library.trim_split_lines(content.text).filterNot(_.startsWith("%"))
73418
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    36
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    37
  def list_systems(url: URL): List[String] =
73420
wenzelm
parents: 73419
diff changeset
    38
    proper_lines(post_request(url, List("SubmitButton" -> "ListSystems", "ListStatus" -> "READY")))
73418
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    39
73419
22f3f2117ed7 clarified signature: function_thread is determined in Isabelle/Scala, not Isabelle/ML;
wenzelm
parents: 73418
diff changeset
    40
  object List_Systems extends Scala.Fun("SystemOnTPTP.list_systems", thread = true)
73418
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    41
  {
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    42
    val here = Scala_Project.here
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    43
    def apply(url: String): String = cat_lines(list_systems(Url(url)))
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    44
  }
7d7d959547a1 support for SystemOnTPTP in Isabelle/ML and Isabelle/Scala (without perl);
wenzelm
parents:
diff changeset
    45
}