12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576(* This file is free software, part of Zipperposition. See file "license" for more details. *)(** {1 Boolean Literal} *)openLogtkmoduletypeS=Bool_lit_intf.SmoduletypePAYLOAD=sigtypetvaldummy:tendletstat_num_lit=Util.mk_stat"msat.num_lits"moduleMake(Payload:PAYLOAD):Swithtypepayload=Payload.t=structtypet={id:int;(* sign = sign of literal *)payload:Payload.t;neg:t;(* negation *)}typelit=ttypepayload=Payload.tletrecdummy={id=0;neg=dummy;payload=Payload.dummy;}letfresh_id=letn=ref1infun()->Util.incr_statstat_num_lit;letid=!ninincrn;id(* factory for literals *)letmake=funpayload->letid=fresh_id()inletrecpos={id;payload;neg;}andneg={id=-id;payload;neg=pos;}inposlethashi=Hash.inti.idletequalij=i.id=j.idletcompareij=CCInt.comparei.idj.idletnegi=i.negletsigni=i.id>0letabsi=ifi.id>0thenielsei.negletnormi=absi,i.id<0letset_signbi=ifbthenabsielse(absi).negletapply_signbi=ifbthenielsei.negletpayloadi=i.payloadletto_inti=i.idletppouti=Format.fprintfout"%s%d"(ifsignithen""else"¬")(absi).idmoduleAsKey=structtypet=litletcompare=comparelethash=hashletequal=equalendmoduleSet=CCSet.Make(AsKey)moduleTbl=CCHashtbl.Make(AsKey)end