package domain

import com.microsoft.z3._

/**
  * Domain that maps everything to top.
  */
class TopDomain(ctx: Context) extends PrimitiveDomain {

  override type Element = BoolExpr

  override def sort: Sort = ctx.mkBoolSort()

  override def top: Element = ctx.mkTrue()

  override def bottom: Element = ctx.mkTrue()

  override def meet(e1: Element, e2: Element): Element =
    ctx.mkTrue()

  override def join(e1: Element, e2: Element): Element =
    ctx.mkTrue()

  override def approx(e1: Element, e2: Element): BoolExpr =
    ctx.mkTrue()

  override def toElement(n: Long): Element =
    ctx.mkTrue()

  override def toElement(n: Double): Element =
    ctx.mkTrue

  override def sum(e1: Element, e2: Element): Element =
    ctx.mkTrue()

  override def neg(e: Element): Element =
    ctx.mkTrue()

  override def div(e1: Element, e2: Element): Element =
    ctx.mkTrue()

  override def mult(e1: Element, e2: Element): Element =
    ctx.mkTrue()

  override def rem(e1: Element, e2: Element): Element =
    ctx.mkTrue()
}
