Module Invariant

Invariants for witnesses.

module ExpLat : sig ... end

Symbolic (and fully syntactic) expression "lattice".

Lift ExpLat such that join/meet folds don't introduce excessive || 0| or && 1 expressions.

module N : sig ... end
include sig ... end
type t = [
  1. | `Bot
  2. | `Lifted of ExpLat.t
  3. | `Top
]
val equal : t -> t -> Ppx_deriving_runtime.bool
val compare : t -> t -> Ppx_deriving_runtime.int
val hash : t -> int
val tag : 'a -> 'b
val lift : 'a -> [> `Lifted of 'a ]
val show : [< `Bot | `Lifted of ExpLat.t | `Top ] -> string
val pretty : unit -> t -> Printable.Pretty.doc
val name : unit -> string
val printXml : 'a BatInnerIO.output -> [< `Bot | `Lifted of ExpLat.t | `Top ] -> unit
val to_yojson : [< `Bot | `Lifted of ExpLat.t | `Top ] -> Yojson.Safe.t
val relift : [< `Bot | `Lifted of ExpLat.t | `Top Lifted ] as 'a -> 'a
val arbitrary : unit -> [ `Bot | `Lifted of ExpLat.t | `Top ] QCheck.arbitrary
val bot : unit -> [> `Bot ]
val is_bot : [> `Bot ] -> bool
val top : unit -> [> `Top ]
val is_top : [> `Top ] -> bool
val leq : [< `Bot | `Lifted of ExpLat.t | `Top ] -> [< `Bot | `Lifted of ExpLat.t | `Top ] -> bool
val pretty_diff : unit -> (t * t) -> Lattice.Pretty.doc
val join : [< `Bot | `Lifted of ExpLat.t | `Top Lifted Top ] as 'a -> 'a -> 'a
val meet : [< `Bot | `Lifted of ExpLat.t | `Top Bot Lifted ] as 'a -> 'a -> 'a
val widen : [> `Lifted of ExpLat.t ] -> [> `Lifted of ExpLat.t ] as 'a -> 'a
val narrow : [> `Lifted of ExpLat.t ] as 'a -> [> `Lifted of ExpLat.t ] -> 'a
val none : [> `Top ]
val of_exp : 'a -> [> `Lifted of 'a ]
val (&&) : [< `Bot | `Lifted of ExpLat.t | `Top Bot Lifted ] as 'a -> 'a -> 'a
val (||) : [< `Bot | `Lifted of ExpLat.t | `Top Lifted Top ] as 'a -> 'a -> 'a
type context = {
  1. path : int option;
  2. lvals : Lval.Set.t;
}
val default_context : context