Scala-Z3:如何对对象执行成员访问

问题描述

我已使用Java API在Scala中定义了以下圆圈Sort: (其中ctx是Z3上下文)

val circleConstructor = ctx.mkConstructor(
    "Circle","Circle",Array("x","y","r"),Array(ctx.mkRealSort,ctx.mkRealSort,ctx.mkRealSort),null)

val circleSort: DatatypeSort = ctx.mkDatatypeSort(
    ctx.mkSymbol("Circle"),Array(circleConstructor))

val getX: FuncDecl = circleSort.getAccessors()(0)(0)

val constCirlce: FuncDecl = ctx.mkConstDecl("C",circleSort)

如何访问圈子x的{​​{1}}成员?

我尝试将Cctx.mkApp函数一起使用,但是不知道如何引用getX常量?

解决方法

我知道了。 要访问圆常量,只需使用代码中定义的变量,如下所示:

val A = ctx.mkMul(ctx.mkApp(getX,constCirlce).asInstanceOf[ArithExpr])

.asInstanceOf[ArithExpr]用于将mkApp的结果强制转换为ArithExpr,因为mkMul期望Expr。 我不知道如何避免这种显式转换。