123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134(* This file is free software. See file "license" for more details. *)typettype'aprinter=Format.formatter->'a->unitmoduleLit=structtypet=intlet[@inline]maken=assert(n>0);n+n+1let[@inline]negn=nlxor1let[@inline]absn=nland(max_int-1)letequal:t->t->bool=(=)letcompare:t->t->int=comparelet[@inline]hash(x:t):int=Hashtbl.hashxlet[@inline]apply_signsignt=ifsignthentelsenegtlet[@inline]signn=ifnland1=1thentrueelsefalselet[@inline]to_intn=nlsr1letto_stringx=(ifsignxthen""else"-")^string_of_int(to_intx)letppoutx=Format.pp_print_stringout(to_stringx)endtypeassumptions=Lit.tarraymoduleRaw=structexternalcreate:unit->t="caml_minisat_new"externaldelete:t->unit="caml_minisat_delete"externalensure_var:t->Lit.t->unit="caml_minisat_ensure_var"[@@noalloc]externaladd_clause_a:t->Lit.tarray->bool="caml_minisat_add_clause_a"[@@noalloc]externalsimplify:t->bool="caml_minisat_simplify"[@@noalloc]externalsolve:t->Lit.tarray->bool="caml_minisat_solve"externalnvars:t->int="caml_minisat_nvars"[@@noalloc]externalnclauses:t->int="caml_minisat_nclauses"[@@noalloc]externalnconflicts:t->int="caml_minisat_nconflicts"[@@noalloc]externalvalue:t->Lit.t->int="caml_minisat_value"[@@noalloc]externalvalue_level_0:t->Lit.t->int="caml_minisat_value_level_0"[@@noalloc]externalset_verbose:t->int->unit="caml_minisat_set_verbose"externalokay:t->bool="caml_minisat_okay"[@@noalloc]externalcore:t->Lit.tarray="caml_minisat_core"externalto_dimacs:t->string->unit="caml_minisat_to_dimacs"externalinterrupt:t->unit="caml_minisat_interrupt"[@@noalloc]externalclear_interrupt:t->unit="caml_minisat_clear_interrupt"[@@noalloc]endletcreate()=lets=Raw.create()inGc.finaliseRaw.deletes;sexceptionUnsatletokay=Raw.okayletcheck_ret_b=ifnotbthenraiseUnsatletensure_lit_existssl=Raw.ensure_varslletadd_clause_asa=Raw.add_clause_asa|>check_ret_letadd_clause_lslits=add_clause_as(Array.of_listlits)letpp_clauseoutl=Format.fprintfout"[@[<hv>";letfirst=reftrueinList.iter(funx->if!firstthenfirst:=falseelseFormat.fprintfout",@ ";Lit.ppoutx)l;Format.fprintfout"@]]"letsimplifys=Raw.simplifys|>check_ret_letsolve?(assumptions=[||])s=Raw.solvesassumptions|>check_ret_letunsat_core=Raw.coretypevalue=|V_undef|V_true|V_falseletstring_of_value=function|V_undef->"undef"|V_true->"true"|V_false->"false"letpp_valueoutx=Format.pp_print_stringout(string_of_valuex)let[@inline]conv_value_=function|1->V_true|0->V_undef|-1->V_false|_->assertfalselet[@inline]valueslit=conv_value_(Raw.valueslit)let[@inline]value_at_level_0slit=conv_value_(Raw.value_level_0slit)letset_verbose=Raw.set_verboseletinterrupt=Raw.interruptletclear_interrupt=Raw.clear_interruptletn_clauses=Raw.nclausesletn_vars=Raw.nvarsletn_conflicts=Raw.nconflictsmoduleDebug=structletto_dimacs_file=Raw.to_dimacsend