123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354(**************************************************************************)(* *)(* SPDX-License-Identifier LGPL-2.1 *)(* Copyright (C) *)(* CEA (Commissariat à l'énergie atomique et aux énergies alternatives) *)(* *)(**************************************************************************)(* -------------------------------------------------------------------------- *)(* --- Upper approximated Set of (un-)bound variables --- *)(* -------------------------------------------------------------------------- *)typet={lower:int;(* lower bound of variables, or 0 if empty *)upper:int;(* upper bound of variables +1, or 0 is empty *)order:int;(* depth of binders inside *)}letempty={lower=0;upper=0;order=0}letis_emptya=(a.upper=0)letcloseds=s.upper<=s.orderletclosed_atds=s.upper=0||d<=s.lowerletunionab=ifis_emptyathenbelseifis_emptybthenaelse{lower=mina.lowerb.lower;order=maxa.orderb.order;upper=maxa.upperb.upper;}letsingletonk={order=0;lower=k;upper=k+1;}letcontainsks=s.lower<=k&&k<s.upperletoverlapkns=s.lower<k+n&&k<s.upperletorders=s.orderletbinds={upper=s.upper;lower=s.lower;order=succs.order;}letprettyfmts=ifis_emptysthenFormat.fprintffmt"<empty>"elseFormat.fprintffmt"\\%d.[%d-%d]"s.orders.lower(s.upper-1)