Module Region

module Region: sig .. end

Paths



type path = offset list 
type offset = 
| Oindex of Lang.F.term
| Ofield of Lang.field
val access : Lang.F.term -> offset list -> Lang.F.term
val update : Lang.F.term -> offset list -> Lang.F.term -> Lang.F.term
type rpath = roffset list 
type roffset = 
| Rindex of Vset.set
| Rfield of Lang.field
type region = 
| Empty
| Full
| Fields of (Lang.field * region) list
| Indices of Vset.set * (Vset.set * region) list
val empty : region
val full : region
val path : offset list -> region
Empty, but Full for the path
val rpath : roffset list -> region
Empty, but Full for the r-paths
val merge : region -> region -> region
val merge_fields : (Lang.F.Field.t * region) list ->
(Lang.F.Field.t * region) list ->
(Lang.F.Field.t * region) list
val disjoint : region -> region -> Lang.F.pred
val disjoint_fields : (Lang.F.Field.t * region) list ->
(Lang.F.Field.t * region) list -> Lang.F.pred list
val disjoint_indices : Lang.F.pred list ->
(Vset.set * region) list ->
(Vset.set * region) list -> Lang.F.pred list
val subset : region -> region -> Lang.F.pred
val subset_fields : (Lang.F.Field.t * region) list ->
(Lang.F.Field.t * region) list -> Lang.F.pred
val subset_indices : Vset.set -> region -> (Vset.set * region) list -> Lang.F.pred
val subset_index : Lang.F.term ->
region -> (Vset.set * region) list -> Lang.F.pred
val equal_but : Lang.tau -> region -> Lang.F.term -> Lang.F.term -> Lang.F.pred
val equal_but_fields : Lang.F.term ->
Lang.F.term ->
Lang.F.Field.t list ->
(Lang.F.Field.t * region) list -> Lang.F.pred list
val equal_but_index : Lang.tau ->
Lang.F.term ->
Lang.F.term ->
Lang.F.term ->
Vset.set -> (Vset.set * region) list -> Lang.F.pred list
val occurs : Lang.F.var -> region -> bool
val occurs_idx : Lang.F.var -> Vset.set * region -> bool
val vars : region -> Lang.F.Vars.t
val pretty : Format.formatter -> region -> unit