From c1d00c21ca01d078b60ffb018924c48f90a74ce9 Mon Sep 17 00:00:00 2001 From: Guillaume Bury Date: Thu, 31 Aug 2017 15:07:20 +0200 Subject: [PATCH] First final draft of poster --- poster/poster.pdf | Bin 134147 -> 154392 bytes poster/poster.tex | 32 ++++++++++++++++++-------------- poster/solver_intf.ml | 9 +++++++++ poster/theory_intf.ml | 19 +++---------------- 4 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 poster/solver_intf.ml diff --git a/poster/poster.pdf b/poster/poster.pdf index 95b79850a55ef9abb553b9ad7ef40350c62e7bca..48ab576fc66e505121628d44caf1ab1fef327407 100644 GIT binary patch delta 37607 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 YeolWM#U#sPY;0y}%B8C6>hHz{09^b%=l}o! diff --git a/poster/poster.tex b/poster/poster.tex index 1d7057e5..20beecf4 100644 --- a/poster/poster.tex +++ b/poster/poster.tex @@ -7,8 +7,10 @@ \usepackage{verbatim} \usepackage{amsfonts, amsmath, amssymb, amsthm, dsfont} -\usepackage{listings} -\lstset{language=[Objective]Caml} +%\usepackage{listings} +%\lstset{language=[Objective]Caml} + +\usepackage{minted} \usepackage{bussproofs} \newcommand\typ[2]{\Gamma\vdash#1:#2} @@ -77,19 +79,22 @@ \item Imperative design \begin{itemize}[label=\checkmark] \item 2-watch litteral - \item Generative functors \item Backtrackable theories (less demanding than immutable theories) \end{itemize} \item Features \begin{itemize}[label=\checkmark] - \item Functorized design + \item Generative functors \item Local assumptions - \item Model output - \item Proof output (Coq, dot) + \item Model output and Proof output (Coq, dot) \end{itemize} \end{itemize} } +\cblock{Solver interface} +{ + \inputminted{ocaml}{solver_intf.ml} +} + \tblock{Other solvers} { \\ @@ -119,6 +124,11 @@ \includegraphics[height=33cm]{proof} } +\cblock{Theory interface} +{ + \inputminted{ocaml}{theory_intf.ml} +} + \tblock{Proof generation} { \begin{itemize}[label=\checkmark] @@ -127,7 +137,7 @@ \item Minimal impact on proof search (already done to compute unsat-core) \item Sufficient to rebuild the whole resolution tree - \item A proof is a clause and proof nodes are lazily expanded \\ + \item A proof is a clause and proof nodes are expanded on demand\\ $\rightarrow$ no memory issue \item Enables various proof output: \begin{itemize}[label=$\bullet$] @@ -143,23 +153,17 @@ solvers & aez & mSAT & \begin{tabular}{c}minisat\\(minisat/sattools)\end{tabular} & \begin{tabular}{c}cryptominisat\\(sattools)\end{tabular} \\ \hline uuf100 (1000 pbs) & 0.125 & 0.012 & 0.004 & 0.006 \\ \hline uuf125 (100 pbs) & 2.217 & 0.030 & 0.006 & 0.013 \\ \hline + uuf150 (100 pbs) & TODO & TODO & TODO & TODO \\ \hline pigeon/hole6 & 0.120 & 0.018 & 0.006 & 0.006 \\ \hline pigeon/hole7 & 4.257 & 0.213 & 0.015 & 0.073 \\ \hline pigeon/hole8 & 31.450 & 0.941 & 0.096 & 2.488 \\ \hline pigeon/hole9 & \begin{tabular}{c}timeout\\(600)\end{tabular} & 8.886 & 0.634 & 4.075 \\ \hline pigeon/hole10 & \begin{tabular}{c}timeout\\(600)\end{tabular} & 161.478 & \begin{tabular}{c}9.579 (minisat)\\160.376 (sattools)\end{tabular} & 72.050 \\ \hline \end{tabular} - \\ - \begin{center} - Done using https://github.com/Gbury/sat-bench. - \end{center} } \end{multicols} - -\Large \msat{} is available on \opam{} and on github: \texttt{https://github.com/Gbury/mSAT} - \end{center} \end{document} diff --git a/poster/solver_intf.ml b/poster/solver_intf.ml new file mode 100644 index 00000000..6ab240f3 --- /dev/null +++ b/poster/solver_intf.ml @@ -0,0 +1,9 @@ +module Make(Th: Theory_intf)() : sig + type 'f sat_state = { eval : 'f -> bool; ... } + type ('c,'p) unsat_state = + { conflict: unit -> 'c; proof : unit -> 'p } + type res = Sat of formula sat_state + | Unsat of (clause, proof) unsat_state + val assume : ?tag:int -> atom list list -> unit + val solve : ?assumptions:atom list -> unit -> res +end diff --git a/poster/theory_intf.ml b/poster/theory_intf.ml index 2283a5b7..db7c3e13 100644 --- a/poster/theory_intf.ml +++ b/poster/theory_intf.ml @@ -1,20 +1,7 @@ - -type ('formula, 'proof) res = - | Sat | Unsat of 'formula list * 'proof - -type ('form, 'proof) slice = { - start : int; - length : int; - get : int -> 'form; - push : 'form list -> 'proof -> unit; -} - +type ('f, 'p) res = Sat | Unsat of 'f list * 'p +type 'f slice = { start:int; length:int; get:int -> 'f } module type S = sig - val dummy : level val backtrack : level -> unit val current_level : unit -> level - val assume : (formula, proof) slice - -> (formula, proof) res - val if_sat : (formula, proof) slice - -> (formula, proof) res + val assume : formula slice -> (formula, proof) res end