diff --git a/src/api/java/AST.java b/src/api/java/AST.java
index 436a9fdcb..6b5493bf9 100644
--- a/src/api/java/AST.java
+++ b/src/api/java/AST.java
@@ -22,10 +22,8 @@ import com.microsoft.z3.enumerations.Z3_ast_kind;
/**
* The abstract syntax tree (AST) class.
**/
-public class AST extends Z3Object
+public class AST extends Z3Object implements Comparable
{
- /* Overloaded operators are not translated. */
-
/**
* Object comparison.
*
@@ -35,7 +33,7 @@ public class AST extends Z3Object
{
AST casted = null;
- try
+ try
{
casted = AST.class.cast(o);
} catch (ClassCastException e)
@@ -43,8 +41,13 @@ public class AST extends Z3Object
return false;
}
- return this.getNativeObject() == casted.getNativeObject();
- }
+ return
+ (this == casted) ||
+ (this != null) &&
+ (casted != null) &&
+ (getContext().nCtx() == casted.getContext().nCtx()) &&
+ (Native.isEqAst(getContext().nCtx(), getNativeObject(), casted.getNativeObject()));
+}
/**
* Object Comparison.
diff --git a/src/api/java/FuncDecl.java b/src/api/java/FuncDecl.java
index 28cdf2a2d..bc2baab91 100644
--- a/src/api/java/FuncDecl.java
+++ b/src/api/java/FuncDecl.java
@@ -26,22 +26,6 @@ import com.microsoft.z3.enumerations.Z3_parameter_kind;
**/
public class FuncDecl extends AST
{
- /**
- * Comparison operator.
- *
- * @return True if {@code a"/> and and