123456789101112131415161718192021222324252627282930313233343536373839404142434445(* This file is free software, part of dolmen. See file "LICENSE" for more information *)(* Smtlib2 extensions *)(* ************************************************************************* *)moduleSmtlib2=structtypet={name:string;stmts:stringlist;mutableactive:bool;}letname{name;_}=nameletsettb=t.active<-bletenablet=setttrueletdisablet=settfalseletall_exts=ref[]letexts()=!all_extsletcreate~name~stmts=lett={name;stmts;active=false;}inall_exts:=t::!all_exts;tletmaxsmt=(* MaxSMT:
the following statement names are routinely used when trying to
optimize models on satisfiable problems. Most notably, Z3 accepts
these, and opam generates problems using them. *)create~name:"maxsmt"~stmts:["minimize";"maximize";"get-objectives";"assert-soft";]letstatements=letmk?locsexprs=Statement.other?locId.(mkDecls)sexprsinifList.exists(fun{active;stmts;name=_;}->active&&List.memsstmts)(exts())thenSomemkelseNoneend