123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475(************************************************************************)(* * The Rocq Prover / The Rocq Development Team *)(* v * Copyright INRIA, CNRS and contributors *)(* <O___,, * (see version control and CREDITS file for authors & dates) *)(* \VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)openUtilopenNamestypereds={flags:int;ts:TransparentState.t}typered_kind=|FLAGofint|CONSTofConstant.t|PROJofProjection.Repr.t|VARofId.tletfBETA=FLAG0b000001letfDELTA=FLAG0b000010letfMATCH=FLAG0b000100letfFIX=FLAG0b001000letfCOFIX=FLAG0b010000letfZETA=FLAG0b100000letfCONSTkn=CONSTknletfPROJp=PROJpletfVARid=VARidletno_red={flags=0;ts=TransparentState.empty}letred_add({flags;ts}asred)=function|FLAGf->{redwithflags=flagslorf}|CONSTkn->{redwithts={tswithtr_cst=Cpred.addknts.tr_cst}}|PROJp->{redwithts={tswithtr_prj=PRpred.addpts.tr_prj}}|VARid->{redwithts={tswithtr_var=Id.Pred.addidts.tr_var}}letred_sub({flags;ts}asred)=function|FLAGf->{redwithflags=flagsland(0b111111lxorf)}|CONSTkn->{redwithts={tswithtr_cst=Cpred.removeknts.tr_cst}}|PROJp->{redwithts={tswithtr_prj=PRpred.removepts.tr_prj}}|VARid->{redwithts={tswithtr_var=Id.Pred.removeidts.tr_var}}letred_sub_list=List.fold_leftred_subletred_add_list=List.fold_leftred_addletred_transparentred=red.tsletred_add_transparentredts={redwithts}letmkflags=List.fold_leftred_addno_redletmkfullflags=List.fold_leftred_add{no_redwithts=TransparentState.full}letred_setred=function|FLAGf->red.flagslandf!=0|CONSTkn->TransparentState.is_transparent_constantred.tskn|PROJp->TransparentState.is_transparent_projectionred.tsp|VARid->TransparentState.is_transparent_variablered.tsidletred_projectionredp=Projection.unfoldedp||red_setred(fPROJ(Projection.reprp))letall=mkfullflags[fBETA;fDELTA;fZETA;fMATCH;fFIX;fCOFIX]letallnolet=mkfullflags[fBETA;fDELTA;fMATCH;fFIX;fCOFIX]letbeta=mkflags[fBETA]letbetadeltazeta=mkfullflags[fBETA;fDELTA;fZETA]letbetaiota=mkflags[fBETA;fMATCH;fFIX;fCOFIX]letbetaiotazeta=mkflags[fBETA;fMATCH;fFIX;fCOFIX;fZETA]letbetazeta=mkflags[fBETA;fZETA]letdelta=mkfullflags[fDELTA]letzeta=mkflags[fZETA]letnored=no_red