12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576(* This file is free software, part of Zipperposition. See file "license" for more details. *)(** {1 Boolean Trail} *)openLogtkmoduleLit=BBox.Littypebool_lit=Lit.ttypet=Lit.Set.tletequal=Lit.Set.equalletcompare=Lit.Set.comparelethashtrail=Hash.seqLit.hash(Lit.Set.to_itertrail)letempty=Lit.Set.emptyletmem=Lit.Set.memletfor_all=Lit.Set.for_allletexists=Lit.Set.existsletsingleton=Lit.Set.singletonletadd=Lit.Set.addletremove=Lit.Set.removeletfoldfacct=Lit.Set.fold(funxacc->faccx)taccletlength=Lit.Set.cardinalletmapfset=Lit.Set.to_iterset|>Iter.mapf|>Lit.Set.of_iterletof_list=Lit.Set.of_listletadd_list=Lit.Set.add_listletto_list=Lit.Set.to_listletis_empty=Lit.Set.is_emptyletsubsumest1t2=Lit.Set.subsett1t2letis_trivialtrail=Lit.Set.exists(funi->Lit.Set.mem(Lit.negi)trail)trailletmerge=Lit.Set.unionletmerge_l=function|[]->Lit.Set.empty|[t]->t|[t1;t2]->Lit.Set.uniont1t2|t::l->List.fold_leftLit.Set.uniontlletfilter=Lit.Set.filtertypevaluation=Lit.t->bool(** A boolean valuation *)letis_activetrail~v=Lit.Set.for_all(funi->letj=Lit.absiin(Lit.signi)=(vj))(* valuation match sign *)trailletto_iter=Lit.Set.to_iterletlabels(t:t)=to_itert|>Iter.mapBBox.Lit.to_int|>Util.Int_set.of_iterletto_s_form(t:t)=letmoduleF=TypedSTerm.Forminbeginmatchto_listt|>List.mapBBox.to_s_formwith|[]->F.true_|[f]->f|l->F.and_lend