@SideEffectFree
 @Deterministic
 @Override
 public boolean equals(@Nullable Object obj) {
   if (this == obj) return true;
   if ((obj == null) || (obj.getClass() != this.getClass())) return false;
   AP e = (AP) obj;
   return (getid().equals(e.getid()) || (getid() != null && getid().equals(e.getid())));
 }
  /*
   * We have no way of anticipating the return types of built-ins in rules so we need to perform a runtime check.
   */
  public AP(@NonNull BA ba) {
    super("<InProcess>");

    if (ba instanceof AP) {
      AP p = (AP) ba;
      this.setPEID(p.getid());
    } else
      throw new TargetSWRLRuleEngineInternalException(
          "expecting OWL annotation property from bound built-in argument, got "
              + ba.getClass().getCanonicalName());
  }