src/HOL/Tools/SMT/cvc4_proof_parse.ML
author wenzelm
Wed, 04 Oct 2017 12:00:53 +0200
changeset 66787 64b47495676d
parent 60201 90e88e521e0e
child 75274 e89709b80b6e
permissions -rw-r--r--
obsolete;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     1
(*  Title:      HOL/Tools/SMT/cvc4_proof_parse.ML
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     2
    Author:     Jasmin Blanchette, TU Muenchen
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     3
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     4
CVC4 proof (actually, unsat core) parsing.
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     5
*)
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     6
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     7
signature CVC4_PROOF_PARSE =
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     8
sig
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
     9
  val parse_proof: SMT_Translate.replay_data ->
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    10
    ((string * ATP_Problem_Generate.stature) * thm) list -> term list -> term -> string list ->
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    11
    SMT_Solver.parsed_proof
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    12
end;
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    13
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    14
structure CVC4_Proof_Parse: CVC4_PROOF_PARSE =
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    15
struct
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    16
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    17
fun parse_proof ({ll_defs, assms, ...} : SMT_Translate.replay_data) xfacts prems _ output =
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    18
  if exists (String.isPrefix "(error \"This build of CVC4 doesn't have proof support") output then
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    19
    {outcome = NONE, fact_ids = NONE, atp_proof = K []}
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    20
  else
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    21
    let
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    22
      val num_ll_defs = length ll_defs
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    23
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    24
      val id_of_index = Integer.add num_ll_defs
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    25
      val index_of_id = Integer.add (~ num_ll_defs)
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    26
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    27
      val used_assert_ids = map_filter (try SMTLIB_Interface.assert_index_of_name) output
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    28
      val used_assm_js =
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    29
        map_filter (fn id => let val i = index_of_id id in if i >= 0 then SOME i else NONE end)
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    30
          used_assert_ids
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    31
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    32
      val conjecture_i = 0
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    33
      val prems_i = conjecture_i + 1
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    34
      val num_prems = length prems
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    35
      val facts_i = prems_i + num_prems
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    36
60201
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    37
      val fact_ids' =
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    38
        map_filter (fn j =>
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    39
          let val (i, _) = nth assms j in
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    40
            try (apsnd (nth xfacts)) (id_of_index j, i - facts_i)
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    41
          end) used_assm_js
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    42
    in
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    43
      {outcome = NONE, fact_ids = SOME fact_ids', atp_proof = K []}
90e88e521e0e made CVC4 support work also without unsat cores
blanchet
parents: 59015
diff changeset
    44
    end
59015
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    45
627a93f67182 parse CVC4 unsat cores
blanchet
parents:
diff changeset
    46
end;