@Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;

        Predicate predicate = (Predicate) obj;

        if (!getArgs().equals(predicate.getArgs())) return false;
        if (!getName().equals(predicate.getName())) return false;

        return true;
    }