package domain

import com.microsoft.z3.{BoolExpr, Expr, Sort}

/**
  * Lattice.
  */
trait AbstractDomain {

  type Element <: Expr

  def sort: Sort

  def top: Element

  def bottom: Element

  def meet(e1: Element, e2: Element): Element

  def join(e1: Element, e2: Element): Element

  def approx(e1: Element, e2: Element): BoolExpr

}
