FUNCTION suitably_based_mechanism 
          (mbp : mechanism_base_placement, mech : mechanism) : BOOLEAN;
 LOCAL     kprop  : kinematic_property_definition;     kgrep  : kinematic_ground_representation;     klrep  : kinematic_link_representation;     klnk   : kinematic_link;     kjnts  : BAG  OF  kinematic_joint;     nmechs : BAG  OF  mechanism;     nmbps  : BAG OF mechanism_base_placement;   END_LOCAL;
    kprop := mech.containing_property;
    IF  ('KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_GROUND_REPRESENTATION' IN       TYPEOF (mbp\representation_relationship.rep_1)) THEN       kgrep := mbp\representation_relationship.rep_1;
      IF  (kgrep.property\property_definition_representation.definition         :=: kprop) THEN       RETURN  (TRUE);     ELSE       RETURN  (FALSE);     END_IF;   ELSE     klrep := mbp\representation_relationship.rep_1;     klnk   := klrep.link_representation_relation.topological_aspects;     kjnts  := USEDIN  (klnk,             'KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_JOINT.FIRST_LINK') +               USEDIN  (klnk,             'KINEMATIC_STRUCTURE_SCHEMA.KINEMATIC_JOINT.SECOND_LINK');     nmechs := USEDIN  (kjnts[1].structure,          'KINEMATIC_STRUCTURE_SCHEMA.MECHANISM.STRUCTURE_DEFINITION');
      IF  (nmechs[1] :=: mech) THEN       RETURN  (FALSE);     ELSE       IF  (nmechs[1].containing_property :<>: kprop) THEN         RETURN  (FALSE);       ELSE         nmbps := USEDIN (nmechs[1], 'KINEMATIC_STRUCTURE_SCHEMA.'+                         'MECHANISM_BASE_PLACEMENT.BASE_OF_MECHANISM');
          IF (SIZEOF (nmbps) = 0) THEN           RETURN  (FALSE);         ELSE           RETURN (suitably_based_mechanism (nmbps[1], mech));         END_IF;       END_IF;     END_IF;   END_IF; END_FUNCTION; -- suitably_based_mechanism 
 |