src/HOL/Tools/Argo/argo_sat_solver.ML
author wenzelm
Wed, 04 Oct 2017 12:00:53 +0200
changeset 66787 64b47495676d
parent 63992 3aa9837d05c7
permissions -rw-r--r--
obsolete;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63992
3aa9837d05c7 updated headers;
wenzelm
parents: 63962
diff changeset
     1
(*  Title:      HOL/Tools/Argo/argo_sat_solver.ML
63962
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     2
    Author:     Sascha Boehme
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     3
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     4
A SAT solver based on the Argo solver.
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     5
This SAT solver produces models. For proofs use Argo_Tactic.prove instead.
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     6
*)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     7
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     8
structure Argo_SAT_Solver: sig end =
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
     9
struct
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    10
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    11
fun con_of i = (string_of_int i, Argo_Expr.Bool)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    12
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    13
fun expr_of Prop_Logic.True = Argo_Expr.true_expr
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    14
  | expr_of Prop_Logic.False = Argo_Expr.false_expr
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    15
  | expr_of (Prop_Logic.Not p) = Argo_Expr.mk_not (expr_of p)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    16
  | expr_of (Prop_Logic.Or (p1, p2)) = Argo_Expr.mk_or2 (expr_of p1) (expr_of p2)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    17
  | expr_of (Prop_Logic.And (p1, p2)) = Argo_Expr.mk_and2 (expr_of p1) (expr_of p2)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    18
  | expr_of (Prop_Logic.BoolVar i) = Argo_Expr.mk_con (con_of i)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    19
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    20
fun argo_solver p =
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    21
  let val argo = Argo_Solver.assert [expr_of p] Argo_Solver.context
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    22
  in SAT_Solver.SATISFIABLE (Argo_Solver.model_of argo o con_of) end
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    23
  handle Argo_Proof.UNSAT _ => SAT_Solver.UNSATISFIABLE NONE
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    24
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    25
val () = SAT_Solver.add_solver ("argo", argo_solver)
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    26
83a625d06e91 use argo as additional SAT solver with models but no proofs, since the proof trace formats are not easily translatable
boehmes
parents:
diff changeset
    27
end