Application module: System modelling ISO/TS 10303-1477:2011-10(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Information requirements
   4.1 Required AM ARMs
   4.2 ARM type definitions
5 Module interpreted model
   5.1 Mapping specification
   5.2 MIM EXPRESS short listing
     5.2.1 MIM type definitions
     5.2.2 MIM entity definition

A MIM short names
B Information object registration
C ARM EXPRESS-G   EXPRESS-G
D MIM EXPRESS-G   EXPRESS-G
E Computer interpretable listings
F Application module implementation and usage guide
G Change history
Bibliography
Index

(*
ISO TC184/SC4/WG3 N2770 - ISO/TS 10303-1477 System modelling - EXPRESS MIM Long form
Supersedes ISO TC184/SC4/WG3 N2687
*)



SCHEMA System_modelling_mim_LF;


CONSTANT
  dummy_gri : geometric_representation_item := representation_item('')||geometric_representation_item();
END_CONSTANT;

TYPE absorbed_dose_measure = REAL;
END_TYPE;

TYPE acceleration_measure = REAL;
END_TYPE;

TYPE action_items = SELECT
   (action_directive,
    action_method,
    action_method_assignment_relationship,
    action_property,
    action_resource,
    action_resource_requirement,
    address,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_location_representation_assignment,
    applied_security_classification_assignment,
    applied_state_type_assignment,
    applied_usage_right,
    approval,
    ascribable_state,
    assembly_component_usage_substitute,
    breakdown_element_group_assignment,
    certification,
    characterized_object,
    configuration_effectivity,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    document_file,
    document_relationship,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    group,
    group_relationship,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    location,
    measure_representation_item,
    organization,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group_membership,
    property_definition,
    representation,
    representation_item,
    requirement_assignment,
    requirement_source,
    requirement_view_definition_relationship,
    resource_property,
    security_classification,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    usage_association,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE action_method_items = SELECT
   (action_directive,
    action_method,
    action_method_assignment_relationship,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_event_occurrence_assignment,
    applied_expression_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_organizational_project_assignment,
    applied_security_classification_assignment,
    approval,
    ascribable_state,
    breakdown_element_group_assignment,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    document_file,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    group,
    interface_connection,
    interface_definition_connection,
    interface_definition_for,
    location,
    organization,
    organizational_project,
    parameter_value_select,
    person,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_membership,
    product_group_relationship,
    property_definition,
    property_definition_representation,
    representation,
    resource_property,
    resource_property_representation,
    state_observed,
    state_type,
    state_type_relationship,
    versioned_action_request);
END_TYPE;

TYPE action_request_item = SELECT
   (action_method,
    action_property,
    action_resource,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_event_occurrence_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    configuration_item,
    contract,
    contract_relationship,
    document_file,
    executed_action,
    group,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    justification_group_assignment,
    justification_item_group_assignment,
    organization,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    property_definition,
    resource_property,
    state_observed,
    state_type,
    versioned_action_request);
END_TYPE;

TYPE ahead_or_behind = ENUMERATION OF
   (ahead,
    exact,
    behind);
END_TYPE;

TYPE amount_of_substance_measure = REAL;
END_TYPE;

TYPE analysed_item = SELECT
   (action_method,
    action_method_relationship,
    action_property,
    action_relationship,
    action_resource_relationship,
    alternate_product_relationship,
    ascribable_state,
    assembly_component_usage_substitute,
    behaviour_item_groupable_item,
    behaviour_model_groupable_item,
    evidence,
    executed_action,
    group,
    organization,
    organization_relationship,
    organizational_project_relationship,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_relationship,
    property_definition,
    requirement_assignment,
    resource_property,
    state_observed,
    state_observed_role,
    state_type,
    validation,
    verification,
    verification_relationship);
END_TYPE;

TYPE approval_item = SELECT
   (action,
    action_actual,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_request_solution,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    certification,
    configuration_effectivity,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    identification_assignment_relationship,
    in_zone,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    organization_relationship,
    organizational_address,
    organizational_project,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_design_to_individual,
    product_group_membership,
    product_relationship,
    property_definition,
    requirement_assignment,
    requirement_source,
    resource_property,
    security_classification,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE area_measure = REAL;
END_TYPE;

TYPE attribute_language_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organizational_project_assignment,
    approval,
    approval_relationship,
    approval_status,
    assembly_component_usage_substitute,
    attribute_value_assignment,
    breakdown_element_group_assignment,
    certification,
    certification_type,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    date_role,
    date_time_role,
    document_relationship,
    document_usage_role,
    event_occurrence,
    evidence,
    executed_action,
    external_source,
    general_property,
    general_property_relationship,
    identification_role,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    location,
    location_relationship,
    multi_language_attribute_assignment,
    object_role,
    organization_relationship,
    organizational_project,
    organizational_project_relationship,
    organizational_project_role,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_relationship,
    product_relationship,
    property_definition,
    representation,
    representation_item,
    requirement_assignment,
    requirement_source,
    resource_property,
    state_observed,
    state_observed_relationship,
    state_type,
    state_type_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE attribute_select = SELECT
   (product_group_context,
    product_group_purpose);
END_TYPE;

TYPE attribute_type = SELECT
   (label,
    text);
END_TYPE;

TYPE behaviour_item_groupable_item = groupable_item ;
WHERE
  wr1: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_DIRECTIVE' IN TYPEOF(SELF));
  wr2: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_METHOD' IN TYPEOF(SELF));
  wr3: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_METHOD_RELATIONSHIP' IN TYPEOF(SELF));
  wr4: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_PROPERTY' IN TYPEOF(SELF));
  wr5: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_PROPERTY_REPRESENTATION' IN TYPEOF(SELF));
  wr6: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RELATIONSHIP' IN TYPEOF(SELF));
  wr7: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_REQUEST_SOLUTION' IN TYPEOF(SELF));
  wr8: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_REQUEST_STATUS' IN TYPEOF(SELF));
  wr9: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE' IN TYPEOF(SELF));
  wr10: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_RELATIONSHIP' IN TYPEOF(SELF));
  wr11: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_REQUIREMENT' IN TYPEOF(SELF));
  wr12: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_REQUIREMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr13: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_STATUS' IN TYPEOF(SELF));
  wr14: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ADDRESS' IN TYPEOF(SELF));
  wr15: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ALTERNATE_PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  wr16: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ANALYSIS_ASSIGNMENT' IN TYPEOF(SELF));
  wr17: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr18: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_METHOD_ASSIGNMENT' IN TYPEOF(SELF));
  wr19: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_REQUEST_ASSIGNMENT' IN TYPEOF(SELF));
  wr20: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_APPROVAL_ASSIGNMENT' IN TYPEOF(SELF));
  wr21: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CERTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr22: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CLASSIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr23: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CONTRACT_ASSIGNMENT' IN TYPEOF(SELF));
  wr24: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DESCRIPTION_TEXT_ASSIGNMENT' IN TYPEOF(SELF));
  wr25: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DOCUMENT_REFERENCE' IN TYPEOF(SELF));
  wr26: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DOCUMENT_USAGE_CONSTRAINT_ASSIGNMENT' IN TYPEOF(SELF));
  wr27: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EFFECTIVITY_ASSIGNMENT' IN TYPEOF(SELF));
  wr28: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EVENT_OCCURRENCE_ASSIGNMENT' IN TYPEOF(SELF));
  wr29: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr30: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr31: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_LOCATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr32: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_LOCATION_REPRESENTATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr33: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_NAME_ASSIGNMENT' IN TYPEOF(SELF));
  wr34: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr35: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ORGANIZATIONAL_PROJECT_ASSIGNMENT' IN TYPEOF(SELF));
  wr36: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr37: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_SECURITY_CLASSIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr38: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_USAGE_RIGHT' IN TYPEOF(SELF));
  wr39: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL' IN TYPEOF(SELF));
  wr40: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_PERSON_ORGANIZATION' IN TYPEOF(SELF));
  wr41: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_RELATIONSHIP' IN TYPEOF(SELF));
  wr42: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_STATUS' IN TYPEOF(SELF));
  wr43: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASCRIBABLE_STATE' IN TYPEOF(SELF));
  wr44: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASCRIBABLE_STATE_RELATIONSHIP' IN TYPEOF(SELF));
  wr45: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(SELF));
  wr46: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSEMBLY_COMPONENT_USAGE_SUBSTITUTE' IN TYPEOF(SELF));
  wr47: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION' IN TYPEOF(SELF));
  wr48: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr49: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION_RELATIONSHIP' IN TYPEOF(SELF));
  wr50: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ATTRIBUTE_LANGUAGE_ASSIGNMENT' IN TYPEOF(SELF));
  wr51: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.BREAKDOWN_ELEMENT_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr52: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.BREAKDOWN_OF' IN TYPEOF(SELF));
  wr53: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CALENDAR_DATE' IN TYPEOF(SELF));
  wr54: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CERTIFICATION' IN TYPEOF(SELF));
  wr55: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CHARACTERIZED_OBJECT' IN TYPEOF(SELF));
  wr56: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CLASS' IN TYPEOF(SELF));
  wr57: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COLLECTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr58: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COLLECTION_MEMBERSHIP' IN TYPEOF(SELF));
  wr59: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_DESIGN' IN TYPEOF(SELF));
  wr60: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_ITEM' IN TYPEOF(SELF));
  wr61: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_ITEM_RELATIONSHIP' IN TYPEOF(SELF));
  wr62: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN TYPEOF(SELF));
  wr63: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTRACT' IN TYPEOF(SELF));
  wr64: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTRACT_RELATIONSHIP' IN TYPEOF(SELF));
  wr65: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COORDINATED_UNIVERSAL_TIME_OFFSET' IN TYPEOF(SELF));
  wr66: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_AND_TIME' IN TYPEOF(SELF));
  wr67: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_AND_TIME_ASSIGNMENT' IN TYPEOF(SELF));
  wr68: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_ASSIGNMENT' IN TYPEOF(SELF));
  wr69: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DERIVED_UNIT' IN TYPEOF(SELF));
  wr70: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DERIVED_UNIT_ELEMENT' IN TYPEOF(SELF));
  wr71: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DESCRIPTION_TEXT' IN TYPEOF(SELF));
  wr72: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DOCUMENT_FILE' IN TYPEOF(SELF));
  wr73: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DOCUMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr74: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EFFECTIVITY' IN TYPEOF(SELF));
  wr75: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EFFECTIVITY_RELATIONSHIP' IN TYPEOF(SELF));
  wr76: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ENVIRONMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr77: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVENT_OCCURRENCE' IN TYPEOF(SELF));
  wr78: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVENT_OCCURRENCE_RELATIONSHIP' IN TYPEOF(SELF));
  wr79: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVIDENCE' IN TYPEOF(SELF));
  wr80: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EXECUTED_ACTION' IN TYPEOF(SELF));
  wr81: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EXTERNAL_SOURCE' IN TYPEOF(SELF));
  wr82: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.FUNCTIONAL_MODEL' IN TYPEOF(SELF));
  wr83: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GENERAL_PROPERTY' IN TYPEOF(SELF));
  wr84: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GENERAL_PROPERTY_RELATIONSHIP' IN TYPEOF(SELF));
  wr85: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GEOMETRIC_ITEM_SPECIFIC_USAGE' IN TYPEOF(SELF));
  wr86: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GROUP' IN TYPEOF(SELF));
  wr87: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  wr88: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.IDENTIFICATION_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr89: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.IN_ZONE' IN TYPEOF(SELF));
  wr90: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INFORMATION_RIGHT' IN TYPEOF(SELF));
  wr91: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INFORMATION_USAGE_RIGHT' IN TYPEOF(SELF));
  wr92: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTION' IN TYPEOF(SELF));
  wr93: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTOR_DEFINITION' IN TYPEOF(SELF));
  wr94: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTOR_OCCURRENCE' IN TYPEOF(SELF));
  wr95: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_DEFINITION_CONNECTION' IN TYPEOF(SELF));
  wr96: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_DEFINITION_FOR' IN TYPEOF(SELF));
  wr97: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ITEM_ASSUMED' IN TYPEOF(SELF));
  wr98: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ITEM_DEFINED_TRANSFORMATION' IN TYPEOF(SELF));
  wr99: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr100: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr101: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_ITEM_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr102: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_SUPPORT_ASSIGNMENT' IN TYPEOF(SELF));
  wr103: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_SUPPORT_ITEM_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr104: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LANGUAGE' IN TYPEOF(SELF));
  wr105: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCAL_TIME' IN TYPEOF(SELF));
  wr106: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCATION' IN TYPEOF(SELF));
  wr107: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr108: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MEASURE_QUALIFICATION' IN TYPEOF(SELF));
  wr109: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MEASURE_WITH_UNIT' IN TYPEOF(SELF));
  wr110: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT' IN TYPEOF(SELF));
  wr111: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.NAMED_UNIT' IN TYPEOF(SELF));
  wr112: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.OBSERVED_ENVIRONMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr113: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATION' IN TYPEOF(SELF));
  wr114: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr115: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATIONAL_PROJECT' IN TYPEOF(SELF));
  wr116: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATIONAL_PROJECT_RELATIONSHIP' IN TYPEOF(SELF));
  wr117: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PARAMETER_VALUE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr118: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PARAMETER_VALUE_SELECT' IN TYPEOF(SELF));
  wr119: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PERSON' IN TYPEOF(SELF));
  wr120: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PERSON_AND_ORGANIZATION' IN TYPEOF(SELF));
  wr121: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRECISION_QUALIFIER' IN TYPEOF(SELF));
  wr122: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT' IN TYPEOF(SELF));
  wr123: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_CONCEPT' IN TYPEOF(SELF));
  wr124: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_CONCEPT_CONTEXT' IN TYPEOF(SELF));
  wr125: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_CONTEXT' IN TYPEOF(SELF));
  wr126: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_FORMATION' IN TYPEOF(SELF));
  wr127: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr128: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr129: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  wr130: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_GROUP' IN TYPEOF(SELF));
  wr131: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  wr132: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  wr133: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PROPERTY_DEFINITION' IN TYPEOF(SELF));
  wr134: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PROPERTY_DEFINITION_REPRESENTATION' IN TYPEOF(SELF));
  wr135: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION' IN TYPEOF(SELF));
  wr136: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_CONTEXT' IN TYPEOF(SELF));
  wr137: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr138: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr139: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REQUIREMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr140: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REQUIREMENT_SOURCE' IN TYPEOF(SELF));
  wr141: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.RESOURCE_PROPERTY' IN TYPEOF(SELF));
  wr142: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.RESOURCE_PROPERTY_REPRESENTATION' IN TYPEOF(SELF));
  wr143: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SAME_AS_EXTERNAL_ITEM_ASSIGNMENT' IN TYPEOF(SELF));
  wr144: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SATISFIES_REQUIREMENT' IN TYPEOF(SELF));
  wr145: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SECURITY_CLASSIFICATION' IN TYPEOF(SELF));
  wr146: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SHAPE_ASPECT' IN TYPEOF(SELF));
  wr147: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SHAPE_ASPECT_RELATIONSHIP' IN TYPEOF(SELF));
  wr148: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_BASED_BEHAVIOUR_MODEL' IN TYPEOF(SELF));
  wr149: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED' IN TYPEOF(SELF));
  wr150: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_ASSIGNMENT' IN TYPEOF(SELF));
  wr151: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_RELATIONSHIP' IN TYPEOF(SELF));
  wr152: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_ROLE' IN TYPEOF(SELF));
  wr153: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  wr154: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_RELATIONSHIP' IN TYPEOF(SELF));
  wr155: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_ROLE' IN TYPEOF(SELF));
  wr156: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TIME_INTERVAL' IN TYPEOF(SELF));
  wr157: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TIME_INTERVAL_RELATIONSHIP' IN TYPEOF(SELF));
  wr158: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TYPE_QUALIFIER' IN TYPEOF(SELF));
  wr159: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.UNCERTAINTY_QUALIFIER' IN TYPEOF(SELF));
  wr160: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.USAGE_ASSOCIATION' IN TYPEOF(SELF));
  wr161: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VALIDATION' IN TYPEOF(SELF));
  wr162: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERIFICATION' IN TYPEOF(SELF));
  wr163: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERIFICATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr164: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERSIONED_ACTION_REQUEST' IN TYPEOF(SELF));
END_TYPE;

TYPE behaviour_model_groupable_item = groupable_item ;
WHERE
  wr1: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_DIRECTIVE' IN TYPEOF(SELF));
  wr2: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_METHOD_RELATIONSHIP' IN TYPEOF(SELF));
  wr3: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_PROPERTY' IN TYPEOF(SELF));
  wr4: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_PROPERTY_REPRESENTATION' IN TYPEOF(SELF));
  wr5: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RELATIONSHIP' IN TYPEOF(SELF));
  wr6: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_REQUEST_SOLUTION' IN TYPEOF(SELF));
  wr7: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_REQUEST_STATUS' IN TYPEOF(SELF));
  wr8: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE' IN TYPEOF(SELF));
  wr9: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_RELATIONSHIP' IN TYPEOF(SELF));
  wr10: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_REQUIREMENT' IN TYPEOF(SELF));
  wr11: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_RESOURCE_REQUIREMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr12: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ACTION_STATUS' IN TYPEOF(SELF));
  wr13: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ADDRESS' IN TYPEOF(SELF));
  wr14: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ALTERNATE_PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  wr15: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ANALYSIS_ASSIGNMENT' IN TYPEOF(SELF));
  wr16: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr17: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_METHOD_ASSIGNMENT' IN TYPEOF(SELF));
  wr18: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ACTION_REQUEST_ASSIGNMENT' IN TYPEOF(SELF));
  wr19: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_APPROVAL_ASSIGNMENT' IN TYPEOF(SELF));
  wr20: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CERTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr21: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CLASSIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr22: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_CONTRACT_ASSIGNMENT' IN TYPEOF(SELF));
  wr23: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DESCRIPTION_TEXT_ASSIGNMENT' IN TYPEOF(SELF));
  wr24: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DOCUMENT_REFERENCE' IN TYPEOF(SELF));
  wr25: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_DOCUMENT_USAGE_CONSTRAINT_ASSIGNMENT' IN TYPEOF(SELF));
  wr26: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EFFECTIVITY_ASSIGNMENT' IN TYPEOF(SELF));
  wr27: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EVENT_OCCURRENCE_ASSIGNMENT' IN TYPEOF(SELF));
  wr28: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr29: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr30: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_LOCATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr31: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_LOCATION_REPRESENTATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr32: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_NAME_ASSIGNMENT' IN TYPEOF(SELF));
  wr33: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr34: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_ORGANIZATIONAL_PROJECT_ASSIGNMENT' IN TYPEOF(SELF));
  wr35: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr36: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_SECURITY_CLASSIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr37: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPLIED_USAGE_RIGHT' IN TYPEOF(SELF));
  wr38: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL' IN TYPEOF(SELF));
  wr39: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_PERSON_ORGANIZATION' IN TYPEOF(SELF));
  wr40: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_RELATIONSHIP' IN TYPEOF(SELF));
  wr41: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.APPROVAL_STATUS' IN TYPEOF(SELF));
  wr42: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASCRIBABLE_STATE' IN TYPEOF(SELF));
  wr43: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASCRIBABLE_STATE_RELATIONSHIP' IN TYPEOF(SELF));
  wr44: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(SELF));
  wr45: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSEMBLY_COMPONENT_USAGE_SUBSTITUTE' IN TYPEOF(SELF));
  wr46: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION' IN TYPEOF(SELF));
  wr47: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr48: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ASSUMPTION_RELATIONSHIP' IN TYPEOF(SELF));
  wr49: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ATTRIBUTE_LANGUAGE_ASSIGNMENT' IN TYPEOF(SELF));
  wr50: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.BREAKDOWN_ELEMENT_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr51: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.BREAKDOWN_OF' IN TYPEOF(SELF));
  wr52: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CALENDAR_DATE' IN TYPEOF(SELF));
  wr53: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CERTIFICATION' IN TYPEOF(SELF));
  wr54: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CHARACTERIZED_OBJECT' IN TYPEOF(SELF));
  wr55: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CLASS' IN TYPEOF(SELF));
  wr56: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COLLECTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr57: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COLLECTION_MEMBERSHIP' IN TYPEOF(SELF));
  wr58: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_DESIGN' IN TYPEOF(SELF));
  wr59: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_ITEM' IN TYPEOF(SELF));
  wr60: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONFIGURATION_ITEM_RELATIONSHIP' IN TYPEOF(SELF));
  wr61: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN TYPEOF(SELF));
  wr62: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTRACT' IN TYPEOF(SELF));
  wr63: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.CONTRACT_RELATIONSHIP' IN TYPEOF(SELF));
  wr64: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.COORDINATED_UNIVERSAL_TIME_OFFSET' IN TYPEOF(SELF));
  wr65: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_AND_TIME' IN TYPEOF(SELF));
  wr66: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_AND_TIME_ASSIGNMENT' IN TYPEOF(SELF));
  wr67: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DATE_ASSIGNMENT' IN TYPEOF(SELF));
  wr68: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DERIVED_UNIT' IN TYPEOF(SELF));
  wr69: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DERIVED_UNIT_ELEMENT' IN TYPEOF(SELF));
  wr70: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DESCRIPTION_TEXT' IN TYPEOF(SELF));
  wr71: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DOCUMENT_FILE' IN TYPEOF(SELF));
  wr72: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.DOCUMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr73: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EFFECTIVITY' IN TYPEOF(SELF));
  wr74: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EFFECTIVITY_RELATIONSHIP' IN TYPEOF(SELF));
  wr75: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ENVIRONMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr76: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVENT_OCCURRENCE' IN TYPEOF(SELF));
  wr77: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVENT_OCCURRENCE_RELATIONSHIP' IN TYPEOF(SELF));
  wr78: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EVIDENCE' IN TYPEOF(SELF));
  wr79: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EXECUTED_ACTION' IN TYPEOF(SELF));
  wr80: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.EXTERNAL_SOURCE' IN TYPEOF(SELF));
  wr81: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GENERAL_PROPERTY' IN TYPEOF(SELF));
  wr82: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GENERAL_PROPERTY_RELATIONSHIP' IN TYPEOF(SELF));
  wr83: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GEOMETRIC_ITEM_SPECIFIC_USAGE' IN TYPEOF(SELF));
  wr84: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GROUP' IN TYPEOF(SELF));
  wr85: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  wr86: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.IDENTIFICATION_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr87: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.IN_ZONE' IN TYPEOF(SELF));
  wr88: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INFORMATION_RIGHT' IN TYPEOF(SELF));
  wr89: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INFORMATION_USAGE_RIGHT' IN TYPEOF(SELF));
  wr90: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTION' IN TYPEOF(SELF));
  wr91: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTOR_DEFINITION' IN TYPEOF(SELF));
  wr92: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_CONNECTOR_OCCURRENCE' IN TYPEOF(SELF));
  wr93: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_DEFINITION_CONNECTION' IN TYPEOF(SELF));
  wr94: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.INTERFACE_DEFINITION_FOR' IN TYPEOF(SELF));
  wr95: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ITEM_ASSUMED' IN TYPEOF(SELF));
  wr96: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ITEM_DEFINED_TRANSFORMATION' IN TYPEOF(SELF));
  wr97: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr98: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr99: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_ITEM_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr100: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_SUPPORT_ASSIGNMENT' IN TYPEOF(SELF));
  wr101: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.JUSTIFICATION_SUPPORT_ITEM_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr102: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LANGUAGE' IN TYPEOF(SELF));
  wr103: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCAL_TIME' IN TYPEOF(SELF));
  wr104: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCATION' IN TYPEOF(SELF));
  wr105: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.LOCATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr106: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MEASURE_QUALIFICATION' IN TYPEOF(SELF));
  wr107: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MEASURE_WITH_UNIT' IN TYPEOF(SELF));
  wr108: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT' IN TYPEOF(SELF));
  wr109: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.NAMED_UNIT' IN TYPEOF(SELF));
  wr110: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.OBSERVED_ENVIRONMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr111: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATION' IN TYPEOF(SELF));
  wr112: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr113: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATIONAL_PROJECT' IN TYPEOF(SELF));
  wr114: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.ORGANIZATIONAL_PROJECT_RELATIONSHIP' IN TYPEOF(SELF));
  wr115: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PARAMETER_VALUE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr116: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PARAMETER_VALUE_SELECT' IN TYPEOF(SELF));
  wr117: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PERSON' IN TYPEOF(SELF));
  wr118: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PERSON_AND_ORGANIZATION' IN TYPEOF(SELF));
  wr119: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRECISION_QUALIFIER' IN TYPEOF(SELF));
  wr120: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT' IN TYPEOF(SELF));
  wr121: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_CONCEPT' IN TYPEOF(SELF));
  wr122: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_CONCEPT_CONTEXT' IN TYPEOF(SELF));
  wr123: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION' IN TYPEOF(SELF));
  wr124: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_CONTEXT' IN TYPEOF(SELF));
  wr125: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_FORMATION' IN TYPEOF(SELF));
  wr126: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr127: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_GROUP_ASSIGNMENT' IN TYPEOF(SELF));
  wr128: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  wr129: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_GROUP' IN TYPEOF(SELF));
  wr130: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  wr131: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  wr132: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PROPERTY_DEFINITION' IN TYPEOF(SELF));
  wr133: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.PROPERTY_DEFINITION_REPRESENTATION' IN TYPEOF(SELF));
  wr134: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION' IN TYPEOF(SELF));
  wr135: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_CONTEXT' IN TYPEOF(SELF));
  wr136: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr137: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr138: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REQUIREMENT_ASSIGNMENT' IN TYPEOF(SELF));
  wr139: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.REQUIREMENT_SOURCE' IN TYPEOF(SELF));
  wr140: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.RESOURCE_PROPERTY' IN TYPEOF(SELF));
  wr141: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.RESOURCE_PROPERTY_REPRESENTATION' IN TYPEOF(SELF));
  wr142: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SAME_AS_EXTERNAL_ITEM_ASSIGNMENT' IN TYPEOF(SELF));
  wr143: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SATISFIES_REQUIREMENT' IN TYPEOF(SELF));
  wr144: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SECURITY_CLASSIFICATION' IN TYPEOF(SELF));
  wr145: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SHAPE_ASPECT' IN TYPEOF(SELF));
  wr146: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.SHAPE_ASPECT_RELATIONSHIP' IN TYPEOF(SELF));
  wr147: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED' IN TYPEOF(SELF));
  wr148: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_ASSIGNMENT' IN TYPEOF(SELF));
  wr149: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_RELATIONSHIP' IN TYPEOF(SELF));
  wr150: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_OBSERVED_ROLE' IN TYPEOF(SELF));
  wr151: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  wr152: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_RELATIONSHIP' IN TYPEOF(SELF));
  wr153: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.STATE_TYPE_ROLE' IN TYPEOF(SELF));
  wr154: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TIME_INTERVAL' IN TYPEOF(SELF));
  wr155: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TIME_INTERVAL_RELATIONSHIP' IN TYPEOF(SELF));
  wr156: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.TYPE_QUALIFIER' IN TYPEOF(SELF));
  wr157: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.UNCERTAINTY_QUALIFIER' IN TYPEOF(SELF));
  wr158: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.USAGE_ASSOCIATION' IN TYPEOF(SELF));
  wr159: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VALIDATION' IN TYPEOF(SELF));
  wr160: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERIFICATION' IN TYPEOF(SELF));
  wr161: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERIFICATION_RELATIONSHIP' IN TYPEOF(SELF));
  wr162: NOT ('BEHAVIOUR_DESCRIPTION_ASSIGNMENT_MIM.VERSIONED_ACTION_REQUEST' IN TYPEOF(SELF));
END_TYPE;

TYPE capacitance_measure = REAL;
END_TYPE;

TYPE celsius_temperature_measure = REAL;
END_TYPE;

TYPE certification_item = SELECT
   (action_method,
    action_resource,
    alternate_product_relationship,
    analysis_assignment,
    approval_person_organization,
    assembly_component_usage_substitute,
    behaviour_model_groupable_item,
    configuration_item,
    evidence,
    executed_action,
    interface_connection,
    organizational_project,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    property_definition,
    state_type);
END_TYPE;

TYPE chained_representation_link = SELECT
   (mapped_item,
    representation_context,
    representation_relationship);
END_TYPE;

TYPE characterized_action_definition = SELECT
   (action,
    action_method,
    action_method_relationship,
    action_relationship);
END_TYPE;

TYPE characterized_definition = SELECT
   (characterized_object,
    characterized_product_definition,
    shape_definition);
END_TYPE;

TYPE characterized_product_definition = SELECT
   (product_definition,
    product_definition_relationship);
END_TYPE;

TYPE characterized_resource_definition = SELECT
   (action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship);
END_TYPE;

TYPE classification_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_request_status,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    action_status,
    address,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_contract_assignment,
    applied_date_and_time_assignment,
    applied_date_assignment,
    applied_description_text_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_expression_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_relationship,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    attribute_language_assignment,
    breakdown_element_group_assignment,
    calendar_date,
    certification,
    characterized_object,
    class,
    collection_assignment,
    collection_membership,
    configuration_design,
    configuration_item,
    constrained_general_parameter_relationship,
    context_dependent_unit,
    contract,
    contract_relationship,
    conversion_based_unit,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    derived_unit,
    description_text,
    descriptive_representation_item,
    directed_action,
    document_file,
    document_relationship,
    effectivity,
    effectivity_relationship,
    environment_assignment,
    environment_definition,
    environment_definition_version,
    environment_definition_view,
    environment_view_definition_relationship,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    executed_action,
    expression,
    external_class_library,
    general_model_parameter,
    general_property,
    general_property_relationship,
    group,
    identification_assignment,
    identification_assignment_relationship,
    information_right,
    information_usage_right,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    language,
    local_time,
    location,
    location_relationship,
    measure_representation_item,
    measure_with_unit,
    multi_language_attribute_assignment,
    named_unit,
    observed_environment,
    observed_environment_assignment,
    observed_environment_version,
    observed_environment_view_definition_relationship,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    parameter_value_representation_item,
    person,
    person_and_organization,
    person_and_organization_address,
    product,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_design_to_individual,
    product_group,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_source,
    requirement_view_definition_relationship,
    resource_property,
    resource_property_representation,
    security_classification,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_assignment,
    state_type_relationship,
    text_based_representation,
    time_interval_relationship,
    uncertainty_measure_with_unit,
    usage_association,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE compound_item_definition = SELECT
   (list_representation_item,
    set_representation_item);
END_TYPE;

TYPE conductance_measure = REAL;
END_TYPE;

TYPE configuration_design_item = SELECT
   (product_definition,
    product_definition_formation);
END_TYPE;

TYPE context_dependent_measure = REAL;
END_TYPE;

TYPE contract_item = SELECT
   (action_method,
    applied_action_assignment,
    executed_action,
    information_usage_right,
    organization,
    organization_item,
    organizational_project,
    person_and_organization,
    person_and_organization_item,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    requirement_assignment,
    requirement_source,
    security_classification,
    validation,
    verification);
END_TYPE;

TYPE count_measure = NUMBER;
END_TYPE;

TYPE date_and_time_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_requirement,
    address,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    breakdown_element_realization,
    certification,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    document_file,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    identification_assignment_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    organization_relationship,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_design_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    security_classification,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE date_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_requirement,
    address,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    breakdown_element_realization,
    certification,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    document_file,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    identification_assignment_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    organization_relationship,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_design_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    security_classification,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE date_time_or_event_occurrence = SELECT
   (date_time_select,
    event_occurrence);
END_TYPE;

TYPE date_time_select = SELECT
   (date,
    date_and_time,
    local_time);
END_TYPE;

TYPE day_in_month_number = INTEGER ;
WHERE
  WR1: {1 <= SELF <= 31};
END_TYPE;

TYPE derived_property_select = SELECT
   (action_property,
    property_definition,
    resource_property);
END_TYPE;

TYPE description_attribute_select = SELECT
   (action_request_solution,
    application_context,
    approval_role,
    configuration_design,
    context_dependent_shape_representation,
    date_role,
    date_time_role,
    effectivity,
    external_source,
    organization_role,
    person_and_organization,
    person_and_organization_role,
    person_role,
    property_definition_representation,
    representation,
    time_role);
END_TYPE;

TYPE description_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    address,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    approval,
    approval_relationship,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    certification,
    characterized_object,
    class,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    derived_unit,
    description_text,
    document_file,
    document_relationship,
    effectivity,
    effectivity_relationship,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    executed_action,
    expression,
    external_source,
    general_property,
    general_property_relationship,
    geometric_item_specific_usage,
    group,
    group_relationship,
    identification_assignment_relationship,
    location,
    location_relationship,
    measure_qualification,
    measure_with_unit,
    named_unit,
    organization,
    organization_relationship,
    organizational_project,
    organizational_project_relationship,
    person,
    person_and_organization,
    product,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_item,
    representation_relationship,
    resource_property,
    resource_property_representation,
    same_as_external_item_assignment,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    state_observed,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_relationship,
    state_type_role,
    time_interval,
    time_interval_relationship,
    time_interval_role,
    uncertainty_qualifier,
    versioned_action_request);
END_TYPE;

TYPE descriptive_measure = STRING;
END_TYPE;

TYPE dimension_count = INTEGER ;
WHERE
  WR1: SELF > 0;
END_TYPE;

TYPE document_reference_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    address,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    certification,
    class,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    document_file,
    effectivity,
    evidence,
    executed_action,
    external_state_based_behaviour_model,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    location,
    location_relationship,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    person_and_organization_address,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_design_to_individual,
    product_group_membership,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_item,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    state_observed,
    state_type,
    state_type_relationship,
    usage_association,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE dose_equivalent_measure = REAL;
END_TYPE;

TYPE effectivity_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_request_solution,
    action_resource_relationship,
    action_resource_requirement_relationship,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    configuration_item,
    constrained_general_parameter_relationship,
    date_and_time_assignment,
    date_assignment,
    document_file,
    document_relationship,
    event_occurrence,
    evidence,
    executed_action,
    identification_assignment_relationship,
    in_zone,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    multi_language_attribute_assignment,
    organization_relationship,
    organizational_address,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_definition_usage,
    product_design_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    state_observed_assignment,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    verification_relationship);
END_TYPE;

TYPE electric_charge_measure = REAL;
END_TYPE;

TYPE electric_current_measure = REAL;
END_TYPE;

TYPE electric_potential_measure = REAL;
END_TYPE;

TYPE energy_measure = REAL;
END_TYPE;

TYPE event_occurrence_item = SELECT
   (action_method,
    action_method_relationship,
    action_property,
    action_relationship,
    action_resource_requirement,
    alternate_product_relationship,
    applied_action_method_assignment,
    applied_contract_assignment,
    applied_organizational_project_assignment,
    approval,
    assembly_component_usage_substitute,
    certification,
    contract,
    contract_relationship,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    group,
    organizational_project,
    product,
    product_concept_context,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    representation,
    representation_item,
    resource_property,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_relationship,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE evidence_item = SELECT
   (action_actual,
    action_directive,
    action_method,
    action_method_assignment_relationship,
    action_method_relationship,
    action_relationship,
    action_request_solution,
    action_status,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_expression_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    date_and_time_assignment,
    date_assignment,
    directed_action,
    group,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_relationship,
    property_definition,
    representation,
    representation_context,
    representation_item,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE expression_assignment_item = SELECT
   (condition);
END_TYPE;

TYPE external_identification_item = SELECT
   (action_resource_requirement,
    document_file,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_definition);
END_TYPE;

TYPE force_measure = REAL;
END_TYPE;

TYPE founded_item_select = SELECT
   (representation_item);
END_TYPE;

TYPE frequency_measure = REAL;
END_TYPE;

TYPE geometric_item_specific_usage_select = SELECT
   (shape_aspect,
    shape_aspect_relationship);
END_TYPE;

TYPE groupable_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_request_status,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    action_status,
    address,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_name_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_relationship,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    attribute_language_assignment,
    breakdown_element_group_assignment,
    breakdown_of,
    calendar_date,
    certification,
    characterized_object,
    class,
    collection_assignment,
    collection_membership,
    configuration_design,
    configuration_item,
    configuration_item_relationship,
    context_dependent_shape_representation,
    contract,
    contract_relationship,
    coordinated_universal_time_offset,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    derived_unit,
    derived_unit_element,
    description_text,
    document_file,
    document_relationship,
    effectivity,
    effectivity_relationship,
    environment_assignment,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    executed_action,
    external_source,
    functional_model,
    general_property,
    general_property_relationship,
    geometric_item_specific_usage,
    group,
    group_relationship,
    identification_assignment_relationship,
    in_zone,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_definition,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    item_assumed,
    item_defined_transformation,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    language,
    local_time,
    location,
    location_relationship,
    measure_qualification,
    measure_with_unit,
    multi_language_attribute_assignment,
    named_unit,
    observed_environment_assignment,
    organization,
    organization_relationship,
    organizational_project,
    organizational_project_relationship,
    parameter_value_representation_item,
    parameter_value_select,
    person,
    person_and_organization,
    precision_qualifier,
    product,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    same_as_external_item_assignment,
    satisfies_requirement,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    state_based_behaviour_model,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_assignment,
    state_type_relationship,
    state_type_role,
    time_interval,
    time_interval_relationship,
    type_qualifier,
    uncertainty_qualifier,
    usage_association,
    validation,
    verification,
    verification_relationship,
    versioned_action_request) ;
WHERE
  WR1: NOT ('SYSTEM_MODELLING_MIM_LF.GROUP' IN TYPEOF(SELF));
END_TYPE;

TYPE hour_in_day = INTEGER ;
WHERE
  WR1: {0 <= SELF < 24};
END_TYPE;

TYPE id_attribute_select = SELECT
   (action,
    address,
    application_context,
    group,
    organizational_project,
    product_category,
    property_definition,
    representation,
    shape_aspect,
    shape_aspect_relationship);
END_TYPE;

TYPE identification_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_relationship,
    action_resource,
    action_resource_requirement,
    action_resource_requirement_relationship,
    address,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_description_text_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_external_identification_assignment,
    applied_organization_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    approval,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    assumption,
    assumption_relationship,
    certification,
    class,
    configuration_item,
    contract,
    contract_relationship,
    descriptive_representation_item,
    document_file,
    effectivity,
    environment_assignment,
    environment_definition,
    environment_definition_version,
    environment_view_definition_relationship,
    event_occurrence,
    evidence,
    executed_action,
    external_class_library,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    identification_assignment_relationship,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    observed_environment,
    observed_environment_assignment,
    observed_environment_version,
    observed_environment_view_definition_relationship,
    organization,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_usage,
    product_relationship,
    property_definition,
    representation,
    representation_item,
    requirement_assignment,
    requirement_source,
    resource_property,
    security_classification,
    security_classification_level,
    shape_aspect_relationship,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    usage_association,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE identifier = STRING;
END_TYPE;

TYPE illuminance_measure = REAL;
END_TYPE;

TYPE inductance_measure = REAL;
END_TYPE;

TYPE ir_usage_item = action_items ;
WHERE
  wr1: NOT ('INFORMATION_RIGHTS_MIM.ACTION_METHOD_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  wr2: NOT ('INFORMATION_RIGHTS_MIM.ADDRESS' IN TYPEOF(SELF));
  wr3: NOT ('INFORMATION_RIGHTS_MIM.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(SELF));
  wr4: NOT ('INFORMATION_RIGHTS_MIM.APPLIED_APPROVAL_ASSIGNMENT' IN TYPEOF(SELF));
  wr5: NOT ('INFORMATION_RIGHTS_MIM.APPLIED_EVENT_OCCURRENCE_ASSIGNMENT' IN TYPEOF(SELF));
  wr6: NOT ('INFORMATION_RIGHTS_MIM.APPLIED_LOCATION_REPRESENTATION_ASSIGNMENT' IN TYPEOF(SELF));
  wr7: NOT ('INFORMATION_RIGHTS_MIM.APPLIED_STATE_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  wr8: NOT ('INFORMATION_RIGHTS_MIM.APPROVAL' IN TYPEOF(SELF));
  wr9: NOT ('INFORMATION_RIGHTS_MIM.ASCRIBABLE_STATE' IN TYPEOF(SELF));
  wr10: NOT ('INFORMATION_RIGHTS_MIM.CONFIGURATION_EFFECTIVITY' IN TYPEOF(SELF));
  wr11: NOT ('INFORMATION_RIGHTS_MIM.DATE_AND_TIME_ASSIGNMENT' IN TYPEOF(SELF));
  wr12: NOT ('INFORMATION_RIGHTS_MIM.DATE_ASSIGNMENT' IN TYPEOF(SELF));
  wr13: NOT ('INFORMATION_RIGHTS_MIM.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr14: NOT ('INFORMATION_RIGHTS_MIM.EFFECTIVITY' IN TYPEOF(SELF));
  wr15: NOT ('INFORMATION_RIGHTS_MIM.EVENT_OCCURRENCE' IN TYPEOF(SELF));
  wr16: NOT ('INFORMATION_RIGHTS_MIM.EXECUTED_ACTION' IN TYPEOF(SELF));
  wr17: NOT ('INFORMATION_RIGHTS_MIM.GENERAL_PROPERTY' IN TYPEOF(SELF));
  wr18: NOT ('INFORMATION_RIGHTS_MIM.INTERFACE_CONNECTION' IN TYPEOF(SELF));
  wr19: NOT ('INFORMATION_RIGHTS_MIM.INTERFACE_CONNECTOR_OCCURRENCE' IN TYPEOF(SELF));
  wr20: NOT ('INFORMATION_RIGHTS_MIM.LOCATION' IN TYPEOF(SELF));
  wr21: NOT ('INFORMATION_RIGHTS_MIM.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  wr22: NOT ('INFORMATION_RIGHTS_MIM.PERSON' IN TYPEOF(SELF));
  wr23: NOT ('INFORMATION_RIGHTS_MIM.PRODUCT_CONCEPT' IN TYPEOF(SELF));
  wr24: NOT ('INFORMATION_RIGHTS_MIM.PRODUCT_GROUP_MEMBERSHIP' IN TYPEOF(SELF));
  wr25: NOT ('INFORMATION_RIGHTS_MIM.REPRESENTATION' IN TYPEOF(SELF));
  wr26: NOT ('INFORMATION_RIGHTS_MIM.REQUIREMENT_SOURCE' IN TYPEOF(SELF));
  wr27: NOT ('INFORMATION_RIGHTS_MIM.REQUIREMENT_VIEW_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  wr28: NOT ('INFORMATION_RIGHTS_MIM.RESOURCE_PROPERTY' IN TYPEOF(SELF));
  wr29: NOT ('INFORMATION_RIGHTS_MIM.STATE_OBSERVED' IN TYPEOF(SELF));
  wr30: NOT ('INFORMATION_RIGHTS_MIM.STATE_OBSERVED_ASSIGNMENT' IN TYPEOF(SELF));
  wr31: NOT ('INFORMATION_RIGHTS_MIM.STATE_OBSERVED_RELATIONSHIP' IN TYPEOF(SELF));
  wr32: NOT ('INFORMATION_RIGHTS_MIM.STATE_TYPE' IN TYPEOF(SELF));
  wr33: NOT ('INFORMATION_RIGHTS_MIM.VERSIONED_ACTION_REQUEST' IN TYPEOF(SELF));
END_TYPE;

TYPE justification_item = SELECT
   (action_directive,
    action_method,
    action_method_assignment_relationship,
    action_method_relationship,
    action_property,
    action_request_solution,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_classification_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_location_assignment,
    applied_organizational_project_assignment,
    applied_usage_right,
    approval,
    ascribable_state,
    assembly_component_usage_substitute,
    certification,
    contract,
    contract_relationship,
    description_text,
    descriptive_representation_item,
    document_relationship,
    effectivity,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    group,
    information_usage_right,
    measure_representation_item,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    property_definition,
    representation,
    requirement_assignment,
    resource_property,
    security_classification,
    state_observed_assignment,
    state_type_assignment,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE justification_support_item = SELECT
   (action_directive,
    action_method,
    action_property,
    action_request_solution,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_person_and_organization_assignment,
    approval,
    certification,
    contract,
    contract_relationship,
    descriptive_representation_item,
    document_relationship,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    interface_connection,
    interface_connector_occurrence,
    location,
    measure_representation_item,
    organizational_project,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    property_definition,
    resource_property,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE label = STRING;
END_TYPE;

TYPE length_measure = REAL;
END_TYPE;

TYPE list_representation_item = LIST[1:?] OF representation_item;
END_TYPE;

TYPE location_item = SELECT
   (action_method,
    action_request_solution,
    action_resource,
    action_resource_requirement,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    document_file,
    event_occurrence,
    executed_action,
    interface_connection,
    interface_connector_occurrence,
    organization,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    product_group,
    validation,
    verification);
END_TYPE;

TYPE location_representation_item = SELECT
   (organizational_address,
    person_and_organization_address,
    product,
    product_definition_formation);
END_TYPE;

TYPE luminous_flux_measure = REAL;
END_TYPE;

TYPE luminous_intensity_measure = REAL;
END_TYPE;

TYPE magnetic_flux_density_measure = REAL;
END_TYPE;

TYPE magnetic_flux_measure = REAL;
END_TYPE;

TYPE mass_measure = REAL;
END_TYPE;

TYPE measure_value = SELECT
   (absorbed_dose_measure,
    acceleration_measure,
    amount_of_substance_measure,
    area_measure,
    capacitance_measure,
    celsius_temperature_measure,
    conductance_measure,
    context_dependent_measure,
    count_measure,
    descriptive_measure,
    dose_equivalent_measure,
    electric_charge_measure,
    electric_current_measure,
    electric_potential_measure,
    energy_measure,
    force_measure,
    frequency_measure,
    illuminance_measure,
    inductance_measure,
    length_measure,
    luminous_flux_measure,
    luminous_intensity_measure,
    magnetic_flux_density_measure,
    magnetic_flux_measure,
    mass_measure,
    non_negative_length_measure,
    numeric_measure,
    parameter_value,
    plane_angle_measure,
    positive_length_measure,
    positive_plane_angle_measure,
    positive_ratio_measure,
    power_measure,
    pressure_measure,
    radioactivity_measure,
    ratio_measure,
    resistance_measure,
    solid_angle_measure,
    thermodynamic_temperature_measure,
    time_measure,
    velocity_measure,
    volume_measure);
END_TYPE;

TYPE message = STRING;
END_TYPE;

TYPE minute_in_hour = INTEGER ;
WHERE
  WR1: {0 <= SELF <= 59};
END_TYPE;

TYPE month_in_year_number = INTEGER ;
WHERE
  WR1: {1 <= SELF <= 12};
END_TYPE;

TYPE multi_language_attribute_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_relationship,
    action_resource_requirement,
    action_resource_requirement_relationship,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_organizational_project_assignment,
    approval,
    approval_relationship,
    approval_status,
    assembly_component_usage_substitute,
    breakdown_element_group_assignment,
    certification,
    certification_type,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    date_role,
    date_time_role,
    document_relationship,
    document_usage_role,
    event_occurrence,
    evidence,
    executed_action,
    external_source,
    general_property,
    general_property_relationship,
    identification_role,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    location,
    location_relationship,
    object_role,
    organization_relationship,
    organizational_project,
    organizational_project_relationship,
    organizational_project_role,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_relationship,
    product_relationship,
    property_definition,
    representation,
    representation_item,
    requirement_assignment,
    requirement_source,
    resource_property,
    state_observed,
    state_observed_relationship,
    state_type,
    state_type_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE name_attribute_select = SELECT
   (action_request_solution,
    address,
    configuration_design,
    context_dependent_shape_representation,
    derived_unit,
    effectivity,
    person_and_organization,
    product_definition,
    property_definition_representation);
END_TYPE;

TYPE name_item = SELECT
   (applied_action_method_assignment,
    assembly_component_usage,
    breakdown_element_group_assignment,
    event_occurrence,
    external_class_library,
    group,
    group_relationship,
    product,
    product_definition,
    product_definition_group_assignment,
    product_definition_usage);
END_TYPE;

TYPE non_negative_length_measure = length_measure ;
WHERE
  WR1: SELF >= 0.000000;
END_TYPE;

TYPE numeric_measure = NUMBER;
END_TYPE;

TYPE organization_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_requirement,
    address,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    approval,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    breakdown_element_realization,
    certification,
    class,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    document_file,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    identification_assignment_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    organization,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    security_classification,
    shape_aspect_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE parameter_value = REAL;
END_TYPE;

TYPE parameter_value_select = SELECT
   (generic_expression,
    measure_with_unit,
    product_definition,
    representation,
    representation_item,
    state_type);
END_TYPE;

TYPE person_and_organization_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_resource,
    action_resource_requirement,
    address,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    approval,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    assumption,
    assumption_assignment,
    assumption_relationship,
    breakdown_element_group_assignment,
    breakdown_element_realization,
    certification,
    class,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    document_file,
    effectivity,
    event_occurrence,
    evidence,
    executed_action,
    general_property,
    general_property_relationship,
    identification_assignment_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    item_assumed,
    justification_assignment,
    justification_group_assignment,
    justification_item_group_assignment,
    justification_support_assignment,
    justification_support_item_group_assignment,
    measure_representation_item,
    organization,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_source,
    resource_property,
    resource_property_representation,
    security_classification,
    shape_aspect_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE person_organization_select = SELECT
   (organization,
    person,
    person_and_organization);
END_TYPE;

TYPE plane_angle_measure = REAL;
END_TYPE;

TYPE positive_length_measure = non_negative_length_measure ;
WHERE
  WR1: SELF > 0.000000;
END_TYPE;

TYPE positive_plane_angle_measure = plane_angle_measure ;
WHERE
  WR1: SELF > 0.000000;
END_TYPE;

TYPE positive_ratio_measure = ratio_measure ;
WHERE
  WR1: SELF > 0.000000;
END_TYPE;

TYPE power_measure = REAL;
END_TYPE;

TYPE pressure_measure = REAL;
END_TYPE;

TYPE process_or_process_relationship = SELECT
   (relationship_with_condition);
END_TYPE;

TYPE product_definition_or_breakdown_element_usage = SELECT
   (product_definition,
    product_definition_usage);
END_TYPE;

TYPE product_definition_or_product_definition_relationship = SELECT
   (interface_connector_occurrence,
    product_definition,
    product_definition_usage);
END_TYPE;

TYPE product_or_formation_or_definition = SELECT
   (product,
    product_definition,
    product_definition_formation);
END_TYPE;

TYPE product_select = SELECT
   (action_method,
    environment_definition_view,
    executed_action,
    location,
    organization,
    person,
    product,
    product_concept,
    product_definition_formation,
    product_group,
    validation,
    verification);
END_TYPE;

TYPE project_item = SELECT
   (action_method,
    action_method_relationship,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    assembly_component_usage_substitute,
    configuration_item,
    executed_action,
    general_property,
    interface_connection,
    organization,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    product_group,
    product_group_membership,
    product_group_relationship,
    representation);
END_TYPE;

TYPE radioactivity_measure = REAL;
END_TYPE;

TYPE ratio_measure = REAL;
END_TYPE;

TYPE relationship_with_condition = SELECT
   (action_method_relationship,
    action_relationship,
    context_dependent_action_method_relationship,
    context_dependent_action_relationship);
END_TYPE;

TYPE representation_proxy_select = SELECT
   (action_method,
    product_definition_formation,
    state_type,
    state_type_relationship);
END_TYPE;

TYPE represented_definition = SELECT
   (general_property,
    property_definition,
    shape_aspect,
    shape_aspect_relationship);
END_TYPE;

TYPE requirement_assigned_item = SELECT
   (action_method,
    action_property,
    alternate_product_relationship,
    applied_action_method_assignment,
    assembly_component_usage_substitute,
    breakdown_element_group_assignment,
    configuration_item,
    in_zone,
    interface_connector_occurrence,
    organizational_project,
    product,
    product_definition,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    requirement_for_action_resource,
    state_observed,
    state_observed_assignment,
    state_type,
    state_type_assignment,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE requirement_satisfaction_item = SELECT
   (requirement_assigned_item);
END_TYPE;

TYPE requirement_source_item = SELECT
   (action_method,
    alternate_product_relationship,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_contract_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    approval_person_organization,
    characterized_object,
    directed_action,
    in_zone,
    interface_connector_occurrence,
    organization,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    shape_aspect,
    state_observed,
    state_observed_assignment,
    state_type,
    state_type_assignment,
    validation,
    verification);
END_TYPE;

TYPE resistance_measure = REAL;
END_TYPE;

TYPE role_select = SELECT
   (action_assignment,
    action_request_assignment,
    approval_assignment,
    approval_date_time,
    certification_assignment,
    contract_assignment,
    document_reference,
    effectivity_assignment,
    external_referent_assignment,
    group_assignment,
    name_assignment,
    security_classification_assignment);
END_TYPE;

TYPE same_as_item = SELECT
   (action_method,
    action_property,
    action_request_status,
    action_resource,
    action_resource_requirement,
    action_status,
    address,
    applied_action_method_assignment,
    applied_external_identification_assignment,
    applied_location_representation_assignment,
    approval,
    approval_status,
    ascribable_state,
    attribute_language_assignment,
    breakdown_context,
    calendar_date,
    certification,
    characterized_object,
    configuration_effectivity,
    contract,
    coordinated_universal_time_offset,
    date_and_time,
    derived_unit,
    derived_unit_element,
    description_text,
    event_occurrence,
    evidence,
    executed_action,
    external_source,
    general_property,
    information_right,
    information_usage_right,
    language,
    local_time,
    location,
    measure_qualification,
    measure_with_unit,
    named_unit,
    organization,
    person,
    precision_qualifier,
    product,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    representation,
    representation_context,
    requirement_source,
    resource_property,
    security_classification,
    state_observed,
    state_observed_role,
    state_type,
    state_type_role,
    time_interval,
    type_qualifier,
    uncertainty_qualifier,
    usage_association);
END_TYPE;

TYPE second_in_minute = REAL ;
WHERE
  WR1: {0 <= SELF <= 60.000000};
END_TYPE;

TYPE security_classification_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_request_solution,
    action_request_status,
    action_resource,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    assembly_component_usage,
    assembly_component_usage_substitute,
    breakdown_element_group_assignment,
    configuration_item,
    document_file,
    event_occurrence,
    evidence,
    executed_action,
    in_zone,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    organizational_project_relationship,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_definition_usage,
    product_design_to_individual,
    product_design_version_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    requirement_assignment,
    requirement_source,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE set_representation_item = SET[1:?] OF representation_item;
END_TYPE;

TYPE shape_definition = SELECT
   (product_definition_shape,
    shape_aspect,
    shape_aspect_relationship);
END_TYPE;

TYPE si_prefix = ENUMERATION OF
   (exa,
    peta,
    tera,
    giga,
    mega,
    kilo,
    hecto,
    deca,
    deci,
    centi,
    milli,
    micro,
    nano,
    pico,
    femto,
    atto);
END_TYPE;

TYPE si_unit_name = ENUMERATION OF
   (metre,
    gram,
    second,
    ampere,
    kelvin,
    mole,
    candela,
    radian,
    steradian,
    hertz,
    newton,
    pascal,
    joule,
    watt,
    coulomb,
    volt,
    farad,
    ohm,
    siemens,
    weber,
    tesla,
    henry,
    degree_Celsius,
    lumen,
    lux,
    becquerel,
    gray,
    sievert);
END_TYPE;

TYPE solid_angle_measure = REAL;
END_TYPE;

TYPE source_item = SELECT
   (identifier,
    message);
END_TYPE;

TYPE state_based_behaviour_element = SELECT
   (state_type,
    state_type_relationship);
END_TYPE;

TYPE state_observed_of_item = SELECT
   (action_directive,
    action_method,
    action_property,
    action_resource,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_contract_assignment,
    applied_location_assignment,
    applied_organizational_project_assignment,
    approval,
    assumption,
    breakdown_element_group_assignment,
    configuration_item,
    contract,
    executed_action,
    group,
    location,
    organizational_project,
    product,
    product_concept,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    property_definition,
    requirement_assignment,
    resource_property,
    state_observed_assignment,
    versioned_action_request);
END_TYPE;

TYPE state_type_of_item = SELECT
   (action_directive,
    action_method,
    action_method_assignment_relationship,
    action_resource,
    action_resource_relationship,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_external_identification_assignment,
    approval,
    assembly_component_usage_substitute,
    assumption,
    breakdown_element_group_assignment,
    certification,
    configuration_item,
    contract,
    contract_relationship,
    document_file,
    event_occurrence,
    executed_action,
    group,
    location,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    security_classification,
    state_observed,
    versioned_action_request);
END_TYPE;

TYPE supported_item = SELECT
   (action,
    action_directive,
    action_method);
END_TYPE;

TYPE text = STRING;
END_TYPE;

TYPE text_based_item_select = SELECT
   (included_text_based_representation,
    textual_expression_composition,
    textual_expression_representation_item);
END_TYPE;

TYPE thermodynamic_temperature_measure = REAL;
END_TYPE;

TYPE time_interval_item = SELECT
   (action,
    action_directive,
    action_request_solution,
    applied_action_request_assignment,
    directed_action,
    versioned_action_request);
END_TYPE;

TYPE time_measure = REAL;
END_TYPE;

TYPE transformation = SELECT
   (functionally_defined_transformation,
    item_defined_transformation);
END_TYPE;

TYPE unit = SELECT
   (derived_unit,
    named_unit);
END_TYPE;

TYPE value_qualifier = SELECT
   (precision_qualifier,
    type_qualifier,
    uncertainty_qualifier);
END_TYPE;

TYPE vector_or_direction = SELECT
   (direction,
    vector);
END_TYPE;

TYPE velocity_measure = REAL;
END_TYPE;

TYPE volume_measure = REAL;
END_TYPE;

TYPE year_number = INTEGER;
END_TYPE;

ENTITY absorbed_dose_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ABSORBED_DOSE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY absorbed_dose_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(gray);
END_ENTITY;

ENTITY acceleration_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ACCELERATION_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY acceleration_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(1.000000, 0.000000, - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000);
END_ENTITY;

ENTITY action;
  name : label;
  description : OPTIONAL text;
  chosen_method : action_method;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY action_actual
  SUBTYPE OF (executed_action);
END_ENTITY;

ENTITY action_assignment
  ABSTRACT SUPERTYPE ;
  assigned_action : action;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY action_directive;
  name : label;
  description : OPTIONAL text;
  analysis : text;
  comment : text;
  requests : SET[1:?] OF versioned_action_request;
END_ENTITY;

ENTITY action_happening
  SUBTYPE OF (action_relationship);
END_ENTITY;

ENTITY action_method;
  name : label;
  description : OPTIONAL text;
  consequence : text;
  purpose : text;
END_ENTITY;

ENTITY action_method_assignment
  ABSTRACT SUPERTYPE ;
  assigned_action_method : action_method;
  role : action_method_role;
END_ENTITY;

ENTITY action_method_assignment_relationship;
  relating_assignment : action_method_assignment;
  related_assignment : action_method_assignment;
END_ENTITY;

ENTITY action_method_relationship;
  name : label;
  description : OPTIONAL text;
  relating_method : action_method;
  related_method : action_method;
END_ENTITY;

ENTITY action_method_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY action_method_to_select_from
  SUBTYPE OF (action_method);
  number_of_elements : count_measure;
WHERE
  WR1: number_of_elements >= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.ACTION_METHOD_RELATIONSHIP.RELATING_METHOD')) >= number_of_elements;
END_ENTITY;

ENTITY action_method_with_associated_documents
  SUBTYPE OF (action_method);
  documents : SET[1:?] OF document;
END_ENTITY;

ENTITY action_method_with_associated_documents_constrained
  SUBTYPE OF (action_method_with_associated_documents);
  usage_constraints : SET[1:?] OF document_usage_constraint;
WHERE
  WR1: SIZEOF(QUERY(item <* usage_constraints | NOT (item.source IN SELF\action_method_with_associated_documents.documents))) = 0;
END_ENTITY;

ENTITY action_property;
  name : label;
  description : text;
  definition : characterized_action_definition;
END_ENTITY;

ENTITY action_property_representation;
  name : label;
  description : text;
  property : action_property;
  representation : representation;
END_ENTITY;

ENTITY action_relationship;
  name : label;
  description : OPTIONAL text;
  relating_action : action;
  related_action : action;
END_ENTITY;

ENTITY action_request_assignment
  ABSTRACT SUPERTYPE ;
  assigned_action_request : versioned_action_request;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY action_request_solution;
  method : action_method;
  request : versioned_action_request;
DERIVE
  description : text := get_description_value(SELF);
  name : label := get_name_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY action_request_status;
  status : label;
  assigned_request : versioned_action_request;
END_ENTITY;

ENTITY action_resource;
  name : label;
  description : OPTIONAL text;
  usage : SET[1:?] OF supported_item;
  kind : action_resource_type;
END_ENTITY;

ENTITY action_resource_relationship;
  name : label;
  description : OPTIONAL text;
  relating_resource : action_resource;
  related_resource : action_resource;
END_ENTITY;

ENTITY action_resource_requirement;
  name : label;
  description : text;
  kind : resource_requirement_type;
  operations : SET[1:?] OF characterized_action_definition;
END_ENTITY;

ENTITY action_resource_requirement_relationship;
  name : label;
  description : text;
  relating_action_resource_requirement : action_resource_requirement;
  related_action_resource_requirement : action_resource_requirement;
WHERE
  WR1: relating_action_resource_requirement :<>: related_action_resource_requirement;
END_ENTITY;

ENTITY action_resource_type;
  name : label;
END_ENTITY;

ENTITY action_status;
  status : label;
  assigned_action : executed_action;
END_ENTITY;

ENTITY address;
  internal_location : OPTIONAL label;
  street_number : OPTIONAL label;
  street : OPTIONAL label;
  postal_box : OPTIONAL label;
  town : OPTIONAL label;
  region : OPTIONAL label;
  postal_code : OPTIONAL label;
  country : OPTIONAL label;
  facsimile_number : OPTIONAL label;
  telephone_number : OPTIONAL label;
  electronic_mail_address : OPTIONAL label;
  telex_number : OPTIONAL label;
DERIVE
  name : label := get_name_value(SELF);
  url : identifier := get_id_value(SELF);
WHERE
  WR1: EXISTS(internal_location) OR EXISTS(street_number) OR EXISTS(street) OR EXISTS(postal_box) OR EXISTS(town) OR EXISTS(region) OR EXISTS(postal_code) OR EXISTS(country) OR EXISTS(facsimile_number) OR EXISTS(telephone_number) OR EXISTS(electronic_mail_address) OR EXISTS(telex_number);
END_ENTITY;

ENTITY alternate_product_relationship;
  name : label;
  definition : OPTIONAL text;
  alternate : product;
  base : product;
  basis : text;
UNIQUE
  UR1: alternate, base;
WHERE
  WR1: alternate :<>: base;
END_ENTITY;

ENTITY amount_of_substance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.AMOUNT_OF_SUBSTANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY amount_of_substance_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 1.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY analysis_assignment
  SUBTYPE OF (group);
END_ENTITY;

ENTITY analysis_item
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF analysed_item;
  SELF\group_assignment.assigned_group : analysis_assignment;
END_ENTITY;

ENTITY analysis_model
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : analysis_representation_context;
END_ENTITY;

ENTITY analysis_representation_context
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY and_expression
  SUBTYPE OF (multiple_arity_boolean_expression);
END_ENTITY;

ENTITY application_context;
  application : label;
DERIVE
  description : text := get_description_value(SELF);
  id : identifier := get_id_value(SELF);
INVERSE
  context_elements : SET[1:?] OF application_context_element FOR frame_of_reference;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY application_context_element
  SUPERTYPE OF (ONEOF (library_context,
                       product_concept_context,
                       product_context,
                       product_definition_context));
  name : label;
  frame_of_reference : application_context;
END_ENTITY;

ENTITY applied_action_assignment
  SUBTYPE OF (action_assignment);
  items : SET[1:?] OF action_items;
END_ENTITY;

ENTITY applied_action_method_assignment
  SUBTYPE OF (action_method_assignment);
  items : SET[1:?] OF action_method_items;
END_ENTITY;

ENTITY applied_action_request_assignment
  SUBTYPE OF (action_request_assignment);
  items : SET[1:?] OF action_request_item;
END_ENTITY;

ENTITY applied_approval_assignment
  SUBTYPE OF (approval_assignment);
  items : SET[1:?] OF approval_item;
END_ENTITY;

ENTITY applied_certification_assignment
  SUBTYPE OF (certification_assignment);
  items : SET[1:?] OF certification_item;
END_ENTITY;

ENTITY applied_classification_assignment
  SUBTYPE OF (classification_assignment);
  items : SET[1:?] OF classification_item;
END_ENTITY;

ENTITY applied_contract_assignment
  SUBTYPE OF (contract_assignment);
  items : SET[1:?] OF contract_item;
END_ENTITY;

ENTITY applied_date_and_time_assignment
  SUBTYPE OF (date_and_time_assignment);
  items : SET[1:?] OF date_and_time_item;
END_ENTITY;

ENTITY applied_date_assignment
  SUBTYPE OF (date_assignment);
  items : SET[1:?] OF date_item;
END_ENTITY;

ENTITY applied_description_text_assignment
  SUBTYPE OF (description_text_assignment);
  items : SET[1:?] OF description_item;
END_ENTITY;

ENTITY applied_document_reference
  SUBTYPE OF (document_reference);
  items : SET[1:?] OF document_reference_item;
END_ENTITY;

ENTITY applied_document_usage_constraint_assignment
  SUBTYPE OF (document_usage_constraint_assignment);
  items : SET[1:?] OF document_reference_item;
END_ENTITY;

ENTITY applied_effectivity_assignment
  SUBTYPE OF (effectivity_assignment);
  items : SET[1:?] OF effectivity_item;
END_ENTITY;

ENTITY applied_event_occurrence_assignment
  SUBTYPE OF (event_occurrence_assignment);
  items : SET[1:?] OF event_occurrence_item;
END_ENTITY;

ENTITY applied_expression_assignment
  SUBTYPE OF (expression_assignment);
  items : SET[1:?] OF expression_assignment_item;
END_ENTITY;

ENTITY applied_external_identification_assignment
  SUBTYPE OF (external_identification_assignment);
  items : SET[1:?] OF external_identification_item;
END_ENTITY;

ENTITY applied_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:?] OF groupable_item;
END_ENTITY;

ENTITY applied_identification_assignment
  SUBTYPE OF (identification_assignment);
  items : SET[1:?] OF identification_item;
END_ENTITY;

ENTITY applied_location_assignment
  SUBTYPE OF (location_assignment);
  items : SET[1:?] OF location_item;
END_ENTITY;

ENTITY applied_location_representation_assignment
  SUBTYPE OF (location_representation_assignment);
  items : SET[1:?] OF location_representation_item;
END_ENTITY;

ENTITY applied_name_assignment
  SUBTYPE OF (name_assignment);
  item : name_item;
END_ENTITY;

ENTITY applied_organization_assignment
  SUBTYPE OF (organization_assignment);
  items : SET[1:?] OF organization_item;
END_ENTITY;

ENTITY applied_organizational_project_assignment
  SUBTYPE OF (organizational_project_assignment);
  items : SET[1:?] OF project_item;
END_ENTITY;

ENTITY applied_person_and_organization_assignment
  SUBTYPE OF (person_and_organization_assignment);
  items : SET[1:?] OF person_and_organization_item;
END_ENTITY;

ENTITY applied_security_classification_assignment
  SUBTYPE OF (security_classification_assignment);
  items : SET[1:?] OF security_classification_item;
END_ENTITY;

ENTITY applied_state_observed_assignment
  SUBTYPE OF (state_observed_assignment);
  items : SET[1:?] OF state_observed_of_item;
END_ENTITY;

ENTITY applied_state_type_assignment
  SUBTYPE OF (state_type_assignment);
  items : SET[1:?] OF state_type_of_item;
END_ENTITY;

ENTITY applied_time_interval_assignment
  SUBTYPE OF (time_interval_assignment);
  items : SET[0:?] OF time_interval_item;
END_ENTITY;

ENTITY applied_usage_right
  SUBTYPE OF (applied_action_assignment);
  SELF\applied_action_assignment.items : SET[1:?] OF ir_usage_item;
END_ENTITY;

ENTITY approval;
  status : approval_status;
  level : label;
END_ENTITY;

ENTITY approval_assignment
  ABSTRACT SUPERTYPE ;
  assigned_approval : approval;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY approval_date_time;
  date_time : date_time_select;
  dated_approval : approval;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY approval_person_organization;
  person_organization : person_organization_select;
  authorized_approval : approval;
  role : approval_role;
END_ENTITY;

ENTITY approval_relationship;
  name : label;
  description : OPTIONAL text;
  relating_approval : approval;
  related_approval : approval;
END_ENTITY;

ENTITY approval_role;
  role : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY approval_status;
  name : label;
END_ENTITY;

ENTITY area_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.AREA_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY area_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(2.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
END_ENTITY;

ENTITY ascribable_state;
  name : label;
  description : OPTIONAL text;
  pertaining_state_type : state_type;
  ascribed_state_observed : state_observed;
END_ENTITY;

ENTITY ascribable_state_relationship;
  name : label;
  description : OPTIONAL text;
  relating_ascribable_state : ascribable_state;
  related_ascribable_state : ascribable_state;
END_ENTITY;

ENTITY assembly_component_usage
  SUPERTYPE OF (ONEOF (next_assembly_usage_occurrence,
                       specified_higher_usage_occurrence,
                       promissory_usage_occurrence))
  SUBTYPE OF (product_definition_usage);
  reference_designator : OPTIONAL identifier;
END_ENTITY;

ENTITY assembly_component_usage_substitute;
  name : label;
  definition : OPTIONAL text;
  base : assembly_component_usage;
  substitute : assembly_component_usage;
UNIQUE
  UR1: base, substitute;
WHERE
  WR1: base.relating_product_definition :=: substitute.relating_product_definition;
  WR2: base :<>: substitute;
END_ENTITY;

ENTITY assigned_analysis
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF product_definition_formation;
  SELF\group_assignment.assigned_group : analysis_assignment;
END_ENTITY;

ENTITY assigned_requirement
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : requirement_assignment;
  items : SET[1:1] OF product_definition;
END_ENTITY;

ENTITY assumption
  SUBTYPE OF (state_observed);
END_ENTITY;

ENTITY assumption_assignment
  SUBTYPE OF (characterized_applied_state_observed_assignment);
END_ENTITY;

ENTITY assumption_relationship
  SUBTYPE OF (state_observed_relationship);
END_ENTITY;

ENTITY attribute_classification_assignment
  ABSTRACT SUPERTYPE ;
  assigned_class : group;
  attribute_name : label;
  role : classification_role;
END_ENTITY;

ENTITY attribute_language_assignment
  SUBTYPE OF (attribute_classification_assignment);
  SELF\attribute_classification_assignment.assigned_class : language;
  items : SET[1:?] OF attribute_language_item;
WHERE
  WR1: SELF\attribute_classification_assignment.role.name IN ['primary', 'translated'];
  WR2: SELF\attribute_classification_assignment.attribute_name <> '';
END_ENTITY;

ENTITY attribute_value_assignment
  ABSTRACT SUPERTYPE ;
  attribute_name : label;
  attribute_value : attribute_type;
  role : attribute_value_role;
END_ENTITY;

ENTITY attribute_value_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY axis1_placement
  SUBTYPE OF (placement);
  axis : OPTIONAL direction;
DERIVE
  z : direction := NVL(normalise(axis), dummy_gri||direction([0.000000, 0.000000, 1.000000]));
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY axis2_placement_2d
  SUBTYPE OF (placement);
  ref_direction : OPTIONAL direction;
DERIVE
  p : LIST[2:2] OF direction := build_2axes(ref_direction);
WHERE
  WR1: SELF\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY axis2_placement_3d
  SUBTYPE OF (placement);
  axis : OPTIONAL direction;
  ref_direction : OPTIONAL direction;
DERIVE
  p : LIST[3:3] OF direction := build_axes(axis, ref_direction);
WHERE
  WR1: SELF\placement.location.dim = 3;
  WR2: (NOT (EXISTS(axis))) OR (axis.dim = 3);
  WR3: (NOT (EXISTS(ref_direction))) OR (ref_direction.dim = 3);
  WR4: (NOT (EXISTS(axis))) OR (NOT (EXISTS(ref_direction))) OR (cross_product(axis, ref_direction).magnitude > 0.000000);
END_ENTITY;

ENTITY binary_boolean_expression
  ABSTRACT SUPERTYPE OF (ONEOF (xor_expression,
                                equals_expression))
  SUBTYPE OF (binary_generic_expression, boolean_expression);
END_ENTITY;

ENTITY binary_function_call
  ABSTRACT SUPERTYPE
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY binary_generic_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (generic_expression);
  operands : LIST[2:2] OF generic_expression;
END_ENTITY;

ENTITY binary_numeric_expression
  ABSTRACT SUPERTYPE OF (ONEOF (minus_expression,
                                div_expression,
                                mod_expression,
                                slash_expression,
                                power_expression,
                                binary_function_call))
  SUBTYPE OF (binary_generic_expression, numeric_expression);
  SELF\binary_generic_expression.operands : LIST[2:2] OF numeric_expression;
END_ENTITY;

ENTITY boolean_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (boolean_expression, defined_function);
END_ENTITY;

ENTITY boolean_expression
  ABSTRACT SUPERTYPE OF (ONEOF (simple_boolean_expression,
                                unary_boolean_expression,
                                binary_boolean_expression,
                                multiple_arity_boolean_expression,
                                comparison_expression,
                                interval_expression,
                                boolean_defined_function))
  SUBTYPE OF (expression);
END_ENTITY;

ENTITY boolean_literal
  SUBTYPE OF (generic_literal, simple_boolean_expression);
  the_value : BOOLEAN;
END_ENTITY;

ENTITY boolean_variable
  SUBTYPE OF (simple_boolean_expression, variable);
END_ENTITY;

ENTITY breakdown_context
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY breakdown_element_group_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_definition_element_relationship;
  items : SET[1:1] OF product_definition_or_breakdown_element_usage;
END_ENTITY;

ENTITY breakdown_element_realization
  SUBTYPE OF (characterized_object, product_definition_element_relationship);
END_ENTITY;

ENTITY breakdown_element_usage
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY breakdown_of
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY calendar_date
  SUBTYPE OF (date);
  day_component : day_in_month_number;
  month_component : month_in_year_number;
WHERE
  WR1: valid_calendar_date(SELF);
END_ENTITY;

ENTITY capacitance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.CAPACITANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY capacitance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(farad);
END_ENTITY;

ENTITY cartesian_point
  SUBTYPE OF (point);
  coordinates : LIST[1:3] OF length_measure;
END_ENTITY;

ENTITY cartesian_transformation_operator
  SUPERTYPE OF (ONEOF (cartesian_transformation_operator_2d,
                       cartesian_transformation_operator_3d))
  SUBTYPE OF (functionally_defined_transformation, geometric_representation_item);
  axis1 : OPTIONAL direction;
  axis2 : OPTIONAL direction;
  local_origin : cartesian_point;
  scale : OPTIONAL REAL;
DERIVE
  scl : REAL := NVL(scale, 1.000000);
WHERE
  WR1: scl > 0.000000;
END_ENTITY;

ENTITY cartesian_transformation_operator_2d
  SUBTYPE OF (cartesian_transformation_operator);
DERIVE
  u : LIST[2:2] OF direction := base_axis(2, SELF\cartesian_transformation_operator.axis1, SELF\cartesian_transformation_operator.axis2, ?);
WHERE
  WR1: SELF\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY cartesian_transformation_operator_3d
  SUBTYPE OF (cartesian_transformation_operator);
  axis3 : OPTIONAL direction;
DERIVE
  u : LIST[3:3] OF direction := base_axis(3, SELF\cartesian_transformation_operator.axis1, SELF\cartesian_transformation_operator.axis2, axis3);
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY celsius_temperature_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY certification;
  name : label;
  purpose : text;
  kind : certification_type;
END_ENTITY;

ENTITY certification_assignment
  ABSTRACT SUPERTYPE ;
  assigned_certification : certification;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY certification_type;
  description : label;
END_ENTITY;

ENTITY chain_based_geometric_item_specific_usage
  SUBTYPE OF (chain_based_item_identified_representation_usage, geometric_item_specific_usage);
END_ENTITY;

ENTITY chain_based_item_identified_representation_usage
  SUBTYPE OF (item_identified_representation_usage);
  nodes : LIST[2:?] OF UNIQUE representation;
  undirected_link : LIST[1:?] OF UNIQUE chained_representation_link;
DERIVE
  root : representation := nodes[1];
  SELF\item_identified_representation_usage.used_representation : representation := nodes[HIINDEX(nodes)];
  directed_link : LIST[1:?] OF representation_relationship := get_directed_link(nodes, undirected_link);
  leaf : representation := SELF\item_identified_representation_usage.used_representation;
WHERE
  WR1: root :=: directed_link[1]\representation_relationship.rep_1;
  WR2: leaf :=: directed_link[HIINDEX(undirected_link)]\representation_relationship.rep_2;
  WR3: SIZEOF(nodes) :=: SIZEOF(undirected_link) + 1;
  WR4: (SIZEOF(QUERY(directed_link_element <* directed_link | (root :=: directed_link_element\representation_relationship.rep_1))) + SIZEOF(QUERY(directed_link_element <* directed_link | (root :=: directed_link_element\representation_relationship.rep_2)))) = 1;
  WR5: (SIZEOF(QUERY(directed_link_element <* directed_link | (leaf :=: directed_link_element\representation_relationship.rep_1))) + SIZEOF(QUERY(directed_link_element <* directed_link | (leaf :=: directed_link_element\representation_relationship.rep_2)))) = 1;
  WR6: (SIZEOF(QUERY(directed_link_element <* directed_link | (root :<>: directed_link_element\representation_relationship.rep_1))) + SIZEOF(QUERY(directed_link_element <* directed_link | (root :<>: directed_link_element\representation_relationship.rep_2))) + SIZEOF(QUERY(directed_link_element <* directed_link | (leaf :<>: directed_link_element\representation_relationship.rep_1))) + SIZEOF(QUERY(directed_link_element <* directed_link | (leaf :<>: directed_link_element\representation_relationship.rep_2)))) = 2;
  WR7: NOT ('SYSTEM_MODELLING_MIM_LF.MAPPED_ITEM' IN TYPEOF(undirected_link[1])) OR (root IN using_representations(undirected_link[1]));
  WR8: SIZEOF(undirected_link) = SIZEOF(directed_link);
END_ENTITY;

ENTITY characterized_applied_state_observed_assignment
  SUBTYPE OF (applied_state_observed_assignment, characterized_object);
END_ENTITY;

ENTITY characterized_location_object
  SUBTYPE OF (characterized_object, location);
END_ENTITY;

ENTITY characterized_object;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY class
  SUBTYPE OF (group);
END_ENTITY;

ENTITY class_by_extension
  SUBTYPE OF (class);
END_ENTITY;

ENTITY class_by_intension
  SUBTYPE OF (class);
END_ENTITY;

ENTITY classification_assignment
  ABSTRACT SUPERTYPE ;
  assigned_class : group;
  role : classification_role;
END_ENTITY;

ENTITY classification_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY collection
  SUBTYPE OF (product);
END_ENTITY;

ENTITY collection_assignment
  SUBTYPE OF (applied_group_assignment);
END_ENTITY;

ENTITY collection_membership
  SUBTYPE OF (applied_group_assignment);
END_ENTITY;

ENTITY collection_relationship
  SUBTYPE OF (product_relationship);
  SELF\product_relationship.relating_product : collection;
  SELF\product_relationship.related_product : collection;
DERIVE
  related_collection : collection := SELF\product_relationship.related_product;
  relating_collection : collection := SELF\product_relationship.relating_product;
END_ENTITY;

ENTITY collection_version
  SUBTYPE OF (product_definition_formation);
  SELF\product_definition_formation.of_product : collection;
DERIVE
  of_collection : collection := SELF\product_definition_formation.of_product;
END_ENTITY;

ENTITY collection_version_relationship
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : collection_version;
  SELF\product_definition_formation_relationship.related_product_definition_formation : collection_version;
DERIVE
  related_version : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
  relating_version : collection_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
END_ENTITY;

ENTITY collection_version_sequence_relationship
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : collection_version;
  SELF\product_definition_formation_relationship.related_product_definition_formation : collection_version;
DERIVE
  predecessor : collection_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
  successor : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
END_ENTITY;

ENTITY collection_view_definition
  SUBTYPE OF (product_definition);
  SELF\product_definition.formation : collection_version;
DERIVE
  defined_version : collection_version := SELF\product_definition.formation;
END_ENTITY;

ENTITY comparison_equal
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY comparison_expression
  ABSTRACT SUPERTYPE OF (ONEOF (comparison_equal,
                                comparison_greater,
                                comparison_greater_equal,
                                comparison_less,
                                comparison_less_equal,
                                comparison_not_equal,
                                like_expression))
  SUBTYPE OF (binary_generic_expression, boolean_expression);
  SELF\binary_generic_expression.operands : LIST[2:2] OF expression;
WHERE
  WR1: (('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2]))) OR (('SYSTEM_MODELLING_MIM_LF.BOOLEAN_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('SYSTEM_MODELLING_MIM_LF.BOOLEAN_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2]))) OR (('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2])));
END_ENTITY;

ENTITY comparison_greater
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY comparison_greater_equal
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY comparison_less
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY comparison_less_equal
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY comparison_not_equal
  SUBTYPE OF (comparison_expression);
END_ENTITY;

ENTITY compound_representation_item
  SUBTYPE OF (representation_item);
  item_element : compound_item_definition;
END_ENTITY;

ENTITY concat_expression
  SUBTYPE OF (multiple_arity_generic_expression, string_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF string_expression;
END_ENTITY;

ENTITY concurrent_action_method
  SUBTYPE OF (action_method_relationship);
END_ENTITY;

ENTITY concurrent_task_element
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY condition
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY conditional_effectivity
  SUBTYPE OF (condition, effectivity);
END_ENTITY;

ENTITY conductance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.CONDUCTANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY conductance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(siemens);
END_ENTITY;

ENTITY configuration_design;
  configuration : configuration_item;
  design : configuration_design_item;
DERIVE
  name : label := get_name_value(SELF);
  description : text := get_description_value(SELF);
UNIQUE
  UR1: configuration, design;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY configuration_effectivity
  SUBTYPE OF (product_definition_effectivity);
  configuration : configuration_design;
UNIQUE
  UR1: configuration, SELF\product_definition_effectivity.usage, SELF\effectivity.id;
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN TYPEOF(SELF\product_definition_effectivity.usage);
END_ENTITY;

ENTITY configuration_item;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  item_concept : product_concept;
  purpose : OPTIONAL label;
END_ENTITY;

ENTITY configuration_item_hierarchical_relationship
  SUBTYPE OF (configuration_item_relationship);
END_ENTITY;

ENTITY configuration_item_relationship;
  name : label;
  description : OPTIONAL text;
  relating_configuration_item : configuration_item;
  related_configuration_item : configuration_item;
END_ENTITY;

ENTITY configuration_item_revision_sequence
  SUBTYPE OF (configuration_item_relationship);
END_ENTITY;

ENTITY constrained_general_parameter_relationship
  SUBTYPE OF (general_property_relationship);
  SELF\general_property_relationship.related_property : general_model_parameter;
  SELF\general_property_relationship.relating_property : general_model_parameter;
END_ENTITY;

ENTITY context_dependent_action_method_relationship;
  name : label;
  relating_relationship : action_method_relationship;
  related_relationship : action_method_relationship;
UNIQUE
  UR1: relating_relationship, related_relationship;
WHERE
  WR1: relating_relationship.relating_method :=: related_relationship.relating_method;
END_ENTITY;

ENTITY context_dependent_action_relationship;
  name : label;
  relating_relationship : action_relationship;
  related_relationship : action_relationship;
UNIQUE
  UR1: relating_relationship, related_relationship;
WHERE
  WR1: relating_relationship.relating_action :=: related_relationship.relating_action;
END_ENTITY;

ENTITY context_dependent_shape_representation;
  representation_relation : shape_representation_relationship;
  represented_product_relation : product_definition_shape;
DERIVE
  description : text := get_description_value(SELF);
  name : label := get_name_value(SELF);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF.represented_product_relation.definition);
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR3: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY context_dependent_unit
  SUBTYPE OF (named_unit);
  name : label;
END_ENTITY;

ENTITY contract;
  name : label;
  purpose : text;
  kind : contract_type;
END_ENTITY;

ENTITY contract_assignment
  ABSTRACT SUPERTYPE ;
  assigned_contract : contract;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY contract_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_contract : contract;
  related_contract : contract;
END_ENTITY;

ENTITY contract_type;
  description : label;
END_ENTITY;

ENTITY conversion_based_unit
  SUBTYPE OF (named_unit);
  name : label;
  conversion_factor : measure_with_unit;
WHERE
  WR1: SELF\named_unit.dimensions = derive_dimensional_exponents(conversion_factor\measure_with_unit.unit_component);
END_ENTITY;

ENTITY coordinated_universal_time_offset;
  hour_offset : INTEGER;
  minute_offset : OPTIONAL INTEGER;
  sense : ahead_or_behind;
DERIVE
  actual_minute_offset : INTEGER := NVL(minute_offset, 0);
WHERE
  WR1: {0 <= hour_offset < 24};
  WR2: {0 <= actual_minute_offset <= 59};
  WR3: NOT (((hour_offset <> 0) OR (actual_minute_offset <> 0)) AND (sense = exact));
END_ENTITY;

ENTITY date;
  year_component : year_number;
END_ENTITY;

ENTITY date_and_time;
  date_component : date;
  time_component : local_time;
END_ENTITY;

ENTITY date_and_time_assignment
  ABSTRACT SUPERTYPE ;
  assigned_date_and_time : date_and_time;
  role : date_time_role;
END_ENTITY;

ENTITY date_assignment
  ABSTRACT SUPERTYPE ;
  assigned_date : date;
  role : date_role;
END_ENTITY;

ENTITY date_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY date_time_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY dated_effectivity
  SUBTYPE OF (effectivity);
  effectivity_end_date : OPTIONAL date_time_or_event_occurrence;
  effectivity_start_date : date_time_or_event_occurrence;
END_ENTITY;

ENTITY decision_point
  SUBTYPE OF (action_method_to_select_from, task_element);
DERIVE
  SELF\action_method_to_select_from.number_of_elements : count_measure := 1;
  SELF\action_method.purpose : text := 'decision';
END_ENTITY;

ENTITY defined_function
  ABSTRACT SUPERTYPE OF ((ONEOF (string_defined_function,
                                 boolean_defined_function))
                        ANDOR SQL_mappable_defined_function);
END_ENTITY;

ENTITY definitional_representation_relationship
  SUBTYPE OF (representation_relationship);
WHERE
  WR1: acyclic_representation_relationship(SELF, [SELF\representation_relationship.rep_2], 'SYSTEM_MODELLING_MIM_LF.' + 'REPRESENTATION');
END_ENTITY;

ENTITY derived_unit
  SUPERTYPE OF (ONEOF (absorbed_dose_unit,
                       acceleration_unit,
                       radioactivity_unit,
                       area_unit,
                       capacitance_unit,
                       dose_equivalent_unit,
                       electric_charge_unit,
                       conductance_unit,
                       electric_potential_unit,
                       energy_unit,
                       magnetic_flux_density_unit,
                       force_unit,
                       frequency_unit,
                       illuminance_unit,
                       inductance_unit,
                       magnetic_flux_unit,
                       power_unit,
                       pressure_unit,
                       resistance_unit,
                       velocity_unit,
                       volume_unit));
  elements : SET[1:?] OF derived_unit_element;
DERIVE
  name : label := get_name_value(SELF);
WHERE
  WR1: (SIZEOF(elements) > 1) OR ((SIZEOF(elements) = 1) AND (elements[1].exponent <> 1.000000));
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY derived_unit_element;
  unit : named_unit;
  exponent : REAL;
END_ENTITY;

ENTITY description_attribute;
  attribute_value : text;
  described_item : description_attribute_select;
END_ENTITY;

ENTITY description_text;
  description : text;
END_ENTITY;

ENTITY description_text_assignment
  ABSTRACT SUPERTYPE ;
  description : description_text;
END_ENTITY;

ENTITY descriptive_representation_item
  SUBTYPE OF (representation_item);
  description : text;
END_ENTITY;

ENTITY dimensional_exponents;
  length_exponent : REAL;
  mass_exponent : REAL;
  time_exponent : REAL;
  electric_current_exponent : REAL;
  thermodynamic_temperature_exponent : REAL;
  amount_of_substance_exponent : REAL;
  luminous_intensity_exponent : REAL;
END_ENTITY;

ENTITY directed_action
  SUBTYPE OF (executed_action);
  directive : action_directive;
END_ENTITY;

ENTITY direction
  SUBTYPE OF (geometric_representation_item);
  direction_ratios : LIST[2:3] OF REAL;
WHERE
  WR1: SIZEOF(QUERY(tmp <* direction_ratios | tmp <> 0.000000)) > 0;
END_ENTITY;

ENTITY div_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY document;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  kind : document_type;
INVERSE
  representation_types : SET[0:?] OF document_representation_type FOR represented_document;
END_ENTITY;

ENTITY document_file
  SUBTYPE OF (characterized_object, document);
WHERE
  WR1: SELF\characterized_object.name = '';
  WR2: NOT EXISTS(SELF\characterized_object.description);
  WR3: SIZEOF(QUERY(drt <* SELF\document.representation_types | drt.name IN ['digital', 'physical'])) = 1;
END_ENTITY;

ENTITY document_product_association;
  name : label;
  description : OPTIONAL text;
  relating_document : document;
  related_product : product_or_formation_or_definition;
END_ENTITY;

ENTITY document_product_equivalence
  SUBTYPE OF (document_product_association);
WHERE
  WR1: SELF\document_product_association.name = 'equivalence';
  WR2: NOT ('SYSTEM_MODELLING_MIM_LF.PRODUCT' IN TYPEOF(SELF\document_product_association.related_product)) OR ((SELF\document_product_association.relating_document.kind.product_data_type = 'configuration controlled document') AND (SIZEOF(QUERY(prpc <* USEDIN(SELF\document_product_association.related_product, 'SYSTEM_MODELLING_MIM_LF.' + 'PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
  WR3: NOT ('SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN TYPEOF(SELF.related_product)) OR ((SELF\document_product_association.relating_document.kind.product_data_type = 'configuration controlled document version') AND (SIZEOF(QUERY(prpc <* USEDIN(SELF.related_product\product_definition_formation.of_product, 'SYSTEM_MODELLING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
  WR4: NOT ('SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF.related_product)) OR ((SELF\document_product_association.relating_document.kind.product_data_type = 'configuration controlled document definition') AND (SIZEOF(QUERY(prpc <* USEDIN(SELF\document_product_association.related_product\product_definition.formation.of_product, 'SYSTEM_MODELLING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
END_ENTITY;

ENTITY document_reference
  ABSTRACT SUPERTYPE ;
  assigned_document : document;
  source : label;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY document_relationship;
  name : label;
  description : OPTIONAL text;
  relating_document : document;
  related_document : document;
END_ENTITY;

ENTITY document_representation_type;
  name : label;
  represented_document : document;
END_ENTITY;

ENTITY document_type;
  product_data_type : label;
END_ENTITY;

ENTITY document_usage_constraint;
  source : document;
  subject_element : label;
  subject_element_value : text;
END_ENTITY;

ENTITY document_usage_constraint_assignment
  ABSTRACT SUPERTYPE ;
  assigned_document_usage : document_usage_constraint;
  role : document_usage_role;
END_ENTITY;

ENTITY document_usage_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY dose_equivalent_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.DOSE_EQUIVALENT_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY dose_equivalent_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(sievert);
END_ENTITY;

ENTITY ds_characterizable_address
  SUBTYPE OF (address, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_applied_action_assignment
  SUBTYPE OF (applied_action_assignment, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_applied_document_reference
  SUBTYPE OF (applied_document_reference, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_applied_document_usage_constraint_assignment
  SUBTYPE OF (applied_document_usage_constraint_assignment, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_applied_organization_assignment
  SUBTYPE OF (applied_organization_assignment, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_applied_person_and_organization_assignment
  SUBTYPE OF (applied_person_and_organization_assignment, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_ascribable_state
  SUBTYPE OF (ascribable_state, characterized_object);
END_ENTITY;

ENTITY ds_characterizable_event_occurrence
  SUBTYPE OF (characterized_object, event_occurrence);
END_ENTITY;

ENTITY ds_characterizable_evidence
  SUBTYPE OF (characterized_object, evidence);
END_ENTITY;

ENTITY ds_characterizable_general_property_relationship
  SUBTYPE OF (characterized_object, general_property_relationship);
END_ENTITY;

ENTITY ds_characterizable_information_usage_right
  SUBTYPE OF (characterized_object, information_usage_right);
END_ENTITY;

ENTITY ds_characterizable_organizational_project
  SUBTYPE OF (characterized_object, organizational_project);
END_ENTITY;

ENTITY ds_characterizable_person
  SUBTYPE OF (characterized_object, person);
END_ENTITY;

ENTITY ds_characterizable_person_and_organization
  SUBTYPE OF (characterized_object, person_and_organization);
END_ENTITY;

ENTITY ds_characterizable_product
  SUBTYPE OF (characterized_object, product);
END_ENTITY;

ENTITY ds_characterizable_product_definition_formation
  SUBTYPE OF (characterized_object, product_definition_formation);
END_ENTITY;

ENTITY ds_characterizable_product_definition_formation_relationship
  SUBTYPE OF (characterized_object, product_definition_formation_relationship);
END_ENTITY;

ENTITY ds_characterizable_property_definition_representation
  SUBTYPE OF (characterized_object, property_definition_representation);
END_ENTITY;

ENTITY ds_characterizable_representation
  SUBTYPE OF (characterized_object, representation);
END_ENTITY;

ENTITY ds_characterizable_representation_context
  SUBTYPE OF (characterized_object, representation_context);
END_ENTITY;

ENTITY ds_characterizable_representation_item
  SUBTYPE OF (characterized_object, representation_item);
END_ENTITY;

ENTITY ds_characterizable_security_classification
  SUBTYPE OF (characterized_object, security_classification);
END_ENTITY;

ENTITY ds_characterizable_state_observed
  SUBTYPE OF (characterized_object, state_observed);
END_ENTITY;

ENTITY ds_characterizable_state_observed_assignment
  SUBTYPE OF (characterized_object, state_observed_assignment);
END_ENTITY;

ENTITY ds_characterizable_state_observed_relationship
  SUBTYPE OF (characterized_object, state_observed_relationship);
END_ENTITY;

ENTITY ds_characterizable_state_type
  SUBTYPE OF (characterized_object, state_type);
END_ENTITY;

ENTITY ds_characterizable_state_type_assignment
  SUBTYPE OF (characterized_object, state_type_assignment);
END_ENTITY;

ENTITY ds_characterizable_state_type_relationship
  SUBTYPE OF (characterized_object, state_type_relationship);
END_ENTITY;

ENTITY ds_characterizable_verification_relationship
  SUBTYPE OF (characterized_object, verification_relationship);
END_ENTITY;

ENTITY effectivity
  SUPERTYPE OF (ONEOF (serial_numbered_effectivity,
                       dated_effectivity,
                       lot_effectivity,
                       time_interval_based_effectivity));
  id : identifier;
DERIVE
  name : label := get_name_value(SELF);
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY effectivity_assignment
  ABSTRACT SUPERTYPE ;
  assigned_effectivity : effectivity;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY effectivity_context_assignment
  ABSTRACT SUPERTYPE ;
  assigned_effectivity_assignment : effectivity_assignment;
  role : effectivity_context_role;
END_ENTITY;

ENTITY effectivity_context_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY effectivity_relationship;
  name : label;
  description : OPTIONAL text;
  related_effectivity : effectivity;
  relating_effectivity : effectivity;
END_ENTITY;

ENTITY electric_charge_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_CHARGE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY electric_charge_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(coulomb);
END_ENTITY;

ENTITY electric_current_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_CURRENT_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY electric_current_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 1.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY electric_potential_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_POTENTIAL_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY electric_potential_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(volt);
END_ENTITY;

ENTITY end_task
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY energy_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ENERGY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY energy_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(joule);
END_ENTITY;

ENTITY environment;
  syntactic_representation : generic_variable;
  semantics : variable_semantics;
END_ENTITY;

ENTITY environment_assignment
  SUBTYPE OF (group);
END_ENTITY;

ENTITY environment_definition
  SUBTYPE OF (product);
END_ENTITY;

ENTITY environment_definition_version
  SUBTYPE OF (product_definition_formation);
  SELF\product_definition_formation.of_product : environment_definition;
DERIVE
  of_environment : environment_definition := SELF\product_definition_formation.of_product;
END_ENTITY;

ENTITY environment_definition_view
  SUBTYPE OF (characterized_object, product_definition);
  SELF\product_definition.formation : environment_definition_version;
DERIVE
  defined_environment_version : environment_definition_version := SELF\product_definition.formation;
END_ENTITY;

ENTITY environment_view_definition_relationship
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : environment_definition_view;
  SELF\product_definition_relationship.related_product_definition : environment_definition_view;
DERIVE
  related_environment : environment_definition_view := SELF\product_definition_relationship.related_product_definition;
  relating_environment : environment_definition_view := SELF\product_definition_relationship.relating_product_definition;
END_ENTITY;

ENTITY equals_expression
  SUBTYPE OF (binary_boolean_expression);
END_ENTITY;

ENTITY event_occurrence;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY event_occurrence_assignment
  ABSTRACT SUPERTYPE ;
  assigned_event_occurrence : event_occurrence;
  role : event_occurrence_role;
END_ENTITY;

ENTITY event_occurrence_context_assignment
  ABSTRACT SUPERTYPE ;
  assigned_event_occurrence_assignment : event_occurrence_assignment;
  role : event_occurrence_context_role;
END_ENTITY;

ENTITY event_occurrence_context_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY event_occurrence_relationship;
  name : label;
  description : OPTIONAL text;
  relating_event : event_occurrence;
  related_event : event_occurrence;
END_ENTITY;

ENTITY event_occurrence_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY evidence
  SUBTYPE OF (group_assignment);
  items : SET[1:?] OF evidence_item;
END_ENTITY;

ENTITY executed_action
  SUBTYPE OF (action);
END_ENTITY;

ENTITY exit_loop
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY expanded_uncertainty
  SUBTYPE OF (standard_uncertainty);
  coverage_factor : REAL;
END_ENTITY;

ENTITY experience;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY experience_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_experience : experience;
  role : experience_role;
END_ENTITY;

ENTITY experience_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY experience_type;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY experience_type_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_experience_type : experience_type;
  role : experience_type_role;
END_ENTITY;

ENTITY experience_type_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY expression
  ABSTRACT SUPERTYPE OF (ONEOF (numeric_expression,
                                boolean_expression,
                                string_expression))
  SUBTYPE OF (generic_expression);
END_ENTITY;

ENTITY expression_assignment
  ABSTRACT SUPERTYPE ;
  assigned_expression : expression;
  role : expression_role;
END_ENTITY;

ENTITY expression_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY external_class_library
  SUBTYPE OF (external_source);
END_ENTITY;

ENTITY external_identification_assignment
  ABSTRACT SUPERTYPE
  SUBTYPE OF (identification_assignment);
  source : external_source;
END_ENTITY;

ENTITY external_referent_assignment
  ABSTRACT SUPERTYPE ;
  assigned_name : label;
DERIVE
  role : object_role := get_role(SELF);
UNIQUE
  UR1: assigned_name;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY external_source;
  source_id : source_item;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY external_source_relationship;
  name : label;
  description : OPTIONAL text;
  relating_source : external_source;
  related_source : external_source;
END_ENTITY;

ENTITY external_state_based_behaviour_model
  SUBTYPE OF (state_based_behaviour_model);
END_ENTITY;

ENTITY externally_defined_class
  SUBTYPE OF (class, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_item;
  item_id : source_item;
  source : external_source;
END_ENTITY;

ENTITY externally_defined_item_relationship;
  name : label;
  description : OPTIONAL text;
  relating_item : externally_defined_item;
  related_item : externally_defined_item;
END_ENTITY;

ENTITY fbb_characterized_action_method_assignment_relationship
  SUBTYPE OF (action_method_assignment_relationship, characterized_object);
END_ENTITY;

ENTITY fbb_characterized_applied_action_method_assignment
  SUBTYPE OF (applied_action_method_assignment, characterized_object);
END_ENTITY;

ENTITY fbb_characterized_general_property_relationship
  SUBTYPE OF (characterized_object, general_property_relationship);
END_ENTITY;

ENTITY fbb_characterized_generic_expression
  SUBTYPE OF (characterized_object, generic_expression);
END_ENTITY;

ENTITY fbb_characterized_product
  SUBTYPE OF (characterized_object, product);
END_ENTITY;

ENTITY fbb_characterized_product_definition_formation
  SUBTYPE OF (characterized_object, product_definition_formation);
END_ENTITY;

ENTITY fbb_characterized_product_definition_formation_relationship
  SUBTYPE OF (characterized_object, product_definition_formation_relationship);
END_ENTITY;

ENTITY fbb_characterized_property_definition_representation
  SUBTYPE OF (characterized_object, property_definition_representation);
END_ENTITY;

ENTITY fbb_characterized_representation
  SUBTYPE OF (characterized_object, representation);
END_ENTITY;

ENTITY fbb_characterized_representation_context
  SUBTYPE OF (characterized_object, representation_context);
END_ENTITY;

ENTITY fbb_characterized_representation_item
  SUBTYPE OF (characterized_object, representation_item);
END_ENTITY;

ENTITY force_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.FORCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY force_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(newton);
END_ENTITY;

ENTITY format_function
  SUBTYPE OF (binary_generic_expression, string_expression);
DERIVE
  value_to_format : generic_expression := SELF\binary_generic_expression.operands[1];
  format_string : generic_expression := SELF\binary_generic_expression.operands[2];
WHERE
  WR1: (('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION') IN TYPEOF(value_to_format)) AND (('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION') IN TYPEOF(format_string));
END_ENTITY;

ENTITY frequency_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.FREQUENCY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY frequency_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(hertz);
END_ENTITY;

ENTITY functional_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY functional_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY functional_model
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : functional_representation_context;
  SELF\representation.items : SET[1:?] OF functional_representation_item;
END_ENTITY;

ENTITY functional_representation_context
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY functional_representation_item
  SUBTYPE OF (representation_proxy_item);
  SELF\representation_proxy_item.item : action_method;
END_ENTITY;

ENTITY functionally_defined_transformation;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY general_model_parameter
  SUBTYPE OF (general_property);
END_ENTITY;

ENTITY general_property;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY general_property_association;
  name : label;
  description : OPTIONAL text;
  base_definition : general_property;
  derived_definition : derived_property_select;
WHERE
  WR1: SIZEOF(USEDIN(derived_definition, 'SYSTEM_MODELLING_MIM_LF.' + 'GENERAL_PROPERTY_ASSOCIATION.' + 'DERIVED_DEFINITION')) = 1;
  WR2: derived_definition.name = base_definition.name;
END_ENTITY;

ENTITY general_property_relationship;
  name : label;
  description : OPTIONAL text;
  relating_property : general_property;
  related_property : general_property;
END_ENTITY;

ENTITY generic_expression
  ABSTRACT SUPERTYPE OF (ONEOF (simple_generic_expression,
                                unary_generic_expression,
                                binary_generic_expression,
                                multiple_arity_generic_expression));
WHERE
  WR1: is_acyclic(SELF);
END_ENTITY;

ENTITY generic_literal
  ABSTRACT SUPERTYPE
  SUBTYPE OF (simple_generic_expression);
END_ENTITY;

ENTITY generic_variable
  ABSTRACT SUPERTYPE
  SUBTYPE OF (simple_generic_expression);
INVERSE
  interpretation : environment FOR syntactic_representation;
END_ENTITY;

ENTITY geometric_item_specific_usage
  SUBTYPE OF (item_identified_representation_usage);
  SELF\item_identified_representation_usage.definition : geometric_item_specific_usage_select;
  SELF\item_identified_representation_usage.used_representation : shape_representation;
  SELF\item_identified_representation_usage.identified_item : geometric_representation_item;
END_ENTITY;

ENTITY geometric_representation_context
  SUBTYPE OF (representation_context);
  coordinate_space_dimension : dimension_count;
END_ENTITY;

ENTITY geometric_representation_item
  SUPERTYPE OF (ONEOF (point,
                       direction,
                       vector,
                       placement,
                       cartesian_transformation_operator))
  SUBTYPE OF (representation_item);
DERIVE
  dim : dimension_count := dimension_of(SELF);
WHERE
  WR1: SIZEOF(QUERY(using_rep <* using_representations(SELF) | NOT ('SYSTEM_MODELLING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(using_rep.context_of_items)))) = 0;
END_ENTITY;

ENTITY global_uncertainty_assigned_context
  SUBTYPE OF (representation_context);
  uncertainty : SET[1:?] OF uncertainty_measure_with_unit;
END_ENTITY;

ENTITY global_unit_assigned_context
  SUBTYPE OF (representation_context);
  units : SET[1:?] OF unit;
END_ENTITY;

ENTITY group;
  name : label;
  description : OPTIONAL text;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY group_assignment
  ABSTRACT SUPERTYPE ;
  assigned_group : group;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY group_relationship;
  name : label;
  description : OPTIONAL text;
  relating_group : group;
  related_group : group;
END_ENTITY;

ENTITY hierarchical_interface_connection
  SUBTYPE OF (interface_connection);
END_ENTITY;

ENTITY id_attribute;
  attribute_value : identifier;
  identified_item : id_attribute_select;
END_ENTITY;

ENTITY identification_assignment
  ABSTRACT SUPERTYPE ;
  assigned_id : identifier;
  role : identification_role;
END_ENTITY;

ENTITY identification_assignment_relationship;
  name : label;
  description : OPTIONAL text;
  relating_identification_assignment : identification_assignment;
  related_identification_assignment : identification_assignment;
END_ENTITY;

ENTITY identification_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY illuminance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.ILLUMINANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY illuminance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(lux);
END_ENTITY;

ENTITY in_zone
  SUBTYPE OF (group);
END_ENTITY;

ENTITY included_text_based_representation
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY index_expression
  SUBTYPE OF (binary_generic_expression, string_expression);
DERIVE
  operand : generic_expression := SELF\binary_generic_expression.operands[1];
  index : generic_expression := SELF\binary_generic_expression.operands[2];
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(operand)) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index));
  WR2: is_int_expr(index);
END_ENTITY;

ENTITY inductance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.INDUCTANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY inductance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(henry);
END_ENTITY;

ENTITY information_right
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY information_usage_right
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY int_literal
  SUBTYPE OF (literal_number);
  SELF\literal_number.the_value : INTEGER;
END_ENTITY;

ENTITY int_numeric_variable
  SUBTYPE OF (numeric_variable);
END_ENTITY;

ENTITY interface_connection
  SUBTYPE OF (group);
END_ENTITY;

ENTITY interface_connector_definition
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY interface_connector_occurrence
  SUBTYPE OF (group);
END_ENTITY;

ENTITY interface_connector_version
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY interface_definition_connection
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY interface_definition_for
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY interface_specification_definition
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY interface_specification_version
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY interval_expression
  SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
DERIVE
  interval_low : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
  interval_item : generic_expression := SELF\multiple_arity_generic_expression.operands[2];
  interval_high : generic_expression := SELF\multiple_arity_generic_expression.operands[3];
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.EXPRESSION' IN TYPEOF(interval_low)) AND ('SYSTEM_MODELLING_MIM_LF.EXPRESSION' IN TYPEOF(interval_item)) AND ('SYSTEM_MODELLING_MIM_LF.EXPRESSION' IN TYPEOF(interval_high));
  WR2: (('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_high)) AND ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_item))) OR (('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_item)) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_high)));
END_ENTITY;

ENTITY item_assumed
  SUBTYPE OF (characterized_applied_state_observed_assignment);
END_ENTITY;

ENTITY item_defined_transformation;
  name : label;
  description : OPTIONAL text;
  transform_item_1 : representation_item;
  transform_item_2 : representation_item;
END_ENTITY;

ENTITY item_identified_representation_usage;
  name : label;
  description : OPTIONAL text;
  definition : represented_definition;
  used_representation : representation;
  identified_item : representation_item;
WHERE
  WR1: SELF.used_representation IN using_representations(SELF.identified_item);
END_ENTITY;

ENTITY justification_assignment
  SUBTYPE OF (group);
END_ENTITY;

ENTITY justification_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF product;
END_ENTITY;

ENTITY justification_item_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF justification_item;
END_ENTITY;

ENTITY justification_support_assignment
  SUBTYPE OF (group);
END_ENTITY;

ENTITY justification_support_item_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF justification_support_item;
END_ENTITY;

ENTITY language
  SUBTYPE OF (group);
WHERE
  WR1: SELF\group.name <> '';
END_ENTITY;

ENTITY length_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.LENGTH_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY length_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 1.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY library_assignment
  ABSTRACT SUPERTYPE
  SUBTYPE OF (external_referent_assignment);
  frame_of_reference : library_context;
UNIQUE
  UR1: frame_of_reference;
END_ENTITY;

ENTITY library_context
  SUBTYPE OF (application_context_element);
  library_reference : label;
END_ENTITY;

ENTITY like_expression
  SUBTYPE OF (comparison_expression);
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2]));
END_ENTITY;

ENTITY literal_number
  ABSTRACT SUPERTYPE OF (ONEOF (int_literal,
                                real_literal))
  SUBTYPE OF (generic_literal, simple_numeric_expression);
  the_value : NUMBER;
END_ENTITY;

ENTITY local_time;
  hour_component : hour_in_day;
  minute_component : OPTIONAL minute_in_hour;
  second_component : OPTIONAL second_in_minute;
  zone : coordinated_universal_time_offset;
WHERE
  WR1: valid_time(SELF);
END_ENTITY;

ENTITY location;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY location_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_location : location;
  role : location_role;
END_ENTITY;

ENTITY location_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_location : location;
  related_location : location;
END_ENTITY;

ENTITY location_representation_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  represented_location : location;
  role : location_representation_role;
END_ENTITY;

ENTITY location_representation_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY location_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY looping_element
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY lot_effectivity
  SUBTYPE OF (effectivity);
  effectivity_lot_id : identifier;
  effectivity_lot_size : measure_with_unit;
END_ENTITY;

ENTITY luminous_flux_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.LUMINOUS_FLUX_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY luminous_flux_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(lumen);
END_ENTITY;

ENTITY luminous_intensity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.LUMINOUS_INTENSITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY luminous_intensity_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 1.000000);
END_ENTITY;

ENTITY magnetic_flux_density_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.MAGNETIC_FLUX_DENSITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY magnetic_flux_density_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(tesla);
END_ENTITY;

ENTITY magnetic_flux_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.MAGNETIC_FLUX_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY magnetic_flux_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(weber);
END_ENTITY;

ENTITY make_from_usage_option
  SUBTYPE OF (product_definition_usage);
  ranking : INTEGER;
  ranking_rationale : text;
  quantity : measure_with_unit;
WHERE
  WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
END_ENTITY;

ENTITY mapped_item
  SUBTYPE OF (representation_item);
  mapping_source : representation_map;
  mapping_target : representation_item;
WHERE
  WR1: acyclic_mapped_representation(SELF);
END_ENTITY;

ENTITY mass_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.MASS_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY mass_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 1.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY measure_qualification;
  name : label;
  description : text;
  qualified_measure : measure_with_unit;
  qualifiers : SET[1:?] OF value_qualifier;
WHERE
  WR1: SIZEOF(QUERY(temp <* qualifiers | 'SYSTEM_MODELLING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp))) < 2;
  WR2: NOT ('SYSTEM_MODELLING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(SELF\measure_qualification.qualified_measure));
END_ENTITY;

ENTITY measure_representation_item
  SUBTYPE OF (measure_with_unit, representation_item);
END_ENTITY;

ENTITY measure_with_unit
  SUPERTYPE OF (ONEOF (length_measure_with_unit,
                       mass_measure_with_unit,
                       time_measure_with_unit,
                       electric_current_measure_with_unit,
                       thermodynamic_temperature_measure_with_unit,
                       celsius_temperature_measure_with_unit,
                       amount_of_substance_measure_with_unit,
                       luminous_intensity_measure_with_unit,
                       plane_angle_measure_with_unit,
                       solid_angle_measure_with_unit,
                       area_measure_with_unit,
                       volume_measure_with_unit,
                       ratio_measure_with_unit,
                       acceleration_measure_with_unit,
                       capacitance_measure_with_unit,
                       electric_charge_measure_with_unit,
                       conductance_measure_with_unit,
                       electric_potential_measure_with_unit,
                       energy_measure_with_unit,
                       magnetic_flux_density_measure_with_unit,
                       force_measure_with_unit,
                       frequency_measure_with_unit,
                       illuminance_measure_with_unit,
                       inductance_measure_with_unit,
                       luminous_flux_measure_with_unit,
                       magnetic_flux_measure_with_unit,
                       power_measure_with_unit,
                       pressure_measure_with_unit,
                       resistance_measure_with_unit,
                       velocity_measure_with_unit,
                       absorbed_dose_measure_with_unit,
                       radioactivity_measure_with_unit,
                       dose_equivalent_measure_with_unit));
  value_component : measure_value;
  unit_component : unit;
WHERE
  WR1: valid_units(SELF);
END_ENTITY;

ENTITY minus_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY mod_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY mult_expression
  SUBTYPE OF (multiple_arity_numeric_expression);
END_ENTITY;

ENTITY multi_language_attribute_assignment
  SUBTYPE OF (attribute_value_assignment);
  items : SET[1:?] OF multi_language_attribute_item;
DERIVE
  translation_language : language := language_indication[1]\attribute_classification_assignment.assigned_class;
INVERSE
  language_indication : SET[1:1] OF attribute_language_assignment FOR items;
WHERE
  WR1: (SELF\attribute_value_assignment.role.name = 'alternate language');
  WR2: SIZEOF(QUERY(ala <* language_indication | (ala\attribute_classification_assignment.attribute_name = 'attribute_value') AND (ala\attribute_classification_assignment.role.name = 'translated'))) = 1;
  WR3: SELF\attribute_value_assignment.attribute_name <> '';
  WR4: SIZEOF(QUERY(ci <* items | SIZEOF(QUERY(ata <* USEDIN(ci, 'SYSTEM_MODELLING_MIM_LF.MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.ITEMS') | (ata\attribute_value_assignment.attribute_name = SELF\attribute_value_assignment.attribute_name) AND (ata.translation_language :=: translation_language))) > 1)) = 0;
  WR5: SIZEOF(QUERY(ci <* items | SIZEOF(QUERY(ata <* USEDIN(ci, 'SYSTEM_MODELLING_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS') | (ata\attribute_classification_assignment.role.name = 'primary') AND (ata\attribute_classification_assignment.attribute_name = SELF\attribute_value_assignment.attribute_name) AND (ata\attribute_classification_assignment.assigned_class :=: translation_language))) > 0)) = 0;
END_ENTITY;

ENTITY multiple_arity_boolean_expression
  ABSTRACT SUPERTYPE OF (ONEOF (and_expression,
                                or_expression))
  SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF boolean_expression;
END_ENTITY;

ENTITY multiple_arity_function_call
  ABSTRACT SUPERTYPE
  SUBTYPE OF (multiple_arity_numeric_expression);
END_ENTITY;

ENTITY multiple_arity_generic_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (generic_expression);
  operands : LIST[2:?] OF generic_expression;
END_ENTITY;

ENTITY multiple_arity_numeric_expression
  ABSTRACT SUPERTYPE OF (ONEOF (plus_expression,
                                mult_expression,
                                multiple_arity_function_call))
  SUBTYPE OF (multiple_arity_generic_expression, numeric_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF numeric_expression;
END_ENTITY;

ENTITY name_assignment
  ABSTRACT SUPERTYPE ;
  assigned_name : label;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY name_attribute;
  attribute_value : label;
  named_item : name_attribute_select;
END_ENTITY;

ENTITY named_unit
  SUPERTYPE OF (ONEOF (si_unit,
                       conversion_based_unit,
                       context_dependent_unit)
               ANDOR ONEOF (length_unit,
                    mass_unit,
                    time_unit,
                    electric_current_unit,
                    thermodynamic_temperature_unit,
                    amount_of_substance_unit,
                    luminous_flux_unit,
                    luminous_intensity_unit,
                    plane_angle_unit,
                    solid_angle_unit,
                    ratio_unit));
  dimensions : dimensional_exponents;
END_ENTITY;

ENTITY next_assembly_usage_occurrence
  SUBTYPE OF (assembly_component_usage);
END_ENTITY;

ENTITY not_expression
  SUBTYPE OF (unary_boolean_expression);
  SELF\unary_generic_expression.operand : boolean_expression;
END_ENTITY;

ENTITY numeric_expression
  ABSTRACT SUPERTYPE OF (ONEOF (simple_numeric_expression,
                                unary_numeric_expression,
                                binary_numeric_expression,
                                multiple_arity_numeric_expression))
  SUBTYPE OF (expression);
DERIVE
  is_int : LOGICAL := is_int_expr(SELF);
  sql_mappable : LOGICAL := is_SQL_mappable(SELF);
END_ENTITY;

ENTITY numeric_variable
  SUPERTYPE OF (ONEOF (int_numeric_variable,
                       real_numeric_variable))
  SUBTYPE OF (simple_numeric_expression, variable);
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(SELF)) OR ('SYSTEM_MODELLING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY object_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY observed_environment
  SUBTYPE OF (product);
END_ENTITY;

ENTITY observed_environment_assignment
  SUBTYPE OF (group);
END_ENTITY;

ENTITY observed_environment_to_definition
  SUBTYPE OF (product_relationship);
  SELF\product_relationship.relating_product : environment_definition;
  SELF\product_relationship.related_product : observed_environment;
DERIVE
  defined_environment : environment_definition := SELF\product_relationship.relating_product;
  observed_environment : observed_environment := SELF\product_relationship.related_product;
END_ENTITY;

ENTITY observed_environment_to_definition_version
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : environment_definition_version;
  SELF\product_definition_formation_relationship.related_product_definition_formation : observed_environment_version;
DERIVE
  defined_environment_version : environment_definition_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
  observed_environment_version : observed_environment_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
END_ENTITY;

ENTITY observed_environment_to_definition_view
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : observed_environment_view;
  SELF\product_definition_relationship.related_product_definition : environment_definition_view;
DERIVE
  defined_environment_view : observed_environment_view := SELF\product_definition_relationship.relating_product_definition;
  observed_environment_view : environment_definition_view := SELF\product_definition_relationship.related_product_definition;
END_ENTITY;

ENTITY observed_environment_version
  SUBTYPE OF (product_definition_formation);
  SELF\product_definition_formation.of_product : observed_environment;
DERIVE
  of_environment : observed_environment := SELF\product_definition_formation.of_product;
END_ENTITY;

ENTITY observed_environment_view
  SUBTYPE OF (characterized_object, product_definition);
  SELF\product_definition.formation : observed_environment_version;
DERIVE
  observed_environment_version : observed_environment_version := SELF\product_definition.formation;
END_ENTITY;

ENTITY observed_environment_view_definition_relationship
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : observed_environment_view;
  SELF\product_definition_relationship.related_product_definition : observed_environment_view;
DERIVE
  related_environment : observed_environment_view := SELF\product_definition_relationship.related_product_definition;
  relating_environment : observed_environment_view := SELF\product_definition_relationship.relating_product_definition;
END_ENTITY;

ENTITY or_expression
  SUBTYPE OF (multiple_arity_boolean_expression);
END_ENTITY;

ENTITY organization;
  id : OPTIONAL identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY organization_assignment
  ABSTRACT SUPERTYPE ;
  assigned_organization : organization;
  role : organization_role;
END_ENTITY;

ENTITY organization_relationship;
  name : label;
  description : OPTIONAL text;
  relating_organization : organization;
  related_organization : organization;
END_ENTITY;

ENTITY organization_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY organization_type;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY organization_type_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_organization_type : organization_type;
  role : organization_type_role;
END_ENTITY;

ENTITY organization_type_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY organizational_address
  SUBTYPE OF (address);
  organizations : SET[1:?] OF organization;
  description : OPTIONAL text;
END_ENTITY;

ENTITY organizational_project;
  name : label;
  description : OPTIONAL text;
  responsible_organizations : SET[1:?] OF organization;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY organizational_project_assignment
  ABSTRACT SUPERTYPE ;
  assigned_organizational_project : organizational_project;
  role : organizational_project_role;
END_ENTITY;

ENTITY organizational_project_relationship;
  name : label;
  description : OPTIONAL text;
  relating_organizational_project : organizational_project;
  related_organizational_project : organizational_project;
END_ENTITY;

ENTITY organizational_project_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY parameter_value_representation_item
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY person;
  id : identifier;
  last_name : OPTIONAL label;
  first_name : OPTIONAL label;
  middle_names : OPTIONAL LIST[1:?] OF label;
  prefix_titles : OPTIONAL LIST[1:?] OF label;
  suffix_titles : OPTIONAL LIST[1:?] OF label;
WHERE
  WR1: EXISTS(last_name) OR EXISTS(first_name);
END_ENTITY;

ENTITY person_and_organization;
  the_person : person;
  the_organization : organization;
DERIVE
  name : label := get_name_value(SELF);
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY person_and_organization_address
  SUBTYPE OF (organizational_address, personal_address);
  SELF\organizational_address.organizations : SET[1:1] OF organization;
  SELF\personal_address.people : SET[1:1] OF person;
WHERE
  WR1: SIZEOF(QUERY(pao <* USEDIN(SELF\personal_address.people[1], 'SYSTEM_MODELLING_MIM_LF.PERSON_AND_ORGANIZATION.THE_PERSON') | pao.the_organization :=: SELF\organizational_address.organizations[1])) = 1;
END_ENTITY;

ENTITY person_and_organization_assignment
  ABSTRACT SUPERTYPE ;
  assigned_person_and_organization : person_and_organization;
  role : person_and_organization_role;
END_ENTITY;

ENTITY person_and_organization_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY person_assignment
  ABSTRACT SUPERTYPE ;
  assigned_person : person;
  role : person_role;
END_ENTITY;

ENTITY person_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY person_type;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY person_type_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_person_type : person_type;
  role : person_type_role;
END_ENTITY;

ENTITY person_type_definition;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  formation : person_type_definition_formation;
END_ENTITY;

ENTITY person_type_definition_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_person_type_definition : person_type_definition;
  role : person_type_definition_role;
END_ENTITY;

ENTITY person_type_definition_formation;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  of_person_type : person_type;
END_ENTITY;

ENTITY person_type_definition_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY person_type_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY personal_address
  SUBTYPE OF (address);
  people : SET[1:?] OF person;
  description : OPTIONAL text;
END_ENTITY;

ENTITY physical_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY physical_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY placement
  SUPERTYPE OF (ONEOF (axis1_placement,
                       axis2_placement_2d,
                       axis2_placement_3d))
  SUBTYPE OF (geometric_representation_item);
  location : cartesian_point;
END_ENTITY;

ENTITY plane_angle_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.PLANE_ANGLE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY plane_angle_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY plus_expression
  SUBTYPE OF (multiple_arity_numeric_expression);
END_ENTITY;

ENTITY point
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;

ENTITY position_in_organization;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY position_in_organization_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_position_in_organization : position_in_organization;
  role : position_in_organization_role;
END_ENTITY;

ENTITY position_in_organization_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY position_in_organization_type;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY position_in_organization_type_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_position_in_organization_type : position_in_organization_type;
  role : position_in_organization_type_role;
END_ENTITY;

ENTITY position_in_organization_type_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY power_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY power_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.POWER_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY power_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(watt);
END_ENTITY;

ENTITY pre_defined_item;
  name : label;
END_ENTITY;

ENTITY precision_qualifier;
  precision_value : INTEGER;
END_ENTITY;

ENTITY pressure_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.PRESSURE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY pressure_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(pascal);
END_ENTITY;

ENTITY process_or_process_relationship_effectivity
  SUBTYPE OF (effectivity);
  effective_process_or_process_relationship : process_or_process_relationship;
END_ENTITY;

ENTITY product;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  frame_of_reference : SET[1:?] OF product_context;
END_ENTITY;

ENTITY product_as_planned
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY product_category;
  name : label;
  description : OPTIONAL text;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_concept;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  market_context : product_concept_context;
UNIQUE
  UR1: id;
END_ENTITY;

ENTITY product_concept_context
  SUBTYPE OF (application_context_element);
  market_segment_type : label;
END_ENTITY;

ENTITY product_context
  SUBTYPE OF (application_context_element);
  discipline_type : label;
END_ENTITY;

ENTITY product_definition;
  id : identifier;
  description : OPTIONAL text;
  formation : product_definition_formation;
  frame_of_reference : product_definition_context;
DERIVE
  name : label := get_name_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_definition_context
  SUBTYPE OF (application_context_element);
  life_cycle_stage : label;
END_ENTITY;

ENTITY product_definition_context_association;
  definition : product_definition;
  frame_of_reference : product_definition_context;
  role : product_definition_context_role;
END_ENTITY;

ENTITY product_definition_context_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY product_definition_effectivity
  SUBTYPE OF (effectivity);
  usage : product_definition_relationship;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'EFFECTIVITY_ASSIGNMENT.ASSIGNED_EFFECTIVITY')) = 0;
END_ENTITY;

ENTITY product_definition_element_relationship
  SUBTYPE OF (group);
END_ENTITY;

ENTITY product_definition_formation;
  id : identifier;
  description : OPTIONAL text;
  of_product : product;
UNIQUE
  UR1: id, of_product;
END_ENTITY;

ENTITY product_definition_formation_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product_definition_formation : product_definition_formation;
  related_product_definition_formation : product_definition_formation;
END_ENTITY;

ENTITY product_definition_group_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_definition_element_relationship;
  items : SET[1:1] OF product_definition_or_product_definition_relationship;
END_ENTITY;

ENTITY product_definition_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product_definition : product_definition;
  related_product_definition : product_definition;
END_ENTITY;

ENTITY product_definition_shape
  SUBTYPE OF (property_definition);
UNIQUE
  UR1: SELF\property_definition.definition;
WHERE
  WR1: SIZEOF(['SYSTEM_MODELLING_MIM_LF.CHARACTERIZED_PRODUCT_DEFINITION', 'SYSTEM_MODELLING_MIM_LF.CHARACTERIZED_OBJECT'] * TYPEOF(SELF\property_definition.definition)) > 0;
END_ENTITY;

ENTITY product_definition_usage
  SUPERTYPE OF (ONEOF (make_from_usage_option,
                       assembly_component_usage))
  SUBTYPE OF (product_definition_relationship);
UNIQUE
  UR1: SELF\product_definition_relationship.id, SELF\product_definition_relationship.relating_product_definition, SELF\product_definition_relationship.related_product_definition;
WHERE
  WR1: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition], 'SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_USAGE');
END_ENTITY;

ENTITY product_definition_with_associated_documents
  SUBTYPE OF (product_definition);
  documentation_ids : SET[1:?] OF document;
END_ENTITY;

ENTITY product_design_to_individual
  SUBTYPE OF (product_relationship);
  SELF\product_relationship.related_product RENAMED individual_product : product;
  SELF\product_relationship.relating_product RENAMED product_design : product;
END_ENTITY;

ENTITY product_design_version_to_individual
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.related_product_definition_formation RENAMED individual_product : product_definition_formation;
  SELF\product_definition_formation_relationship.relating_product_definition_formation RENAMED product_design_version : product_definition_formation;
END_ENTITY;

ENTITY product_group
  SUBTYPE OF (group);
END_ENTITY;

ENTITY product_group_attribute_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_group_attributes;
  attributes : SET[1:1] OF attribute_select;
END_ENTITY;

ENTITY product_group_attribute_set
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_group;
  product_group_attributes : SET[1:1] OF product_group_attributes;
END_ENTITY;

ENTITY product_group_attributes
  SUBTYPE OF (group);
END_ENTITY;

ENTITY product_group_context
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY product_group_membership
  SUBTYPE OF (characterized_object, group_assignment);
  member : product_select;
END_ENTITY;

ENTITY product_group_membership_rules
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_group;
  product_group_rules : SET[1:1] OF product_group_rules;
END_ENTITY;

ENTITY product_group_purpose
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY product_group_relationship
  SUBTYPE OF (group_relationship);
END_ENTITY;

ENTITY product_group_rule
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY product_group_rule_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_group_rules;
  product_group_rules : SET[1:?] OF product_group_rule;
END_ENTITY;

ENTITY product_group_rules
  SUBTYPE OF (group);
END_ENTITY;

ENTITY product_planned_to_realized
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation RENAMED planned_product : product_definition_formation;
  SELF\product_definition_formation_relationship.related_product_definition_formation RENAMED realized_product : product_definition_formation;
END_ENTITY;

ENTITY product_related_product_category
  SUBTYPE OF (product_category);
  products : SET[1:?] OF product;
END_ENTITY;

ENTITY product_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product : product;
  related_product : product;
END_ENTITY;

ENTITY promissory_usage_occurrence
  SUBTYPE OF (assembly_component_usage);
END_ENTITY;

ENTITY property_definition;
  name : label;
  description : OPTIONAL text;
  definition : characterized_definition;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY property_definition_representation;
  definition : represented_definition;
  used_representation : representation;
DERIVE
  description : text := get_description_value(SELF);
  name : label := get_name_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY qualification;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY qualification_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_qualification : qualification;
  role : qualification_role;
END_ENTITY;

ENTITY qualification_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY qualification_type;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY qualification_type_assignment
  ABSTRACT SUPERTYPE ;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  assigned_qualification_type : qualification_type;
  role : qualification_type_role;
END_ENTITY;

ENTITY qualification_type_role;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY qualified_representation_item
  SUBTYPE OF (representation_item);
  qualifiers : SET[1:?] OF value_qualifier;
WHERE
  WR1: SIZEOF(QUERY(temp <* qualifiers | 'SYSTEM_MODELLING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp))) < 2;
END_ENTITY;

ENTITY qualitative_uncertainty
  SUBTYPE OF (uncertainty_qualifier);
  uncertainty_value : text;
END_ENTITY;

ENTITY quantified_assembly_component_usage
  SUBTYPE OF (assembly_component_usage);
  quantity : measure_with_unit;
WHERE
  WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
END_ENTITY;

ENTITY radioactivity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.RADIOACTIVITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY radioactivity_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(becquerel);
END_ENTITY;

ENTITY ratio_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.RATIO_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY ratio_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY real_literal
  SUBTYPE OF (literal_number);
  SELF\literal_number.the_value : REAL;
END_ENTITY;

ENTITY real_numeric_variable
  SUBTYPE OF (numeric_variable);
END_ENTITY;

ENTITY relationship_condition;
  name : label;
  applicable_relationships : SET[1:?] OF relationship_with_condition;
  condition_description : text;
END_ENTITY;

ENTITY relative_event_occurrence
  SUBTYPE OF (event_occurrence);
  base_event : event_occurrence;
  offset : time_measure_with_unit;
END_ENTITY;

ENTITY representation;
  name : label;
  items : SET[1:?] OF representation_item;
  context_of_items : representation_context;
DERIVE
  id : identifier := get_id_value(SELF);
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY representation_context;
  context_identifier : identifier;
  context_type : text;
INVERSE
  representations_in_context : SET[1:?] OF representation FOR context_of_items;
END_ENTITY;

ENTITY representation_item
  SUPERTYPE OF (ONEOF (compound_representation_item,
                       mapped_item,
                       value_representation_item));
  name : label;
WHERE
  WR1: SIZEOF(using_representations(SELF)) > 0;
END_ENTITY;

ENTITY representation_map;
  mapping_origin : representation_item;
  mapped_representation : representation;
INVERSE
  map_usage : SET[1:?] OF mapped_item FOR mapping_source;
WHERE
  WR1: item_in_context(SELF.mapping_origin, SELF.mapped_representation.context_of_items);
END_ENTITY;

ENTITY representation_proxy_item
  SUBTYPE OF (representation_item);
  item : representation_proxy_select;
END_ENTITY;

ENTITY representation_relationship;
  name : label;
  description : OPTIONAL text;
  rep_1 : representation;
  rep_2 : representation;
END_ENTITY;

ENTITY representation_relationship_with_transformation
  SUBTYPE OF (representation_relationship);
  transformation_operator : transformation;
WHERE
  WR1: SELF\representation_relationship.rep_1.context_of_items :<>: SELF\representation_relationship.rep_2.context_of_items;
END_ENTITY;

ENTITY requirement_assigned_object
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : requirement_assignment;
  items : SET[1:1] OF requirement_assigned_item;
END_ENTITY;

ENTITY requirement_assignment
  SUBTYPE OF (characterized_object, group);
END_ENTITY;

ENTITY requirement_for_action_resource
  SUBTYPE OF (action_resource_requirement);
  resources : SET[1:?] OF action_resource;
END_ENTITY;

ENTITY requirement_source
  SUBTYPE OF (group);
END_ENTITY;

ENTITY requirement_view_definition_relationship
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY resistance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.RESISTANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY resistance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(ohm);
END_ENTITY;

ENTITY resource_property;
  name : label;
  description : text;
  resource : characterized_resource_definition;
END_ENTITY;

ENTITY resource_property_representation;
  name : label;
  description : text;
  property : resource_property;
  representation : representation;
END_ENTITY;

ENTITY resource_requirement_type;
  name : label;
  description : text;
END_ENTITY;

ENTITY right_to_usage_association
  SUBTYPE OF (action_method_relationship);
  SELF\action_method_relationship.relating_method : information_usage_right;
  SELF\action_method_relationship.related_method : information_right;
DERIVE
  right_applied : information_right := SELF\action_method_relationship.related_method;
  right_usage : information_usage_right := SELF\action_method_relationship.relating_method;
END_ENTITY;

ENTITY role_association;
  role : object_role;
  item_with_role : role_select;
END_ENTITY;

ENTITY same_as_external_item_assignment
  SUBTYPE OF (external_identification_assignment);
  items : SET[0:?] OF same_as_item;
END_ENTITY;

ENTITY satisfied_requirement
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : satisfies_requirement;
  items : SET[1:1] OF product_definition;
END_ENTITY;

ENTITY satisfies_requirement
  SUBTYPE OF (group);
END_ENTITY;

ENTITY satisfying_item
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : satisfies_requirement;
  items : SET[1:1] OF requirement_satisfaction_item;
END_ENTITY;

ENTITY sbb_characterized_applied_action_method_assignment
  SUBTYPE OF (applied_action_method_assignment, characterized_object);
END_ENTITY;

ENTITY sbb_characterized_general_property_relationship
  SUBTYPE OF (characterized_object, general_property_relationship);
END_ENTITY;

ENTITY sbb_characterized_generic_expression
  SUBTYPE OF (characterized_object, generic_expression);
END_ENTITY;

ENTITY sbb_characterized_product
  SUBTYPE OF (characterized_object, product);
END_ENTITY;

ENTITY sbb_characterized_product_definition_formation
  SUBTYPE OF (characterized_object, product_definition_formation);
END_ENTITY;

ENTITY sbb_characterized_product_definition_formation_relationship
  SUBTYPE OF (characterized_object, product_definition_formation_relationship);
END_ENTITY;

ENTITY sbb_characterized_property_definition_representation
  SUBTYPE OF (characterized_object, property_definition_representation);
END_ENTITY;

ENTITY sbb_characterized_representation
  SUBTYPE OF (characterized_object, representation);
END_ENTITY;

ENTITY sbb_characterized_representation_context
  SUBTYPE OF (characterized_object, representation_context);
END_ENTITY;

ENTITY sbb_characterized_representation_item
  SUBTYPE OF (characterized_object, representation_item);
END_ENTITY;

ENTITY sbb_characterized_state_type
  SUBTYPE OF (characterized_object, state_type);
END_ENTITY;

ENTITY sbb_characterized_state_type_assignment
  SUBTYPE OF (characterized_object, state_type_assignment);
END_ENTITY;

ENTITY sbb_characterized_state_type_relationship
  SUBTYPE OF (characterized_object, state_type_relationship);
END_ENTITY;

ENTITY security_classification;
  name : label;
  purpose : text;
  security_level : security_classification_level;
END_ENTITY;

ENTITY security_classification_assignment
  ABSTRACT SUPERTYPE ;
  assigned_security_classification : security_classification;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY security_classification_level;
  name : label;
END_ENTITY;

ENTITY sequential_method
  SUBTYPE OF (serial_action_method);
  sequence_position : count_measure;
END_ENTITY;

ENTITY serial_action_method
  SUBTYPE OF (action_method_relationship);
END_ENTITY;

ENTITY serial_numbered_effectivity
  SUBTYPE OF (effectivity);
  effectivity_start_id : identifier;
  effectivity_end_id : OPTIONAL identifier;
END_ENTITY;

ENTITY shape_aspect;
  name : label;
  description : OPTIONAL text;
  of_shape : product_definition_shape;
  product_definitional : LOGICAL;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY shape_aspect_relationship;
  name : label;
  description : OPTIONAL text;
  relating_shape_aspect : shape_aspect;
  related_shape_aspect : shape_aspect;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY shape_definition_representation
  SUBTYPE OF (property_definition_representation);
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.definition)) OR ('SYSTEM_MODELLING_MIM_LF.SHAPE_DEFINITION' IN TYPEOF(SELF.definition));
  WR2: 'SYSTEM_MODELLING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(SELF.used_representation);
END_ENTITY;

ENTITY shape_representation
  SUBTYPE OF (representation);
END_ENTITY;

ENTITY shape_representation_relationship
  SUBTYPE OF (representation_relationship);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.SHAPE_REPRESENTATION' IN (TYPEOF(SELF\representation_relationship.rep_1) + TYPEOF(SELF\representation_relationship.rep_2));
END_ENTITY;

ENTITY si_absorbed_dose_unit
  SUBTYPE OF (absorbed_dose_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = gray;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_capacitance_unit
  SUBTYPE OF (capacitance_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = farad;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_conductance_unit
  SUBTYPE OF (conductance_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = siemens;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_dose_equivalent_unit
  SUBTYPE OF (dose_equivalent_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = sievert;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_electric_charge_unit
  SUBTYPE OF (electric_charge_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = coulomb;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_electric_potential_unit
  SUBTYPE OF (electric_potential_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = volt;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_energy_unit
  SUBTYPE OF (energy_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = joule;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_force_unit
  SUBTYPE OF (force_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = newton;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_frequency_unit
  SUBTYPE OF (frequency_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = hertz;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_illuminance_unit
  SUBTYPE OF (illuminance_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = lux;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_inductance_unit
  SUBTYPE OF (inductance_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = henry;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_magnetic_flux_density_unit
  SUBTYPE OF (magnetic_flux_density_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = tesla;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_magnetic_flux_unit
  SUBTYPE OF (magnetic_flux_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = weber;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_power_unit
  SUBTYPE OF (power_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = watt;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_pressure_unit
  SUBTYPE OF (pressure_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = pascal;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_radioactivity_unit
  SUBTYPE OF (radioactivity_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = becquerel;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_resistance_unit
  SUBTYPE OF (resistance_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = ohm;
  WR2: NOT EXISTS(SELF\derived_unit.name);
END_ENTITY;

ENTITY si_unit
  SUBTYPE OF (named_unit);
  prefix : OPTIONAL si_prefix;
  name : si_unit_name;
DERIVE
  SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit(name);
WHERE
  WR1: NOT (('SYSTEM_MODELLING_MIM_LF.MASS_UNIT' IN TYPEOF(SELF)) AND (SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.DERIVED_UNIT_ELEMENT.UNIT')) > 0)) OR (prefix = kilo);
END_ENTITY;

ENTITY simple_boolean_expression
  ABSTRACT SUPERTYPE OF (ONEOF (boolean_literal,
                                boolean_variable))
  SUBTYPE OF (boolean_expression, simple_generic_expression);
END_ENTITY;

ENTITY simple_generic_expression
  ABSTRACT SUPERTYPE OF (ONEOF (generic_literal,
                                generic_variable))
  SUBTYPE OF (generic_expression);
END_ENTITY;

ENTITY simple_numeric_expression
  ABSTRACT SUPERTYPE OF (ONEOF (literal_number,
                                numeric_variable))
  SUBTYPE OF (numeric_expression, simple_generic_expression);
END_ENTITY;

ENTITY simple_string_expression
  ABSTRACT SUPERTYPE OF (ONEOF (string_literal,
                                string_variable))
  SUBTYPE OF (simple_generic_expression, string_expression);
END_ENTITY;

ENTITY single_property_is_definition
  SUBTYPE OF (property_definition);
  SELF\property_definition.definition : product_definition;
UNIQUE
  UR1: SELF\property_definition.definition;
END_ENTITY;

ENTITY slash_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY solid_angle_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.SOLID_ANGLE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY solid_angle_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY source_for_requirement
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : requirement_source;
  items : SET[1:1] OF requirement_source_item;
END_ENTITY;

ENTITY sourced_requirement
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : requirement_source;
  items : SET[1:1] OF product_definition;
END_ENTITY;

ENTITY specified_higher_usage_occurrence
  SUBTYPE OF (assembly_component_usage);
  upper_usage : assembly_component_usage;
  next_usage : next_assembly_usage_occurrence;
UNIQUE
  UR1: upper_usage, next_usage;
WHERE
  WR1: SELF :<>: upper_usage;
  WR2: SELF\product_definition_relationship.relating_product_definition :=: upper_usage.relating_product_definition;
  WR3: SELF\product_definition_relationship.related_product_definition :=: next_usage.related_product_definition;
  WR4: (upper_usage.related_product_definition :=: next_usage.relating_product_definition) OR (SIZEOF(QUERY(pdr <* USEDIN(upper_usage.related_product_definition, 'SYSTEM_MODELLING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.' + 'RELATED_PRODUCT_DEFINITION') | pdr.relating_product_definition :=: next_usage.relating_product_definition)) = 1);
  WR5: SIZEOF(['SYSTEM_MODELLING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE', 'SYSTEM_MODELLING_MIM_LF.SPECIFIED_HIGHER_USAGE_OCCURRENCE'] * TYPEOF(upper_usage)) = 1;
END_ENTITY;

ENTITY SQL_mappable_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (defined_function);
END_ENTITY;

ENTITY standard_uncertainty
  SUPERTYPE OF (expanded_uncertainty)
  SUBTYPE OF (uncertainty_qualifier);
  uncertainty_value : REAL;
END_ENTITY;

ENTITY start_task
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY state_based_behaviour_model
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : state_based_behaviour_representation_context;
  SELF\representation.items : SET[1:?] OF state_based_behaviour_representation_item;
END_ENTITY;

ENTITY state_based_behaviour_representation_context
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY state_based_behaviour_representation_item
  SUBTYPE OF (representation_proxy_item);
  SELF\representation_proxy_item.item : state_based_behaviour_element;
END_ENTITY;

ENTITY state_observed;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY state_observed_assignment
  ABSTRACT SUPERTYPE ;
  assigned_state_observed : state_observed;
  role : state_observed_role;
END_ENTITY;

ENTITY state_observed_relationship;
  name : label;
  description : OPTIONAL text;
  relating_state_observed : SET[1:?] OF state_observed;
  related_state_observed : SET[1:?] OF state_observed;
END_ENTITY;

ENTITY state_observed_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY state_predicted
  SUBTYPE OF (state_observed);
END_ENTITY;

ENTITY state_type;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY state_type_assignment
  ABSTRACT SUPERTYPE ;
  assigned_state_type : state_type;
  role : state_type_role;
END_ENTITY;

ENTITY state_type_relationship;
  name : label;
  description : OPTIONAL text;
  relating_state_type : SET[1:?] OF state_type;
  related_state_type : SET[1:?] OF state_type;
END_ENTITY;

ENTITY state_type_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY string_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (defined_function, string_expression);
END_ENTITY;

ENTITY string_expression
  ABSTRACT SUPERTYPE OF (ONEOF (simple_string_expression,
                                index_expression,
                                substring_expression,
                                concat_expression,
                                format_function,
                                string_defined_function))
  SUBTYPE OF (expression);
END_ENTITY;

ENTITY string_literal
  SUBTYPE OF (generic_literal, simple_string_expression);
  the_value : STRING;
END_ENTITY;

ENTITY string_variable
  SUBTYPE OF (simple_string_expression, variable);
END_ENTITY;

ENTITY substring_expression
  SUBTYPE OF (multiple_arity_generic_expression, string_expression);
DERIVE
  operand : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
  index1 : generic_expression := SELF\multiple_arity_generic_expression.operands[2];
  index2 : generic_expression := SELF\multiple_arity_generic_expression.operands[3];
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(operand)) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index1)) AND ('SYSTEM_MODELLING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index2));
  WR2: SIZEOF(SELF\multiple_arity_generic_expression.operands) = 3;
  WR3: is_int_expr(index1);
  WR4: is_int_expr(index2);
END_ENTITY;

ENTITY sysm_characterizable_applied_location_assignment
  SUBTYPE OF (applied_location_assignment, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_action_directive
  SUBTYPE OF (action_directive, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_address
  SUBTYPE OF (address, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_alternate_product_relationship
  SUBTYPE OF (alternate_product_relationship, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_applied_action_assignment
  SUBTYPE OF (applied_action_assignment, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_applied_document_reference
  SUBTYPE OF (applied_document_reference, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_applied_document_usage_constraint_assignment
  SUBTYPE OF (applied_document_usage_constraint_assignment, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_applied_organization_assignment
  SUBTYPE OF (applied_organization_assignment, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_applied_person_and_organization_assignment
  SUBTYPE OF (applied_person_and_organization_assignment, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_assembly_component_usage
  SUBTYPE OF (assembly_component_usage, characterized_object);
END_ENTITY;

ENTITY syss_characterizable_configuration_item
  SUBTYPE OF (characterized_object, configuration_item);
END_ENTITY;

ENTITY syss_characterizable_general_property_relationship
  SUBTYPE OF (characterized_object, general_property_relationship);
END_ENTITY;

ENTITY syss_characterizable_group
  SUBTYPE OF (characterized_object, group);
END_ENTITY;

ENTITY syss_characterizable_organizational_project
  SUBTYPE OF (characterized_object, organizational_project);
END_ENTITY;

ENTITY syss_characterizable_person
  SUBTYPE OF (characterized_object, person);
END_ENTITY;

ENTITY syss_characterizable_person_and_organization
  SUBTYPE OF (characterized_object, person_and_organization);
END_ENTITY;

ENTITY syss_characterizable_product
  SUBTYPE OF (characterized_object, product);
END_ENTITY;

ENTITY syss_characterizable_product_concept
  SUBTYPE OF (characterized_object, product_concept);
END_ENTITY;

ENTITY syss_characterizable_product_definition_formation
  SUBTYPE OF (characterized_object, product_definition_formation);
END_ENTITY;

ENTITY syss_characterizable_product_definition_formation_relationship
  SUBTYPE OF (characterized_object, product_definition_formation_relationship);
END_ENTITY;

ENTITY syss_characterizable_property_definition_representation
  SUBTYPE OF (characterized_object, property_definition_representation);
END_ENTITY;

ENTITY syss_characterizable_representation
  SUBTYPE OF (characterized_object, representation);
END_ENTITY;

ENTITY syss_characterizable_representation_context
  SUBTYPE OF (characterized_object, representation_context);
END_ENTITY;

ENTITY syss_characterizable_representation_item
  SUBTYPE OF (characterized_object, representation_item);
END_ENTITY;

ENTITY syss_characterizable_security_classification
  SUBTYPE OF (characterized_object, security_classification);
END_ENTITY;

ENTITY syss_characterizable_versioned_action_request
  SUBTYPE OF (characterized_object, versioned_action_request);
END_ENTITY;

ENTITY system_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY system_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY task_element
  SUPERTYPE OF (ONEOF (concurrent_task_element,
                       end_task,
                       exit_loop,
                       looping_element,
                       task_element_sequence,
                       task_step))
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY task_element_relationship
  SUBTYPE OF (action_method_relationship);
END_ENTITY;

ENTITY task_element_sequence
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY task_step
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY text_based_representation
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : text_based_representation_context;
  SELF\representation.items : SET[1:?] OF text_based_item_select;
END_ENTITY;

ENTITY text_based_representation_context
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY textual_expression_composition
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY textual_expression_representation_item
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY thermodynamic_temperature_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY thermodynamic_temperature_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 1.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY time_assignment
  ABSTRACT SUPERTYPE ;
  assigned_time : local_time;
  role : time_role;
END_ENTITY;

ENTITY time_interval;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY time_interval_assignment
  ABSTRACT SUPERTYPE ;
  assigned_time_interval : time_interval;
  role : time_interval_role;
END_ENTITY;

ENTITY time_interval_based_effectivity
  SUBTYPE OF (effectivity);
  effectivity_period : time_interval;
END_ENTITY;

ENTITY time_interval_relationship;
  name : label;
  description : OPTIONAL text;
  relating_time_interval : time_interval;
  related_time_interval : time_interval;
END_ENTITY;

ENTITY time_interval_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY time_interval_with_bounds
  SUBTYPE OF (time_interval);
  primary_bound : OPTIONAL date_time_or_event_occurrence;
  secondary_bound : OPTIONAL date_time_or_event_occurrence;
  duration : OPTIONAL time_measure_with_unit;
WHERE
  WR1: NOT (EXISTS(secondary_bound) AND EXISTS(duration));
  WR2: EXISTS(primary_bound) OR EXISTS(secondary_bound);
END_ENTITY;

ENTITY time_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.TIME_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY time_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY time_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 0.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND (SELF\named_unit.dimensions.time_exponent = 1.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;

ENTITY type_qualifier;
  name : label;
END_ENTITY;

ENTITY unary_boolean_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (boolean_expression, unary_generic_expression);
END_ENTITY;

ENTITY unary_generic_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (generic_expression);
  operand : generic_expression;
END_ENTITY;

ENTITY unary_numeric_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (numeric_expression, unary_generic_expression);
  SELF\unary_generic_expression.operand : numeric_expression;
END_ENTITY;

ENTITY uncertainty_measure_with_unit
  SUBTYPE OF (measure_with_unit);
  name : label;
  description : OPTIONAL text;
WHERE
  WR1: valid_measure_value(SELF\measure_with_unit.value_component);
END_ENTITY;

ENTITY uncertainty_qualifier
  SUPERTYPE OF (ONEOF (standard_uncertainty,
                       qualitative_uncertainty));
  measure_name : label;
  description : text;
END_ENTITY;

ENTITY usage_association
  SUBTYPE OF (action_method_relationship);
  SELF\action_method_relationship.relating_method : information_usage_right;
  SELF\action_method_relationship.related_method : information_usage_right;
DERIVE
  related : information_usage_right := SELF\action_method_relationship.related_method;
  relating : information_usage_right := SELF\action_method_relationship.relating_method;
END_ENTITY;

ENTITY validation
  SUBTYPE OF (group);
END_ENTITY;

ENTITY value_range
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: ('SYSTEM_MODELLING_MIM_LF.' + 'SET_REPRESENTATION_ITEM' IN TYPEOF(item_element)) AND value_range_wr1(item_element);
  WR2: value_range_wr2(item_element);
  WR3: value_range_wr3(item_element);
END_ENTITY;

ENTITY value_representation_item
  SUBTYPE OF (representation_item);
  value_component : measure_value;
WHERE
  WR1: SIZEOF(QUERY(rep <* using_representations(SELF) | NOT ('SYSTEM_MODELLING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(rep.context_of_items)))) = 0;
END_ENTITY;

ENTITY variable
  ABSTRACT SUPERTYPE OF (ONEOF (numeric_variable,
                                boolean_variable,
                                string_variable))
  SUBTYPE OF (generic_variable);
END_ENTITY;

ENTITY variable_semantics
  ABSTRACT SUPERTYPE ;
END_ENTITY;

ENTITY vector
  SUBTYPE OF (geometric_representation_item);
  orientation : direction;
  magnitude : length_measure;
WHERE
  WR1: magnitude >= 0.000000;
END_ENTITY;

ENTITY velocity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.VELOCITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY velocity_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(1.000000, 0.000000, - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000);
END_ENTITY;

ENTITY verification
  SUBTYPE OF (group);
END_ENTITY;

ENTITY verification_relationship
  SUBTYPE OF (group_relationship);
  SELF\group_relationship.relating_group : verification;
  SELF\group_relationship.related_group : verification;
END_ENTITY;

ENTITY versioned_action_request;
  id : identifier;
  version : label;
  purpose : text;
  description : OPTIONAL text;
END_ENTITY;

ENTITY volume_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'SYSTEM_MODELLING_MIM_LF.VOLUME_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY volume_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(3.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
END_ENTITY;

ENTITY xor_expression
  SUBTYPE OF (binary_boolean_expression);
  SELF\binary_generic_expression.operands : LIST[2:2] OF boolean_expression;
END_ENTITY;

ENTITY zone_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY zone_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

RULE compatible_dimension FOR
(cartesian_point, direction, representation_context, geometric_representation_context);
WHERE
  WR1: SIZEOF(QUERY(x <* cartesian_point | SIZEOF(QUERY(y <* geometric_representation_context | item_in_context(x, y) AND (HIINDEX(x.coordinates) <> y.coordinate_space_dimension))) > 0)) = 0;
  WR2: SIZEOF(QUERY(x <* direction | SIZEOF(QUERY(y <* geometric_representation_context | item_in_context(x, y) AND (HIINDEX(x.direction_ratios) <> y.coordinate_space_dimension))) > 0)) = 0;
END_RULE;

RULE restrict_language_assignment_per_attribute FOR
(attribute_language_assignment);
WHERE
  WR1: SIZEOF(QUERY(ala1 <* attribute_language_assignment | SIZEOF(QUERY(it <* ala1.items | SIZEOF(QUERY(ala2 <* USEDIN(it, 'SYSTEM_MODELLING_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS') | (ala1\attribute_classification_assignment.attribute_name = ala2\attribute_classification_assignment.attribute_name) AND (ala1\attribute_classification_assignment.assigned_class :=: ala2\attribute_classification_assignment.assigned_class))) > 1)) > 0)) = 0;
END_RULE;

RULE subtype_exclusiveness_representation_item FOR
(representation_item);
WHERE
  WR1: SIZEOF(QUERY(cri <* representation_item | NOT (type_check_function(cri, ['SYSTEM_MODELLING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'SYSTEM_MODELLING_MIM_LF.VALUE_REPRESENTATION_ITEM', 'SYSTEM_MODELLING_MIM_LF.COMPOUND_REPRESENTATION_ITEM'], 3)))) = 0;
END_RULE;

RULE validate_dependently_instantiable_entity_data_types FOR
(application_context, cartesian_transformation_operator, contract_type, document_type, document_usage_constraint, event_occurrence_context_role, event_occurrence_role, experience, experience_type, expression_role, library_context, organization_type, person_role, person_type, person_type_definition, person_type_definition_formation, placement, point, position_in_organization, position_in_organization_type, product_definition_context_role, product_definition_effectivity, qualification, qualification_type, time_role, vector);
      LOCAL
        number_of_input_instances : INTEGER;
        previous_in_chain : LIST OF GENERIC := [];
        set_of_input_types : SET OF STRING := [];
        all_instances : SET OF GENERIC := [];
      END_LOCAL;

      all_instances := all_instances + application_context + cartesian_transformation_operator + contract_type + document_type + document_usage_constraint + event_occurrence_context_role + event_occurrence_role + experience + experience_type + expression_role + library_context + organization_type + person_role + person_type + person_type_definition + person_type_definition_formation + placement + point + position_in_organization + position_in_organization_type + product_definition_context_role + product_definition_effectivity + qualification + qualification_type + time_role + vector;
      number_of_input_instances := SIZEOF(all_instances);
      REPEAT i := 1 TO number_of_input_instances;
        set_of_input_types := set_of_input_types + TYPEOF(all_instances[i]);
      END_REPEAT;
      
WHERE
  WR1: dependently_instantiated(all_instances, set_of_input_types, previous_in_chain);
END_RULE;

FUNCTION acyclic
 (arg1 : generic_expression; arg2 : SET OF generic_expression) : BOOLEAN;
      LOCAL
        result : BOOLEAN := TRUE;
      END_LOCAL;

      IF ('SYSTEM_MODELLING_MIM_LF.SIMPLE_GENERIC_EXPRESSION' IN TYPEOF(arg1)) THEN
        RETURN (TRUE);
      END_IF;
      IF arg1 IN arg2 THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.UNARY_GENERIC_EXPRESSION' IN TYPEOF(arg1) THEN
        RETURN (acyclic(arg1\unary_generic_expression.operand, arg2 + [arg1]));
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.BINARY_GENERIC_EXPRESSION' IN TYPEOF(arg1) THEN
        RETURN (acyclic(arg1\binary_generic_expression.operands[1], arg2 + [arg1]) AND acyclic(arg1\binary_generic_expression.operands[2], arg2 + [arg1]));
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MULTIPLE_ARITY_GENERIC_EXPRESSION' IN TYPEOF(arg1) THEN
        result := TRUE;
        REPEAT i := 1 TO SIZEOF(arg1\multiple_arity_generic_expression.operands);
          result := result AND acyclic(arg1\multiple_arity_generic_expression.operands[i], arg2 + [arg1]);
        END_REPEAT;
        RETURN (result);
      END_IF;
      RETURN (result);
      
END_FUNCTION;

FUNCTION acyclic_mapped_representation
 (mi : mapped_item) : BOOLEAN;
      LOCAL
        rms : SET OF representation_map;
        mis : SET OF mapped_item;
        rs1 : SET OF representation;
        rs2 : SET OF representation;
      END_LOCAL;

      rs1 := using_representations(mi);
      rs2 := [];
      REPEAT WHILE SIZEOF(rs1) > 0;
        REPEAT i := 1 TO HIINDEX(rs1);
          rms := bag_to_set(USEDIN(rs1[i], 'SYSTEM_MODELLING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
          IF SIZEOF(rms) > 0 THEN
            REPEAT j := 1 TO HIINDEX(rms);
              mis := bag_to_set(USEDIN(rms[i], 'SYSTEM_MODELLING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE'));
              IF SIZEOF(mis) > 0 THEN
                REPEAT j := 1 TO HIINDEX(mis);
                  IF mis[i] :=: mi THEN
                    RETURN (FALSE);
                  END_IF;
                  rs2 := rs2 + using_representations(mis[i]);
                END_REPEAT;
              END_IF;
            END_REPEAT;
          END_IF;
        END_REPEAT;
        rs1 := rs2;
        rs2 := [];
      END_REPEAT;
      RETURN (TRUE);
      
END_FUNCTION;

FUNCTION acyclic_product_definition_relationship
 (relation : product_definition_relationship; relatives : SET[1:?] OF product_definition; specific_relation : STRING) : BOOLEAN;
      LOCAL
        x : SET OF product_definition_relationship;
      END_LOCAL;

      IF relation.relating_product_definition IN relatives THEN
        RETURN (FALSE);
      END_IF;
      x := QUERY(pd <* bag_to_set(USEDIN(relation.relating_product_definition, 'SYSTEM_MODELLING_MIM_LF.' + 'PRODUCT_DEFINITION_RELATIONSHIP.' + 'RELATED_PRODUCT_DEFINITION')) | specific_relation IN TYPEOF(pd));
      REPEAT i := 1 TO HIINDEX(x);
        IF NOT acyclic_product_definition_relationship(x[i], relatives + relation.relating_product_definition, specific_relation) THEN
          RETURN (FALSE);
        END_IF;
      END_REPEAT;
      RETURN (TRUE);
      
END_FUNCTION;

FUNCTION acyclic_representation_relationship
 (relation : representation_relationship; relatives : SET[1:?] OF representation; specific_relation : STRING) : BOOLEAN;
      LOCAL
        x : SET OF representation_relationship;
      END_LOCAL;

      IF relation.rep_1 IN relatives THEN
        RETURN (FALSE);
      END_IF;
      x := QUERY(r <* bag_to_set(USEDIN(relation.rep_1, 'SYSTEM_MODELLING_MIM_LF.' + 'REPRESENTATION_RELATIONSHIP.' + 'REP_2')) | specific_relation IN TYPEOF(r));
      REPEAT i := 1 TO HIINDEX(x);
        IF NOT acyclic_representation_relationship(x[i], relatives + relation.rep_1, specific_relation) THEN
          RETURN (FALSE);
        END_IF;
      END_REPEAT;
      RETURN (TRUE);
      
END_FUNCTION;

FUNCTION bag_to_set
 (the_bag : BAG OF GENERIC : intype) : SET OF GENERIC : intype;
      LOCAL
        the_set : SET OF GENERIC:intype := [];
      END_LOCAL;

      IF SIZEOF(the_bag) > 0 THEN
        REPEAT i := 1 TO HIINDEX(the_bag);
          the_set := the_set + the_bag[i];
        END_REPEAT;
      END_IF;
      RETURN (the_set);
      
END_FUNCTION;

FUNCTION base_axis
 (dim : INTEGER; axis1 : direction; axis2 : direction; axis3 : direction) : LIST[2:3] OF direction;
      LOCAL
        u : LIST [2:3] OF direction;
        factor : REAL;
        d1 : direction;
        d2 : direction;
      END_LOCAL;

      IF (dim = 3) THEN
        d1 := NVL(normalise(axis3), dummy_gri||direction([0.000000, 0.000000, 1.000000]));
        d2 := first_proj_axis(d1, axis1);
        u := [d2, second_proj_axis(d1, d2, axis2), d1];
      ELSE
        IF EXISTS(axis1) THEN
          d1 := normalise(axis1);
          u := [d1, orthogonal_complement(d1)];
          IF EXISTS(axis2) THEN
            factor := dot_product(axis2, u[2]);
            IF (factor < 0.000000) THEN
              u[2].direction_ratios[1] :=  - u[2].direction_ratios[1];
              u[2].direction_ratios[2] :=  - u[2].direction_ratios[2];
            END_IF;
          END_IF;
        ELSE
          IF EXISTS(axis2) THEN
            d1 := normalise(axis2);
            u := [orthogonal_complement(d1), d1];
            u[1].direction_ratios[1] :=  - u[1].direction_ratios[1];
            u[1].direction_ratios[2] :=  - u[1].direction_ratios[2];
          ELSE
            u := [dummy_gri||direction([1.000000, 0.000000]), dummy_gri||direction([0.000000, 1.000000])];
          END_IF;
        END_IF;
      END_IF;
      RETURN (u);
      
END_FUNCTION;

FUNCTION build_2axes
 (ref_direction : direction) : LIST[2:2] OF direction;
      LOCAL
        d : direction := NVL(normalise(ref_direction), dummy_gri||direction([1.000000, 0.000000]));
      END_LOCAL;

      RETURN ([d, orthogonal_complement(d)]);
      
END_FUNCTION;

FUNCTION build_axes
 (axis : direction; ref_direction : direction) : LIST[3:3] OF direction;
      LOCAL
        d1 : direction;
        d2 : direction;
      END_LOCAL;

      d1 := NVL(normalise(axis), dummy_gri||direction([0.000000, 0.000000, 1.000000]));
      d2 := first_proj_axis(d1, ref_direction);
      RETURN ([d2, normalise(cross_product(d1, d2))\vector.orientation, d1]);
      
END_FUNCTION;

FUNCTION cross_product
 (arg1 : direction; arg2 : direction) : vector;
      LOCAL
        mag : REAL;
        res : direction;
        v1 : LIST [3:3] OF REAL;
        v2 : LIST [3:3] OF REAL;
        result : vector;
      END_LOCAL;

      IF (NOT EXISTS(arg1) OR (arg1.dim = 2)) OR (NOT EXISTS(arg2) OR (arg2.dim = 2)) THEN
        RETURN (?);
      ELSE
        BEGIN
          v1 := normalise(arg1).direction_ratios;
          v2 := normalise(arg2).direction_ratios;
          res := dummy_gri||direction([(v1[2] * v2[3] - v1[3] * v2[2]), (v1[3] * v2[1] - v1[1] * v2[3]), (v1[1] * v2[2] - v1[2] * v2[1])]);
          mag := 0.000000;
          REPEAT i := 1 TO 3;
            mag := mag + res.direction_ratios[i] * res.direction_ratios[i];
          END_REPEAT;
          IF (mag > 0.000000) THEN
            result := dummy_gri||vector(res, SQRT(mag));
          ELSE
            result := dummy_gri||vector(arg1, 0.000000);
          END_IF;
          RETURN (result);
        END;
      END_IF;
      
END_FUNCTION;

FUNCTION dependently_instantiated
 (set_of_input_instances : SET OF GENERIC : igen; set_of_input_types : SET OF STRING; previous_in_chain : LIST OF GENERIC : cgen) : BOOLEAN;
      LOCAL
        number_of_input_instances : INTEGER;
        number_of_referring_instances : INTEGER;
        bag_of_referring_instances : BAG OF GENERIC:igen := [];
        dependently_instantiated_flag : BOOLEAN;
        previous_in_chain_plus : LIST OF GENERIC:cgen := [];
        result : BOOLEAN := TRUE;
        set_of_types : SET OF STRING := [];
      END_LOCAL;

      IF EXISTS(set_of_input_instances) THEN
        number_of_input_instances := SIZEOF(set_of_input_instances);
        set_of_input_types := set_of_input_types + 'GENERIC';
        REPEAT i := 1 TO number_of_input_instances;
          bag_of_referring_instances := USEDIN(set_of_input_instances[i], '');
          IF EXISTS(bag_of_referring_instances) THEN
            number_of_referring_instances := SIZEOF(bag_of_referring_instances);
            dependently_instantiated_flag := FALSE;
            REPEAT j := 1 TO number_of_referring_instances;
              set_of_types := TYPEOF(bag_of_referring_instances[j]);
              IF set_of_types <= set_of_input_types THEN
                IF NOT (bag_of_referring_instances[j] IN previous_in_chain) THEN
                  previous_in_chain_plus := previous_in_chain + set_of_input_instances[i];
                  IF dependently_instantiated([bag_of_referring_instances[j]], set_of_input_types, previous_in_chain_plus) THEN
                    dependently_instantiated_flag := TRUE;
                    ESCAPE;
                  ELSE
                    SKIP;
                  END_IF;
                END_IF;
              ELSE
                dependently_instantiated_flag := TRUE;
                ESCAPE;
              END_IF;
            END_REPEAT;
            IF NOT dependently_instantiated_flag THEN
              RETURN (FALSE);
            END_IF;
          ELSE
            RETURN (FALSE);
          END_IF;
        END_REPEAT;
      ELSE
        RETURN (FALSE);
      END_IF;
      RETURN (TRUE);
      
END_FUNCTION;

FUNCTION derive_dimensional_exponents
 (x : unit) : dimensional_exponents;
      LOCAL
        result : dimensional_exponents := dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000);
      END_LOCAL;

      IF 'SYSTEM_MODELLING_MIM_LF.DERIVED_UNIT' IN TYPEOF(x) THEN
        REPEAT i := LOINDEX(x\derived_unit.elements) TO HIINDEX(x\derived_unit.elements);
          result.length_exponent := result.length_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.length_exponent);
          result.mass_exponent := result.mass_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.mass_exponent);
          result.time_exponent := result.time_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.time_exponent);
          result.electric_current_exponent := result.electric_current_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.electric_current_exponent);
          result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.thermodynamic_temperature_exponent);
          result.amount_of_substance_exponent := result.amount_of_substance_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.amount_of_substance_exponent);
          result.luminous_intensity_exponent := result.luminous_intensity_exponent + (x\derived_unit.elements[i]\derived_unit_element.exponent * x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.luminous_intensity_exponent);
        END_REPEAT;
      ELSE
        result := x\named_unit.dimensions;
      END_IF;
      RETURN (result);
      
END_FUNCTION;

FUNCTION dimension_of
 (item : geometric_representation_item) : dimension_count;
      LOCAL
        x : SET OF representation;
        y : representation_context;
        dim : dimension_count;
      END_LOCAL;

      IF 'SYSTEM_MODELLING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(item) THEN
        dim := SIZEOF(item\cartesian_point.coordinates);
        RETURN (dim);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.DIRECTION' IN TYPEOF(item) THEN
        dim := SIZEOF(item\direction.direction_ratios);
        RETURN (dim);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(item) THEN
        dim := SIZEOF(item\vector.orientation\direction.direction_ratios);
        RETURN (dim);
      END_IF;
      x := using_representations(item);
      y := x[1].context_of_items;
      dim := y\geometric_representation_context.coordinate_space_dimension;
      RETURN (dim);
      
END_FUNCTION;

FUNCTION dimensions_for_si_unit
 (n : si_unit_name) : dimensional_exponents;
      CASE n OF 
        metre:
          RETURN (dimensional_exponents(1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        gram:
          RETURN (dimensional_exponents(0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        second:
          RETURN (dimensional_exponents(0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        ampere:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000));
        kelvin:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000));
        mole:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000));
        candela:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000));
        radian:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        steradian:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        hertz:
          RETURN (dimensional_exponents(0.000000, 0.000000,  - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        newton:
          RETURN (dimensional_exponents(1.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        pascal:
          RETURN (dimensional_exponents( - 1.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        joule:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        watt:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 3.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        coulomb:
          RETURN (dimensional_exponents(0.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000));
        volt:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 3.000000,  - 1.000000, 0.000000, 0.000000, 0.000000));
        farad:
          RETURN (dimensional_exponents( - 2.000000,  - 1.000000, 4.000000, 2.000000, 0.000000, 0.000000, 0.000000));
        ohm:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 3.000000,  - 2.000000, 0.000000, 0.000000, 0.000000));
        siemens:
          RETURN (dimensional_exponents( - 2.000000,  - 1.000000, 3.000000, 2.000000, 0.000000, 0.000000, 0.000000));
        weber:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 2.000000,  - 1.000000, 0.000000, 0.000000, 0.000000));
        tesla:
          RETURN (dimensional_exponents(0.000000, 1.000000,  - 2.000000,  - 1.000000, 0.000000, 0.000000, 0.000000));
        henry:
          RETURN (dimensional_exponents(2.000000, 1.000000,  - 2.000000,  - 2.000000, 0.000000, 0.000000, 0.000000));
        degree_Celsius:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000));
        lumen:
          RETURN (dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000));
        lux:
          RETURN (dimensional_exponents( - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000));
        becquerel:
          RETURN (dimensional_exponents(0.000000, 0.000000,  - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        gray:
          RETURN (dimensional_exponents(2.000000, 0.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        sievert:
          RETURN (dimensional_exponents(2.000000, 0.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000));
        OTHERWISE:
          RETURN (?);
      END_CASE;
      
END_FUNCTION;

FUNCTION dot_product
 (arg1 : direction; arg2 : direction) : REAL;
      LOCAL
        scalar : REAL;
        vec1 : direction;
        vec2 : direction;
        ndim : INTEGER;
      END_LOCAL;

      IF NOT EXISTS(arg1) OR NOT EXISTS(arg2) THEN
        scalar := ?;
      ELSE
        IF (arg1.dim <> arg2.dim) THEN
          scalar := ?;
        ELSE
          BEGIN
            vec1 := normalise(arg1);
            vec2 := normalise(arg2);
            ndim := arg1.dim;
            scalar := 0.000000;
            REPEAT i := 1 TO ndim;
              scalar := scalar + vec1.direction_ratios[i] * vec2.direction_ratios[i];
            END_REPEAT;
          END;
        END_IF;
      END_IF;
      RETURN (scalar);
      
END_FUNCTION;

FUNCTION first_proj_axis
 (z_axis : direction; arg : direction) : direction;
      LOCAL
        x_axis : direction;
        v : direction;
        z : direction;
        x_vec : vector;
      END_LOCAL;

      IF (NOT EXISTS(z_axis)) THEN
        RETURN (?);
      ELSE
        z := normalise(z_axis);
        IF NOT EXISTS(arg) THEN
          IF ((z.direction_ratios <> [1.000000, 0.000000, 0.000000]) AND (z.direction_ratios <> [ - 1.000000, 0.000000, 0.000000])) THEN
            v := dummy_gri||direction([1.000000, 0.000000, 0.000000]);
          ELSE
            v := dummy_gri||direction([0.000000, 1.000000, 0.000000]);
          END_IF;
        ELSE
          IF (arg.dim <> 3) THEN
            RETURN (?);
          END_IF;
          IF ((cross_product(arg, z).magnitude) = 0.000000) THEN
            RETURN (?);
          ELSE
            v := normalise(arg);
          END_IF;
        END_IF;
        x_vec := scalar_times_vector(dot_product(v, z), z);
        x_axis := vector_difference(v, x_vec).orientation;
        x_axis := normalise(x_axis);
      END_IF;
      RETURN (x_axis);
      
END_FUNCTION;

FUNCTION get_description_value
 (obj : description_attribute_select) : text;
      LOCAL
        description_bag : BAG OF description_attribute := (USEDIN(obj, 'SYSTEM_MODELLING_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.' + 'DESCRIBED_ITEM'));
      END_LOCAL;

      IF SIZEOF(description_bag) = 1 THEN
        RETURN (description_bag[1].attribute_value);
      ELSE
        RETURN (?);
      END_IF;
      
END_FUNCTION;

FUNCTION get_directed_link
 (nodes : LIST OF representation; undirected_link : LIST OF chained_representation_link) : LIST OF representation_relationship;
      LOCAL
        directed_link : LIST OF representation_relationship := [];
      END_LOCAL;

      REPEAT i := 1 TO SIZEOF(undirected_link);
        CASE TRUE OF 
          ('SYSTEM_MODELLING_MIM_LF.REPRESENTATION_CONTEXT' IN TYPEOF(undirected_link[i])):
            BEGIN
              IF ((nodes[i]\representation.context_of_items :=: undirected_link[i]) AND (nodes[i + 1]\representation.context_of_items :=: undirected_link[i])) THEN
                INSERT(directed_link, representation_relationship('', '', nodes[i], nodes[i + 1]), (i - 1));
              ELSE
                RETURN (?);
              END_IF;
            END;
          ('SYSTEM_MODELLING_MIM_LF.REPRESENTATION_RELATIONSHIP' IN TYPEOF(undirected_link[i])):
            BEGIN
              IF (((nodes[i] :=: undirected_link[i]\representation_relationship.rep_1) AND (nodes[i + 1] :=: undirected_link[i]\representation_relationship.rep_2)) OR ((nodes[i] :=: undirected_link[i]\representation_relationship.rep_2) AND (nodes[i + 1] :=: undirected_link[i]\representation_relationship.rep_1))) THEN
                INSERT(directed_link, representation_relationship('', '', nodes[i], nodes[i + 1]), (i - 1));
              ELSE
                RETURN (?);
              END_IF;
            END;
          ('SYSTEM_MODELLING_MIM_LF.MAPPED_ITEM' IN TYPEOF(undirected_link[i])):
            BEGIN
              IF ((nodes[i] IN using_representations(undirected_link[i])) AND (nodes[i + 1] :=: undirected_link[i]\mapped_item.mapping_source\representation_map.mapped_representation)) THEN
                INSERT(directed_link, representation_relationship('', '', nodes[i], nodes[i + 1]), (i - 1));
              ELSE
                RETURN (?);
              END_IF;
            END;
          OTHERWISE:
            RETURN (?);
        END_CASE;
      END_REPEAT;
      RETURN (directed_link);
      
END_FUNCTION;

FUNCTION get_id_value
 (obj : id_attribute_select) : identifier;
      LOCAL
        id_bag : BAG OF id_attribute := (USEDIN(obj, 'SYSTEM_MODELLING_MIM_LF.' + 'ID_ATTRIBUTE.' + 'IDENTIFIED_ITEM'));
      END_LOCAL;

      IF SIZEOF(id_bag) = 1 THEN
        RETURN (id_bag[1].attribute_value);
      ELSE
        RETURN (?);
      END_IF;
      
END_FUNCTION;

FUNCTION get_name_value
 (obj : name_attribute_select) : label;
      LOCAL
        name_bag : BAG OF name_attribute := (USEDIN(obj, 'SYSTEM_MODELLING_MIM_LF.' + 'NAME_ATTRIBUTE.' + 'NAMED_ITEM'));
      END_LOCAL;

      IF SIZEOF(name_bag) = 1 THEN
        RETURN (name_bag[1].attribute_value);
      ELSE
        RETURN (?);
      END_IF;
      
END_FUNCTION;

FUNCTION get_role
 (obj : role_select) : object_role;
      LOCAL
        role_bag : BAG OF role_association := (USEDIN(obj, 'SYSTEM_MODELLING_MIM_LF.' + 'ROLE_ASSOCIATION.' + 'ITEM_WITH_ROLE'));
      END_LOCAL;

      IF SIZEOF(role_bag) = 1 THEN
        RETURN (role_bag[1].role);
      ELSE
        RETURN (?);
      END_IF;
      
END_FUNCTION;

FUNCTION is_acyclic
 (arg : generic_expression) : BOOLEAN;
      RETURN (acyclic(arg, []));
      
END_FUNCTION;

FUNCTION is_int_expr
 (arg : numeric_expression) : LOGICAL;
      LOCAL
        i : INTEGER := 0;
      END_LOCAL;

      IF 'SYSTEM_MODELLING_MIM_LF.INT_LITERAL' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.REAL_LITERAL' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (is_int_expr(arg\unary_numeric_expression.operand));
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (is_int_expr(arg\unary_numeric_expression.operand));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MINIMUM_FUNCTION' IN TYPEOF(arg)) THEN
        REPEAT i := 1 TO SIZEOF(arg\multiple_arity_numeric_expression.operands);
          IF NOT is_int_expr(arg\multiple_arity_numeric_expression.operands[i]) THEN
            RETURN (FALSE);
          END_IF;
        END_REPEAT;
        RETURN (TRUE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.POWER_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (is_int_expr(arg\binary_numeric_expression.operands[1]) AND is_int_expr(arg\binary_numeric_expression.operands[2]));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg) THEN
        IF 'SYSTEM_MODELLING_MIM_LF.INT_VALUE_FUNCTION' IN TYPEOF(arg) THEN
          RETURN (TRUE);
        ELSE
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.INTEGER_DEFINED_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.REAL_DEFINED_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (FALSE);
      END_IF;
      RETURN (FALSE);
      
END_FUNCTION;

FUNCTION is_SQL_mappable
 (arg : expression) : LOGICAL;
      LOCAL
        i : INTEGER;
      END_LOCAL;

      IF 'SYSTEM_MODELLING_MIM_LF.SIMPLE_NUMERIC_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.SQL_MAPPABLE_DEFINED_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg) THEN
        RETURN (is_SQL_mappable(arg\unary_numeric_expression.operand));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MINIMUM_FUNCTION' IN TYPEOF(arg)) THEN
        REPEAT i := 1 TO SIZEOF(arg\multiple_arity_numeric_expression.operands);
          IF NOT is_SQL_mappable(arg\multiple_arity_numeric_expression.operands[i]) THEN
            RETURN (FALSE);
          END_IF;
        END_REPEAT;
        RETURN (TRUE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (is_SQL_mappable(arg\binary_numeric_expression.operands[1]) AND is_SQL_mappable(arg\binary_numeric_expression.operands[2]));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.POWER_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.SIMPLE_BOOLEAN_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.NOT_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (is_SQL_mappable(arg\unary_generic_expression.operand));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.ODD_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.XOR_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.AND_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.OR_EXPRESSION' IN TYPEOF(arg)) THEN
        REPEAT i := 1 TO SIZEOF(arg\multiple_arity_boolean_expression.operands);
          IF NOT is_SQL_mappable(arg\multiple_arity_boolean_expression.operands[i]) THEN
            RETURN (FALSE);
          END_IF;
        END_REPEAT;
        RETURN (TRUE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.EQUALS_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (is_SQL_mappable(arg\binary_generic_expression.operands[1]) AND is_SQL_mappable(arg\binary_generic_expression.operands[2]));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.COMPARISON_EQUAL' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COMPARISON_GREATER' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COMPARISON_GREATER_EQUAL' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COMPARISON_LESS' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COMPARISON_LESS_EQUAL' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.COMPARISON_NOT_EQUAL' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.LIKE_EXPRESSION' IN TYPEOF(arg)) THEN
        RETURN (is_SQL_mappable(arg\comparison_expression.operands[1]) AND is_SQL_mappable(arg\comparison_expression.operands[2]));
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.INTERVAL_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (is_SQL_mappable(arg\interval_expression.interval_low) AND is_SQL_mappable(arg\interval_expression.interval_high) AND is_SQL_mappable(arg\interval_expression.interval_item));
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.NUMERIC_DEFINED_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.SIMPLE_STRING_EXPRESSION' IN TYPEOF(arg) THEN
        RETURN (TRUE);
      END_IF;
      IF ('SYSTEM_MODELLING_MIM_LF.INDEX_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.SUBSTRING_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.CONCAT_EXPRESSION' IN TYPEOF(arg)) OR ('SYSTEM_MODELLING_MIM_LF.FORMAT_FUNCTION' IN TYPEOF(arg)) THEN
        RETURN (FALSE);
      END_IF;
      RETURN (FALSE);
      
END_FUNCTION;

FUNCTION item_in_context
 (item : representation_item; cntxt : representation_context) : BOOLEAN;
      LOCAL
        y : BAG OF representation_item;
      END_LOCAL;

      IF SIZEOF(USEDIN(item, 'SYSTEM_MODELLING_MIM_LF.REPRESENTATION.ITEMS') * cntxt.representations_in_context) > 0 THEN
        RETURN (TRUE);
      ELSE
        y := QUERY(z <* USEDIN(item, '') | 'SYSTEM_MODELLING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z));
        IF SIZEOF(y) > 0 THEN
          REPEAT i := 1 TO HIINDEX(y);
            IF item_in_context(y[i], cntxt) THEN
              RETURN (TRUE);
            END_IF;
          END_REPEAT;
        END_IF;
      END_IF;
      RETURN (FALSE);
      
END_FUNCTION;

FUNCTION leap_year
 (year : year_number) : BOOLEAN;
      IF ((((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0)) THEN
        RETURN (TRUE);
      ELSE
        RETURN (FALSE);
      END_IF;
      
END_FUNCTION;

FUNCTION normalise
 (arg : vector_or_direction) : vector_or_direction;
      LOCAL
        ndim : INTEGER;
        v : direction;
        result : vector_or_direction;
        vec : vector;
        mag : REAL;
      END_LOCAL;

      IF NOT EXISTS(arg) THEN
        result := ?;
      ELSE
        ndim := arg.dim;
        IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(arg) THEN
          BEGIN
            v := dummy_gri||direction(arg\vector.orientation.direction_ratios);
            IF arg.magnitude = 0.000000 THEN
              RETURN (?);
            ELSE
              vec := dummy_gri||vector(v, 1.000000);
            END_IF;
          END;
        ELSE
          v := dummy_gri||direction(arg.direction_ratios);
        END_IF;
        mag := 0.000000;
        REPEAT i := 1 TO ndim;
          mag := mag + v.direction_ratios[i] * v.direction_ratios[i];
        END_REPEAT;
        IF mag > 0.000000 THEN
          mag := SQRT(mag);
          REPEAT i := 1 TO ndim;
            v.direction_ratios[i] := v.direction_ratios[i] / mag;
          END_REPEAT;
          IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(arg) THEN
            vec.orientation := v;
            result := vec;
          ELSE
            result := v;
          END_IF;
        ELSE
          RETURN (?);
        END_IF;
      END_IF;
      RETURN (result);
      
END_FUNCTION;

FUNCTION orthogonal_complement
 (vec : direction) : direction;
      LOCAL
        result : direction;
      END_LOCAL;

      IF (vec.dim <> 2) OR NOT EXISTS(vec) THEN
        RETURN (?);
      ELSE
        result := dummy_gri||direction([ - vec.direction_ratios[2], vec.direction_ratios[1]]);
        RETURN (result);
      END_IF;
      
END_FUNCTION;

FUNCTION scalar_times_vector
 (scalar : REAL; vec : vector_or_direction) : vector;
      LOCAL
        v : direction;
        mag : REAL;
        result : vector;
      END_LOCAL;

      IF NOT EXISTS(scalar) OR NOT EXISTS(vec) THEN
        RETURN (?);
      ELSE
        IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(vec) THEN
          v := dummy_gri||direction(vec\vector.orientation.direction_ratios);
          mag := scalar * vec.magnitude;
        ELSE
          v := dummy_gri||direction(vec.direction_ratios);
          mag := scalar;
        END_IF;
        IF (mag < 0.000000) THEN
          REPEAT i := 1 TO SIZEOF(v.direction_ratios);
            v.direction_ratios[i] :=  - v.direction_ratios[i];
          END_REPEAT;
          mag :=  - mag;
        END_IF;
        result := dummy_gri||vector(normalise(v), mag);
      END_IF;
      RETURN (result);
      
END_FUNCTION;

FUNCTION second_proj_axis
 (z_axis : direction; x_axis : direction; arg : direction) : direction;
      LOCAL
        y_axis : vector;
        v : direction;
        temp : vector;
      END_LOCAL;

      IF NOT EXISTS(arg) THEN
        v := dummy_gri||direction([0.000000, 1.000000, 0.000000]);
      ELSE
        v := arg;
      END_IF;
      temp := scalar_times_vector(dot_product(v, z_axis), z_axis);
      y_axis := vector_difference(v, temp);
      temp := scalar_times_vector(dot_product(v, x_axis), x_axis);
      y_axis := vector_difference(y_axis, temp);
      y_axis := normalise(y_axis);
      RETURN (y_axis.orientation);
      
END_FUNCTION;

FUNCTION type_check_function
 (the_type : GENERIC; sub_names : SET OF STRING; criterion : INTEGER) : LOGICAL;
      IF ((NOT EXISTS(the_type)) OR (NOT ({0 <= criterion <= 3})) OR (SIZEOF(sub_names) = 0)) THEN
        RETURN (UNKNOWN);
      ELSE
        CASE criterion OF 
          0:
            RETURN (SIZEOF(sub_names * TYPEOF(the_type)) > 0);
          1:
            RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 0);
          2:
            RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 1);
          3:
            RETURN (SIZEOF(sub_names * TYPEOF(the_type)) <= 1);
        END_CASE;
      END_IF;
      
END_FUNCTION;

FUNCTION using_items
 (item : founded_item_select; checked_items : SET OF founded_item_select) : SET OF founded_item_select;
      LOCAL
        new_check_items : SET OF founded_item_select;
        result_items : SET OF founded_item_select;
        next_items : SET OF founded_item_select;
      END_LOCAL;

      result_items := [];
      new_check_items := checked_items + item;
      next_items := QUERY(z <* bag_to_set(USEDIN(item, '')) | ('SYSTEM_MODELLING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z)) OR ('SYSTEM_MODELLING_MIM_LF.FOUNDED_ITEM' IN TYPEOF(z)));
      IF SIZEOF(next_items) > 0 THEN
        REPEAT i := 1 TO HIINDEX(next_items);
          IF NOT (next_items[i] IN new_check_items) THEN
            result_items := result_items + next_items[i] + using_items(next_items[i], new_check_items);
          END_IF;
        END_REPEAT;
      END_IF;
      RETURN (result_items);
      
END_FUNCTION;

FUNCTION using_representations
 (item : founded_item_select) : SET OF representation;
      LOCAL
        results : SET OF representation;
        result_bag : BAG OF representation;
        intermediate_items : SET OF founded_item_select;
      END_LOCAL;

      results := [];
      result_bag := USEDIN(item, 'SYSTEM_MODELLING_MIM_LF.REPRESENTATION.ITEMS');
      IF SIZEOF(result_bag) > 0 THEN
        REPEAT i := 1 TO HIINDEX(result_bag);
          results := results + result_bag[i];
        END_REPEAT;
      END_IF;
      intermediate_items := using_items(item, []);
      IF SIZEOF(intermediate_items) > 0 THEN
        REPEAT i := 1 TO HIINDEX(intermediate_items);
          result_bag := USEDIN(intermediate_items[i], 'SYSTEM_MODELLING_MIM_LF.REPRESENTATION.ITEMS');
          IF SIZEOF(result_bag) > 0 THEN
            REPEAT j := 1 TO HIINDEX(result_bag);
              results := results + result_bag[j];
            END_REPEAT;
          END_IF;
        END_REPEAT;
      END_IF;
      RETURN (results);
      
END_FUNCTION;

FUNCTION valid_calendar_date
 (date : calendar_date) : LOGICAL;
      CASE date.month_component OF 
        1:
          RETURN ({1 <= date.day_component <= 31});
        2:
          BEGIN
            IF (leap_year(date.year_component)) THEN
              RETURN ({1 <= date.day_component <= 29});
            ELSE
              RETURN ({1 <= date.day_component <= 28});
            END_IF;
          END;
        3:
          RETURN ({1 <= date.day_component <= 31});
        4:
          RETURN ({1 <= date.day_component <= 30});
        5:
          RETURN ({1 <= date.day_component <= 31});
        6:
          RETURN ({1 <= date.day_component <= 30});
        7:
          RETURN ({1 <= date.day_component <= 31});
        8:
          RETURN ({1 <= date.day_component <= 31});
        9:
          RETURN ({1 <= date.day_component <= 30});
        10:
          RETURN ({1 <= date.day_component <= 31});
        11:
          RETURN ({1 <= date.day_component <= 30});
        12:
          RETURN ({1 <= date.day_component <= 31});
      END_CASE;
      RETURN (FALSE);
      
END_FUNCTION;

FUNCTION valid_measure_value
 (m : measure_value) : BOOLEAN;
      IF ('REAL' IN TYPEOF(m)) THEN
        RETURN (m > 0.000000);
      ELSE
        IF ('INTEGER' IN TYPEOF(m)) THEN
          RETURN (m > 0);
        ELSE
          RETURN (TRUE);
        END_IF;
      END_IF;
      
END_FUNCTION;

FUNCTION valid_time
 (time : local_time) : BOOLEAN;
      IF EXISTS(time.second_component) THEN
        RETURN (EXISTS(time.minute_component));
      ELSE
        RETURN (TRUE);
      END_IF;
      
END_FUNCTION;

FUNCTION valid_units
 (m : measure_with_unit) : BOOLEAN;
      IF 'SYSTEM_MODELLING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MASS_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.TIME_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_CURRENT_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.CELSIUS_TEMPERATURE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.AMOUNT_OF_SUBSTANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.LUMINOUS_INTENSITY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.SOLID_ANGLE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.AREA_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.VOLUME_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(3.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.RATIO_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ACCELERATION_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.000000, 0.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.CAPACITANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( - 2.000000,  - 1.000000, 4.000000, 2.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_CHARGE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.CONDUCTANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( - 2.000000,  - 1.000000, 3.000000, 2.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ELECTRIC_POTENTIAL_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 3.000000,  - 1.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ENERGY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.FORCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.FREQUENCY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000,  - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ILLUMINANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.INDUCTANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 2.000000,  - 2.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.LUMINOUS_FLUX_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MAGNETIC_FLUX_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 2.000000,  - 1.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.MAGNETIC_FLUX_DENSITY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 1.000000,  - 2.000000,  - 1.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.POWER_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 3.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.PRESSURE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( - 1.000000, 1.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.RESISTANCE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 1.000000,  - 3.000000,  - 2.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.VELOCITY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.000000, 0.000000,  - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.RADIOACTIVITY_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.000000, 0.000000,  - 1.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.ABSORBED_DOSE_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 0.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      IF 'SYSTEM_MODELLING_MIM_LF.DOSE_EQUIVALENT_MEASURE' IN TYPEOF(m.value_component) THEN
        IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.000000, 0.000000,  - 2.000000, 0.000000, 0.000000, 0.000000, 0.000000) THEN
          RETURN (FALSE);
        END_IF;
      END_IF;
      RETURN (TRUE);
      
END_FUNCTION;

FUNCTION value_range_wr1
 (agg : compound_item_definition) : BOOLEAN;
      BEGIN
        IF (SIZEOF(agg) = 2) AND ((SIZEOF(QUERY(i1 <* agg | ('SYSTEM_MODELLING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i1)))) = 2) OR (SIZEOF(QUERY(i2 <* agg | ('SYSTEM_MODELLING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(i2)))) = 2)) THEN
          RETURN (TRUE);
        ELSE
          RETURN (FALSE);
        END_IF;
      END;
      
END_FUNCTION;

FUNCTION value_range_wr2
 (agg : compound_item_definition) : BOOLEAN;
      BEGIN
        IF ((SIZEOF(QUERY(i <* agg | (i\representation_item.name = 'upper limit'))) = 1) AND (SIZEOF(QUERY(i <* agg | (i\representation_item.name = 'lower limit'))) = 1)) THEN
          RETURN (TRUE);
        ELSE
          RETURN (FALSE);
        END_IF;
      END;
      
END_FUNCTION;

FUNCTION value_range_wr3
 (agg : compound_item_definition) : BOOLEAN;
      BEGIN
        IF (SIZEOF(QUERY(i1 <* agg | ('SYSTEM_MODELLING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i1)) AND (SIZEOF(QUERY(i2 <* agg | ('SYSTEM_MODELLING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i2)) AND (i1 :<>: i2) AND (i1\measure_with_unit.unit_component :=: i2\measure_with_unit.unit_component))) = 1))) = 2) THEN
          RETURN (TRUE);
        ELSE
          RETURN (FALSE);
        END_IF;
      END;
      
END_FUNCTION;

FUNCTION vector_difference
 (arg1 : vector_or_direction; arg2 : vector_or_direction) : vector;
      LOCAL
        result : vector;
        res : direction;
        vec1 : direction;
        vec2 : direction;
        mag : REAL;
        mag1 : REAL;
        mag2 : REAL;
        ndim : INTEGER;
      END_LOCAL;

      IF ((NOT EXISTS(arg1)) OR (NOT EXISTS(arg2))) OR (arg1.dim <> arg2.dim) THEN
        RETURN (?);
      ELSE
        BEGIN
          IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(arg1) THEN
            mag1 := arg1.magnitude;
            vec1 := arg1\vector.orientation;
          ELSE
            mag1 := 1.000000;
            vec1 := arg1;
          END_IF;
          IF 'SYSTEM_MODELLING_MIM_LF.VECTOR' IN TYPEOF(arg2) THEN
            mag2 := arg2.magnitude;
            vec2 := arg2\vector.orientation;
          ELSE
            mag2 := 1.000000;
            vec2 := arg2;
          END_IF;
          vec1 := normalise(vec1);
          vec2 := normalise(vec2);
          ndim := SIZEOF(vec1.direction_ratios);
          mag := 0.000000;
          res := dummy_gri||direction(vec1.direction_ratios);
          REPEAT i := 1 TO ndim;
            res.direction_ratios[i] := mag1 * vec1.direction_ratios[i] - mag2 * vec2.direction_ratios[i];
            mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]);
          END_REPEAT;
          IF (mag > 0.000000) THEN
            result := dummy_gri||vector(res, SQRT(mag));
          ELSE
            result := dummy_gri||vector(vec1, 0.000000);
          END_IF;
        END;
      END_IF;
      RETURN (result);
      
END_FUNCTION;

END_SCHEMA;  -- System_modelling_mim_LF


© ISO 2011 — All rights reserved