Module for joined props: the result of joining together propositions repeatedly

`type 'a t````=`

`|` `Prop of int * 'a InferModules.Prop.t`
`|` `Joined of int * 'a InferModules.Prop.t * 'a t * 'a t`

``

Remember when a prop is obtained as the join of two other props; the first parameter is an id

`val compare : 'a t ‑> 'a t ‑> int`

Comparison for joined_prop

`val equal : 'a t ‑> 'a t ‑> bool`

Return true if the two join_prop's are equal

`val d_shallow : InferModules.Prop.normal t ‑> unit`

Dump the toplevel prop

`val d_list : shallow:bool ‑> InferModules.Prop.normal t list ‑> unit`

dump a joined prop list, the boolean indicates whether to print toplevel props only

`val free_vars : InferModules.Prop.normal t ‑> InferIR.Ident.t InferStdlib.IStd.Sequence.t`
`val filter : ('a t ‑> 'b option) ‑> 'a t list ‑> 'b list`

`jprop_filter filter joinedprops` applies `filter` to the elements of `joindeprops` and applies it to the subparts if the result is `None`. Returns the most absract results which pass `filter`.

`val jprop_sub : InferIR.Sil.subst ‑> InferModules.Prop.normal t ‑> InferModules.Prop.exposed t`

apply a substitution to a jprop

`val map : ('a InferModules.Prop.t ‑> 'b InferModules.Prop.t) ‑> 'a t ‑> 'b t`

map the function to each prop in the jprop, pointwise

`val pp_list : InferStdlib.Pp.env ‑> shallow:bool ‑> Format.formatter ‑> InferModules.Prop.normal t list ‑> unit`

Print a list of joined props, the boolean indicates whether to print subcomponents of joined props

`val pp_short : InferStdlib.Pp.env ‑> Format.formatter ‑> InferModules.Prop.normal t ‑> unit`

Print the toplevel prop

`val to_prop : 'a t ‑> 'a InferModules.Prop.t`

Extract the toplevel jprop of a prop