public static Keyword hasPartitionMembershipSpecialist(ControlFrame frame, Keyword lastmove) {
    { Proposition proposition = frame.proposition;
      Stella_Object argumentvalue = Logic.argumentBoundTo((proposition.arguments.theArray)[0]);

      lastmove = lastmove;
      if ((argumentvalue == null) ||
          (!Stella_Object.isaP(argumentvalue, Logic.SGT_LOGIC_LOGIC_OBJECT))) {
        return (Logic.KWD_FAILURE);
      }
      { Proposition value000 = null;

        { Proposition p = null;
          Iterator iter000 = Logic.unfilteredDependentPropositions(argumentvalue, Logic.SGT_PL_KERNEL_KB_HAS_PARTITION_MEMBERSHIP).allocateIterator();

          loop000 : while (iter000.nextP()) {
            p = ((Proposition)(iter000.value));
            if (((Surrogate)(p.operator)) == Logic.SGT_PL_KERNEL_KB_HAS_PARTITION_MEMBERSHIP) {
              value000 = p;
              break loop000;
            }
          }
        }
        { Proposition haspartitionproposition = value000;

          if (haspartitionproposition != null) {
            if (Proposition.trueP(haspartitionproposition)) {
              return (Logic.KWD_FINAL_SUCCESS);
            }
            else if (Proposition.falseP(haspartitionproposition)) {
              return (Logic.KWD_TERMINAL_FAILURE);
            }
          }
          if (LogicObject.derivePartitionMembershipsP(((LogicObject)(argumentvalue)))) {
            {
              LogicObject.updateProperty(((LogicObject)(argumentvalue)), Logic.SGT_PL_KERNEL_KB_HAS_PARTITION_MEMBERSHIP, Logic.KWD_ASSERT_TRUE);
              return (Logic.KWD_FINAL_SUCCESS);
            }
          }
          else {
            {
              LogicObject.updateProperty(((LogicObject)(argumentvalue)), Logic.SGT_PL_KERNEL_KB_HAS_PARTITION_MEMBERSHIP, Logic.KWD_ASSERT_FALSE);
              return (Logic.KWD_TERMINAL_FAILURE);
            }
          }
        }
      }
    }
  }