mirror of
https://github.com/Z3Prover/z3
synced 2026-03-16 18:20:00 +00:00
Add missing AST query methods to Java API (#8977)
* add Expr.isGround() to Java API Expose Z3_is_ground as a public method on Expr. Returns true when the expression contains no free variables. * add Expr.isLambda() to Java API Expose Z3_is_lambda as a public method on Expr. Returns true when the expression is a lambda quantifier. * add AST.getDepth() to Java API Expose Z3_get_depth as a public method on AST. Returns the maximum number of nodes on any path from root to leaf. * add ArraySort.getArity() to Java API Expose Z3_get_array_arity as a public method on ArraySort. Returns the number of dimensions of a multi-dimensional array sort. * add DatatypeSort.isRecursive() to Java API Expose Z3_is_recursive_datatype_sort as a public method on DatatypeSort. Returns true when the datatype refers to itself. * add FPExpr.isNumeral() to Java API Expose Z3_fpa_is_numeral as a public method on FPExpr. Returns true when the expression is a concrete floating-point value. * add isGroundExample test to JavaExample Test Expr.isGround() on constants, variables, and compound expressions. * add astDepthExample test to JavaExample Test AST.getDepth() on leaf nodes and nested expressions to verify the depth computation. * add arrayArityExample test to JavaExample Test ArraySort.getArity() on single-domain and multi-domain array sorts. * add recursiveDatatypeExample test to JavaExample Test DatatypeSort.isRecursive() on a recursive list datatype and a non-recursive pair datatype. * add fpNumeralExample test to JavaExample Test FPExpr.isNumeral() on a floating point constant and a symbolic variable. * add isLambdaExample test to JavaExample Test Expr.isLambda() on a lambda expression and a plain variable.
This commit is contained in:
parent
6e5971641f
commit
b8e15f2121
6 changed files with 205 additions and 1 deletions
|
|
@ -80,6 +80,16 @@ public class AST extends Z3Object implements Comparable<AST>
|
|||
return Native.getAstId(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* The depth of the AST (max nodes on any root-to-leaf path).
|
||||
* @throws Z3Exception on error
|
||||
* @return an int
|
||||
**/
|
||||
public int getDepth()
|
||||
{
|
||||
return Native.getDepth(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates (copies) the AST to the Context {@code ctx}.
|
||||
* @param ctx A context
|
||||
|
|
|
|||
|
|
@ -59,6 +59,16 @@ public class ArraySort<D extends Sort, R extends Sort> extends Sort
|
|||
Native.getArraySortRange(getContext().nCtx(), getNativeObject()));
|
||||
}
|
||||
|
||||
/**
|
||||
* The number of dimensions of the array sort.
|
||||
* @throws Z3Exception on error
|
||||
* @return an int
|
||||
**/
|
||||
public int getArity()
|
||||
{
|
||||
return Native.getArrayArity(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
ArraySort(Context ctx, long obj)
|
||||
{
|
||||
super(ctx, obj);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,17 @@ public class DatatypeSort<R> extends Sort
|
|||
getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the datatype sort is recursive.
|
||||
* @throws Z3Exception on error
|
||||
* @return a boolean
|
||||
**/
|
||||
public boolean isRecursive()
|
||||
{
|
||||
return Native.isRecursiveDatatypeSort(getContext().nCtx(),
|
||||
getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* The constructors.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -306,6 +306,26 @@ public class Expr<R extends Sort> extends AST
|
|||
return Native.isAlgebraicNumber(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the term is ground (contains no free variables).
|
||||
* @throws Z3Exception on error
|
||||
* @return a boolean
|
||||
**/
|
||||
public boolean isGround()
|
||||
{
|
||||
return Native.isGround(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the term is a lambda expression.
|
||||
* @throws Z3Exception on error
|
||||
* @return a boolean
|
||||
**/
|
||||
public boolean isLambda()
|
||||
{
|
||||
return Native.isLambda(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the term has Boolean sort.
|
||||
* @throws Z3Exception on error
|
||||
|
|
|
|||
|
|
@ -32,7 +32,17 @@ public class FPExpr extends Expr<FPSort>
|
|||
* @throws Z3Exception
|
||||
*/
|
||||
public int getSBits() { return ((FPSort)getSort()).getSBits(); }
|
||||
|
||||
|
||||
/**
|
||||
* Indicates whether the floating-point expression is a numeral.
|
||||
* @throws Z3Exception on error
|
||||
* @return a boolean
|
||||
**/
|
||||
public boolean isNumeral()
|
||||
{
|
||||
return Native.fpaIsNumeral(getContext().nCtx(), getNativeObject());
|
||||
}
|
||||
|
||||
public FPExpr(Context ctx, long obj)
|
||||
{
|
||||
super(ctx, obj);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue