Schema: Ap242_managed_model_based_3d_engineering_mim_lf



SCHEMA Ap242_managed_model_based_3d_engineering_mim_lf;


CONSTANT
  ap242_shape_representation_reference_types : SET OF STRING :=
   ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_BREP_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEVELED_SHEET_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHEET_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_SWEPT_SOLID_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_BREP_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_PLACEMENT_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SCAN_DATA_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DIMENSION_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION',
     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHAPE_REPRESENTATION'];

  deprecated_constructed_data_types : SET OF STRING :=
   ['angle_direction_reference_select',
     'approved_item',
     'certified_item',
     'change_request_item',
     'contracted_item',
     'cc_classified_item',
     'date_time_item',
     'cc_person_organization_item',
     'cc_specified_item',
     'start_request_item',
     'work_item'];

  deprecated_entity_data_types : SET OF STRING :=
   ['angle_direction_reference',
     'cc_design_approval',
     'cc_design_certification',
     'cc_design_contract',
     'cc_design_date_and_time_assignment',
     'cc_design_person_and_organization_assignment',
     'cc_design_security_classification',
     'cc_design_specification_reference',
     'change',
     'change_request',
     'design_context',
     'design_make_from_relationship',
     'mechanical_context',
     'min_and_major_ply_orientation_basis',
     'product_category_relationship',
     'start_request',
     'start_work',
     'supplied_part_relationship'];

  deprecated_interfaced_data_types : SET OF STRING :=
   ['document_with_class',
     'ordinal_date',
     'product_definition_formation_with_specified_source',
     'week_of_year_and_day_date'];

  dt_deprecated_entity_data_types : SET OF STRING := ['externally_defined_dimension_definition'];

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

  dummy_tri : topological_representation_item := representation_item('') || topological_representation_item();

  gt_deprecated_entity_data_types : SET OF STRING := ['dimension_related_tolerance_zone_element'];

  pre_defined_picture_representation_types : SET[0:?] OF STRING :=
   ['JPEG',
     'PNG',
     'TIFF',
     'BMP',
     'GIF'];

  schema_prefix : STRING := 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.';

  the_binarys : elementary_space := make_elementary_space(es_binarys);

  the_booleans : elementary_space := make_elementary_space(es_booleans);

  the_complex_numbers : elementary_space := make_elementary_space(es_complex_numbers);

  the_complex_tuples : extended_tuple_space := make_extended_tuple_space(the_zero_tuple_space, the_complex_numbers);

  the_empty_atom_based_tuple : atom_based_tuple := [];

  the_empty_atom_based_value : atom_based_value := the_empty_atom_based_tuple;

  the_empty_maths_tuple : maths_tuple := [];

  the_empty_maths_value : maths_value := the_empty_maths_tuple;

  the_empty_space : finite_space := make_finite_space([]);

  the_generics : elementary_space := make_elementary_space(es_generics);

  the_integer_tuples : extended_tuple_space := make_extended_tuple_space(the_zero_tuple_space, the_integers);

  the_integers : elementary_space := make_elementary_space(es_integers);

  the_logicals : elementary_space := make_elementary_space(es_logicals);

  the_maths_spaces : elementary_space := make_elementary_space(es_maths_spaces);

  the_neg1_one_interval : finite_real_interval := make_finite_real_interval(-1.0, closed, 1.0, closed);

  the_neghalfpi_halfpi_interval : finite_real_interval := make_finite_real_interval(-0.5 * PI, closed, 0.5 * PI, closed);

  the_negpi_pi_interval : finite_real_interval := make_finite_real_interval(-PI, open, PI, closed);

  the_nonnegative_reals : real_interval_from_min := make_real_interval_from_min(0.0, closed);

  the_numbers : elementary_space := make_elementary_space(es_numbers);

  the_real_tuples : extended_tuple_space := make_extended_tuple_space(the_zero_tuple_space, the_reals);

  the_reals : elementary_space := make_elementary_space(es_reals);

  the_strings : elementary_space := make_elementary_space(es_strings);

  the_tuples : extended_tuple_space := make_extended_tuple_space(the_zero_tuple_space, the_generics);

  the_zero_one_interval : finite_real_interval := make_finite_real_interval(0.0, closed, 1.0, closed);

  the_zero_pi_interval : finite_real_interval := make_finite_real_interval(0.0, closed, PI, closed);

  the_zero_tuple_space : listed_product_space := make_listed_product_space([]);
END_CONSTANT;

TYPE a3m_accuracy_associated_target_select = SELECT
   (a3m_data_quality_criteria_representation,
    a3m_data_quality_criterion,
    a3m_data_quality_inspection_result,
    a3m_data_quality_inspection_result_representation);
END_TYPE;

TYPE a3m_accuracy_type_name = ENUMERATION OF
   (atns_area_measure,
    atns_length_measure,
    atns_others,
    atns_plane_angle_measure,
    atns_volume_measure,
    atna_others);
END_TYPE;

TYPE a3m_data_quality_accuracy_type_name = ENUMERATION OF
   (a3mdqa_inapt);
END_TYPE;

TYPE a3m_data_quality_inspected_element_type_name = ENUMERATION OF
   (pmidqi_datum,
    pmidqi_datum_pair,
    pmidqi_datum_system,
    pmidqi_datum_target,
    pmidqi_dimensional_location,
    pmidqi_dimensional_size,
    pmidqi_geometric_tolerance,
    pmidqi_others,
    pmidqi_shape_aspect,
    tsdqi_adjacent_triangle_pair,
    tsdqi_adjacent_triangulated_face_pair,
    tsdqi_representative_triangle,
    tsdqi_others,
    tsdqi_tessellated_connecting_edge,
    tsdqi_tessellated_shell,
    tsdqi_tessellated_solid,
    tsdqi_triangle_edge,
    tsdqi_triangulated_face,
    tsdqi_triangle_vertex);
END_TYPE;

TYPE a3m_data_quality_inspected_model_select = SELECT
   (draughting_model,
    shape_representation);
END_TYPE;

TYPE a3m_data_quality_measured_data_type_name = ENUMERATION OF
   (pmidqm_boolean_value,
    pmidqm_positive_length_measure,
    pmidqm_positive_plane_angle_measure,
    pmidqm_others,
    tsdqm_area_measure,
    tsdqm_boolean_value,
    tsdqm_count_measure,
    tsdqm_others,
    tsdqm_positive_length_measure,
    tsdqm_positive_plane_angle_measure,
    tsdqm_ratio_measure);
END_TYPE;

TYPE a3m_data_quality_measured_value_select = SELECT
   (area_measure,
    boolean_value,
    count_measure,
    positive_length_measure,
    positive_plane_angle_measure,
    ratio_measure);
END_TYPE;

TYPE a3m_data_quality_type_name_for_location_of_extreme_value = ENUMERATION OF
   (tsdqe_others,
    tsdqe_set_of_representative_triangle,
    tsdqe_set_of_tessellated_shell,
    tsdqe_set_of_triangle_edge,
    tsdqe_set_of_triangulated_face,
    tsdqe_triangle_vertex);
END_TYPE;

TYPE a3m_detected_difference_type_name = ENUMERATION OF
   (ddns_area_measure,
    ddns_cartesian_point,
    ddns_connected_face_set,
    ddns_count_measure,
    ddns_edge,
    ddns_face,
    ddns_five_count_measure,
    ddns_four_count_measure,
    ddns_length_measure,
    ddns_no_element,
    ddns_others,
    ddns_point_on_curve,
    ddns_point_on_surface,
    ddns_several_edges,
    ddns_several_faces,
    ddns_three_count_measure,
    ddns_two_cartesian_points,
    ddns_two_count_measure,
    ddns_volume_measure,
    ddna_a3ms_inspected_equivalence_element_select,
    ddna_assembly_component_usage,
    ddna_binary_assembly_constraint,
    ddna_cartesian_point,
    ddna_context_dependent_shape_representation,
    ddna_count_measure,
    ddna_multi_level_reference_designator,
    ddna_no_element,
    ddna_others,
    ddna_volume_measure);
END_TYPE;

TYPE a3m_element_type_name = ENUMERATION OF
   (etns_connected_edge_set,
    etns_connected_face_set,
    etns_external_representation_item,
    etns_manifold_solid_brep,
    etns_others,
    etns_point_cloud_dataset,
    etns_shell_based_surface_model,
    etns_shell_based_wireframe_model,
    etns_vertex_point,
    etna_product_definition_or_reference,
    etna_shape_representation,
    etna_others);
END_TYPE;

TYPE a3m_equivalence_assessment_specification_select = SELECT
   (a3m_equivalence_assessment_by_logical_test,
    a3m_equivalence_assessment_by_numerical_test);
END_TYPE;

TYPE a3m_location_of_extreme_value_select = SELECT
   (tsdq_location_of_extreme_value);
END_TYPE;

TYPE a3m_measured_data_type_name = ENUMERATION OF
   (mdns_area_measure,
    mdns_boolean_value,
    mdns_length_measure,
    mdns_others,
    mdns_plane_angle_measure,
    mdns_volume_measure,
    mdna_boolean_value,
    mdna_context_dependent_measure,
    mdna_length_measure,
    mdna_length_measure_and_context_dependent_measure,
    mdna_others,
    mdna_plane_angle_measure,
    mdna_volume_measure);
END_TYPE;

TYPE a3ma_accuracy_type_name = a3m_accuracy_type_name;
WHERE
  WR1: SELF <> a3m_accuracy_type_name.atns_area_measure;
  WR2: SELF <> a3m_accuracy_type_name.atns_length_measure;
  WR3: SELF <> a3m_accuracy_type_name.atns_others;
  WR4: SELF <> a3m_accuracy_type_name.atns_plane_angle_measure;
  WR5: SELF <> a3m_accuracy_type_name.atns_volume_measure;
END_TYPE;

TYPE a3ma_detected_difference_type_name = a3m_detected_difference_type_name;
WHERE
  WR1: SELF <> a3m_detected_difference_type_name.ddns_area_measure;
  WR2: SELF <> a3m_detected_difference_type_name.ddns_cartesian_point;
  WR3: SELF <> a3m_detected_difference_type_name.ddns_connected_face_set;
  WR4: SELF <> a3m_detected_difference_type_name.ddns_count_measure;
  WR5: SELF <> a3m_detected_difference_type_name.ddns_edge;
  WR6: SELF <> a3m_detected_difference_type_name.ddns_face;
  WR7: SELF <> a3m_detected_difference_type_name.ddns_five_count_measure;
  WR8: SELF <> a3m_detected_difference_type_name.ddns_four_count_measure;
  WR9: SELF <> a3m_detected_difference_type_name.ddns_length_measure;
  WR10: SELF <> a3m_detected_difference_type_name.ddns_no_element;
  WR11: SELF <> a3m_detected_difference_type_name.ddns_others;
  WR12: SELF <> a3m_detected_difference_type_name.ddns_point_on_curve;
  WR13: SELF <> a3m_detected_difference_type_name.ddns_point_on_surface;
  WR14: SELF <> a3m_detected_difference_type_name.ddns_several_edges;
  WR15: SELF <> a3m_detected_difference_type_name.ddns_several_faces;
  WR16: SELF <> a3m_detected_difference_type_name.ddns_three_count_measure;
  WR17: SELF <> a3m_detected_difference_type_name.ddns_two_cartesian_points;
  WR18: SELF <> a3m_detected_difference_type_name.ddns_two_count_measure;
  WR19: SELF <> a3m_detected_difference_type_name.ddns_volume_measure;
END_TYPE;

TYPE a3ma_element_type_name = a3m_element_type_name;
WHERE
  WR1: SELF <> a3m_element_type_name.etns_connected_edge_set;
  WR2: SELF <> a3m_element_type_name.etns_connected_face_set;
  WR3: SELF <> a3m_element_type_name.etns_external_representation_item;
  WR4: SELF <> a3m_element_type_name.etns_manifold_solid_brep;
  WR5: SELF <> a3m_element_type_name.etns_others;
  WR6: SELF <> a3m_element_type_name.etns_point_cloud_dataset;
  WR7: SELF <> a3m_element_type_name.etns_shell_based_surface_model;
  WR8: SELF <> a3m_element_type_name.etns_shell_based_wireframe_model;
  WR9: SELF <> a3m_element_type_name.etns_vertex_point;
END_TYPE;

TYPE a3ma_measured_data_type_name = a3m_measured_data_type_name;
WHERE
  WR1: SELF <> a3m_measured_data_type_name.mdns_area_measure;
  WR2: SELF <> a3m_measured_data_type_name.mdns_boolean_value;
  WR3: SELF <> a3m_measured_data_type_name.mdns_length_measure;
  WR4: SELF <> a3m_measured_data_type_name.mdns_others;
  WR5: SELF <> a3m_measured_data_type_name.mdns_plane_angle_measure;
  WR6: SELF <> a3m_measured_data_type_name.mdns_volume_measure;
END_TYPE;

TYPE a3ms_accuracy_type_name = a3m_accuracy_type_name;
WHERE
  WR1: SELF <> a3m_accuracy_type_name.atna_others;
END_TYPE;

TYPE a3ms_detected_difference_type_name = a3m_detected_difference_type_name;
WHERE
  WR1: SELF <> a3m_detected_difference_type_name.ddna_a3ms_inspected_equivalence_element_select;
  WR2: SELF <> a3m_detected_difference_type_name.ddna_assembly_component_usage;
  WR3: SELF <> a3m_detected_difference_type_name.ddna_binary_assembly_constraint;
  WR4: SELF <> a3m_detected_difference_type_name.ddna_cartesian_point;
  WR5: SELF <> a3m_detected_difference_type_name.ddna_context_dependent_shape_representation;
  WR6: SELF <> a3m_detected_difference_type_name.ddna_count_measure;
  WR7: SELF <> a3m_detected_difference_type_name.ddna_multi_level_reference_designator;
  WR8: SELF <> a3m_detected_difference_type_name.ddna_no_element;
  WR9: SELF <> a3m_detected_difference_type_name.ddna_others;
  WR10: SELF <> a3m_detected_difference_type_name.ddna_volume_measure;
END_TYPE;

TYPE a3ms_element_type_name = a3m_element_type_name;
WHERE
  WR1: SELF <> a3m_element_type_name.etna_others;
  WR2: SELF <> a3m_element_type_name.etna_product_definition_or_reference;
  WR3: SELF <> a3m_element_type_name.etna_shape_representation;
END_TYPE;

TYPE a3ms_inspected_equivalence_element_select = inspected_equivalence_element_select;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OR_REFERENCE' IN TYPEOF(SELF));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(SELF));
END_TYPE;

TYPE a3ms_measured_data_type_name = a3m_measured_data_type_name;
WHERE
  WR1: SELF <> a3m_measured_data_type_name.mdna_boolean_value;
  WR2: SELF <> a3m_measured_data_type_name.mdna_context_dependent_measure;
  WR3: SELF <> a3m_measured_data_type_name.mdna_length_measure;
  WR4: SELF <> a3m_measured_data_type_name.mdna_length_measure_and_context_dependent_measure;
  WR5: SELF <> a3m_measured_data_type_name.mdna_others;
  WR6: SELF <> a3m_measured_data_type_name.mdna_plane_angle_measure;
  WR7: SELF <> a3m_measured_data_type_name.mdna_volume_measure;
END_TYPE;

TYPE absorbed_dose_measure = REAL;
END_TYPE;

TYPE acceleration_measure = REAL;
END_TYPE;

TYPE accuracy_associated_target_select = SELECT
   (a3m_equivalence_criteria_representation,
    a3m_equivalence_criterion,
    a3m_equivalence_inspection_result_representation,
    data_equivalence_inspection_result);
END_TYPE;

TYPE action_items = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    alternative_solution_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_date_and_time_assignment,
    applied_date_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_state_observed_assignment,
    applied_state_type_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_relationship,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    breakdown_of,
    calendar_date,
    certification,
    certification_item,
    change_group,
    characterized_class,
    characterized_object,
    characterized_object_relationship,
    class,
    class_system,
    classification_item,
    condition,
    conditional_effectivity,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    configured_effectivity_assignment,
    contract,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    dimensional_location,
    dimensional_size,
    directed_action_assignment,
    directed_dimensional_location,
    document_file,
    document_reference_item,
    document_relationship,
    document_type,
    draughting_model,
    drawing_revision,
    effectivity,
    effectivity_relationship,
    evaluated_characteristic,
    evaluated_characteristic_of_product_as_individual_test_result,
    event_occurrence,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    externally_defined_class,
    frozen_assignment,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    hierarchical_interface_connection,
    identification_assignment_relationship,
    identification_item,
    inclusion_product_concept_feature,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design,
    interface_connector_occurrence,
    interface_connector_version,
    interface_definition_connection,
    interface_definition_for,
    interface_specification_version,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    mechanical_design_geometric_presentation_representation,
    observation_consequence,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    presentation_area,
    process_operation,
    process_plan,
    product,
    product_category,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_element_relationship,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_occurrence,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    product_process_plan,
    product_related_product_category,
    product_relationship,
    property_definition,
    property_definition_relationship,
    property_definition_representation,
    representation,
    representation_item,
    representation_relationship,
    requirement_assigned_item,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_view_definition_relationship,
    resource_property,
    retention,
    rule_set,
    security_classification,
    security_classification_level,
    shape_aspect,
    shape_aspect_relationship,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    usage_association,
    validation,
    value_representation_item,
    verification,
    verification_relationship,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

TYPE action_method_items = SELECT
   (action,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_request_solution,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_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_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_state_observed_assignment,
    applied_state_type_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    assembly_component_usage,
    breakdown_of,
    condition,
    configuration_design,
    configuration_item,
    contract,
    contract_assignment,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    directed_action_assignment,
    document_file,
    effectivity,
    envelope,
    event_occurrence,
    evidence,
    executed_action,
    externally_defined_general_property,
    frozen_assignment,
    general_property,
    general_property_relationship,
    hierarchical_interface_connection,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    material_designation_characterization,
    measure_representation_item,
    organization,
    organizational_address,
    organizational_project,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    product,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_design_version_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    property_definition,
    property_definition_representation,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_view_definition_relationship,
    risk_perception,
    state_observed,
    state_type,
    state_type_relationship,
    structured_message,
    validation,
    value_representation_item,
    verification,
    versioned_action_request);
END_TYPE;

TYPE action_request_item = SELECT
   (action,
    action_method,
    action_property,
    action_relationship,
    alternate_product_relationship,
    assembly_component_usage_substitute,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    document_file,
    draughting_model,
    drawing_revision,
    executed_action,
    general_property,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    organization,
    organizational_project,
    person,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_identification,
    property_definition,
    resource_property,
    shape_aspect,
    shape_representation,
    versioned_action_request);
END_TYPE;

TYPE actuated_direction = ENUMERATION OF
   (bidirectional,
    positive_only,
    negative_only,
    not_actuated);
END_TYPE;

TYPE advanced_brep_shape_representation_items_select = SELECT
   (axis2_placement_3d,
    manifold_solid_brep,
    mapped_item);
END_TYPE;

TYPE advanced_face_geometry_select = SELECT
   (b_spline_surface,
    elementary_surface,
    swept_surface);
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_property_representation,
    alternate_product_relationship,
    ascribable_state,
    assembly_component_usage_substitute,
    evidence,
    interface_connection,
    interface_connector_occurrence,
    organization,
    organization_relationship,
    organizational_project_relationship,
    product,
    product_concept,
    product_definition,
    product_definition_context,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    requirement_assignment,
    state_observed,
    state_observed_assignment,
    state_observed_role,
    state_type,
    validation,
    verification,
    verification_relationship);
END_TYPE;

TYPE angle_direction_reference_select = SELECT
   (curve,
    direction,
    point_path);
END_TYPE;

TYPE angle_direction_reference_with_a2p3d_select = SELECT
   (angle_direction_reference_select,
    axis2_placement_3d);
END_TYPE;

TYPE angle_relator = ENUMERATION OF
   (equal,
    large,
    small);
END_TYPE;

TYPE angular_deviation = positive_plane_angle_measure;
END_TYPE;

TYPE annotation_placeholder_occurrence_role = ENUMERATION OF
   (annotation_text,
    gps_data);
END_TYPE;

TYPE annotation_plane_element = SELECT
   (draughting_callout,
    styled_item);
END_TYPE;

TYPE annotation_representation_select = SELECT
   (draughting_model,
    presentation_area,
    presentation_view,
    symbol_representation);
END_TYPE;

TYPE annotation_symbol_occurrence_item = SELECT
   (annotation_symbol,
    defined_symbol);
END_TYPE;

TYPE annotation_text_occurrence_item = SELECT
   (annotation_text,
    annotation_text_character,
    composite_text,
    defined_character_glyph,
    text_literal);
END_TYPE;

TYPE ap242_assignment_object_select = assignment_object_select;
END_TYPE;

TYPE approval_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_request_solution,
    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_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    assembly_component_usage_substitute,
    breakdown_of,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    date,
    date_and_time_assignment,
    date_assignment,
    datum,
    datum_system,
    dimensional_location,
    dimensional_size,
    directed_action,
    directed_action_assignment,
    document,
    document_file,
    draughting_model,
    drawing_revision,
    effectivity,
    envelope,
    evaluated_characteristic_of_product_as_individual_test_result,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    externally_defined_class,
    externally_defined_general_property,
    frozen_assignment,
    general_property,
    general_property_relationship,
    geometric_tolerance,
    group,
    group_relationship,
    identification_assignment_relationship,
    in_zone,
    inclusion_product_concept_feature,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_definition,
    interface_connector_design,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_connector_version,
    interface_definition_for,
    interface_specification_definition,
    interface_specification_version,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    mechanical_design_geometric_presentation_representation,
    observation,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    package_product_concept_feature,
    person_and_organization,
    presentation_area,
    process_plan,
    product,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    security_classification,
    shape_aspect_relationship,
    shape_representation,
    structured_message,
    validation,
    value_representation_item,
    verification,
    versioned_action_request);
END_TYPE;

TYPE approval_scope_item = SELECT
   (executed_action);
END_TYPE;

TYPE approved_item = SELECT
   (certification,
    change,
    change_request,
    configuration_effectivity,
    configuration_item,
    contract,
    product,
    security_classification,
    start_request,
    start_work);
END_TYPE;

TYPE area_measure = REAL;
END_TYPE;

TYPE area_or_view = SELECT
   (presentation_area,
    presentation_view);
END_TYPE;

TYPE area_unit_type = ENUMERATION OF
   (circular,
    square,
    rectangular,
    cylindrical,
    spherical);
END_TYPE;

TYPE assignment_object_select = SELECT
   (action_property,
    action_property_representation,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    breakdown_of,
    date_and_time_assignment,
    date_assignment,
    directed_action_assignment,
    frozen_assignment,
    material_designation_characterization,
    organizational_address,
    person_and_organization_address,
    product_concept_feature_association,
    product_concept_feature_category_usage,
    property_definition,
    property_definition_representation,
    requirement_assignment,
    requirement_for_action_resource);
END_TYPE;

TYPE atom_based_tuple = LIST OF atom_based_value;
END_TYPE;

TYPE atom_based_value = SELECT
   (atom_based_tuple,
    maths_atom);
END_TYPE;

TYPE attribute_classification_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    action_request_status,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    approval,
    approval_person_organization,
    approval_relationship,
    approval_status,
    certification,
    context_dependent_unit,
    contract,
    date_and_time_assignment,
    date_assignment,
    derived_unit,
    descriptive_representation_item,
    document_file,
    document_relationship,
    effectivity,
    envelope,
    envelope_relationship,
    event_occurrence_relationship,
    executed_action,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_definition,
    interface_definition_connection,
    interface_specification_definition,
    language,
    measure_representation_item,
    measure_with_unit,
    message_relationship,
    named_unit,
    organization_relationship,
    organizational_address,
    organizational_project_relationship,
    person_and_organization,
    person_and_organization_address,
    product,
    product_category,
    product_concept,
    product_concept_context,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    property_definition,
    property_definition_relationship,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    security_classification,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    time_interval_relationship,
    uncertainty_measure_with_unit,
    usage_association,
    versioned_action_request);
END_TYPE;

TYPE attribute_identifier = identifier;
WHERE
  WR1: validate_attribute_id(SELF);
END_TYPE;

TYPE attribute_language_item = SELECT
   (action,
    action_method,
    action_method_relationship,
    actuated_kinematic_pair,
    alternate_product_relationship,
    application_context,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_certification_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_organizational_project_assignment,
    applied_security_classification_assignment,
    approval,
    approval_relationship,
    approval_status,
    assembly_component_usage_substitute,
    attribute_value_assignment,
    certification,
    certification_type,
    configuration_design,
    configuration_item,
    contract,
    curve_style_font,
    data_environment,
    date_role,
    date_time_role,
    descriptive_representation_item,
    dimensional_location,
    document_relationship,
    document_usage_role,
    draughting_callout_relationship,
    draughting_model_item_association,
    draughting_title,
    effectivity,
    effectivity_relationship,
    envelope,
    envelope_relationship,
    event_occurrence,
    evidence,
    external_source,
    general_property,
    general_property_relationship,
    geometric_representation_item,
    geometric_tolerance,
    group,
    group_relationship,
    identification_role,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    kinematic_pair,
    make_from_usage_option,
    mapped_item,
    message_relationship,
    multi_language_attribute_assignment,
    name_assignment,
    object_role,
    organization_relationship,
    organization_role,
    organizational_project,
    organizational_project_relationship,
    organizational_project_role,
    person_and_organization,
    person_and_organization_role,
    presentation_layer_assignment,
    process_product_association,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_relationship,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_shape,
    product_definition_substitute,
    product_group,
    product_group_relationship,
    product_related_product_category,
    property_definition,
    property_definition_relationship,
    representation,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    resource_requirement_type,
    security_classification,
    security_classification_assignment,
    shape_aspect,
    shape_aspect_relationship,
    shape_representation,
    state_observed,
    state_observed_relationship,
    state_type,
    state_type_relationship,
    structured_message,
    styled_item,
    time_interval_role,
    topological_representation_item,
    uncertainty_measure_with_unit,
    uncertainty_qualifier,
    usage_association,
    validation,
    verification,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

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

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

TYPE axial_geometry_constraint_element = SELECT
   (circle,
    conical_surface,
    cylindrical_surface,
    line,
    plane,
    point,
    revolved_area_solid,
    revolved_face_solid,
    right_circular_cone,
    right_circular_cylinder,
    sphere,
    spherical_surface,
    surface_of_revolution,
    toroidal_surface,
    torus);
END_TYPE;

TYPE axis2_placement = SELECT
   (axis2_placement_2d,
    axis2_placement_3d);
END_TYPE;

TYPE b_spline_curve_form = ENUMERATION OF
   (polyline_form,
    circular_arc,
    elliptic_arc,
    parabolic_arc,
    hyperbolic_arc,
    unspecified);
END_TYPE;

TYPE b_spline_or_composite_curve_select = SELECT
   (b_spline_curve,
    composite_curve);
END_TYPE;

TYPE b_spline_or_rectangular_composite_surface_select = SELECT
   (b_spline_surface,
    rectangular_composite_surface);
END_TYPE;

TYPE b_spline_surface_form = ENUMERATION OF
   (plane_surf,
    cylindrical_surf,
    conical_surf,
    spherical_surf,
    toroidal_surf,
    surf_of_revolution,
    ruled_surf,
    generalised_cone,
    quadric_surf,
    surf_of_linear_extrusion,
    unspecified);
END_TYPE;

TYPE base_solid_select = SELECT
   (boolean_result,
    csg_primitive,
    solid_model);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D' IN TYPEOF(SELF));
END_TYPE;

TYPE basis_11_direction_member = SELECT
   (cartesian_11,
    curve_11,
    cylindrical_11,
    point_array,
    polar_11,
    user_defined_11);
END_TYPE;

TYPE blend_end_condition_select = SELECT
   (edge_curve,
    point_on_curve,
    vertex);
END_TYPE;

TYPE blend_radius_variation_type = ENUMERATION OF
   (linear_blend,
    cubic_blend,
    unspecified_blend);
END_TYPE;

TYPE boolean_operand = SELECT
   (boolean_result,
    csg_primitive,
    half_space_2d,
    half_space_solid,
    solid_model);
END_TYPE;

TYPE boolean_operand_2d = SELECT
   (boolean_result_2d,
    bounded_primitive_2d);
END_TYPE;

TYPE boolean_operator = ENUMERATION OF
   (union,
    intersection,
    difference);
END_TYPE;

TYPE boolean_value = BOOLEAN;
END_TYPE;

TYPE bottom_condition_target = SELECT
   (basic_round_hole,
    counterbore_hole_definition,
    counterdrill_hole_definition,
    countersink_hole_definition);
END_TYPE;

TYPE bounded_primitive_2d = SELECT
   (area_with_outer_boundary,
    circular_area,
    elliptic_area,
    path_area_with_parameters,
    polygonal_area,
    rectangular_area);
END_TYPE;

TYPE box_characteristic_select = SELECT
   (box_height,
    box_rotate_angle,
    box_slant_angle,
    box_width);
END_TYPE;

TYPE box_height = positive_ratio_measure;
END_TYPE;

TYPE box_rotate_angle = plane_angle_measure;
END_TYPE;

TYPE box_slant_angle = plane_angle_measure;
WHERE
  IP1: ;
END_TYPE;

TYPE box_width = positive_ratio_measure;
END_TYPE;

TYPE brep_shape_representation_items_select = SELECT
   (axis2_placement_3d,
    manifold_solid_brep,
    mapped_item);
END_TYPE;

TYPE camera_model_d3_multi_clipping_intersection_select = SELECT
   (camera_model_d3_multi_clipping_union,
    plane);
END_TYPE;

TYPE camera_model_d3_multi_clipping_union_select = SELECT
   (camera_model_d3_multi_clipping_intersection,
    plane);
END_TYPE;

TYPE capacitance_measure = REAL;
END_TYPE;

TYPE category_usage_item = SELECT
   (product_class);
END_TYPE;

TYPE cc_classified_item = SELECT
   (assembly_component_usage,
    product_definition_formation);
END_TYPE;

TYPE cc_person_organization_item = SELECT
   (change,
    change_request,
    configuration_item,
    contract,
    product,
    product_definition,
    product_definition_formation,
    security_classification,
    start_request,
    start_work);
END_TYPE;

TYPE cc_specified_item = SELECT
   (product_definition,
    shape_aspect);
END_TYPE;

TYPE celsius_temperature_measure = REAL;
END_TYPE;

TYPE central_or_parallel = ENUMERATION OF
   (central,
    parallel);
END_TYPE;

TYPE certification_item = SELECT
   (action_method,
    action_relationship,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_method_assignment,
    applied_qualification_type_assignment,
    assembly_component_usage,
    evidence,
    executed_action,
    interface_connection,
    interface_connector_version,
    interface_definition_connection,
    interface_specification_version,
    make_from_usage_option,
    organizational_project,
    product,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_definition_relationship,
    product_group,
    product_group_relationship,
    product_identification,
    product_relationship,
    requirement_view_definition_relationship);
END_TYPE;

TYPE certified_item = SELECT
   (supplied_part_relationship);
END_TYPE;

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

TYPE change_management_object = SELECT
   (action,
    action_items,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_contract_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    assembly_component_usage,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    breakdown_of,
    class,
    condition,
    conditional_effectivity,
    configuration_effectivity,
    contract,
    date_and_time_assignment,
    date_assignment,
    directed_action_assignment,
    document_file,
    effectivity,
    event_occurrence,
    exclusive_product_concept_feature_category,
    frozen_assignment,
    general_property_relationship,
    identification_item,
    inclusion_product_concept_feature,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    organization,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    process_operation,
    process_plan,
    product,
    product_class,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_definition_relationship,
    product_definition_substitute,
    product_identification,
    product_process_plan,
    project_item,
    property_definition,
    property_definition_representation,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_view_definition_relationship,
    value_representation_item);
END_TYPE;

TYPE change_relationship_select = SELECT
   (action_method_relationship,
    action_relationship,
    alternate_product_relationship,
    alternative_solution_relationship,
    applied_external_identification_assignment_relationship,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    assembly_component_usage,
    contract,
    definitional_product_definition_usage,
    definitional_representation_relationship,
    draped_orientation_angle,
    event_occurrence_relationship,
    generic_property_relationship,
    geometry_to_topology_model_association,
    group_relationship,
    laid_orientation_angle,
    make_from_usage_option,
    next_assembly_usage_occurrence,
    organization_relationship,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_planned_to_realized,
    product_relationship,
    promissory_usage_occurrence,
    representation_relationship,
    representation_relationship_with_transformation,
    requirement_view_definition_relationship,
    shape_aspect_relationship,
    shape_representation_relationship,
    topology_to_geometry_model_association);
END_TYPE;

TYPE change_request_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE character_spacing_select = SELECT
   (descriptive_measure,
    length_measure,
    measure_with_unit,
    ratio_measure);
END_TYPE;

TYPE character_style_select = SELECT
   (character_glyph_style_outline,
    character_glyph_style_stroke,
    text_style_for_defined_font);
END_TYPE;

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

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

TYPE characterized_item = SELECT
   (dimensional_size,
    geometric_tolerance,
    item_identified_representation_usage);
END_TYPE;

TYPE characterized_material_property = SELECT
   (material_property_representation,
    product_material_composition_relationship);
END_TYPE;

TYPE characterized_product_composition_value = SELECT
   (measure_with_unit);
END_TYPE;

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

TYPE characterized_property_representation = SELECT
   (action_property_representation,
    dimensional_characteristic_representation,
    property_definition_representation,
    resource_property_representation);
END_TYPE;

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

TYPE chordal_deviation = positive_length_measure;
END_TYPE;

TYPE class_usage_effectivity_context_item = SELECT
   (product_definition);
END_TYPE;

TYPE classification_item = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    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,
    address,
    alternate_product_relationship,
    alternative_solution_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment_relationship,
    applied_contract_assignment,
    applied_date_and_time_assignment,
    applied_date_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_external_identification_assignment_relationship,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_person_type_assignment,
    applied_person_type_definition_assignment,
    applied_position_in_organization_assignment,
    applied_position_in_organization_type_assignment,
    applied_security_classification_assignment,
    applied_state_observed_assignment,
    applied_state_type_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_relationship,
    approval_status,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    attribute_language_assignment,
    breakdown_context,
    breakdown_element_realization,
    breakdown_of,
    calendar_date,
    certification,
    change_element_sequence,
    change_group,
    characterized_class,
    characterized_object,
    class,
    classified_item,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    context_dependent_unit,
    contract,
    contract_relationship,
    conversion_based_unit,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    definitional_representation_relationship,
    derived_unit,
    descriptive_representation_item,
    dimensional_size,
    directed_action,
    directed_action_assignment,
    document_file,
    document_relationship,
    document_type,
    effectivity,
    effectivity_relationship,
    envelope,
    envelope_relationship,
    evaluated_characteristic,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    executed_action,
    experience_type,
    feature_definition,
    general_feature,
    general_property,
    general_property_relationship,
    generic_property_relationship,
    geometric_tolerance,
    group,
    group_relationship,
    identification_assignment,
    identification_assignment_relationship,
    in_zone,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_definition_connection,
    interface_definition_for,
    language,
    link_motion_relationship,
    local_time,
    location,
    location_relationship,
    location_representation_relationship,
    material_designation,
    material_designation_characterization,
    measure_qualification,
    measure_representation_item,
    measure_with_unit,
    message_relationship,
    multi_language_attribute_assignment,
    named_unit,
    observation,
    observation_relationship,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    person,
    person_and_organization,
    person_and_organization_address,
    person_type,
    person_type_definition,
    person_type_definition_relationship,
    plus_minus_tolerance,
    position_in_organization,
    position_in_organization_relationship,
    position_in_organization_type,
    process_operation,
    process_plan,
    process_product_association,
    product,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_usage,
    product_definition_usage_relationship,
    product_design_to_individual,
    product_design_version_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    qualification_type,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    retention,
    satisfies_requirement,
    security_classification,
    security_classification_level,
    shape_aspect,
    shape_aspect_relationship,
    shape_feature_definition_relationship,
    state_definition_to_state_assignment_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    time_interval_relationship,
    type_qualifier,
    uncertainty_measure_with_unit,
    usage_association,
    validation,
    verification,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

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

TYPE closed_or_open_shell_select = SELECT
   (closed_shell,
    open_shell);
END_TYPE;

TYPE colour_type_enum = ENUMERATION OF
   (rgb8,
    rgbt8);
END_TYPE;

TYPE common_datum_list = LIST[2:?] OF datum_reference_element;
WHERE
  WR1: SIZEOF(QUERY(dre <* SELF | dre\shape_aspect.of_shape <> SELF[1]\shape_aspect.of_shape)) = 0;
END_TYPE;

TYPE compound_inner_area_boundary = SELECT
   (set_inner_area_boundary);
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,
    product_definition_occurrence);
END_TYPE;

TYPE configured_effectivity_context_item = SELECT
   (product_concept_feature_association);
END_TYPE;

TYPE configured_effectivity_item = SELECT
   (action_relationship,
    process_plan,
    product_definition,
    product_process_plan);
END_TYPE;

TYPE constraint_group_member = SELECT
   (explicit_constraint,
    simultaneous_constraint_group);
END_TYPE;

TYPE constructive_geometry_representation_or_shape_representation = SELECT
   (constructive_geometry_representation,
    shape_representation);
END_TYPE;

TYPE context_dependent_measure = REAL;
END_TYPE;

TYPE contract_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    alternate_product_relationship,
    applied_action_method_assignment,
    applied_classification_assignment,
    applied_description_text_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_organization_assignment,
    applied_person_and_organization_assignment,
    directed_action,
    drawing_revision,
    executed_action,
    information_usage_right,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_group,
    product_group_relationship,
    product_identification,
    requirement_assignment,
    requirement_source,
    security_classification,
    structured_message,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE contracted_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE count_measure = NUMBER;
END_TYPE;

TYPE csg_2d_area_select = SELECT
   (axis2_placement_2d,
    csg_primitive_solid_2d);
END_TYPE;

TYPE csg_2d_shape_select = SELECT
   (axis2_placement_2d,
    csg_solid_2d,
    mapped_item);
END_TYPE;

TYPE csg_primitive = SELECT
   (block,
    bounded_primitive_2d,
    cyclide_segment_solid,
    eccentric_cone,
    ellipsoid,
    faceted_primitive,
    rectangular_pyramid,
    right_angular_wedge,
    right_circular_cone,
    right_circular_cylinder,
    sphere,
    torus);
END_TYPE;

TYPE csg_select = SELECT
   (boolean_result,
    csg_primitive);
END_TYPE;

TYPE csg_select_2d = SELECT
   (boolean_result_2d,
    bounded_primitive_2d);
END_TYPE;

TYPE csg_shape_representation_select = SELECT
   (axis2_placement_3d,
    csg_solid,
    extruded_face_solid,
    mapped_item,
    revolved_face_solid,
    solid_replica);
END_TYPE;

TYPE current_element_assignment_select = SELECT
   (add_element,
    modify_element);
END_TYPE;

TYPE curve_font_or_scaled_curve_font_select = SELECT
   (curve_style_font_and_scaling,
    curve_style_font_select);
END_TYPE;

TYPE curve_on_surface = SELECT
   (composite_curve_on_surface,
    pcurve,
    surface_curve);
END_TYPE;

TYPE curve_or_annotation_curve_occurrence = SELECT
   (annotation_curve_occurrence,
    curve);
END_TYPE;

TYPE curve_or_curve_set = SELECT
   (curve,
    geometric_curve_set);
END_TYPE;

TYPE curve_or_render = SELECT
   (curve_style,
    curve_style_rendering);
END_TYPE;

TYPE curve_or_surface_constraint_element = SELECT
   (curve,
    surface);
END_TYPE;

TYPE curve_style_font_select = SELECT
   (curve_style_font,
    externally_defined_curve_font,
    pre_defined_curve_font);
END_TYPE;

TYPE curves_or_area = ENUMERATION OF
   (curves,
    area);
END_TYPE;

TYPE data_equivalence_inspected_element_pair_select = SELECT
   (data_equivalence_inspected_element_pair);
END_TYPE;

TYPE date_and_time_item = SELECT
   (action,
    action_directive,
    action_method,
    action_property,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_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_experience_assignment,
    applied_identification_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_qualification_type_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    data_equivalence_definition,
    data_quality_definition,
    date_and_time_assignment,
    date_assignment,
    directed_action,
    document,
    document_file,
    draughting_model,
    drawing_revision,
    effectivity,
    envelope,
    event_occurrence,
    evidence,
    executed_action,
    experience,
    externally_defined_class,
    general_property,
    general_property_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_definition_connection,
    interface_definition_for,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    observation,
    organization_relationship,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    rule_action,
    security_classification,
    security_classification_level,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE date_item = SELECT
   (action,
    action_directive,
    action_method,
    action_property,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_action_method_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_experience_assignment,
    applied_identification_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_qualification_type_assignment,
    applied_security_classification_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    data_equivalence_definition,
    data_quality_definition,
    date_and_time_assignment,
    date_assignment,
    directed_action,
    document,
    document_file,
    draughting_model,
    drawing_revision,
    effectivity,
    envelope,
    event_occurrence,
    evidence,
    executed_action,
    experience,
    externally_defined_class,
    general_property,
    general_property_relationship,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_definition_connection,
    interface_definition_for,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    organization_relationship,
    organizational_address,
    organizational_project,
    person,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    security_classification,
    security_classification_level,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    validation,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE date_time_item = SELECT
   (approval_person_organization,
    certification,
    change,
    change_request,
    contract,
    product_definition,
    security_classification,
    start_request,
    start_work);
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 datum_or_common_datum = SELECT
   (common_datum_list,
    datum);
END_TYPE;

TYPE datum_reference_modifier = SELECT
   (datum_reference_modifier_with_value,
    simple_datum_reference_modifier);
END_TYPE;

TYPE datum_reference_modifier_type = ENUMERATION OF
   (circular_or_cylindrical,
    spherical,
    distance,
    projected);
END_TYPE;

TYPE datum_system_or_reference = SELECT
   (datum_reference,
    datum_system);
END_TYPE;

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

TYPE day_in_week_number = INTEGER;
WHERE
  WR1: {1 <= SELF <= 7};
END_TYPE;

TYPE day_in_year_number = INTEGER;
WHERE
  WR1: {1 <= SELF <= 366};
END_TYPE;

TYPE defined_glyph_select = SELECT
   (externally_defined_character_glyph,
    pre_defined_character_glyph);
END_TYPE;

TYPE defined_symbol_select = SELECT
   (externally_defined_symbol,
    pre_defined_symbol);
END_TYPE;

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

TYPE des_apll_point_select = SELECT
   (apll_point,
    apll_point_with_surface);
END_TYPE;

TYPE des_apll_point_symbol = ENUMERATION OF
   (circle,
    dot,
    internal_pair_forward_arrowhead,
    internal_pair_reverse_arrowhead,
    none,
    positive_arrowhead,
    triangle);
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,
    organizational_project,
    person_and_organization,
    person_and_organization_role,
    property_definition_representation,
    representation);
END_TYPE;

TYPE description_item = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    address,
    alternate_product_relationship,
    alternative_solution_relationship,
    analysis_representation_context,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_classification_assignment_relationship,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_external_identification_assignment_relationship,
    applied_identification_assignment,
    applied_ineffectivity_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_state_observed_assignment,
    applied_state_type_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_relationship,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    breakdown_element_group_assignment,
    certification,
    change_element_sequence,
    change_group,
    colour_specification,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    contract,
    contract_relationship,
    curve_style_font,
    data_environment,
    date_and_time_assignment,
    date_assignment,
    dimensional_location,
    directed_action_assignment,
    document_file,
    document_relationship,
    draughting_callout_relationship,
    draughting_model_item_association,
    effectivity,
    effectivity_relationship,
    envelope,
    envelope_relationship,
    evaluated_characteristic,
    event_occurrence,
    event_occurrence_relationship,
    exclusive_product_concept_feature_category,
    general_property,
    general_property_relationship,
    generic_property_relationship,
    geometric_item_specific_usage,
    geometric_tolerance,
    global_uncertainty_assigned_context,
    global_unit_assigned_context,
    group,
    group_relationship,
    location,
    location_relationship,
    material_designation_characterization,
    measure_qualification,
    measure_with_unit,
    message_relationship,
    observation_consequence,
    organization,
    organization_relationship,
    organization_type,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    process_operation,
    process_plan,
    process_product_association,
    product,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_definition_usage,
    product_definition_usage_relationship,
    product_group_membership,
    product_group_relationship,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    requirement_for_action_resource,
    retention,
    satisfies_requirement,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    shape_feature_definition,
    shape_feature_definition_relationship,
    state_definition_to_state_assignment_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_assignment,
    state_type_relationship,
    state_type_role,
    structured_message,
    time_interval,
    time_interval_relationship,
    uncertainty_measure_with_unit,
    uncertainty_qualifier,
    usage_association,
    verification_relationship,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

TYPE descriptive_measure = STRING;
END_TYPE;

TYPE detailed_report_style_type = ENUMERATION OF
   (inspected_element,
    defective_element);
END_TYPE;

TYPE detailed_report_type = ENUMERATION OF
   (measured_element,
    inferior_quality_element);
END_TYPE;

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

TYPE dimension_extent_usage = ENUMERATION OF
   (origin,
    target);
END_TYPE;

TYPE dimensional_characteristic = SELECT
   (dimensional_location,
    dimensional_size);
END_TYPE;

TYPE dimensional_location_with_normal_constraint_type = ENUMERATION OF
   (uniform_thickness_cone_cone,
    uniform_thickness_cylinder_cylinder,
    uniform_thickness_face_surface_face_surface,
    uniform_thickness_plane_plane,
    uniform_thickness_revolute_revolute,
    uniform_thickness_sphere_sphere,
    uniform_thickness_surface_surface,
    uniform_thickness_torus_torus);
END_TYPE;

TYPE directed_tolerance_zone_type = ENUMERATION OF
   (angular,
    perpendicular,
    parallel,
    including,
    symmetrical_to);
END_TYPE;

TYPE direction_count_select = SELECT
   (u_direction_count,
    v_direction_count);
END_TYPE;

TYPE direction_feature_application_type = ENUMERATION OF
   (perpendicular,
    parallel,
    inclined,
    runout);
END_TYPE;

TYPE document_identifier_assigned_item = SELECT
   (document);
END_TYPE;

TYPE document_reference_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_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_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_relationship,
    assembly_component_usage,
    assembly_component_usage_substitute,
    breakdown_context,
    breakdown_of,
    certification,
    change_group,
    characterized_class,
    characterized_object,
    class,
    class_system,
    condition,
    configuration_design,
    configuration_item,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    descriptive_representation_item,
    dimensional_size,
    directed_action_assignment,
    document_relationship,
    effectivity,
    effectivity_relationship,
    evaluated_characteristic_of_product_as_individual_test_result,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    externally_conditioned_data_quality_criterion,
    externally_defined_dimension_definition,
    externally_defined_item,
    feature_definition,
    frozen_assignment,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    identification_assignment_relationship,
    in_zone,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_definition_connection,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    presentation_area,
    process_plan,
    product,
    product_category,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_process,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_design_to_individual,
    product_design_version_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_process_plan,
    product_related_product_category,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_requirement_type,
    retention,
    rule_set,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    state_observed,
    state_type,
    structured_message,
    time_interval,
    time_interval_relationship,
    usage_association,
    validation,
    value_representation_item,
    verification,
    verification_relationship,
    versioned_action_request);
END_TYPE;

TYPE dose_equivalent_measure = REAL;
END_TYPE;

TYPE dotted_express_identifier = STRING;
WHERE
  SYNTAX: dotted_identifiers_syntax(SELF);
END_TYPE;

TYPE draughting_callout_element = SELECT
   (annotation_curve_occurrence,
    annotation_fill_area_occurrence,
    annotation_placeholder_occurrence,
    annotation_symbol_occurrence,
    annotation_text_occurrence,
    external_image_placement_in_callout,
    tessellated_annotation_occurrence);
END_TYPE;

TYPE draughting_model_item_association_select = SELECT
   (annotation_occurrence,
    draughting_callout);
END_TYPE;

TYPE draughting_model_item_definition = SELECT
   (angularity_tolerance,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_date_and_time_assignment,
    applied_date_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_group_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_name_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    circular_runout_tolerance,
    coaxiality_tolerance,
    concentricity_tolerance,
    cylindricity_tolerance,
    datum_system_for_composite_group_element,
    dimensional_location,
    dimensional_size,
    flatness_tolerance,
    geometric_tolerance,
    geometric_tolerance_with_datum_reference,
    geometric_tolerance_with_defined_area_unit,
    geometric_tolerance_with_defined_unit,
    geometric_tolerance_with_maximum_tolerance,
    geometric_tolerance_with_modifiers,
    group_geometric_tolerance_with_datum_system_reference,
    line_profile_tolerance,
    modified_geometric_tolerance,
    parallelism_tolerance,
    perpendicularity_tolerance,
    position_tolerance,
    product_definition_relationship,
    product_definition_shape,
    property_definition,
    roundness_tolerance,
    shape_aspect,
    shape_aspect_relationship,
    straightness_tolerance,
    surface_profile_tolerance,
    symmetry_tolerance,
    total_runout_tolerance,
    unequally_disposed_geometric_tolerance);
END_TYPE;

TYPE draughting_model_item_select = SELECT
   (axis2_placement,
    camera_model,
    draughting_callout,
    mapped_item,
    styled_item);
END_TYPE;

TYPE draughting_subfigure_representation_item = SELECT
   (annotation_occurrence,
    axis2_placement,
    draughting_callout);
END_TYPE;

TYPE draughting_symbol_representation_item = SELECT
   (annotation_curve_occurrence,
    annotation_fill_area_occurrence,
    annotation_symbol_occurrence,
    annotation_text_occurrence,
    axis2_placement);
END_TYPE;

TYPE draughting_titled_item = SELECT
   (drawing_revision,
    drawing_sheet_revision);
END_TYPE;

TYPE edge_based_topological_representation_with_length_constraint_items = SELECT
   (connected_edge_set,
    path,
    vertex_point);
END_TYPE;

TYPE edge_or_curve = SELECT
   (curve,
    edge_curve);
END_TYPE;

TYPE effectivity_item = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    alternative_solution_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment_relationship,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_external_identification_assignment_relationship,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval_relationship,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    breakdown_of,
    class,
    class_system,
    condition,
    conditional_effectivity,
    configuration_design,
    configuration_item,
    configuration_item_relationship,
    configured_effectivity_assignment,
    contract,
    date_and_time_assignment,
    date_assignment,
    directed_action_assignment,
    document_file,
    document_relationship,
    draughting_model,
    drawing_revision,
    effectivity_relationship,
    event_occurrence_relationship,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    externally_defined_class,
    externally_defined_general_property,
    frozen_assignment,
    general_property,
    general_property_relationship,
    generic_property_relationship,
    geometric_tolerance,
    group,
    identification_assignment_relationship,
    in_zone,
    inclusion_product_concept_feature,
    interface_connection,
    interface_connector_design_to_planned,
    interface_connector_design_to_realized,
    interface_connector_occurrence,
    interface_connector_planned_to_realized,
    interface_definition_for,
    link_motion_relationship,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    mechanical_design_geometric_presentation_representation,
    multi_language_attribute_assignment,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person_and_organization,
    person_and_organization_address,
    presentation_area,
    process_operation,
    process_plan,
    product,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_definition_usage_relationship,
    product_design_to_individual,
    product_design_version_to_individual,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    shape_representation,
    structured_message,
    time_interval_relationship,
    usage_association,
    validation,
    value_representation_item,
    verification,
    verification_relationship,
    versioned_action_request_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 elementary_function_enumerators = ENUMERATION OF
   (ef_and,
    ef_or,
    ef_not,
    ef_xor,
    ef_negate_i,
    ef_add_i,
    ef_subtract_i,
    ef_multiply_i,
    ef_divide_i,
    ef_mod_i,
    ef_exponentiate_i,
    ef_eq_i,
    ef_ne_i,
    ef_gt_i,
    ef_lt_i,
    ef_ge_i,
    ef_le_i,
    ef_abs_i,
    ef_max_i,
    ef_min_i,
    ef_if_i,
    ef_negate_r,
    ef_reciprocal_r,
    ef_add_r,
    ef_subtract_r,
    ef_multiply_r,
    ef_divide_r,
    ef_mod_r,
    ef_exponentiate_r,
    ef_exponentiate_ri,
    ef_eq_r,
    ef_ne_r,
    ef_gt_r,
    ef_lt_r,
    ef_ge_r,
    ef_le_r,
    ef_abs_r,
    ef_max_r,
    ef_min_r,
    ef_acos_r,
    ef_asin_r,
    ef_atan2_r,
    ef_cos_r,
    ef_exp_r,
    ef_ln_r,
    ef_log2_r,
    ef_log10_r,
    ef_sin_r,
    ef_sqrt_r,
    ef_tan_r,
    ef_if_r,
    ef_form_c,
    ef_rpart_c,
    ef_ipart_c,
    ef_negate_c,
    ef_reciprocal_c,
    ef_add_c,
    ef_subtract_c,
    ef_multiply_c,
    ef_divide_c,
    ef_exponentiate_c,
    ef_exponentiate_ci,
    ef_eq_c,
    ef_ne_c,
    ef_conjugate_c,
    ef_abs_c,
    ef_arg_c,
    ef_cos_c,
    ef_exp_c,
    ef_ln_c,
    ef_sin_c,
    ef_sqrt_c,
    ef_tan_c,
    ef_if_c,
    ef_subscript_s,
    ef_eq_s,
    ef_ne_s,
    ef_gt_s,
    ef_lt_s,
    ef_ge_s,
    ef_le_s,
    ef_subsequence_s,
    ef_concat_s,
    ef_size_s,
    ef_format,
    ef_value,
    ef_like,
    ef_if_s,
    ef_subscript_b,
    ef_eq_b,
    ef_ne_b,
    ef_gt_b,
    ef_lt_b,
    ef_ge_b,
    ef_le_b,
    ef_subsequence_b,
    ef_concat_b,
    ef_size_b,
    ef_if_b,
    ef_subscript_t,
    ef_eq_t,
    ef_ne_t,
    ef_concat_t,
    ef_size_t,
    ef_entuple,
    ef_detuple,
    ef_insert,
    ef_remove,
    ef_if_t,
    ef_sum_it,
    ef_product_it,
    ef_add_it,
    ef_subtract_it,
    ef_scalar_mult_it,
    ef_dot_prod_it,
    ef_sum_rt,
    ef_product_rt,
    ef_add_rt,
    ef_subtract_rt,
    ef_scalar_mult_rt,
    ef_dot_prod_rt,
    ef_norm_rt,
    ef_sum_ct,
    ef_product_ct,
    ef_add_ct,
    ef_subtract_ct,
    ef_scalar_mult_ct,
    ef_dot_prod_ct,
    ef_norm_ct,
    ef_if,
    ef_ensemble,
    ef_member_of);
END_TYPE;

TYPE elementary_space_enumerators = ENUMERATION OF
   (es_numbers,
    es_complex_numbers,
    es_reals,
    es_integers,
    es_logicals,
    es_booleans,
    es_strings,
    es_binarys,
    es_maths_spaces,
    es_maths_functions,
    es_generics);
END_TYPE;

TYPE energy_measure = REAL;
END_TYPE;

TYPE equivalence_detected_difference_select = SELECT
   (a3ms_inspected_equivalence_element_select,
    area_measure,
    assembly_component_usage,
    binary_assembly_constraint,
    cartesian_point,
    connected_face_set,
    context_dependent_shape_representation,
    count_measure,
    edge,
    face,
    length_measure,
    multi_level_reference_designator,
    point_on_curve,
    point_on_surface,
    volume_measure);
END_TYPE;

TYPE equivalence_measured_value_select = SELECT
   (a3ma_length_measure_and_context_dependent_measure_pair,
    area_measure,
    boolean_value,
    context_dependent_measure,
    length_measure,
    plane_angle_measure,
    volume_measure);
END_TYPE;

TYPE equivalence_product_data_select = SELECT
   (product_definition_or_reference,
    product_definition_relationship);
END_TYPE;

TYPE event_occurrence_item = SELECT
   (action,
    action_directive,
    action_method,
    action_property,
    action_request_solution,
    alternate_product_relationship,
    applied_action_assignment,
    applied_classification_assignment,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    draughting_model,
    drawing_revision,
    executed_action,
    externally_defined_class,
    general_organizational_data_select,
    general_property,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    organization_relationship,
    organizational_project,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    property_definition,
    requirement_for_action_resource,
    resource_property,
    security_classification_level,
    shape_representation);
END_TYPE;

TYPE evidence_item = SELECT
   (action_property,
    action_property_representation,
    analysis_assignment,
    applied_action_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    date_and_time_assignment,
    date_assignment,
    measure_representation_item,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    state_type,
    structured_message,
    validation,
    value_representation_item,
    verification);
END_TYPE;

TYPE exchange_identification_context_select = SELECT
   (identification_assignment,
    organization);
END_TYPE;

TYPE experience_item = SELECT
   (action_actual,
    action_resource,
    experience_type,
    experience_type_classification_item);
END_TYPE;

TYPE experience_type_classification_item = classification_item;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION' IN TYPEOF(SELF));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE' IN TYPEOF(SELF));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE_RELATIONSHIP' IN TYPEOF(SELF));
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_METHOD' IN TYPEOF(SELF));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_METHOD_RELATIONSHIP' IN TYPEOF(SELF));
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_PROPERTY' IN TYPEOF(SELF));
  WR7: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_PROPERTY_REPRESENTATION' IN TYPEOF(SELF));
  WR8: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP' IN TYPEOF(SELF));
  WR9: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_REQUEST_SOLUTION' IN TYPEOF(SELF));
  WR10: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_REQUEST_STATUS' IN TYPEOF(SELF));
  WR11: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RESOURCE' IN TYPEOF(SELF));
  WR12: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RESOURCE_RELATIONSHIP' IN TYPEOF(SELF));
  WR13: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RESOURCE_REQUIREMENT' IN TYPEOF(SELF));
  WR14: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RESOURCE_REQUIREMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR15: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADDRESS' IN TYPEOF(SELF));
  WR16: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ALTERNATE_PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  WR17: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ALTERNATIVE_SOLUTION_RELATIONSHIP' IN TYPEOF(SELF));
  WR18: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANALYSIS_ASSIGNMENT' IN TYPEOF(SELF));
  WR19: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(SELF));
  WR20: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ACTION_METHOD_ASSIGNMENT' IN TYPEOF(SELF));
  WR21: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ACTION_REQUEST_ASSIGNMENT' IN TYPEOF(SELF));
  WR22: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_APPROVAL_ASSIGNMENT' IN TYPEOF(SELF));
  WR23: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_CERTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR24: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_CLASSIFICATION_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR25: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_CONTRACT_ASSIGNMENT' IN TYPEOF(SELF));
  WR26: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DATE_AND_TIME_ASSIGNMENT' IN TYPEOF(SELF));
  WR27: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DATE_ASSIGNMENT' IN TYPEOF(SELF));
  WR28: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DESCRIPTION_TEXT_ASSIGNMENT' IN TYPEOF(SELF));
  WR29: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DESCRIPTION_TEXT_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR30: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_REFERENCE' IN TYPEOF(SELF));
  WR31: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_USAGE_CONSTRAINT_ASSIGNMENT' IN TYPEOF(SELF));
  WR32: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EFFECTIVITY_ASSIGNMENT' IN TYPEOF(SELF));
  WR33: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EVENT_OCCURRENCE_ASSIGNMENT' IN TYPEOF(SELF));
  WR34: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR35: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR36: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR37: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_INEFFECTIVITY_ASSIGNMENT' IN TYPEOF(SELF));
  WR38: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ORGANIZATIONAL_PROJECT_ASSIGNMENT' IN TYPEOF(SELF));
  WR39: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR40: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR41: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_PERSON_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  WR42: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_PERSON_TYPE_DEFINITION_ASSIGNMENT' IN TYPEOF(SELF));
  WR43: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_POSITION_IN_ORGANIZATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR44: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_POSITION_IN_ORGANIZATION_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  WR45: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_SECURITY_CLASSIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR46: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_STATE_OBSERVED_ASSIGNMENT' IN TYPEOF(SELF));
  WR47: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_STATE_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  WR48: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT' IN TYPEOF(SELF));
  WR49: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_USAGE_RIGHT' IN TYPEOF(SELF));
  WR50: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPROVAL' IN TYPEOF(SELF));
  WR51: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPROVAL_PERSON_ORGANIZATION' IN TYPEOF(SELF));
  WR52: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPROVAL_RELATIONSHIP' IN TYPEOF(SELF));
  WR53: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPROVAL_STATUS' IN TYPEOF(SELF));
  WR54: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE_SUBSTITUTE' IN TYPEOF(SELF));
  WR55: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSIGNMENT_OBJECT_RELATIONSHIP' IN TYPEOF(SELF));
  WR56: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT' IN TYPEOF(SELF));
  WR57: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREAKDOWN_CONTEXT' IN TYPEOF(SELF));
  WR58: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREAKDOWN_ELEMENT_REALIZATION' IN TYPEOF(SELF));
  WR59: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREAKDOWN_OF' IN TYPEOF(SELF));
  WR60: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CALENDAR_DATE' IN TYPEOF(SELF));
  WR61: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CERTIFICATION' IN TYPEOF(SELF));
  WR62: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_ELEMENT_SEQUENCE' IN TYPEOF(SELF));
  WR63: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_GROUP' IN TYPEOF(SELF));
  WR64: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_CLASS' IN TYPEOF(SELF));
  WR65: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_OBJECT' IN TYPEOF(SELF));
  WR66: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS' IN TYPEOF(SELF));
  WR67: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFIED_ITEM' IN TYPEOF(SELF));
  WR68: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN' IN TYPEOF(SELF));
  WR69: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_EFFECTIVITY' IN TYPEOF(SELF));
  WR70: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_ITEM' IN TYPEOF(SELF));
  WR71: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_ITEM_RELATIONSHIP' IN TYPEOF(SELF));
  WR72: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_UNIT' IN TYPEOF(SELF));
  WR73: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTRACT' IN TYPEOF(SELF));
  WR74: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTRACT_RELATIONSHIP' IN TYPEOF(SELF));
  WR75: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(SELF));
  WR76: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATE_AND_TIME' IN TYPEOF(SELF));
  WR77: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATE_AND_TIME_ASSIGNMENT' IN TYPEOF(SELF));
  WR78: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATE_ASSIGNMENT' IN TYPEOF(SELF));
  WR79: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFINITIONAL_REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR80: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DERIVED_UNIT' IN TYPEOF(SELF));
  WR81: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  WR82: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN TYPEOF(SELF));
  WR83: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTED_ACTION' IN TYPEOF(SELF));
  WR84: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTED_ACTION_ASSIGNMENT' IN TYPEOF(SELF));
  WR85: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_FILE' IN TYPEOF(SELF));
  WR86: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR87: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_TYPE' IN TYPEOF(SELF));
  WR88: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY' IN TYPEOF(SELF));
  WR89: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY_RELATIONSHIP' IN TYPEOF(SELF));
  WR90: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ENVELOPE' IN TYPEOF(SELF));
  WR91: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ENVELOPE_RELATIONSHIP' IN TYPEOF(SELF));
  WR92: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EVALUATED_CHARACTERISTIC' IN TYPEOF(SELF));
  WR93: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EVENT_OCCURRENCE' IN TYPEOF(SELF));
  WR94: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EVENT_OCCURRENCE_RELATIONSHIP' IN TYPEOF(SELF));
  WR95: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EVIDENCE' IN TYPEOF(SELF));
  WR96: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXECUTED_ACTION' IN TYPEOF(SELF));
  WR97: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_DEFINITION' IN TYPEOF(SELF));
  WR98: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_FEATURE' IN TYPEOF(SELF));
  WR99: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(SELF));
  WR100: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_RELATIONSHIP' IN TYPEOF(SELF));
  WR101: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_PROPERTY_RELATIONSHIP' IN TYPEOF(SELF));
  WR102: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN TYPEOF(SELF));
  WR103: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP' IN TYPEOF(SELF));
  WR104: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  WR105: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IDENTIFICATION_ASSIGNMENT' IN TYPEOF(SELF));
  WR106: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IDENTIFICATION_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR107: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INFORMATION_RIGHT' IN TYPEOF(SELF));
  WR108: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INFORMATION_USAGE_RIGHT' IN TYPEOF(SELF));
  WR109: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTION' IN TYPEOF(SELF));
  WR110: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_AS_PLANNED' IN TYPEOF(SELF));
  WR111: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_AS_REALIZED' IN TYPEOF(SELF));
  WR112: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_DESIGN' IN TYPEOF(SELF));
  WR113: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_DESIGN_TO_PLANNED' IN TYPEOF(SELF));
  WR114: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_DESIGN_TO_REALIZED' IN TYPEOF(SELF));
  WR115: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_OCCURRENCE' IN TYPEOF(SELF));
  WR116: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_CONNECTOR_PLANNED_TO_REALIZED' IN TYPEOF(SELF));
  WR117: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_DEFINITION_CONNECTION' IN TYPEOF(SELF));
  WR118: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERFACE_DEFINITION_FOR' IN TYPEOF(SELF));
  WR119: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IN_ZONE' IN TYPEOF(SELF));
  WR120: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LANGUAGE' IN TYPEOF(SELF));
  WR121: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINK_MOTION_RELATIONSHIP' IN TYPEOF(SELF));
  WR122: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCAL_TIME' IN TYPEOF(SELF));
  WR123: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION' IN TYPEOF(SELF));
  WR124: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR125: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR126: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_DESIGNATION' IN TYPEOF(SELF));
  WR127: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_DESIGNATION_CHARACTERIZATION' IN TYPEOF(SELF));
  WR128: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_QUALIFICATION' IN TYPEOF(SELF));
  WR129: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
  WR130: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_WITH_UNIT' IN TYPEOF(SELF));
  WR131: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MESSAGE_RELATIONSHIP' IN TYPEOF(SELF));
  WR132: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT' IN TYPEOF(SELF));
  WR133: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAMED_UNIT' IN TYPEOF(SELF));
  WR134: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OBSERVATION' IN TYPEOF(SELF));
  WR135: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OBSERVATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR136: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORGANIZATION' IN TYPEOF(SELF));
  WR137: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORGANIZATIONAL_ADDRESS' IN TYPEOF(SELF));
  WR138: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORGANIZATIONAL_PROJECT' IN TYPEOF(SELF));
  WR139: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORGANIZATIONAL_PROJECT_RELATIONSHIP' IN TYPEOF(SELF));
  WR140: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORGANIZATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR141: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON' IN TYPEOF(SELF));
  WR142: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_AND_ORGANIZATION' IN TYPEOF(SELF));
  WR143: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_AND_ORGANIZATION_ADDRESS' IN TYPEOF(SELF));
  WR144: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_TYPE' IN TYPEOF(SELF));
  WR145: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_TYPE_DEFINITION' IN TYPEOF(SELF));
  WR146: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_TYPE_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  WR147: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLUS_MINUS_TOLERANCE' IN TYPEOF(SELF));
  WR148: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_IN_ORGANIZATION' IN TYPEOF(SELF));
  WR149: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_IN_ORGANIZATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR150: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_IN_ORGANIZATION_TYPE' IN TYPEOF(SELF));
  WR151: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_OPERATION' IN TYPEOF(SELF));
  WR152: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN' IN TYPEOF(SELF));
  WR153: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PRODUCT_ASSOCIATION' IN TYPEOF(SELF));
  WR154: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN TYPEOF(SELF));
  WR155: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT' IN TYPEOF(SELF));
  WR156: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_CONTEXT' IN TYPEOF(SELF));
  WR157: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE' IN TYPEOF(SELF));
  WR158: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_ASSOCIATION' IN TYPEOF(SELF));
  WR159: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN TYPEOF(SELF));
  WR160: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE' IN TYPEOF(SELF));
  WR161: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_RELATIONSHIP' IN TYPEOF(SELF));
  WR162: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF));
  WR163: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT' IN TYPEOF(SELF));
  WR164: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN TYPEOF(SELF));
  WR165: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR166: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  WR167: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN TYPEOF(SELF));
  WR168: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE_RELATIONSHIP' IN TYPEOF(SELF));
  WR169: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DESIGN_TO_INDIVIDUAL' IN TYPEOF(SELF));
  WR170: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DESIGN_VERSION_TO_INDIVIDUAL' IN TYPEOF(SELF));
  WR171: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_GROUP' IN TYPEOF(SELF));
  WR172: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_GROUP_MEMBERSHIP' IN TYPEOF(SELF));
  WR173: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_GROUP_RELATIONSHIP' IN TYPEOF(SELF));
  WR174: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN' IN TYPEOF(SELF));
  WR175: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATIONSHIP' IN TYPEOF(SELF));
  WR176: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN TYPEOF(SELF));
  WR177: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION' IN TYPEOF(SELF));
  WR178: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUALIFICATION_TYPE' IN TYPEOF(SELF));
  WR179: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION' IN TYPEOF(SELF));
  WR180: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_CONTEXT' IN TYPEOF(SELF));
  WR181: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(SELF));
  WR182: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
  WR183: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_ASSIGNMENT' IN TYPEOF(SELF));
  WR184: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE' IN TYPEOF(SELF));
  WR185: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_SOURCE' IN TYPEOF(SELF));
  WR186: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RESOURCE_PROPERTY' IN TYPEOF(SELF));
  WR187: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RETENTION' IN TYPEOF(SELF));
  WR188: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SATISFIES_REQUIREMENT' IN TYPEOF(SELF));
  WR189: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SECURITY_CLASSIFICATION' IN TYPEOF(SELF));
  WR190: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SECURITY_CLASSIFICATION_LEVEL' IN TYPEOF(SELF));
  WR191: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(SELF));
  WR192: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP' IN TYPEOF(SELF));
  WR193: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_FEATURE_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF));
  WR194: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_DEFINITION_TO_STATE_ASSIGNMENT_RELATIONSHIP' IN TYPEOF(SELF));
  WR195: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_OBSERVED' IN TYPEOF(SELF));
  WR196: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_OBSERVED_ASSIGNMENT' IN TYPEOF(SELF));
  WR197: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_OBSERVED_RELATIONSHIP' IN TYPEOF(SELF));
  WR198: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_OBSERVED_ROLE' IN TYPEOF(SELF));
  WR199: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_TYPE' IN TYPEOF(SELF));
  WR200: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_TYPE_ASSIGNMENT' IN TYPEOF(SELF));
  WR201: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_TYPE_RELATIONSHIP' IN TYPEOF(SELF));
  WR202: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_MESSAGE' IN TYPEOF(SELF));
  WR203: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_INTERVAL_RELATIONSHIP' IN TYPEOF(SELF));
  WR204: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TYPE_QUALIFIER' IN TYPEOF(SELF));
  WR205: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNCERTAINTY_MEASURE_WITH_UNIT' IN TYPEOF(SELF));
  WR206: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.USAGE_ASSOCIATION' IN TYPEOF(SELF));
  WR207: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALIDATION' IN TYPEOF(SELF));
  WR208: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERIFICATION' IN TYPEOF(SELF));
  WR209: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERSIONED_ACTION_REQUEST' IN TYPEOF(SELF));
  WR210: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERSIONED_ACTION_REQUEST_RELATIONSHIP' IN TYPEOF(SELF));
END_TYPE;

TYPE experience_type_item = SELECT
   (action_method,
    action_resource_requirement,
    executed_action,
    organization,
    person,
    person_and_organization);
END_TYPE;

TYPE express_identifier = dotted_express_identifier;
WHERE
  SYNTAX: dot_count(SELF) = 0;
END_TYPE;

TYPE expression_extension_select = SELECT
   (expression_extension_numeric,
    expression_extension_string);
END_TYPE;

TYPE extension_options = ENUMERATION OF
   (eo_none,
    eo_cont,
    eo_cont_right,
    eo_cont_left);
END_TYPE;

TYPE extent_enumeration = ENUMERATION OF
   (invalid,
    zero,
    finite_non_zero,
    infinite);
END_TYPE;

TYPE external_identification_item = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_relationship,
    action_request_status,
    address,
    analysis_model,
    analysis_representation_context,
    applied_action_method_assignment,
    applied_classification_assignment,
    applied_external_identification_assignment,
    applied_organization_assignment,
    applied_person_and_organization_assignment,
    approval,
    approval_person_organization,
    approval_status,
    assembly_bond_definition,
    assembly_component_usage,
    assembly_joint,
    attribute_language_assignment,
    breakdown_context,
    calendar_date,
    certification,
    class,
    composite_curve,
    condition,
    configuration_effectivity,
    contract,
    coordinated_universal_time_offset,
    curve,
    date_and_time,
    date_and_time_assignment,
    date_assignment,
    derived_unit,
    derived_unit_element,
    document_file,
    effectivity,
    evaluated_characteristic_of_product_as_individual_test_result,
    event_occurrence,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    external_source,
    externally_defined_class,
    externally_defined_context_dependent_unit,
    externally_defined_conversion_based_unit,
    externally_defined_general_property,
    externally_defined_picture_representation_item,
    externally_defined_representation_item,
    general_property,
    generic_product_definition_reference,
    group,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_definition,
    interface_connector_occurrence,
    interface_connector_version,
    interface_definition_connection,
    interface_definition_for,
    interface_specification_definition,
    interface_specification_version,
    language,
    local_time,
    loop,
    material_designation,
    measure_with_unit,
    named_unit,
    organization,
    organizational_address,
    organizational_project,
    oriented_surface,
    package_product_concept_feature,
    person,
    person_and_organization,
    point_on_curve,
    precision_qualifier,
    process_operation,
    process_plan,
    product,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_concept_feature_category,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_group,
    product_identification,
    product_process_plan,
    product_specification,
    property_definition,
    representation,
    representation_context,
    representation_item,
    requirement_source,
    satisfies_requirement,
    security_classification,
    shape_representation,
    state_observed,
    state_type,
    structured_message,
    surface,
    time_interval,
    trimmed_curve,
    type_qualifier,
    uncertainty_qualifier,
    usage_association,
    validation,
    verification,
    versioned_action_request,
    vertex_point);
END_TYPE;

TYPE face_or_surface = SELECT
   (face_surface,
    surface);
END_TYPE;

TYPE faceted_brep_shape_representation_items_select = SELECT
   (axis2_placement_3d,
    faceted_brep,
    mapped_item);
END_TYPE;

TYPE fill_area_style_tile_shape_select = SELECT
   (externally_defined_tile,
    fill_area_style_tile_coloured_region,
    fill_area_style_tile_curve_with_style,
    fill_area_style_tile_symbol_with_style,
    pre_defined_tile);
END_TYPE;

TYPE fill_style_select = SELECT
   (externally_defined_hatch_style,
    externally_defined_tile_style,
    fill_area_style_colour,
    fill_area_style_hatching,
    fill_area_style_tiles,
    texture_style_specification);
END_TYPE;

TYPE font_select = SELECT
   (externally_defined_text_font,
    pre_defined_text_font,
    text_font);
END_TYPE;

TYPE force_measure = REAL;
END_TYPE;

TYPE founded_item_select = SELECT
   (founded_item,
    representation_item);
END_TYPE;

TYPE frequency_measure = REAL;
END_TYPE;

TYPE general_organizational_data_select = SELECT
   (action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    alternative_solution_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_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_person_organization,
    approval_relationship,
    approval_status,
    assembly_component_usage,
    assembly_component_usage_substitute,
    breakdown_element_group_assignment,
    breakdown_element_realization,
    breakdown_of,
    certification,
    characterized_product_concept_feature,
    characterized_product_concept_feature_category,
    class,
    class_system,
    condition,
    conditional_concept_feature,
    conditional_effectivity,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    date_and_time_assignment,
    date_assignment,
    directed_action_assignment,
    document_file,
    drawing_revision,
    drawing_sheet_revision,
    effectivity,
    evaluated_characteristic_of_product_as_individual_test_result,
    exclusive_product_concept_feature_category,
    executed_action,
    frozen_assignment,
    general_property,
    general_property_relationship,
    group,
    group_relationship,
    identification_assignment_relationship,
    inclusion_product_concept_feature,
    information_usage_right,
    material_designation,
    material_designation_characterization,
    measure_representation_item,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    presentation_area,
    process_operation,
    process_plan,
    product,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_definition_relationship,
    product_definition_substitute,
    product_definition_usage,
    product_design_to_individual,
    product_design_version_to_individual,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    representation_item,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    requirement_view_definition_relationship,
    security_classification,
    shape_representation,
    value_representation_item,
    versioned_action_request);
END_TYPE;

TYPE generalized_surface_select = SELECT
   (face_surface,
    surface,
    surfaced_open_shell);
END_TYPE;

TYPE generic_attribute_list_select = SELECT
   (address,
    person);
END_TYPE;

TYPE generic_attribute_select = SELECT
   (address);
END_TYPE;

TYPE generic_property_definition_select = SELECT
   (action_property,
    dimensional_location,
    dimensional_size,
    property_definition,
    resource_property);
END_TYPE;

TYPE geometric_constraint_element = SELECT
   (curve,
    direction,
    point,
    surface,
    vector);
END_TYPE;

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

TYPE geometric_model_item = SELECT
   (connected_face_set,
    edge_loop,
    geometric_representation_item);
END_TYPE;

TYPE geometric_set_select = SELECT
   (annotation_text,
    curve,
    placement,
    planar_box,
    point,
    surface);
END_TYPE;

TYPE geometric_tolerance_auxiliary_classification_enum = ENUMERATION OF
   (all_over,
    unless_otherwise_specified);
END_TYPE;

TYPE geometric_tolerance_modifier = ENUMERATION OF
   (any_cross_section,
    associated_least_square_feature,
    associated_maximum_inscribed_feature,
    associated_minimum_inscribed_feature,
    associated_minmax_feature,
    associated_tangent_feature,
    circle_a,
    common_zone,
    continuous_features,
    derived_feature,
    each_element,
    each_radial_element,
    free_state,
    individually,
    least_material_requirement,
    line_element,
    major_diameter,
    maximum_material_requirement,
    minor_diameter,
    not_convex,
    offset_zone,
    peak_height,
    pitch_diameter,
    reciprocity_requirement,
    reference_least_square_feature_with_external_material_constraint,
    reference_least_square_feature_with_internal_material_constraint,
    reference_least_square_feature_without_constraint,
    reference_maximum_inscribed_feature,
    reference_minimax_feature_with_external_material_constraint,
    reference_minimax_feature_with_internal_material_constraint,
    reference_minimax_feature_without_constraint,
    reference_minimum_circumscribed_feature,
    separate_requirement,
    separate_zones,
    standard_deviation,
    statistical_tolerance,
    stock,
    tangent_plane,
    total_range_deviations,
    united_feature,
    unspecified_angular_tolerance_zone_offset,
    unspecified_linear_tolerance_zone_offset,
    valley_depth,
    variable_angle);
END_TYPE;

TYPE geometric_tolerance_target = SELECT
   (dimensional_location,
    dimensional_size,
    product_definition_shape,
    shape_aspect,
    shape_aspect_relationship);
END_TYPE;

TYPE geometry_association_item_select = SELECT
   (cartesian_point,
    curve,
    edge_curve,
    placement,
    vertex_point);
END_TYPE;

TYPE gps_filtration_enumeration = ENUMERATION OF
   (alternating_ball,
    alternating_disc,
    alternating_horizontal_segment,
    ball_radius,
    closing_ball,
    closing_disc,
    closing_horizontal_segment,
    complex_wavelet,
    cutoff_length,
    cutoff_upr,
    disc_radius,
    fourier,
    gaussian,
    hull,
    long_wave_pass_filter,
    opening_ball,
    opening_disc,
    opening_horizontal_segment,
    robust_gaussian,
    robust_spline,
    segment_length,
    short_wave_pass_filter,
    spline,
    spline_wavelet,
    urp_number,
    wavelength);
END_TYPE;

TYPE gps_filtration_specification_target = SELECT
   (geometric_tolerance,
    property_definition,
    shape_aspect);
END_TYPE;

TYPE gps_filtration_type = SELECT
   (geometric_tolerance_modifier,
    gps_filtration_enumeration);
END_TYPE;

TYPE groupable_item = SELECT
   (action_method,
    action_method_relationship,
    address,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_attribute_classification_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_group_assignment,
    applied_identification_assignment,
    applied_location_assignment,
    applied_location_representation_assignment,
    applied_name_assignment,
    applied_organization_assignment,
    applied_organization_type_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,
    attribute_language_assignment,
    breakdown_element_group_assignment,
    calendar_date,
    certification,
    class,
    collection_assignment,
    collection_membership,
    component_feature,
    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,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    external_source,
    general_property,
    general_property_relationship,
    geometric_item_specific_usage,
    geometric_representation_item,
    group_relationship,
    identification_assignment_relationship,
    information_right,
    information_usage_right,
    instanced_feature,
    interface_connection,
    interface_connector_definition,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    item_defined_transformation,
    language,
    local_time,
    location_representation_item,
    mapped_item,
    measure_qualification,
    measure_with_unit,
    multi_language_attribute_assignment,
    named_unit,
    organization,
    organization_relationship,
    organization_type,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    precision_qualifier,
    product,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group_membership,
    product_group_relationship,
    product_relationship,
    property_definition,
    property_definition_representation,
    replicate_feature,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    representation_relationship_with_transformation,
    requirement_assignment,
    requirement_source,
    same_as_external_item_assignment,
    satisfies_requirement,
    security_classification,
    shape_aspect,
    shape_aspect_relationship,
    shape_representation_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_observed_role,
    state_type,
    state_type_assignment,
    state_type_relationship,
    styled_item,
    time_interval,
    time_interval_assignment,
    time_interval_relationship,
    time_interval_role,
    topological_representation_item,
    transition_feature,
    type_qualifier,
    uncertainty_qualifier,
    usage_association,
    verification_relationship,
    versioned_action_request);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP' IN TYPEOF(SELF));
END_TYPE;

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

TYPE hybrid_brep_curve_select = SELECT
   (curve,
    tessellated_edge);
END_TYPE;

TYPE hybrid_brep_edge_select = SELECT
   (edge_curve,
    tessellated_edge_curve);
END_TYPE;

TYPE hybrid_brep_face_select = SELECT
   (advanced_face,
    face_surface,
    tessellated_face_surface);
END_TYPE;

TYPE hybrid_brep_point_select = SELECT
   (point,
    tessellated_vertex);
END_TYPE;

TYPE hybrid_brep_reference_shape_representation = SELECT
   (advanced_brep_shape_representation,
    faceted_brep_shape_representation,
    hybrid_brep_shape_representation,
    tessellated_brep_shape_representation);
END_TYPE;

TYPE hybrid_brep_shape_assignment_select = SELECT
   (hybrid_brep_edge_assignment,
    hybrid_brep_face_assignment,
    hybrid_brep_vertex_assignment,
    mapped_item);
END_TYPE;

TYPE hybrid_brep_surface_select = SELECT
   (surface,
    tessellated_face);
END_TYPE;

TYPE hybrid_brep_vertex_select = SELECT
   (tessellated_vertex_point,
    vertex_point);
END_TYPE;

TYPE id_attribute_select = SELECT
   (action,
    address,
    application_context,
    ascribable_state_relationship,
    dimensional_size,
    geometric_tolerance,
    group,
    organizational_project,
    product_category,
    property_definition,
    representation,
    round_hole_bottom_condition,
    shape_aspect,
    shape_aspect_relationship,
    topological_representation_item);
END_TYPE;

TYPE identification_item = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    address,
    alternate_product_relationship,
    alternative_solution_relationship,
    analysis_assignment,
    analysis_representation_context,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment_relationship,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_external_identification_assignment_relationship,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_relationship,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    breakdown_element_realization,
    breakdown_of,
    certification,
    change_group,
    characterized_class,
    characterized_object,
    characterized_object_relationship,
    class,
    class_system,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    context_dependent_shape_representation,
    contract,
    contract_relationship,
    date_and_time_assignment,
    date_assignment,
    degenerate_pcurve,
    derived_unit,
    dimension_related_tolerance_zone_element,
    dimensional_characteristic_representation,
    dimensional_location,
    dimensional_size,
    dimensional_size_with_path,
    directed_action_assignment,
    document_file,
    document_relationship,
    document_type,
    draughting_callout_relationship,
    draughting_model,
    effectivity,
    effectivity_relationship,
    envelope,
    envelope_relationship,
    evaluated_characteristic,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    founded_item,
    general_property,
    general_property_relationship,
    generic_property_relationship,
    geometric_tolerance,
    geometric_tolerance_auxiliary_classification,
    geometric_tolerance_relationship,
    gps_filter,
    gps_filtration_specification,
    group,
    group_relationship,
    identification_assignment_relationship,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_definition,
    interface_connector_design,
    interface_connector_occurrence,
    interface_connector_version,
    interface_definition_connection,
    interface_definition_for,
    interface_specification_definition,
    interface_specification_version,
    invisibility,
    item_identified_representation_usage,
    limits_and_fits,
    link_motion_relationship,
    material_designation,
    material_designation_characterization,
    measure_qualification,
    measure_representation_item,
    measure_with_unit,
    mechanical_design_geometric_presentation_representation,
    message_relationship,
    named_unit,
    observation,
    observation_consequence,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    plus_minus_tolerance,
    point_on_surface,
    presentation_area,
    process_operation,
    process_plan,
    product,
    product_category,
    product_class,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_concept_feature_category,
    product_concept_relationship,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_definition_relationship,
    product_definition_usage,
    product_definition_usage_relationship,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_relationship,
    property_definition_representation,
    representation,
    representation_context,
    representation_item,
    representation_item_relationship,
    representation_relationship,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    retention,
    rule_set,
    runout_zone_orientation,
    satisfies_requirement,
    security_classification,
    security_classification_level,
    shape_aspect,
    shape_aspect_relationship,
    shape_feature_definition,
    shape_feature_definition_relationship,
    shape_representation,
    state_definition_to_state_assignment_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    time_interval,
    time_interval_relationship,
    tolerance_value,
    tolerance_zone_definition,
    tolerance_zone_form,
    usage_association,
    validation,
    verification,
    verification_relationship,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

TYPE identifier = STRING;
END_TYPE;

TYPE idrm_marked_item = SELECT
   (document_file,
    product_definition);
END_TYPE;

TYPE illuminance_measure = REAL;
END_TYPE;

TYPE inductance_measure = REAL;
END_TYPE;

TYPE input_selector = positive_integer;
END_TYPE;

TYPE inspected_ecdq_element_select = inspected_element_select;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(SELF));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN TYPEOF(SELF));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET' IN TYPEOF(SELF));
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION' IN TYPEOF(SELF));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN TYPEOF(SELF));
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN TYPEOF(SELF));
  WR7: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(SELF));
  WR8: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TSDQ_INSPECTION_ELEMENT' IN TYPEOF(SELF));
END_TYPE;

TYPE inspected_element_select = SELECT
   (assembly_component_usage,
    axis2_placement_3d,
    b_spline_or_composite_curve_select,
    b_spline_or_rectangular_composite_surface_select,
    cartesian_transformation_operator_3d,
    closed_or_open_shell_select,
    connected_face_set,
    curve,
    datum,
    datum_system,
    datum_target,
    dimensional_location,
    dimensional_size,
    direction,
    edge_curve,
    edge_loop,
    face_surface,
    geometric_tolerance,
    global_uncertainty_assigned_context,
    global_unit_assigned_context,
    group,
    manifold_solid_brep,
    placement,
    point,
    presentation_layer_assignment,
    representation_item,
    shape_aspect,
    styled_item,
    surface,
    tsdq_inspection_element,
    vertex_point);
END_TYPE;

TYPE inspected_equivalence_element_select = SELECT
   (connected_edge_set,
    connected_face_set,
    externally_defined_representation_item,
    manifold_solid_brep,
    point_cloud_dataset,
    product_definition_or_reference,
    shape_representation,
    shell_based_surface_model,
    shell_based_wireframe_model,
    vertex_point);
END_TYPE;

TYPE inspected_shape_element_select = inspected_element_select;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(SELF));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN TYPEOF(SELF));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET' IN TYPEOF(SELF));
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION' IN TYPEOF(SELF));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN TYPEOF(SELF));
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN TYPEOF(SELF));
  WR7: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(SELF));
  WR8: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TSDQ_INSPECTION_ELEMENT' IN TYPEOF(SELF));
END_TYPE;

TYPE instance_usage_context_select = SELECT
   (process_product_association,
    product_definition_group_assignment,
    product_definition_relationship,
    product_definition_usage);
END_TYPE;

TYPE internal_or_reflected_shape_aspect = SELECT
   (identifier,
    shape_aspect);
END_TYPE;

TYPE interpolation_type = ENUMERATION OF
   (undefined_interpolation_type,
    discontinuous_interpolation_type,
    synchronous_interpolation_type,
    linear_interpolation_type);
END_TYPE;

TYPE invisibility_context = SELECT
   (draughting_model,
    presentation_representation,
    presentation_set);
END_TYPE;

TYPE invisible_item = SELECT
   (draughting_callout,
    presentation_layer_assignment,
    representation,
    styled_item);
END_TYPE;

TYPE ir_usage_item = action_items;
END_TYPE;

TYPE item_identified_representation_usage_definition = SELECT
   (applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment,
    applied_contract_assignment,
    applied_date_and_time_assignment,
    applied_date_assignment,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_group_assignment,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_name_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    characterized_object,
    dimensional_size,
    geometric_tolerance,
    product_definition_relationship,
    property_definition,
    represented_definition);
END_TYPE;

TYPE item_identified_representation_usage_select = SELECT
   (list_representation_item,
    representation_item,
    set_representation_item);
END_TYPE;

TYPE kinematic_analysis_definition = SELECT
   (interpolated_configuration_sequence,
    prescribed_path);
END_TYPE;

TYPE kinematic_link_representation_items = SELECT
   (curve,
    point,
    rigid_placement,
    surface);
END_TYPE;

TYPE kinematic_result = SELECT
   (interpolated_configuration_sequence,
    resulting_path);
END_TYPE;

TYPE kinematic_topology_representation_select = SELECT
   (kinematic_topology_directed_structure,
    kinematic_topology_network_structure,
    kinematic_topology_structure);
END_TYPE;

TYPE knot_type = ENUMERATION OF
   (uniform_knots,
    quasi_uniform_knots,
    piecewise_bezier_knots,
    unspecified);
END_TYPE;

TYPE label = STRING;
END_TYPE;

TYPE layered_item = SELECT
   (presentation_representation,
    representation_item);
END_TYPE;

TYPE length_measure = REAL;
END_TYPE;

TYPE length_or_plane_angle_measure_with_unit_select = SELECT
   (length_measure_with_unit,
    plane_angle_measure_with_unit);
END_TYPE;

TYPE length_to_height_ratio = ratio_measure;
END_TYPE;

TYPE limit_condition = ENUMERATION OF
   (maximum_material_condition,
    least_material_condition,
    regardless_of_feature_size);
END_TYPE;

TYPE linear_geometry_constraint_element = SELECT
   (direction,
    line,
    plane,
    vector);
END_TYPE;

TYPE linearly_independent_enum = ENUMERATION OF
   (independent,
    not_independent,
    not_tested);
END_TYPE;

TYPE link_or_shape_representation = SELECT
   (kinematic_link_representation,
    shape_representation);
END_TYPE;

TYPE list_of_reversible_topology_item = LIST[0:?] OF reversible_topology_item;
END_TYPE;

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

TYPE locally_refined_spline_type_enum = ENUMERATION OF
   (analysis_suitable_t_spline,
    hierarchical_b_spline,
    lr_b_spline,
    semi_standard_t_spline,
    standard_t_spline);
END_TYPE;

TYPE location_in_aggregate_item = LIST[1:?] OF integer_representation_item;
END_TYPE;

TYPE location_item = SELECT
   (action_resource,
    assembly_component_usage,
    document_file,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    organization,
    organization_type,
    organizational_project,
    person,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    product_group);
END_TYPE;

TYPE location_of_extreme_value_select = SELECT
   (b_spline_curve_knot_locator,
    b_spline_curve_segment,
    b_spline_surface_knot_locator,
    b_spline_surface_patch,
    b_spline_surface_strip,
    boundary_curve_of_b_spline_or_rectangular_composite_surface,
    composite_curve_transition_locator,
    face_bound,
    inspected_shape_element_select,
    oriented_edge,
    point_on_edge_curve,
    point_on_face_surface,
    rectangular_composite_surface_transition_locator,
    subedge,
    subface);
END_TYPE;

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

TYPE lower_upper = ENUMERATION OF
   (lower,
    upper);
END_TYPE;

TYPE luminous_flux_measure = REAL;
END_TYPE;

TYPE luminous_intensity_measure = REAL;
END_TYPE;

TYPE machining_feature_definition = SELECT
   (boss,
    compound_feature,
    externally_defined_feature_definition,
    flat_face,
    gear,
    marking,
    outer_round,
    outside_profile,
    pocket,
    protrusion,
    removal_volume,
    replicate_feature,
    revolved_profile,
    rib_top,
    round_hole,
    rounded_end,
    slot,
    spherical_cap,
    step,
    thread,
    turned_knurl);
END_TYPE;

TYPE magnetic_flux_density_measure = REAL;
END_TYPE;

TYPE magnetic_flux_measure = REAL;
END_TYPE;

TYPE manifold_subsurface_shape_representation_select = SELECT
   (axis2_placement_3d,
    connected_face_sub_set,
    mapped_item);
END_TYPE;

TYPE manifold_surface_shape_representation_select = SELECT
   (axis2_placement_3d,
    mapped_item,
    shell_based_surface_model);
END_TYPE;

TYPE marker_select = SELECT
   (marker_type,
    pre_defined_marker);
END_TYPE;

TYPE marker_type = ENUMERATION OF
   (dot,
    x,
    plus,
    asterisk,
    ring,
    square,
    triangle);
END_TYPE;

TYPE mass_measure = REAL;
END_TYPE;

TYPE maths_atom = SELECT
   (maths_enum_atom,
    maths_simple_atom);
END_TYPE;

TYPE maths_binary = BINARY;
END_TYPE;

TYPE maths_boolean = BOOLEAN;
END_TYPE;

TYPE maths_enum_atom = SELECT
   (elementary_function_enumerators,
    elementary_space_enumerators,
    extension_options,
    lower_upper,
    open_closed,
    ordering_type,
    repackage_options,
    space_constraint_type,
    symmetry_type);
END_TYPE;

TYPE maths_expression = SELECT
   (atom_based_value,
    generic_expression,
    maths_tuple);
END_TYPE;

TYPE maths_function_select = SELECT
   (elementary_function_enumerators,
    maths_function);
END_TYPE;

TYPE maths_integer = INTEGER;
END_TYPE;

TYPE maths_logical = LOGICAL;
END_TYPE;

TYPE maths_number = NUMBER;
END_TYPE;

TYPE maths_real = REAL;
END_TYPE;

TYPE maths_simple_atom = SELECT
   (maths_binary,
    maths_boolean,
    maths_integer,
    maths_logical,
    maths_number,
    maths_real,
    maths_string);
END_TYPE;

TYPE maths_space_or_function = SELECT
   (maths_function,
    maths_space);
END_TYPE;

TYPE maths_string = STRING;
END_TYPE;

TYPE maths_tuple = LIST[0:?] OF maths_value;
END_TYPE;

TYPE maths_value = SELECT
   (atom_based_value,
    generic_expression,
    maths_tuple);
WHERE
  CONSTANCY: NOT ('GENERIC_EXPRESSION' IN stripped_typeof(SELF)) OR expression_is_constant(SELF);
END_TYPE;

TYPE maximum_edge_length = positive_length_measure;
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 measured_value_select = SELECT
   (boolean_value,
    measure_value,
    plane_angle_and_length_pair,
    plane_angle_and_ratio_pair);
END_TYPE;

TYPE mechanical_design_and_draughting_relationship_select = SELECT
   (draughting_model,
    mechanical_design_geometric_presentation_representation,
    mechanical_design_presentation_representation_with_draughting,
    mechanical_design_shaded_presentation_representation,
    shape_representation);
END_TYPE;

TYPE mechanical_design_geometric_presentation_area_items = SELECT
   (axis2_placement,
    mapped_item);
END_TYPE;

TYPE mechanical_design_geometric_presentation_representation_items = SELECT
   (axis2_placement,
    camera_model_d3,
    mapped_item,
    styled_item);
END_TYPE;

TYPE mechanical_design_shaded_presentation_area_items = SELECT
   (axis2_placement,
    mapped_item);
END_TYPE;

TYPE mechanical_design_shaded_presentation_representation_items = SELECT
   (axis2_placement,
    camera_model_d3,
    mapped_item,
    styled_item);
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,
    action_directive,
    action_directive_relationship,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    action_relationship,
    actuated_kinematic_pair,
    alternate_product_relationship,
    alternative_solution_relationship,
    analysis_assignment,
    analysis_representation_context,
    application_context,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_action_request_assignment,
    applied_approval_assignment,
    applied_certification_assignment,
    applied_classification_assignment_relationship,
    applied_contract_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_effectivity_assignment,
    applied_event_occurrence_assignment,
    applied_external_identification_assignment,
    applied_external_identification_assignment_relationship,
    applied_identification_assignment,
    applied_ineffectivity_assignment,
    applied_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_time_interval_assignment,
    applied_usage_right,
    approval,
    approval_relationship,
    approval_status,
    ascribable_state,
    ascribable_state_relationship,
    assembly_component_usage_substitute,
    assignment_object_relationship,
    attribute_value_assignment,
    breakdown_context,
    breakdown_element_realization,
    breakdown_of,
    certification,
    certification_type,
    change_element_sequence,
    change_group,
    class,
    colour,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    contract,
    contract_relationship,
    curve_style_font,
    data_environment,
    date_role,
    date_time_role,
    descriptive_representation_item,
    dimensional_location,
    directed_action_assignment,
    document_file,
    document_relationship,
    document_usage_role,
    draughting_callout_relationship,
    draughting_model_item_association,
    draughting_title,
    effectivity,
    effectivity_relationship,
    envelope,
    envelope_relationship,
    evaluated_characteristic,
    event_occurrence,
    event_occurrence_relationship,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    external_source,
    externally_defined_class,
    general_property,
    general_property_relationship,
    generic_property_relationship,
    geometric_representation_item,
    geometric_tolerance,
    global_uncertainty_assigned_context,
    global_unit_assigned_context,
    group,
    group_relationship,
    identification_assignment_relationship,
    identification_role,
    in_zone,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    kinematic_pair,
    link_motion_relationship,
    make_from_usage_option,
    mapped_item,
    material_designation_characterization,
    measure_qualification,
    measure_with_unit,
    message_relationship,
    name_assignment,
    object_role,
    organization,
    organization_relationship,
    organization_role,
    organizational_address,
    organizational_project,
    organizational_project_relationship,
    organizational_project_role,
    package_product_concept_feature,
    person,
    person_and_organization,
    person_and_organization_address,
    person_and_organization_role,
    presentation_layer_assignment,
    process_operation,
    process_plan,
    process_product_association,
    product,
    product_concept,
    product_concept_context,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_shape,
    product_definition_substitute,
    product_definition_usage,
    product_definition_usage_relationship,
    product_design_to_individual,
    product_design_version_to_individual,
    product_group,
    product_group_relationship,
    product_identification,
    product_process_plan,
    product_related_product_category,
    product_relationship,
    product_specification,
    property_definition,
    property_definition_relationship,
    property_definition_representation,
    qualitative_uncertainty,
    representation,
    representation_context,
    representation_item,
    representation_relationship,
    representation_relationship_with_transformation,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    resource_requirement_type,
    retention,
    satisfies_requirement,
    security_classification,
    security_classification_assignment,
    shape_aspect,
    shape_aspect_relationship,
    shape_feature_definition,
    shape_feature_definition_relationship,
    shape_representation,
    state_definition_to_state_assignment_relationship,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    styled_item,
    time_interval,
    time_interval_relationship,
    time_interval_role,
    topological_representation_item,
    uncertainty_measure_with_unit,
    uncertainty_qualifier,
    usage_association,
    validation,
    verification,
    verification_relationship,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

TYPE multi_or_next_assembly_usage_occurrence = SELECT
   (multi_level_reference_designator,
    next_assembly_usage_occurrence);
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,
    product_definition_substitute,
    property_definition_representation);
END_TYPE;

TYPE name_item = SELECT
   (applied_action_assignment,
    applied_action_method_assignment,
    assembly_component_usage,
    external_class_library,
    group,
    group_relationship,
    observation_consequence,
    product,
    product_definition);
END_TYPE;

TYPE non_manifold_surface_shape_representation_select = SELECT
   (axis2_placement_3d,
    face_based_surface_model,
    mapped_item);
END_TYPE;

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

TYPE non_negative_real = REAL;
WHERE
  WR1: 0.0 <= SELF;
END_TYPE;

TYPE nonnegative_integer = INTEGER;
WHERE
  NONNEGATIVITY: SELF >= 0;
END_TYPE;

TYPE null_style = ENUMERATION OF
   (null);
END_TYPE;

TYPE numeric_measure = NUMBER;
END_TYPE;

TYPE observation_date = SELECT
   (observation);
END_TYPE;

TYPE one_or_two = positive_integer;
WHERE
  IN_RANGE: (SELF = 1) OR (SELF = 2);
END_TYPE;

TYPE open_closed = ENUMERATION OF
   (open,
    closed);
END_TYPE;

TYPE ordering_type = ENUMERATION OF
   (by_rows,
    by_columns);
END_TYPE;

TYPE organization_item = SELECT
   (action,
    action_directive,
    action_method,
    action_property,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_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_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_security_classification_assignment,
    approval,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    data_equivalence_definition,
    data_quality_definition,
    date_and_time_assignment,
    date_assignment,
    datum,
    datum_system,
    dimensional_location,
    dimensional_size,
    document_file,
    document_type,
    draughting_model,
    drawing_revision,
    effectivity,
    envelope,
    event_occurrence,
    evidence,
    executed_action,
    externally_defined_class,
    general_property,
    general_property_relationship,
    geometric_tolerance,
    information_right,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    observation,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_group,
    product_group_membership,
    product_group_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    rule_action,
    satisfies_requirement,
    security_classification,
    security_classification_level,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE organization_type_item = SELECT
   (organization);
END_TYPE;

TYPE orientation_basis_select = SELECT
   (axis2_placement_3d,
    min_and_major_ply_orientation_basis);
END_TYPE;

TYPE oriented_tolerance_zone_type = ENUMERATION OF
   (perpendicular,
    parallel,
    angular);
END_TYPE;

TYPE parallel_offset_type = ENUMERATION OF
   (curve_2d_offset,
    curve_3d_offset,
    surface_offset);
END_TYPE;

TYPE parameter_value = REAL;
END_TYPE;

TYPE path_or_composite_curve = SELECT
   (composite_curve,
    path);
END_TYPE;

TYPE pcurve_or_surface = SELECT
   (pcurve,
    surface);
END_TYPE;

TYPE person_and_organization_item = SELECT
   (action,
    action_directive,
    action_method,
    action_property,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    applied_action_assignment,
    applied_action_method_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_organization_assignment,
    applied_organizational_project_assignment,
    applied_person_and_organization_assignment,
    applied_qualification_type_assignment,
    applied_security_classification_assignment,
    approval,
    approval_status,
    ascribable_state,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configured_effectivity_assignment,
    contract,
    data_equivalence_definition,
    data_quality_definition,
    date_and_time_assignment,
    date_assignment,
    datum,
    datum_system,
    dimensional_location,
    dimensional_size,
    document_file,
    document_type,
    draughting_model,
    drawing_revision,
    effectivity,
    envelope,
    event_occurrence,
    evidence,
    executed_action,
    externally_defined_class,
    general_property,
    general_property_relationship,
    geometric_tolerance,
    information_usage_right,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    observation,
    organization,
    organization_relationship,
    organizational_address,
    organizational_project,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_definition,
    product_definition_context,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_group,
    product_group_membership,
    product_group_relationship,
    property_definition,
    property_definition_representation,
    qualification_type,
    representation,
    requirement_assignment,
    requirement_for_action_resource,
    requirement_source,
    resource_property,
    rule_action,
    security_classification,
    security_classification_level,
    shape_representation,
    state_observed,
    state_observed_assignment,
    state_observed_relationship,
    state_type,
    state_type_assignment,
    state_type_relationship,
    structured_message,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE person_definition_item = SELECT
   (experience_type,
    qualification_type);
END_TYPE;

TYPE person_organization_item = SELECT
   (person);
END_TYPE;

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

TYPE person_type_item = SELECT
   (analysis_assignment);
END_TYPE;

TYPE picture_representation_item_select = SELECT
   (axis2_placement_2d,
    planar_box,
    styled_item);
END_TYPE;

TYPE planar_curve_select = SELECT
   (conic,
    line,
    pcurve,
    surface_curve,
    trimmed_curve);
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
  WR2: check_curve_planarity(SELF);
END_TYPE;

TYPE plane_angle_measure = REAL;
END_TYPE;

TYPE plane_or_planar_box = SELECT
   (planar_box,
    plane);
END_TYPE;

TYPE pmidq_inspected_element_type_name = a3m_data_quality_inspected_element_type_name;
WHERE
  WR1: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_adjacent_triangle_pair;
  WR2: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_adjacent_triangulated_face_pair;
  WR3: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_others;
  WR4: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_representative_triangle;
  WR5: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_tessellated_connecting_edge;
  WR6: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_tessellated_shell;
  WR7: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_tessellated_solid;
  WR8: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_triangle_edge;
  WR9: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_triangle_vertex;
  WR10: SELF <> a3m_data_quality_inspected_element_type_name.tsdqi_triangulated_face;
END_TYPE;

TYPE pmidq_measured_data_type_name = a3m_data_quality_measured_data_type_name;
WHERE
  WR1: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_area_measure;
  WR2: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_boolean_value;
  WR3: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_count_measure;
  WR4: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_others;
  WR5: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_positive_length_measure;
  WR6: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_positive_plane_angle_measure;
  WR7: SELF <> a3m_data_quality_measured_data_type_name.tsdqm_ratio_measure;
END_TYPE;

TYPE point_and_vector_member = SELECT
   (direction,
    point);
END_TYPE;

TYPE point_and_vector_members = LIST[2:3] OF point_and_vector_member;
END_TYPE;

TYPE point_array_members = LIST[1:?] OF point_and_vector;
END_TYPE;

TYPE point_cloud_set_or_superset = SELECT
   (point_cloud_dataset,
    point_cloud_superdataset);
END_TYPE;

TYPE point_curve_or_surface_constraint_element = SELECT
   (curve,
    point,
    surface);
END_TYPE;

TYPE point_path_members = LIST[1:?] OF point_and_vector;
END_TYPE;

TYPE point_placement_shape_representation_item = SELECT
   (axis2_placement_3d,
    compound_representation_item,
    mapped_item);
END_TYPE;

TYPE position_in_organization_group_assignment_item = SELECT
   (position_in_organization_assignment);
END_TYPE;

TYPE position_in_organization_group_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE position_in_organization_item = SELECT
   (address,
    organization,
    organizational_project,
    person);
END_TYPE;

TYPE position_in_organization_type_item = SELECT
   (person_type,
    position_in_organization);
END_TYPE;

TYPE positive_integer = nonnegative_integer;
WHERE
  POSITIVITY: SELF > 0;
END_TYPE;

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

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

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

TYPE power_measure = REAL;
END_TYPE;

TYPE preferred_ordering = ENUMERATION OF
   (extremity_order,
    detected_order);
END_TYPE;

TYPE preferred_report_ordering = ENUMERATION OF
   (in_notable_order,
    in_detected_order);
END_TYPE;

TYPE preferred_surface_curve_representation = ENUMERATION OF
   (curve_3d,
    pcurve_s1,
    pcurve_s2);
END_TYPE;

TYPE presentable_text = STRING;
WHERE
  WR1: control_characters_free(SELF);
END_TYPE;

TYPE presentation_representation_select = SELECT
   (presentation_representation,
    presentation_set);
END_TYPE;

TYPE presentation_size_assignment_select = SELECT
   (area_in_set,
    presentation_area,
    presentation_view);
END_TYPE;

TYPE presentation_style_select = SELECT
   (curve_style,
    externally_defined_style,
    fill_area_style,
    null_style,
    point_style,
    surface_style_usage,
    symbol_style,
    text_style,
    texture_style_tessellation_specification);
END_TYPE;

TYPE presented_item_select = SELECT
   (action,
    action_method,
    action_relationship,
    product_concept,
    product_concept_feature,
    product_concept_feature_category,
    product_definition,
    product_definition_formation,
    product_definition_relationship);
END_TYPE;

TYPE pressure_measure = REAL;
END_TYPE;

TYPE previous_element_assignment_select = SELECT
   (delete_element,
    modify_element);
END_TYPE;

TYPE process_or_process_relationship = SELECT
   (product_definition_process,
    property_process,
    relationship_with_condition);
END_TYPE;

TYPE product_definition_occurrence_or_reference = SELECT
   (product_definition_occurrence,
    product_definition_occurrence_reference);
END_TYPE;

TYPE product_definition_or_assembly_component_usage = SELECT
   (assembly_component_usage,
    product_definition);
END_TYPE;

TYPE product_definition_or_assembly_relationship = SELECT
   (assembly_component_usage,
    product_definition);
END_TYPE;

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

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

TYPE product_definition_or_reference = SELECT
   (generic_product_definition_reference,
    product_definition,
    product_definition_occurrence);
END_TYPE;

TYPE product_definition_or_reference_or_occurrence = product_definition_or_reference;
END_TYPE;

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

TYPE product_select = SELECT
   (product,
    product_concept,
    product_definition_formation,
    product_group);
END_TYPE;

TYPE product_space = SELECT
   (listed_product_space,
    uniform_product_space);
END_TYPE;

TYPE project_group_name_item = SELECT
   (applied_position_in_organization_group_assignment);
END_TYPE;

TYPE project_item = SELECT
   (action_method,
    action_method_relationship,
    applied_action_assignment,
    applied_action_method_assignment,
    assembly_component_usage,
    configuration_item,
    executed_action,
    measure_representation_item,
    product,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_occurrence,
    product_definition_occurrence_reference,
    product_group,
    product_group_membership,
    product_group_relationship,
    product_identification,
    property_definition_representation,
    representation,
    representation_item,
    value_representation_item);
END_TYPE;

TYPE property_or_shape_select = SELECT
   (property_definition,
    shape_definition);
END_TYPE;

TYPE property_variable_rep_select = SELECT
   (dimensional_size,
    representation);
END_TYPE;

TYPE radial_geometry_constraint_element = SELECT
   (circle,
    conical_surface,
    cylindrical_surface,
    right_circular_cone,
    right_circular_cylinder,
    sphere,
    spherical_surface);
END_TYPE;

TYPE radioactivity_measure = REAL;
END_TYPE;

TYPE ratio_measure = REAL;
END_TYPE;

TYPE real_interval = SELECT
   (elementary_space,
    finite_real_interval,
    real_interval_from_min,
    real_interval_to_max);
WHERE
  WR1: NOT ('ELEMENTARY_SPACE' IN stripped_typeof(SELF)) OR (SELF\elementary_space.space_id = es_reals);
END_TYPE;

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

TYPE rendering_properties_select = SELECT
   (surface_style_reflectance_ambient,
    surface_style_transparent);
END_TYPE;

TYPE repackage_options = ENUMERATION OF
   (ro_nochange,
    ro_wrap_as_tuple,
    ro_unwrap_tuple);
END_TYPE;

TYPE representation_or_representation_reference = SELECT
   (representation,
    representation_reference);
END_TYPE;

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

TYPE representative_value_type = ENUMERATION OF
   (average_value,
    max_value,
    min_value,
    min_max_value);
END_TYPE;

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

TYPE representing_relationship = SELECT
   (binary_assembly_constraint,
    constrained_kinematic_motion_representation,
    free_kinematic_motion_representation);
END_TYPE;

TYPE requirement_assigned_item = SELECT
   (action_method,
    alternate_product_relationship,
    applied_action_method_assignment,
    applied_state_observed_assignment,
    applied_state_type_assignment,
    assembly_component_usage,
    assembly_component_usage_substitute,
    characterized_object,
    configuration_item,
    descriptive_representation_item,
    dimensional_location,
    dimensional_size,
    geometric_tolerance,
    interface_connector_occurrence,
    organizational_project,
    product,
    product_class,
    product_definition,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_group_membership,
    quantified_assembly_component_usage,
    representation,
    shape_aspect,
    state_observed,
    state_type,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE requirement_satisfaction_item = SELECT
   (requirement_assigned_item);
END_TYPE;

TYPE requirement_source_item = SELECT
   (action_method,
    applied_action_method_assignment,
    applied_state_observed_assignment,
    applied_state_type_assignment,
    characterized_object,
    contract,
    dimensional_location,
    dimensional_size,
    executed_action,
    geometric_tolerance,
    group,
    group_relationship,
    interface_connector_occurrence,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_definition,
    product_definition_formation,
    product_definition_relationship,
    shape_aspect,
    state_observed,
    state_type,
    validation,
    verification);
END_TYPE;

TYPE resistance_measure = REAL;
END_TYPE;

TYPE reversible_topology = SELECT
   (list_of_reversible_topology_item,
    reversible_topology_item,
    set_of_reversible_topology_item);
END_TYPE;

TYPE reversible_topology_item = SELECT
   (closed_shell,
    edge,
    face,
    face_bound,
    open_shell,
    path);
END_TYPE;

TYPE rigid_placement = SELECT
   (axis2_placement_3d,
    su_parameters);
END_TYPE;

TYPE risk_action = SELECT
   (risk_acceptance,
    risk_analysis,
    risk_assessment,
    risk_communication,
    risk_control,
    risk_estimation,
    risk_evaluation,
    risk_identification,
    risk_treatment);
END_TYPE;

TYPE risk_impact_item = SELECT
   (product,
    product_definition_formation);
END_TYPE;

TYPE risk_perception_source_item = SELECT
   (action,
    action_method,
    product);
END_TYPE;

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

TYPE round_hole_bottom_condition_enum = ENUMERATION OF
   (spherical,
    flat_with_radius,
    flat_with_taper,
    flat,
    conical);
END_TYPE;

TYPE rule_superseded_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE same_as_item = SELECT
   (address,
    applied_external_identification_assignment,
    approval,
    approval_status,
    attribute_language_assignment,
    calendar_date,
    certification,
    contract,
    coordinated_universal_time_offset,
    date_and_time,
    derived_unit,
    derived_unit_element,
    event_occurrence,
    external_source,
    general_property,
    information_right,
    information_usage_right,
    language,
    local_time,
    measure_with_unit,
    named_unit,
    organization,
    person,
    product_definition_context,
    representation_context,
    requirement_source,
    security_classification,
    time_interval,
    usage_association);
END_TYPE;

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

TYPE security_classification_item = SELECT
   (action,
    action_directive,
    action_method,
    action_method_relationship,
    action_property,
    action_property_representation,
    applied_action_assignment,
    applied_action_method_assignment,
    applied_classification_assignment,
    applied_description_text_assignment,
    applied_description_text_assignment_relationship,
    applied_document_reference,
    applied_document_usage_constraint_assignment,
    applied_external_identification_assignment,
    applied_identification_assignment,
    assembly_component_usage,
    assembly_component_usage_substitute,
    class_system,
    conditional_effectivity,
    configuration_design,
    configuration_effectivity,
    configured_effectivity_assignment,
    document,
    document_file,
    draughting_model,
    drawing_revision,
    envelope,
    evaluated_characteristic_of_product_as_individual_test_result,
    evidence,
    exclusive_product_concept_feature_category,
    executed_action,
    externally_defined_class,
    externally_defined_general_property,
    general_property,
    group,
    identification_assignment_relationship,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_design,
    interface_connector_occurrence,
    interface_definition_connection,
    interface_definition_for,
    make_from_usage_option,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    organizational_project,
    package_product_concept_feature,
    presentation_area,
    process_plan,
    product,
    product_class,
    product_concept,
    product_concept_feature,
    product_concept_feature_category,
    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_identification,
    product_process_plan,
    product_relationship,
    property_definition,
    property_definition_representation,
    representation,
    requirement_assignment,
    requirement_source,
    requirement_view_definition_relationship,
    resource_property,
    shape_representation,
    structured_message,
    validation,
    verification,
    versioned_action_request);
END_TYPE;

TYPE set_inner_area_boundary = SET[1:?] OF bounded_primitive_2d;
END_TYPE;

TYPE set_item_defined_transformation = SET[1:?] OF item_defined_transformation;
END_TYPE;

TYPE set_of_reversible_topology_item = SET[0:?] OF reversible_topology_item;
END_TYPE;

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

TYPE shading_curve_method = ENUMERATION OF
   (constant_colour,
    linear_colour);
END_TYPE;

TYPE shading_surface_method = ENUMERATION OF
   (constant_shading,
    colour_shading,
    dot_shading,
    normal_shading);
END_TYPE;

TYPE shape_aspect_or_characterized_object = SELECT
   (characterized_object,
    shape_aspect);
END_TYPE;

TYPE shape_data_quality_assessment_specification_select = SELECT
   (shape_data_quality_assessment_by_logical_test,
    shape_data_quality_assessment_by_numerical_test);
END_TYPE;

TYPE shape_data_quality_value_limit_type_select = SELECT
   (shape_data_quality_value_limit,
    shape_data_quality_value_range);
END_TYPE;

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

TYPE shape_dimension_representation_item = SELECT
   (compound_representation_item,
    descriptive_representation_item,
    measure_representation_item,
    placement);
END_TYPE;

TYPE shape_model = SELECT
   (constructive_geometry_representation,
    shape_representation);
END_TYPE;

TYPE shape_representation_item = SELECT
   (geometric_representation_item,
    topological_representation_item);
END_TYPE;

TYPE shape_representation_with_parameters_items = SELECT
   (descriptive_representation_item,
    direction,
    measure_representation_item,
    placement);
END_TYPE;

TYPE shell = SELECT
   (closed_shell,
    open_shell,
    vertex_shell,
    wire_shell);
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 simple_datum_reference_modifier = ENUMERATION OF
   (free_state,
    basic,
    translation,
    least_material_requirement,
    maximum_material_requirement,
    point,
    line,
    plane,
    orientation,
    any_cross_section,
    any_longitudinal_section,
    contacting_feature,
    distance_variable,
    degree_of_freedom_constraint_x,
    degree_of_freedom_constraint_y,
    degree_of_freedom_constraint_z,
    degree_of_freedom_constraint_u,
    degree_of_freedom_constraint_v,
    degree_of_freedom_constraint_w,
    minor_diameter,
    major_diameter,
    pitch_diameter);
END_TYPE;

TYPE size_select = SELECT
   (descriptive_measure,
    measure_with_unit,
    positive_length_measure);
END_TYPE;

TYPE sketch_basis_select = SELECT
   (curve_bounded_surface,
    face_surface,
    planar_curve_select);
END_TYPE;

TYPE sketch_element_select = SELECT
   (curve,
    point);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
END_TYPE;

TYPE sketch_type_select = SELECT
   (neutral_sketch_representation,
    positioned_sketch,
    subsketch);
END_TYPE;

TYPE solid_angle_measure = REAL;
END_TYPE;

TYPE source = ENUMERATION OF
   (made,
    bought,
    not_known);
END_TYPE;

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

TYPE space_constraint_type = ENUMERATION OF
   (sc_equal,
    sc_subspace,
    sc_member);
END_TYPE;

TYPE spatial_rotation = SELECT
   (rotation_about_direction,
    ypr_rotation);
END_TYPE;

TYPE specified_item = SELECT
   (drawing_revision);
END_TYPE;

TYPE spherical_pair_select = SELECT
   (spherical_pair,
    spherical_pair_with_pin);
END_TYPE;

TYPE spline_knot_values = LIST[2:?] OF REAL;
WHERE
  WR1: increasing_values_in_list(SELF);
END_TYPE;

TYPE start_request_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE state_observed_of_item = SELECT
   (alternate_product_relationship,
    applied_action_method_assignment,
    applied_external_identification_assignment,
    approval,
    assembly_component_usage,
    assembly_component_usage_substitute,
    attachment_slot_design_to_planned,
    attachment_slot_design_to_realized,
    attachment_slot_on_product,
    attachment_slot_planned_to_realized,
    breakdown_element_group_assignment,
    breakdown_element_usage,
    certification,
    configuration_item,
    contract,
    document_file,
    evidence,
    final_solution,
    group,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_definition,
    interface_connector_design,
    interface_connector_occurrence,
    interface_connector_version,
    interface_definition_connection,
    interface_specification_definition,
    interface_specification_version,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_category,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    product_in_attachment_slot,
    security_classification,
    structured_message,
    validation,
    verification);
END_TYPE;

TYPE state_type_of_item = SELECT
   (action_method,
    alternate_product_relationship,
    applied_action_method_assignment,
    applied_external_identification_assignment,
    approval,
    assembly_component_usage,
    assembly_component_usage_substitute,
    attachment_slot_design_to_planned,
    attachment_slot_design_to_realized,
    attachment_slot_on_product,
    attachment_slot_planned_to_realized,
    breakdown_element_group_assignment,
    breakdown_element_usage,
    certification,
    configuration_item,
    contract,
    document_file,
    evidence,
    final_solution,
    interface_connection,
    interface_connector_as_planned,
    interface_connector_as_realized,
    interface_connector_definition,
    interface_connector_design,
    interface_connector_occurrence,
    interface_connector_version,
    interface_definition_connection,
    interface_specification_definition,
    interface_specification_version,
    organization,
    organizational_project,
    person_and_organization,
    product,
    product_category,
    product_concept,
    product_definition,
    product_definition_formation,
    product_definition_group_assignment,
    product_definition_relationship,
    product_group,
    product_in_attachment_slot,
    security_classification,
    validation,
    verification);
END_TYPE;

TYPE statistical_value_type = ENUMERATION OF
   (number_of_inspected_instances,
    number_of_quality_defects_detected);
END_TYPE;

TYPE string_representation_item_select = SELECT
   (descriptive_representation_item,
    included_text_block,
    structured_text_composition);
END_TYPE;

TYPE style_context_select = SELECT
   (context_dependent_shape_representation,
    group,
    presentation_layer_assignment,
    presentation_set,
    representation,
    representation_item,
    representation_relationship);
END_TYPE;

TYPE styled_item_target = SELECT
   (geometric_representation_item,
    mapped_item,
    representation_or_representation_reference,
    set_representation_item,
    topological_representation_item);
END_TYPE;

TYPE summary_report_style_type = ENUMERATION OF
   (conclusion,
    number_of_defects,
    number_of_inspections);
END_TYPE;

TYPE summary_report_type = ENUMERATION OF
   (unspecified,
    conclusion_only,
    number_of_quality_defects,
    number_of_inspections_and_conclusion,
    full_statistics);
END_TYPE;

TYPE summary_stats_value_type = ENUMERATION OF
   (average_value,
    max_value,
    min_value);
END_TYPE;

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

TYPE surface_boundary = SELECT
   (boundary_curve,
    degenerate_pcurve);
END_TYPE;

TYPE surface_boundary_type = ENUMERATION OF
   (u_parameter_min,
    v_parameter_min,
    u_parameter_max,
    v_parameter_max);
END_TYPE;

TYPE surface_model = SELECT
   (face_based_surface_model,
    shell_based_surface_model);
END_TYPE;

TYPE surface_or_face_surface_shape_aspect = SELECT
   (face_surface_shape_aspect,
    surface_shape_aspect);
END_TYPE;

TYPE surface_or_solid_model = SELECT
   (solid_model,
    surface_model);
END_TYPE;

TYPE surface_side = ENUMERATION OF
   (positive,
    negative,
    both);
END_TYPE;

TYPE surface_side_style_select = SELECT
   (pre_defined_surface_side_style,
    surface_side_style);
END_TYPE;

TYPE surface_style_element_select = SELECT
   (surface_style_boundary,
    surface_style_control_grid,
    surface_style_fill_area,
    surface_style_parameter_line,
    surface_style_rendering,
    surface_style_segmentation_curve,
    surface_style_silhouette);
END_TYPE;

TYPE swept_surface_or_solid = SELECT
   (swept_area_solid,
    swept_face_solid,
    swept_surface);
END_TYPE;

TYPE symbol_style_select = SELECT
   (symbol_colour);
END_TYPE;

TYPE symmetry_type = ENUMERATION OF
   (identity,
    skew,
    hermitian,
    skew_hermitian);
END_TYPE;

TYPE tangent_contact_type = ENUMERATION OF
   (point_contact,
    curve_contact,
    surface_contact);
END_TYPE;

TYPE target_annotated_3d_model_select = SELECT
   (shape_representation_relationship);
END_TYPE;

TYPE terminator = SELECT
   (externally_defined_terminator_symbol,
    pre_defined_terminator_symbol,
    user_defined_terminator_symbol);
END_TYPE;

TYPE tessellated_constructive_element_select = SELECT
   (placement,
    tessellated_curve_set,
    tessellated_edge,
    tessellated_face,
    tessellated_surface_set,
    tessellated_vertex);
END_TYPE;

TYPE tessellated_constructive_geometry_representation_or_shape_representation = SELECT
   (shape_representation,
    tessellated_constructive_geometry_representation);
END_TYPE;

TYPE tessellated_edge_or_vertex = SELECT
   (tessellated_edge,
    tessellated_vertex);
END_TYPE;

TYPE tessellated_face_or_tessellated_surface_set = SELECT
   (tessellated_face,
    tessellated_surface_set);
END_TYPE;

TYPE tessellated_facet_long_short_edge_ratio = ratio_measure;
END_TYPE;

TYPE tessellated_manifold_subsurface_shape_representation_select = SELECT
   (axis2_placement_3d,
    connected_face_sub_set,
    mapped_item);
END_TYPE;

TYPE tessellated_surface_item = SELECT
   (tessellated_face,
    tessellated_shell,
    tessellated_solid,
    tessellated_surface_set);
END_TYPE;

TYPE tessellation_accuracy_parameter_item = SELECT
   (angular_deviation,
    chordal_deviation,
    length_to_height_ratio,
    maximum_edge_length,
    tessellated_facet_long_short_edge_ratio);
END_TYPE;

TYPE text = STRING;
END_TYPE;

TYPE text_alignment = label;
END_TYPE;

TYPE text_delineation = label;
END_TYPE;

TYPE text_or_character = SELECT
   (annotation_text,
    annotation_text_character,
    composite_text,
    defined_character_glyph,
    text_literal);
END_TYPE;

TYPE text_path = ENUMERATION OF
   (left,
    right,
    up,
    down);
END_TYPE;

TYPE text_string_representation_item = SELECT
   (annotation_text,
    annotation_text_character,
    axis2_placement,
    composite_text,
    defined_character_glyph,
    text_literal);
END_TYPE;

TYPE texture_file_type = ENUMERATION OF
   (jpeg,
    png,
    gif,
    tiff,
    bmp,
    dds,
    tga,
    other);
END_TYPE;

TYPE thermodynamic_temperature_measure = REAL;
END_TYPE;

TYPE time_interval_item = SELECT
   (action,
    action_directive,
    action_directive_relationship,
    action_method,
    action_property,
    action_relationship,
    action_request_solution,
    alternate_product_relationship,
    analysis_assignment,
    applied_action_assignment,
    applied_classification_assignment,
    applied_person_and_organization_assignment,
    approval_status,
    assembly_component_usage_substitute,
    certification,
    class,
    class_system,
    configuration_design,
    configuration_effectivity,
    configuration_item,
    configuration_item_relationship,
    configured_effectivity_assignment,
    contract,
    document_file,
    document_relationship,
    draughting_model,
    drawing_revision,
    effectivity_relationship,
    evidence,
    executed_action,
    externally_defined_class,
    general_property,
    material_designation,
    mechanical_design_geometric_presentation_representation,
    observation_consequence,
    organization_relationship,
    organizational_project,
    person_and_organization,
    presentation_area,
    product,
    product_concept,
    product_concept_feature,
    product_concept_feature_association,
    product_concept_feature_category,
    product_concept_feature_category_usage,
    product_concept_relationship,
    product_definition,
    product_definition_formation,
    product_definition_formation_relationship,
    product_definition_relationship,
    product_definition_substitute,
    product_planned_to_realized,
    property_definition,
    requirement_for_action_resource,
    resource_property,
    security_classification,
    security_classification_level,
    shape_representation,
    time_interval_based_effectivity,
    validation,
    verification,
    verification_relationship,
    versioned_action_request,
    versioned_action_request_relationship);
END_TYPE;

TYPE time_measure = REAL;
END_TYPE;

TYPE tolerance_method_definition = SELECT
   (limits_and_fits,
    tolerance_value);
END_TYPE;

TYPE tolerance_value_or_limits_and_fits = SELECT
   (limits_and_fits,
    tolerance_value);
END_TYPE;

TYPE tolerance_zone_target = SELECT
   (dimensional_location,
    dimensional_size,
    general_datum_reference,
    geometric_tolerance);
END_TYPE;

TYPE topology_association_item_select = SELECT
   (edge,
    path,
    vertex);
END_TYPE;

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

TYPE transition_code = ENUMERATION OF
   (discontinuous,
    continuous,
    cont_same_gradient,
    cont_same_gradient_same_curvature);
END_TYPE;

TYPE trim_condition_select = SELECT
   (generalized_surface_select,
    length_measure,
    plane_angle_measure,
    solid_model);
END_TYPE;

TYPE trim_intent = ENUMERATION OF
   (blind,
    offset,
    through_all,
    unspecified,
    up_to_next);
END_TYPE;

TYPE trimming_preference = ENUMERATION OF
   (cartesian,
    parameter,
    unspecified);
END_TYPE;

TYPE trimming_select = SELECT
   (cartesian_point,
    parameter_value);
END_TYPE;

TYPE tsdq_inspected_element_type_name = a3m_data_quality_inspected_element_type_name;
WHERE
  WR1: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_datum;
  WR2: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_datum_pair;
  WR3: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_datum_system;
  WR4: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_datum_target;
  WR5: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_dimensional_location;
  WR6: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_dimensional_size;
  WR7: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_geometric_tolerance;
  WR8: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_others;
  WR9: SELF <> a3m_data_quality_inspected_element_type_name.pmidqi_shape_aspect;
END_TYPE;

TYPE tsdq_measured_data_type_name = a3m_data_quality_measured_data_type_name;
WHERE
  WR1: SELF <> a3m_data_quality_measured_data_type_name.pmidqm_boolean_value;
  WR2: SELF <> a3m_data_quality_measured_data_type_name.pmidqm_others;
  WR3: SELF <> a3m_data_quality_measured_data_type_name.pmidqm_positive_length_measure;
  WR4: SELF <> a3m_data_quality_measured_data_type_name.pmidqm_positive_plane_angle_measure;
END_TYPE;

TYPE tsdq_type_name_for_location_of_extreme_value = a3m_data_quality_type_name_for_location_of_extreme_value;
END_TYPE;

TYPE tuple_space = SELECT
   (extended_tuple_space,
    product_space);
END_TYPE;

TYPE u_direction_count = INTEGER;
WHERE
  WR1: SELF > 1;
END_TYPE;

TYPE u_or_v_parameter = ENUMERATION OF
   (u_parameter,
    v_parameter);
END_TYPE;

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

TYPE unsigned_8_bit_integer = INTEGER;
WHERE
  WR1: {0 <= SELF <= 255};
END_TYPE;

TYPE used_equivalence_representation_select = SELECT
   (data_equivalence_criteria_representation,
    data_equivalence_inspection_result_representation);
END_TYPE;

TYPE used_quality_representation_select = SELECT
   (data_quality_criteria_representation,
    data_quality_inspection_result_representation);
END_TYPE;

TYPE uuid = STRING (36) FIXED;
END_TYPE;

TYPE uuid_attribute_select = SELECT
   (id_attribute_select,
    identification_item);
END_TYPE;

TYPE uuid_list_item = LIST[1:?] OF UNIQUE LIST[1:?] OF UNIQUE uuid_attribute_select;
END_TYPE;

TYPE uuid_relationship_role = ENUMERATION OF
   (supersedes,
    merge,
    split,
    derive_from,
    same_as,
    similar_to);
END_TYPE;

TYPE uuid_set_item = SET[1:?] OF uuid_attribute_select;
END_TYPE;

TYPE uuid_set_or_list_attribute_select = SELECT
   (uuid_list_item,
    uuid_set_item);
END_TYPE;

TYPE v_direction_count = INTEGER;
WHERE
  WR1: SELF > 1;
END_TYPE;

TYPE validation_criteria_or_results_select = SELECT
   (data_equivalence_definition_representation_relationship);
END_TYPE;

TYPE value_format_type = identifier;
WHERE
  WR1: LENGTH(SELF) <= 80;
END_TYPE;

TYPE value_qualifier = SELECT
   (maths_value_precision_qualifier,
    precision_qualifier,
    type_qualifier,
    uncertainty_qualifier,
    value_format_type_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 week_in_year_number = INTEGER;
WHERE
  WR1: {1 <= SELF <= 53};
END_TYPE;

TYPE work_item = SELECT
   (product_definition_formation);
END_TYPE;

TYPE year_number = INTEGER;
WHERE
  WR1: (SELF > 1581);
END_TYPE;

TYPE ypr_enumeration = ENUMERATION OF
   (yaw,
    pitch,
    roll);
END_TYPE;

TYPE ypr_rotation = ARRAY[ypr_index(yaw):ypr_index(roll)] OF plane_angle_measure;
END_TYPE;

TYPE zero_or_one = nonnegative_integer;
WHERE
  IN_RANGE: (SELF = 0) OR (SELF = 1);
END_TYPE;

ENTITY a3m_data_quality_criteria_representation
  SUBTYPE OF (data_quality_criteria_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY a3m_data_quality_criterion
  ABSTRACT SUPERTYPE
  SUBTYPE OF (data_quality_criterion, data_quality_measurement_requirement);
  assessment_specification : shape_data_quality_assessment_specification_select;
  measured_data_type : a3m_data_quality_measured_data_type_name;
  inspected_elements_types : LIST[1:?] OF a3m_data_quality_inspected_element_type_name;
  accuracy_types : LIST[0:?] OF a3m_data_quality_accuracy_type_name;
  location_of_extreme_value_types : LIST[0:?] OF a3m_data_quality_type_name_for_location_of_extreme_value;
END_ENTITY;

ENTITY a3m_data_quality_criterion_specific_applied_value
  ABSTRACT SUPERTYPE
  SUBTYPE OF (representation_item);
  criterion_to_assign_the_value : a3m_data_quality_criterion;
  applied_value : measure_value;
END_ENTITY;

ENTITY a3m_data_quality_inspected_model_and_the_result;
  inspected_model : a3m_data_quality_inspected_model_select;
  inspection_result : a3m_data_quality_inspection_result_representation;
END_ENTITY;

ENTITY a3m_data_quality_inspection_criterion_report_item
  SUBTYPE OF (data_quality_inspection_criterion_report_item);
  representative_measured_value : a3m_data_quality_measured_value_select;
  value_type_to_report : summary_stats_value_type;
END_ENTITY;

ENTITY a3m_data_quality_inspection_instance_report_item
  SUBTYPE OF (data_quality_inspection_instance_report_item);
  representative_measured_value : a3m_data_quality_measured_value_select;
  value_type_to_report : summary_stats_value_type;
END_ENTITY;

ENTITY a3m_data_quality_inspection_result
  ABSTRACT SUPERTYPE
  SUBTYPE OF (data_quality_inspection_result_with_judgement);
  SELF\data_quality_inspection_result.criterion_inspected : a3m_data_quality_criterion;
END_ENTITY;

ENTITY a3m_data_quality_inspection_result_representation
  SUBTYPE OF (data_quality_inspection_result_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q))) > 0;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTED_MODEL_AND_THE_RESULT.INSPECTION_RESULT')) > 0;
END_ENTITY;

ENTITY a3m_data_quality_target_accuracy_association;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  accuracy_specification : shape_measurement_accuracy;
  target_to_associate : a3m_accuracy_associated_target_select;
END_ENTITY;

ENTITY a3m_detailed_report_request
  SUBTYPE OF (detailed_report_request_with_number_of_data);
  value_type_requested : summary_stats_value_type;
END_ENTITY;

ENTITY a3m_equivalence_accuracy_association;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  specific_accuracy : shape_measurement_accuracy;
  equivalence_target : accuracy_associated_target_select;
END_ENTITY;

ENTITY a3m_equivalence_assessment_by_logical_test
  SUBTYPE OF (data_equivalence_assessment_specification);
END_ENTITY;

ENTITY a3m_equivalence_assessment_by_numerical_test
  SUBTYPE OF (data_equivalence_assessment_specification);
  threshold : shape_data_quality_value_limit_type_select;
END_ENTITY;

ENTITY a3m_equivalence_criteria_representation
  SUBTYPE OF (data_equivalence_criteria_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY a3m_equivalence_criterion
  ABSTRACT SUPERTYPE OF (a3m_equivalence_criterion_with_specified_elements)
  SUBTYPE OF (data_equivalence_criterion, data_equivalence_inspection_requirement);
  assessment_specification : a3m_equivalence_assessment_specification_select;
  comparing_element_types : LIST[1:?] OF a3m_element_type_name;
  compared_element_types : LIST[1:?] OF a3m_element_type_name;
  measured_data_type : a3m_measured_data_type_name;
  detected_difference_types : LIST[0:?] OF a3m_detected_difference_type_name;
  accuracy_types : LIST[0:?] OF a3m_accuracy_type_name;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) = 0;
  WR2: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_INSPECTION_ASSOCIATION' IN TYPEOF(i1))) = 0;
  WR3: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_INSPECTION_ASSOCIATION' IN TYPEOF(i1))) = 0;
END_ENTITY;

ENTITY a3m_equivalence_criterion_for_assembly
  ABSTRACT SUPERTYPE OF (ONEOF (a3m_equivalence_criterion_of_assembly_data_structure,
                                a3m_equivalence_criterion_of_detailed_assembly_data_content,
                                a3m_equivalence_criterion_of_component_property_difference,
                                a3m_equivalence_criterion_of_representative_assembly_property_value))
  SUBTYPE OF (a3m_equivalence_criterion);
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:?] OF a3ma_element_type_name;
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:?] OF a3ma_element_type_name;
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:?] OF a3ma_detected_difference_type_name;
DERIVE
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ma_accuracy_type_name := [];
WHERE
  WR1: a3ma_validate_accuracy_types(SELF, SELF);
END_ENTITY;

ENTITY a3m_equivalence_criterion_for_shape
  ABSTRACT SUPERTYPE OF (ONEOF (a3m_equivalence_criterion_of_detailed_shape_data_content,
                                a3m_equivalence_criterion_of_representative_shape_property_value,
                                a3m_equivalence_criterion_of_shape_data_structure))
  SUBTYPE OF (a3m_equivalence_criterion);
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:?] OF a3ms_element_type_name;
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:?] OF a3ms_element_type_name;
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:?] OF a3ms_detected_difference_type_name;
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:?] OF a3ms_accuracy_type_name;
WHERE
  WR1: a3ms_validate_accuracy_types(SELF, SELF);
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_assembly_data_structure
  ABSTRACT SUPERTYPE OF (ONEOF (different_component_identification_via_multi_level_reference,
                                mismatch_of_component,
                                missing_assembly_constraint,
                                missing_component))
  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_component_property_difference
  ABSTRACT SUPERTYPE OF (different_component_shape)
  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_detailed_assembly_data_content
  ABSTRACT SUPERTYPE OF (ONEOF (different_angle_of_assembly_constraint,
                                different_assembly_constraint_type,
                                different_component_type,
                                different_length_of_assembly_constraint,
                                different_placement_of_component))
  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_detailed_shape_data_content
  ABSTRACT SUPERTYPE OF (ONEOF (different_surface_normal,
                                mismatch_of_arcwise_connected_curves,
                                mismatch_of_arcwise_connected_surfaces,
                                mismatch_of_arcwise_connected_surfaces_boundary,
                                mismatch_of_points,
                                mismatch_of_point_cloud_and_related_geometry,
                                mismatch_of_underlying_edge_geometry,
                                mismatch_of_underlying_face_geometry))
  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_representative_assembly_property_value
  ABSTRACT SUPERTYPE OF (ONEOF (different_assembly_centroid,
                                different_assembly_centroid_using_notional_solid,
                                different_assembly_volume,
                                different_number_of_components))
  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_representative_shape_property_value
  ABSTRACT SUPERTYPE OF (ONEOF (different_bounding_box,
                                different_centroid,
                                different_curve_length,
                                different_number_of_closed_shell,
                                different_number_of_geometric_elements,
                                different_number_of_geometric_elements_wireframe_model,
                                different_number_of_topological_elements,
                                different_number_of_topological_elements_wireframe_model,
                                different_surface_area,
                                different_volume))
  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:?] OF a3m_element_type_name := SELF\a3m_equivalence_criterion.compared_element_types;
END_ENTITY;

ENTITY a3m_equivalence_criterion_of_shape_data_structure
  ABSTRACT SUPERTYPE OF (ONEOF (mismatch_of_edges,
                                mismatch_of_faces,
                                missing_edge,
                                missing_face))
  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:?] OF a3m_element_type_name := SELF\a3m_equivalence_criterion.compared_element_types;
END_ENTITY;

ENTITY a3m_equivalence_criterion_report_item_with_measured_value
  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
  representative_measured_value : equivalence_measured_value_select;
  value_type : representative_value_type;
UNIQUE
  UR1: SELF\data_equivalence_inspection_criterion_report_item.criterion_report, value_type;
END_ENTITY;

ENTITY a3m_equivalence_criterion_with_specified_elements
  SUBTYPE OF (a3m_equivalence_criterion);
  comparing_specified_elements : SET[1:?] OF inspected_equivalence_element_select;
  compared_specified_elements : SET[1:?] OF inspected_equivalence_element_select;
END_ENTITY;

ENTITY a3m_equivalence_inspection_instance_report_item
  SUBTYPE OF (data_equivalence_inspection_instance_report_item);
  measured_value_for_inspected_element : equivalence_measured_value_select;
END_ENTITY;

ENTITY a3m_equivalence_inspection_requirement_with_values
  ABSTRACT SUPERTYPE
  SUBTYPE OF (data_equivalence_inspection_requirement);
  applied_values : SET[1:?] OF measure_representation_item;
END_ENTITY;

ENTITY a3m_equivalence_inspection_result_representation
  SUBTYPE OF (data_equivalence_inspection_result_representation);
END_ENTITY;

ENTITY a3m_equivalence_inspection_result_representation_for_assembly
  SUBTYPE OF (a3m_equivalence_inspection_result_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MS_EQUIVALENCE_INSPECTION_RESULT' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY a3m_equivalence_inspection_result_representation_for_shape
  SUBTYPE OF (a3m_equivalence_inspection_result_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MA_EQUIVALENCE_INSPECTION_RESULT' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY a3m_equivalence_summary_report_request_with_representative_value
  SUBTYPE OF (data_equivalence_report_request);
  report_request_type : representative_value_type;
END_ENTITY;

ENTITY a3m_erroneous_pmi_data
  ABSTRACT SUPERTYPE OF (ONEOF (erroneous_pmi_representation,
                                erroneous_relation_of_pmi_and_feature))
  SUBTYPE OF (a3m_pmi_data_quality_criterion);
END_ENTITY;

ENTITY a3m_erroneous_triangulated_shape_data
  ABSTRACT SUPERTYPE OF (ONEOF (inconsistent_normals_of_adjacent_faces,
                                inconsistent_normals_of_adjacent_triangles,
                                non_manifold_at_triangle_edge,
                                non_manifold_at_triangle_vertex,
                                triangle_edge_in_free_edge_loop))
  SUBTYPE OF (a3m_triangulated_shape_data_quality_criterion);
END_ENTITY;

ENTITY a3m_extreme_instance
  SUBTYPE OF (representation_item);
  locations_of_extreme_value : SET[1:?] OF a3m_location_of_extreme_value_select;
  measured_value : a3m_data_quality_measured_value_select;
END_ENTITY;

ENTITY a3m_inapt_pmi_data
  ABSTRACT SUPERTYPE OF (ONEOF (inapt_pmi_representation,
                                inapt_relation_of_pmi_and_feature))
  SUBTYPE OF (a3m_pmi_data_quality_criterion);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY a3m_inapt_triangulated_shape_data
  ABSTRACT SUPERTYPE OF (ONEOF (abrupt_normal_change_of_adjacent_triangles,
                                abrupt_normal_change_of_adjacent_faces,
                                gap_in_triangulated_face,
                                gap_in_triangulated_shell_or_solid,
                                inconsistent_triangle_normal_and_normal_at_vertex,
                                inner_void_in_triangulated_solid,
                                large_aspect_ratio_triangle,
                                large_number_of_triangles,
                                nearly_overlapping_triangles,
                                non_homogeneous_triangle_size,
                                self_intersecting_triangulated_face,
                                self_intersecting_triangulated_shell_or_solid,
                                sharp_triangle_vertex,
                                short_height_triangle,
                                short_triangle_edge,
                                small_triangulated_shell,
                                thin_slit_in_triangulated_shell_or_solid,
                                thin_thickness_of_triangulated_shell_or_solid))
  SUBTYPE OF (a3m_triangulated_shape_data_quality_criterion);
END_ENTITY;

ENTITY a3m_inspected_model_and_inspection_result_relationship;
  inspected_model : target_annotated_3d_model_select;
  equivalence_result : a3m_equivalence_inspection_result_representation;
END_ENTITY;

ENTITY a3m_instance_report_item_with_extreme_instances
  SUBTYPE OF (a3m_data_quality_inspection_instance_report_item);
  extreme_instances : LIST[1:?] OF a3m_extreme_instance;
END_ENTITY;

ENTITY a3m_pmi_data_quality_criterion
  ABSTRACT SUPERTYPE OF (ONEOF (a3m_erroneous_pmi_data,
                                a3m_inapt_pmi_data))
  SUBTYPE OF (a3m_data_quality_criterion);
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:?] OF pmidq_inspected_element_type_name;
DERIVE
  SELF\a3m_data_quality_criterion.accuracy_types : LIST[0:0] OF a3m_data_quality_accuracy_type_name := [];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF a3m_data_quality_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: SIZEOF(bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_TARGET_ACCURACY_ASSOCIATION.TARGET_TO_ASSOCIATE'))) = 0;
END_ENTITY;

ENTITY a3m_pmi_data_quality_inspection_result
  SUBTYPE OF (a3m_data_quality_inspection_result);
  SELF\a3m_data_quality_inspection_result.criterion_inspected : a3m_pmi_data_quality_criterion;
WHERE
  WR1: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (pmidq_validate_element_types(re, SELF\a3m_data_quality_inspection_result.criterion_inspected)))) = 0;
  WR2: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (pmidq_validate_measured_type(re, SELF\a3m_data_quality_inspection_result.criterion_inspected)))) = 0;
  WR3: SIZEOF(bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_TARGET_ACCURACY_ASSOCIATION.TARGET_TO_ASSOCIATE'))) = 0;
  WR4: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(re)) AND (SIZEOF(QUERY(ii <* re.inspected_instances | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN TYPEOF(ii))) <> 0))) = 0;
END_ENTITY;

ENTITY a3m_summary_report_request_with_representative_value
  SUBTYPE OF (summary_report_request);
  value_type_requested : summary_stats_value_type;
END_ENTITY;

ENTITY a3m_triangulated_shape_data_quality_criterion
  ABSTRACT SUPERTYPE OF (ONEOF (a3m_erroneous_triangulated_shape_data,
                                a3m_inapt_triangulated_shape_data))
  SUBTYPE OF (a3m_data_quality_criterion);
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:?] OF tsdq_inspected_element_type_name;
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:?] OF tsdq_type_name_for_location_of_extreme_value;
DERIVE
  SELF\a3m_data_quality_criterion.accuracy_types : LIST[0:0] OF a3m_data_quality_accuracy_type_name := [];
WHERE
  WR1: SIZEOF(bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_TARGET_ACCURACY_ASSOCIATION.TARGET_TO_ASSOCIATE'))) = 0;
END_ENTITY;

ENTITY a3m_triangulated_shape_data_quality_inspection_result
  SUBTYPE OF (a3m_data_quality_inspection_result);
  SELF\a3m_data_quality_inspection_result.criterion_inspected : a3m_triangulated_shape_data_quality_criterion;
WHERE
  WR1: SIZEOF(bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_TARGET_ACCURACY_ASSOCIATION.TARGET_TO_ASSOCIATE'))) = 0;
  WR2: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (tsdq_validate_element_types(re, SELF.criterion_inspected)))) = 0;
  WR3: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (tsdq_validate_location_of_extreme_value_types(re, SELF.criterion_inspected)))) = 0;
  WR4: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (tsdq_validate_measured_type(re, SELF.criterion_inspected)))) = 0;
END_ENTITY;

ENTITY a3ma_assembly_and_shape_criteria_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : different_component_shape;
  SELF\representation_item_relationship.related_representation_item : a3m_equivalence_criterion_for_shape;
END_ENTITY;

ENTITY a3ma_equivalence_criterion_assessment_threshold_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : different_placement_of_component;
  SELF\representation_item_relationship.related_representation_item : shape_data_quality_lower_value_limit;
END_ENTITY;

ENTITY a3ma_equivalence_inspection_result
  SUBTYPE OF (data_equivalence_inspection_result);
  SELF\data_equivalence_inspection_result.criterion_inspected : a3m_equivalence_criterion_for_assembly;
WHERE
  WR1: a3ma_validate_accuracy_types(SELF, SELF\data_equivalence_inspection_result.criterion_inspected);
  WR2: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ma_validate_element_types(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
  WR3: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ma_validate_detected_difference_types(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
  WR4: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ma_validate_measured_type(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
END_ENTITY;

ENTITY a3ma_length_measure_and_context_dependent_measure_pair
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIST_REPRESENTATION_ITEM' IN TYPEOF(SELF\compound_representation_item.item_element);
  WR2: SIZEOF(SELF\compound_representation_item.item_element) = 2;
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(SELF\compound_representation_item.item_element[1])) AND (SIZEOF(QUERY(vri <* [SELF\compound_representation_item.item_element[1]] | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(vri.value_component))) = 1);
  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(SELF\compound_representation_item.item_element[2])) AND (SIZEOF(QUERY(vri <* [SELF\compound_representation_item.item_element[2]] | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN TYPEOF(vri.value_component))) = 1);
END_ENTITY;

ENTITY a3ms_equivalence_criterion_with_specified_elements
  SUBTYPE OF (a3m_equivalence_criterion_for_shape, a3m_equivalence_criterion_with_specified_elements);
  SELF\a3m_equivalence_criterion_with_specified_elements.comparing_specified_elements : SET[1:?] OF a3ms_inspected_equivalence_element_select;
  SELF\a3m_equivalence_criterion_with_specified_elements.compared_specified_elements : SET[1:?] OF a3ms_inspected_equivalence_element_select;
WHERE
  WR1: (a3ms_get_element_type(SELF.comparing_specified_elements) = etns_external_representation_item) OR (a3ms_get_element_type(SELF.comparing_specified_elements) IN SELF\a3m_equivalence_criterion_for_shape.comparing_element_types);
  WR2: (a3ms_get_element_type(SELF.compared_specified_elements) = etns_external_representation_item) OR (a3ms_get_element_type(SELF.compared_specified_elements) IN SELF\a3m_equivalence_criterion_for_shape.compared_element_types);
END_ENTITY;

ENTITY a3ms_equivalence_inspection_result
  SUBTYPE OF (data_equivalence_inspection_result);
  SELF\data_equivalence_inspection_result.criterion_inspected : a3m_equivalence_criterion_for_shape;
WHERE
  WR1: a3ms_validate_accuracy_types(SELF, SELF\data_equivalence_inspection_result.criterion_inspected);
  WR2: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ms_validate_element_types(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
  WR3: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ms_validate_detected_difference_types(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
  WR4: SIZEOF(QUERY(re <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT')) | NOT (a3ms_validate_measured_type(re, SELF\data_equivalence_inspection_result.criterion_inspected)))) = 0;
END_ENTITY;

ENTITY abrupt_change_of_surface_normal
  SUBTYPE OF (geometry_with_local_irregularity);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  small_vector_tolerance : length_measure;
  test_point_distance_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY abrupt_normal_change_of_adjacent_faces
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_plane_angle_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_adjacent_triangulated_face_pair];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_triangle_edge];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_abrupt_normal_change_of_adjacent_faces FOR criterion_to_assign_the_value;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY abrupt_normal_change_of_adjacent_triangles
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_plane_angle_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_adjacent_triangle_pair];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY abs_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY absorbed_dose_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.gray);
END_ENTITY;

ENTITY abstract_variable
  SUBTYPE OF (property_definition, property_definition_representation, representation, representation_item);
END_ENTITY;

ENTITY abstracted_expression_function
  SUBTYPE OF (maths_function, quantifier_expression);
DERIVE
  SELF\quantifier_expression.variables : LIST[1:?] OF UNIQUE generic_variable := remove_first(SELF\multiple_arity_generic_expression.operands);
  expr : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
WHERE
  WR1: SIZEOF(QUERY(operand <* SELF\multiple_arity_generic_expression.operands | NOT (has_values_space(operand)))) = 0;
END_ENTITY;

ENTITY acceleration_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0);
END_ENTITY;

ENTITY acos_function
  SUBTYPE OF (unary_function_call);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY action_actual
  SUBTYPE OF (executed_action);
END_ENTITY;

ENTITY action_assignment
  ABSTRACT SUPERTYPE OF ((ONEOF (applied_usage_right,
                                 applied_action_assignment)));
  assigned_action : action;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_directive_relationship;
  name : label;
  description : OPTIONAL STRING;
  relating : action_directive;
  related : action_directive;
  relation_type : STRING;
WHERE
  WR1: acyclic_action_directive_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE_RELATIONSHIP');
END_ENTITY;

ENTITY action_happening
  SUBTYPE OF (action_relationship);
END_ENTITY;

ENTITY action_method
  SUPERTYPE OF (ONEOF (task_element,
                       task_method,
                       task_method_version,
                       task_objective));
  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_relationship
  SUPERTYPE OF (ONEOF (task_element_relationship,
                       task_method_relationship,
                       task_method_version_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 actuated_kinematic_pair
  SUBTYPE OF (kinematic_pair);
  t_x : OPTIONAL actuated_direction;
  t_y : OPTIONAL actuated_direction;
  t_z : OPTIONAL actuated_direction;
  r_x : OPTIONAL actuated_direction;
  r_y : OPTIONAL actuated_direction;
  r_z : OPTIONAL actuated_direction;
END_ENTITY;

ENTITY add_element
  SUBTYPE OF (change_element);
END_ENTITY;

ENTITY additive_manufacturing_build_plate_relationship
  SUBTYPE OF (additive_manufacturing_setup_relationship);
END_ENTITY;

ENTITY additive_manufacturing_setup
  SUBTYPE OF (product);
END_ENTITY;

ENTITY additive_manufacturing_setup_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (additive_manufacturing_build_plate_relationship,
                                additive_manufacturing_support_structure_geometry_relationship,
                                additive_manufacturing_setup_workpiece_relationship))
  SUBTYPE OF (next_assembly_usage_occurrence);
END_ENTITY;

ENTITY additive_manufacturing_setup_workpiece_relationship
  SUBTYPE OF (additive_manufacturing_setup_relationship);
END_ENTITY;

ENTITY additive_manufacturing_support_structure_geometry_relationship
  SUBTYPE OF (additive_manufacturing_setup_relationship);
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 adjacent_triangle_pair
  SUBTYPE OF (triangulated_face_element);
  triangle_id2 : INTEGER;
WHERE
  WR1: (triangle_id2 > 0) AND (triangle_id2 <= SIZEOF(SELF\triangulated_face_element.base_face.triangles));
  WR2: triangle_id2 <> SELF\triangulated_face_element.triangle_id;
END_ENTITY;

ENTITY adjacent_triangulated_face_pair
  SUBTYPE OF (geometric_representation_item);
  face1 : triangulated_face;
  face2 : triangulated_face;
WHERE
  WR1: face1 <> face2;
END_ENTITY;

ENTITY advanced_brep_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF advanced_brep_shape_representation_items_select;
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1))) > 0;
  WR2: SIZEOF(QUERY(msb <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fcs)))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(msb <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(msb\manifold_solid_brep.outer)))) = 0;
  WR4: SIZEOF(QUERY(brv <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) = 0))) = 0;
  WR5: SIZEOF(QUERY(mi <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
END_ENTITY;

ENTITY advanced_face
  SUBTYPE OF (face_surface);
  SELF\face_surface.face_geometry : advanced_face_geometry_select;
WHERE
  WR1: SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe\oriented_edge.edge_element)))) = 0))) = 0;
  WR2: SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] * TYPEOF(oe.edge_element\edge_curve.edge_geometry)) = 1))) = 0))) = 0;
  WR3: SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe\edge.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(oe\edge.edge_start\vertex_point.vertex_geometry))) AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe\edge.edge_end)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(oe\edge.edge_end\vertex_point.vertex_geometry)))))) = 0))) = 0;
  WR4: SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(elp_fbnds.bound)))) = 0;
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(face_geometry)) OR (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] * TYPEOF(face_geometry\swept_surface.swept_curve)) = 1);
  WR6: SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex\vertex_point.vertex_geometry))))) = 0;
  WR7: SIZEOF(QUERY(bnd <* bounds | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] * TYPEOF(bnd.bound)) = 1))) = 0;
  WR8: SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry)) AND NOT (SIZEOF(QUERY(sc_ag <* oe.edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(sc_ag)))) = 0))) = 0))) = 0;
  WR9: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(face_geometry)) OR (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(face_geometry\swept_surface.swept_curve)) OR (SIZEOF(face_geometry\swept_surface.swept_curve\polyline.points) >= 3))) AND (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound))) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry)) AND NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >= 3))) = 0))) = 0);
END_ENTITY;

ENTITY advisory_task_step
  SUBTYPE OF (task_step);
END_ENTITY;

ENTITY agc_with_dimension
  SUBTYPE OF (angle_geometric_constraint);
  angle_value : plane_angle_measure;
END_ENTITY;

ENTITY aggregate_id_attribute;
  attribute_value : identifier;
  identified_item : SET[1:?] OF id_attribute_select;
END_ENTITY;

ENTITY all_around_shape_aspect
  SUBTYPE OF (continuous_shape_aspect);
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 alternative_solution_relationship
  SUBTYPE OF (product_definition_formation_relationship);
  relation_type : STRING;
WHERE
  WR1: acyclic_alternative_solution_relationship(SELF, [SELF\product_definition_formation_relationship.related_product_definition_formation], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ALTERNATIVE_SOLUTION_RELATIONSHIP');
END_ENTITY;

ENTITY amount_of_substance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 1.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
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 angle_assembly_constraint_with_dimension
  SUBTYPE OF (binary_assembly_constraint, agc_with_dimension);
END_ENTITY;

ENTITY angle_direction_reference
  SUBTYPE OF (representation_item_relationship, geometric_representation_item);
  SELF\representation_item_relationship.relating_representation_item : orientation_basis_select;
  SELF\representation_item_relationship.related_representation_item : angle_direction_reference_select;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MIN_AND_MAJOR_PLY_ORIENTATION_BASIS' IN TYPEOF(relating_representation_item)) OR NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(relating_representation_item));
END_ENTITY;

ENTITY angle_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF linear_geometry_constraint_element;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
END_ENTITY;

ENTITY angular_dimension
  SUBTYPE OF (dimension_curve_directed_callout);
END_ENTITY;

ENTITY angular_location
  SUBTYPE OF (dimensional_location);
  angle_selection : angle_relator;
END_ENTITY;

ENTITY angular_size
  SUBTYPE OF (dimensional_size);
  angle_selection : angle_relator;
END_ENTITY;

ENTITY angularity_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
END_ENTITY;

ENTITY annotation_curve_occurrence
  SUPERTYPE OF ((ONEOF (dimension_curve,
                        leader_curve,
                        projection_curve)))
  SUBTYPE OF (annotation_occurrence);
  SELF\styled_item.item : curve_or_curve_set;
END_ENTITY;

ENTITY annotation_fill_area
  SUBTYPE OF (geometric_representation_item);
  boundaries : SET[1:?] OF curve;
WHERE
  WR1: (SELF\geometric_representation_item.dim = 3) OR (SIZEOF(QUERY(curve <* boundaries | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN TYPEOF(curve)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE' IN TYPEOF(curve)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(curve)) AND (curve\b_spline_curve.closed_curve = TRUE)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(curve)) AND (curve\composite_curve.closed_curve = TRUE)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(curve)) AND (curve\polyline.points[LOINDEX(curve\polyline.points)] = curve\polyline.points[HIINDEX(curve\polyline.points)]))))) = 0);
END_ENTITY;

ENTITY annotation_fill_area_occurrence
  SUBTYPE OF (annotation_occurrence);
  fill_style_target : point;
  SELF\styled_item.item : annotation_fill_area;
END_ENTITY;

ENTITY annotation_occurrence
  SUPERTYPE OF (ONEOF (annotation_point_occurrence,
                       annotation_curve_occurrence,
                       annotation_fill_area_occurrence,
                       annotation_placeholder_occurrence,
                       annotation_plane,
                       annotation_text_occurrence,
                       annotation_symbol_occurrence,
                       tessellated_annotation_occurrence))
  SUBTYPE OF (styled_item);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
  WR2: SIZEOF(QUERY(reps <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_REPRESENTATION_SELECT' IN TYPEOF(reps)))) = 0;
END_ENTITY;

ENTITY annotation_occurrence_associativity
  SUBTYPE OF (annotation_occurrence_relationship);
WHERE
  WR1: SIZEOF(TYPEOF(SELF.related_annotation_occurrence) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE']) = 1;
END_ENTITY;

ENTITY annotation_occurrence_relationship;
  name : label;
  description : text;
  relating_annotation_occurrence : annotation_occurrence;
  related_annotation_occurrence : annotation_occurrence;
END_ENTITY;

ENTITY annotation_placeholder_leader_line
  ABSTRACT SUPERTYPE OF (ONEOF (annotation_to_annotation_leader_line,
                                annotation_to_model_leader_line,
                                auxiliary_leader_line))
  SUBTYPE OF (geometric_representation_item);
  geometric_elements : LIST[2:?] OF UNIQUE des_apll_point_select;
DERIVE
  model_end : des_apll_point_select := geometric_elements[HIINDEX(geometric_elements)];
INVERSE
  container : annotation_placeholder_occurrence_with_leader_line FOR leader_line;
UNIQUE
  UR1: geometric_elements;
END_ENTITY;

ENTITY annotation_placeholder_occurrence
  SUBTYPE OF (annotation_occurrence, geometric_representation_item);
  SELF\styled_item.item : geometric_set;
  role : annotation_placeholder_occurrence_role;
  line_spacing : positive_length_measure;
INVERSE
  the_callout : draughting_callout FOR contents;
  the_draughting_model_item_association_with_placeholders : SET[0:1] OF draughting_model_item_association_with_placeholder FOR annotation_placeholder;
WHERE
  WR1: md_valid_content_in_geometric_set_for_placeholder(item);
  WR2: NOT (role = annotation_placeholder_occurrence_role.gps_data) OR ((SIZEOF(the_draughting_model_item_association_with_placeholders) = 1) AND md_pmi_name_and_type_correlation(SELF));
END_ENTITY;

ENTITY annotation_placeholder_occurrence_with_leader_line
  SUBTYPE OF (annotation_placeholder_occurrence);
  leader_line : SET[1:?] OF annotation_placeholder_leader_line;
UNIQUE
  UR1: leader_line;
END_ENTITY;

ENTITY annotation_plane
  SUBTYPE OF (annotation_occurrence, geometric_representation_item);
  elements : OPTIONAL SET[1:?] OF annotation_plane_element;
  SELF\styled_item.item : plane_or_planar_box;
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\styled_item.item\planar_box.placement));
  WR3: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles[1]))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(SELF\styled_item.item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN TYPEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles[1])));
  WR4: (SIZEOF(SELF\styled_item.styles) = 1) AND (SIZEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles) = 1);
END_ENTITY;

ENTITY annotation_point_occurrence
  SUBTYPE OF (annotation_occurrence);
  SELF\styled_item.item : point;
END_ENTITY;

ENTITY annotation_subfigure_occurrence
  SUBTYPE OF (annotation_symbol_occurrence);
WHERE
  WR1: SIZEOF(QUERY(sty <* SELF.styles | NOT (SIZEOF(sty.styles) = 1))) = 0;
  WR2: SIZEOF(QUERY(sty <* SELF.styles | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NULL_STYLE' IN TYPEOF(sty.styles[1])))) = 0;
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(SELF.item));
  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SUBFIGURE_REPRESENTATION' IN TYPEOF(SELF.item\mapped_item.mapping_source.mapped_representation));
END_ENTITY;

ENTITY annotation_symbol
  SUBTYPE OF (mapped_item);
  SELF\mapped_item.mapping_source : symbol_representation_map;
  SELF\mapped_item.mapping_target : symbol_target;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
END_ENTITY;

ENTITY annotation_symbol_occurrence
  SUBTYPE OF (annotation_occurrence);
  SELF\styled_item.item : annotation_symbol_occurrence_item;
END_ENTITY;

ENTITY annotation_text
  SUBTYPE OF (mapped_item);
  SELF\mapped_item.mapping_target : axis2_placement;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STRING_REPRESENTATION' IN TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
END_ENTITY;

ENTITY annotation_text_character
  SUBTYPE OF (mapped_item);
  alignment : text_alignment;
  SELF\mapped_item.mapping_target : axis2_placement;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTER_GLYPH_SYMBOL' IN TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
END_ENTITY;

ENTITY annotation_text_occurrence
  SUBTYPE OF (annotation_occurrence);
  SELF\styled_item.item : annotation_text_occurrence_item;
END_ENTITY;

ENTITY annotation_to_annotation_leader_line
  SUBTYPE OF (annotation_placeholder_leader_line);
DERIVE
  start_end : des_apll_point_select := SELF\annotation_placeholder_leader_line.geometric_elements[1];
WHERE
  WR1: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(SELF\annotation_placeholder_leader_line.model_end)) = 0) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(start_end)) = 0);
END_ENTITY;

ENTITY annotation_to_model_leader_line
  SUBTYPE OF (annotation_placeholder_leader_line);
DERIVE
  start_end : des_apll_point_select := SELF\annotation_placeholder_leader_line.geometric_elements[1];
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(SELF\annotation_placeholder_leader_line.model_end)) = 1;
  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(start_end)) = 0;
END_ENTITY;

ENTITY ap242_assignment_object_relationship
  SUBTYPE OF (assignment_object_relationship);
  SELF\assignment_object_relationship.related : ap242_assignment_object_select;
  SELF\assignment_object_relationship.relating : ap242_assignment_object_select;
END_ENTITY;

ENTITY apex
  SUBTYPE OF (derived_shape_aspect);
END_ENTITY;

ENTITY apll_point
  SUBTYPE OF (cartesian_point);
  symbol_applied : des_apll_point_symbol;
INVERSE
  container : annotation_placeholder_leader_line FOR geometric_elements;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(SELF)) = 0;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET.ELEMENTS')) = 0;
END_ENTITY;

ENTITY apll_point_with_surface
  SUBTYPE OF (cartesian_point);
  symbol_applied : des_apll_point_symbol;
  associated_surface : face_surface;
INVERSE
  container : annotation_placeholder_leader_line FOR geometric_elements;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT'] * TYPEOF(SELF)) = 0;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET.ELEMENTS')) = 0;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

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

ENTITY application_defined_function
  SUBTYPE OF (maths_function);
  explicit_domain : tuple_space;
  explicit_range : tuple_space;
  parameters : LIST OF maths_value;
WHERE
  WR1: expression_is_constant(explicit_domain);
  WR2: expression_is_constant(explicit_range);
END_ENTITY;

ENTITY application_protocol_definition;
  status : label;
  application_interpreted_model_schema_name : label;
  application_protocol_year : year_number;
  application : 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_approval_scope
  SUBTYPE OF (approval_assignment);
  items : SET[1:?] OF approval_scope_item;
END_ENTITY;

ENTITY applied_area
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT ({2 <= SIZEOF(impl_rep.used_representation.items) <= 3})))) = 0)))) = 0);
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | NOT (srwp_i.name IN ['orientation','effective length','maximum length']))) > 0))) = 0))) = 0;
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'effective length')))) = 1)))) = 0)))) <= 1);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'maximum length')))) <= 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY applied_attribute_classification_assignment
  SUBTYPE OF (attribute_classification_assignment);
  SELF\attribute_classification_assignment.assigned_class : class;
  items : SET[1:?] OF attribute_classification_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_classification_assignment_relationship
  SUBTYPE OF (classification_assignment_relationship);
  SELF\classification_assignment_relationship.related : applied_classification_assignment;
  SELF\classification_assignment_relationship.relating : applied_classification_assignment;
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_description_text_assignment_relationship
  SUBTYPE OF (description_text_assignment_relationship);
  SELF\description_text_assignment_relationship.related : applied_description_text_assignment;
  SELF\description_text_assignment_relationship.relating : applied_description_text_assignment;
END_ENTITY;

ENTITY applied_directed_action_assignment
  SUBTYPE OF (directed_action_assignment);
  items : SET[1:?] OF action_request_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_experience_assignment
  SUBTYPE OF (experience_assignment);
  items : SET[1:?] OF experience_item;
END_ENTITY;

ENTITY applied_experience_type_assignment
  SUBTYPE OF (experience_type_assignment);
  items : SET[1:?] OF experience_type_item;
END_ENTITY;

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

ENTITY applied_external_identification_assignment_relationship
  SUBTYPE OF (external_identification_assignment_relationship);
  SELF\external_identification_assignment_relationship.related : applied_external_identification_assignment;
  SELF\external_identification_assignment_relationship.relating : applied_external_identification_assignment;
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_ineffectivity_assignment
  SUBTYPE OF (effectivity_assignment);
  items : SET[1:?] OF effectivity_item;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOT_EFFECTIVITY', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SERIAL_NUMBERED_EFFECTIVITY', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_EFFECTIVITY'] * TYPEOF(SELF.assigned_effectivity)) = 0;
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_organization_type_assignment
  SUBTYPE OF (organization_type_assignment);
  items : SET[1:?] OF organization_type_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_person_type_assignment
  SUBTYPE OF (person_type_assignment);
  items : SET[1:?] OF person_type_item;
END_ENTITY;

ENTITY applied_person_type_definition_assignment
  SUBTYPE OF (person_type_definition_assignment);
  items : SET[1:?] OF person_definition_item;
END_ENTITY;

ENTITY applied_position_in_organization_assignment
  SUBTYPE OF (position_in_organization_assignment);
  items : SET[1:?] OF position_in_organization_item;
END_ENTITY;

ENTITY applied_position_in_organization_assignment_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:?] OF position_in_organization_group_assignment_item;
END_ENTITY;

ENTITY applied_position_in_organization_group_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:?] OF position_in_organization_group_item;
END_ENTITY;

ENTITY applied_position_in_organization_type_assignment
  SUBTYPE OF (position_in_organization_type_assignment);
  items : SET[1:?] OF position_in_organization_type_item;
END_ENTITY;

ENTITY applied_presented_item
  SUBTYPE OF (presented_item);
  items : SET[1:?] OF presented_item_select;
END_ENTITY;

ENTITY applied_project_group_name_assignment
  SUBTYPE OF (name_assignment);
  items : SET[1:?] OF project_group_name_item;
END_ENTITY;

ENTITY applied_qualification_type_assignment
  SUBTYPE OF (qualification_type_assignment);
  items : SET[1:?] OF person_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 (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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;

ENTITY approval_status;
  name : label;
END_ENTITY;

ENTITY area_based_llai
  SUPERTYPE OF (ONEOF (butt_splice_area,
                       darting_area,
                       fiber_orientation_angle_tolerance_deviation_area,
                       manufacturing_edge_of_part,
                       manufacturing_edge_of_ply,
                       no_splice_area,
                       overlap_splice_area,
                       ply_drop_off_stay_out_area,
                       ply_wrinkle_allowance_area,
                       potting_area,
                       stitching_area,
                       surface_porosity_allowance_area,
                       surface_preparation_area))
  SUBTYPE OF (limited_length_area_indicator);
END_ENTITY;

ENTITY area_in_set;
  area : presentation_area;
  in_set : presentation_set;
END_ENTITY;

ENTITY area_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
END_ENTITY;

ENTITY area_with_outer_boundary
  SUBTYPE OF (half_space_2d);
  SELF\half_space_2d.base_curve : composite_curve;
WHERE
  WR1: base_curve\composite_curve.closed_curve = TRUE;
END_ENTITY;

ENTITY array_placement_group
  SUPERTYPE OF (ONEOF (linear_array_placement_group_component,
                       rectangular_array_placement_group_component))
  SUBTYPE OF (assembly_group_component);
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;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY asin_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY assembly_bond_definition
  SUBTYPE OF (shape_aspect);
UNIQUE
  UR1: SELF\shape_aspect.name;
END_ENTITY;

ENTITY assembly_component
  SUBTYPE OF (component_definition, product_definition_shape);
DERIVE
  SELF\property_definition.definition : assembly_component := SELF;
WHERE
  WR1: NOT EXISTS(SELF\property_definition.description);
END_ENTITY;

ENTITY assembly_component_usage
  SUPERTYPE OF (quantified_assembly_component_usage
                ANDOR ONEOF (multi_level_reference_designator,
                     next_assembly_usage_occurrence,
                     promissory_usage_occurrence,
                     specified_higher_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 assembly_geometric_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (binary_assembly_constraint,
                                fixed_constituent_assembly_constraint))
  SUBTYPE OF (explicit_constraint);
END_ENTITY;

ENTITY assembly_group_component
  SUBTYPE OF (assembly_component);
END_ENTITY;

ENTITY assembly_group_component_definition_placement_link
  SUBTYPE OF (product_definition, product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : assembly_component;
  SELF\product_definition_relationship.related_product_definition : assembly_component;
WHERE
  WR1: SELF\product_definition_relationship.related_product_definition :<>: SELF\product_definition_relationship.relating_product_definition;
  WR2: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_GROUP_COMPONENT_DEFINITION_PLACEMENT_LINK');
END_ENTITY;

ENTITY assembly_joint
  SUBTYPE OF (component_feature_joint);
WHERE
  WR1: acyclic_shape_aspect_relationship(SELF, [SELF\shape_aspect_relationship.related_shape_aspect], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_JOINT');
END_ENTITY;

ENTITY assembly_shape_constraint
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY assembly_shape_constraint_item_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : assembly_shape_constraint;
END_ENTITY;

ENTITY assembly_shape_joint
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY assembly_shape_joint_item_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : assembly_shape_joint;
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 assignment_object_relationship;
  id : OPTIONAL identifier;
  description : OPTIONAL text;
  relating : assignment_object_select;
  related : assignment_object_select;
  relation_type : STRING;
WHERE
  WR1: acyclic_assignment_object_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSIGNMENT_OBJECT_RELATIONSHIP');
END_ENTITY;

ENTITY atan_function
  SUBTYPE OF (binary_function_call);
END_ENTITY;

ENTITY atom_based_literal
  SUBTYPE OF (generic_literal);
  lit_value : atom_based_value;
END_ENTITY;

ENTITY atomic_formula
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY attachment_slot_as_planned
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY attachment_slot_as_realized
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY attachment_slot_design
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY attachment_slot_design_to_planned
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_design;
  SELF\product_definition_formation_relationship.related_product_definition_formation : attachment_slot_as_planned;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
END_ENTITY;

ENTITY attachment_slot_design_to_realized
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_design;
  SELF\product_definition_formation_relationship.related_product_definition_formation : attachment_slot_as_realized;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
END_ENTITY;

ENTITY attachment_slot_on_product
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY attachment_slot_planned_to_realized
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_as_planned;
  SELF\product_definition_formation_relationship.related_product_definition_formation : attachment_slot_as_realized;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
END_ENTITY;

ENTITY attribute_assertion
  SUBTYPE OF (fact_type, property_definition_representation, representation);
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 auxiliary_geometric_representation_item
  SUBTYPE OF (geometric_representation_item, variational_representation_item);
END_ENTITY;

ENTITY auxiliary_leader_line
  SUBTYPE OF (annotation_placeholder_leader_line);
  controlling_leader_line : annotation_to_model_leader_line;
DERIVE
  free_space_end : des_apll_point_select := SELF\annotation_placeholder_leader_line.geometric_elements[1];
WHERE
  WR1: SELF\annotation_placeholder_leader_line.container :=: controlling_leader_line\annotation_placeholder_leader_line.container;
  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(free_space_end)) = 0;
  WR3: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APLL_POINT_WITH_SURFACE'] * TYPEOF(SELF\annotation_placeholder_leader_line.model_end)) = 1;
END_ENTITY;

ENTITY axis1_placement
  SUBTYPE OF (placement);
  axis : OPTIONAL direction;
DERIVE
  z : direction := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0]));
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.0);
END_ENTITY;

ENTITY b_spline_basis
  SUBTYPE OF (maths_function, generic_literal);
  degree : nonnegative_integer;
  repeated_knots : LIST[2:?] OF REAL;
DERIVE
  order : positive_integer := degree + 1;
  num_basis : positive_integer := SIZEOF(repeated_knots) - order;
WHERE
  WR1: num_basis >= order;
  WR2: nondecreasing(repeated_knots);
  WR3: repeated_knots[order] < repeated_knots[num_basis + 1];
END_ENTITY;

ENTITY b_spline_curve
  SUPERTYPE OF (ONEOF (uniform_curve,
                       b_spline_curve_with_knots,
                       quasi_uniform_curve,
                       bezier_curve)
               ANDOR rational_b_spline_curve)
  SUBTYPE OF (bounded_curve);
  degree : INTEGER;
  control_points_list : LIST[2:?] OF cartesian_point;
  curve_form : b_spline_curve_form;
  closed_curve : LOGICAL;
  self_intersect : LOGICAL;
DERIVE
  upper_index_on_control_points : INTEGER := (SIZEOF(control_points_list) - 1);
  control_points : ARRAY[0:upper_index_on_control_points] OF cartesian_point := list_to_array(control_points_list, 0, upper_index_on_control_points);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_CURVE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_CURVE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_CURVE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(SELF));
END_ENTITY;

ENTITY b_spline_curve_knot_locator
  SUBTYPE OF (founded_item);
  basis_curve : b_spline_curve;
  knot_index : INTEGER;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY b_spline_curve_segment
  SUBTYPE OF (founded_item);
  basis_curve : b_spline_curve;
  start_knot_index : INTEGER;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY b_spline_curve_with_knots
  SUBTYPE OF (b_spline_curve);
  knot_multiplicities : LIST[2:?] OF INTEGER;
  knots : LIST[2:?] OF parameter_value;
  knot_spec : knot_type;
DERIVE
  upper_index_on_knots : INTEGER := SIZEOF(knots);
WHERE
  WR1: constraints_param_b_spline(SELF.degree, upper_index_on_knots, upper_index_on_control_points, knot_multiplicities, knots);
  WR2: SIZEOF(knot_multiplicities) = upper_index_on_knots;
END_ENTITY;

ENTITY b_spline_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  basis : LIST[1:?] OF b_spline_basis;
DERIVE
  coef : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: function_is_table(coef);
  WR2: (space_dimension(coef.range) = 1) AND (number_superspace_of(factor1(coef.range)) = the_reals);
  WR3: SIZEOF(basis) <= SIZEOF(shape_of_array(coef));
  WR4: compare_basis_and_coef(basis, coef);
END_ENTITY;

ENTITY b_spline_surface
  SUPERTYPE OF (ONEOF (b_spline_surface_with_knots,
                       uniform_surface,
                       quasi_uniform_surface,
                       bezier_surface)
               ANDOR rational_b_spline_surface)
  SUBTYPE OF (bounded_surface);
  u_degree : INTEGER;
  v_degree : INTEGER;
  control_points_list : LIST[2:?] OF LIST[2:?] OF cartesian_point;
  surface_form : b_spline_surface_form;
  u_closed : LOGICAL;
  v_closed : LOGICAL;
  self_intersect : LOGICAL;
DERIVE
  u_upper : INTEGER := SIZEOF(control_points_list) - 1;
  v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1;
  control_points : ARRAY[0:u_upper] OF ARRAY[0:v_upper] OF cartesian_point := make_array_of_array(control_points_list, 0, u_upper, 0, v_upper);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_SURFACE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS' IN TYPEOF(SELF));
END_ENTITY;

ENTITY b_spline_surface_knot_locator
  SUBTYPE OF (founded_item);
  basis_surface : b_spline_surface;
  knot_index : INTEGER;
  surface_parameter : u_or_v_parameter;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY b_spline_surface_patch
  SUBTYPE OF (founded_item);
  basis_surface : b_spline_surface;
  u_start_knot_index : INTEGER;
  v_start_knot_index : INTEGER;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY b_spline_surface_strip
  SUBTYPE OF (founded_item);
  basis_surface : b_spline_surface;
  start_knot_index : INTEGER;
  surface_parameter : u_or_v_parameter;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY b_spline_surface_with_knots
  SUBTYPE OF (b_spline_surface);
  u_multiplicities : LIST[2:?] OF INTEGER;
  v_multiplicities : LIST[2:?] OF INTEGER;
  u_knots : LIST[2:?] OF parameter_value;
  v_knots : LIST[2:?] OF parameter_value;
  knot_spec : knot_type;
DERIVE
  knot_u_upper : INTEGER := SIZEOF(u_knots);
  knot_v_upper : INTEGER := SIZEOF(v_knots);
WHERE
  WR1: constraints_param_b_spline(SELF\b_spline_surface.u_degree, knot_u_upper, SELF\b_spline_surface.u_upper, u_multiplicities, u_knots);
  WR2: constraints_param_b_spline(SELF\b_spline_surface.v_degree, knot_v_upper, SELF\b_spline_surface.v_upper, v_multiplicities, v_knots);
  WR3: SIZEOF(u_multiplicities) = knot_u_upper;
  WR4: SIZEOF(v_multiplicities) = knot_v_upper;
END_ENTITY;

ENTITY b_spline_volume
  SUPERTYPE OF (ONEOF (b_spline_volume_with_knots,
                       uniform_volume,
                       quasi_uniform_volume,
                       bezier_volume)
               ANDOR rational_b_spline_volume)
  SUBTYPE OF (volume);
  u_degree : INTEGER;
  v_degree : INTEGER;
  w_degree : INTEGER;
  control_points_list : LIST[2:?] OF LIST[2:?] OF LIST[2:?] OF cartesian_point;
DERIVE
  u_upper : INTEGER := SIZEOF(control_points_list) - 1;
  v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1;
  w_upper : INTEGER := SIZEOF(control_points_list[1][1]) - 1;
  control_points : ARRAY[0:u_upper] OF ARRAY[0:v_upper] OF ARRAY[0:w_upper] OF cartesian_point := make_array_of_array_of_array(control_points_list, 0, u_upper, 0, v_upper, 0, w_upper);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_VOLUME' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_VOLUME' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_VOLUME' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_VOLUME_WITH_KNOTS' IN TYPEOF(SELF));
END_ENTITY;

ENTITY b_spline_volume_with_knots
  SUBTYPE OF (b_spline_volume);
  u_multiplicities : LIST[2:?] OF INTEGER;
  v_multiplicities : LIST[2:?] OF INTEGER;
  w_multiplicities : LIST[2:?] OF INTEGER;
  u_knots : LIST[2:?] OF parameter_value;
  v_knots : LIST[2:?] OF parameter_value;
  w_knots : LIST[2:?] OF parameter_value;
DERIVE
  knot_u_upper : INTEGER := SIZEOF(u_knots);
  knot_v_upper : INTEGER := SIZEOF(v_knots);
  knot_w_upper : INTEGER := SIZEOF(w_knots);
WHERE
  WR1: constraints_param_b_spline(SELF\b_spline_volume.u_degree, knot_u_upper, SELF\b_spline_volume.u_upper, u_multiplicities, u_knots);
  WR2: constraints_param_b_spline(SELF\b_spline_volume.v_degree, knot_v_upper, SELF\b_spline_volume.v_upper, v_multiplicities, v_knots);
  WR3: constraints_param_b_spline(SELF\b_spline_volume.w_degree, knot_w_upper, SELF\b_spline_volume.w_upper, w_multiplicities, w_knots);
  WR4: SIZEOF(u_multiplicities) = knot_u_upper;
  WR5: SIZEOF(v_multiplicities) = knot_v_upper;
  WR6: SIZEOF(w_multiplicities) = knot_w_upper;
END_ENTITY;

ENTITY back_chaining_rule
  SUBTYPE OF (rule_definition);
END_ENTITY;

ENTITY back_chaining_rule_body
  SUBTYPE OF (property_definition, property_definition_representation, representation);
END_ENTITY;

ENTITY background_colour
  SUBTYPE OF (colour);
  presentation : area_or_view;
UNIQUE
  UR1: presentation;
END_ENTITY;

ENTITY banded_matrix
  SUBTYPE OF (linearized_table_function);
  default_entry : maths_value;
  below : INTEGER;
  above : INTEGER;
  order : ordering_type;
WHERE
  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
  WR2: -below <= above;
  WR3: member_of(default_entry, factor1(SELF\linearized_table_function.source.range));
END_ENTITY;

ENTITY barring_hole
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'hole profile') AND (sa.description = 'closed profile occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sar.relating_shape_aspect)) = 1))) = 1))) = 1;
  WR2: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'barring profile') AND (sa.description = 'closed profile occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage'))) = 1))) = 1;
  WR3: (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1) AND (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND {1 <= SIZEOF(pdr.used_representation.items) <= 2})) = 1);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | NOT (i.name IN ['orientation','base radius']))) > 0))) = 0;
  WR5: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) <> 1))) = 0;
END_ENTITY;

ENTITY basic_round_hole
  SUBTYPE OF (round_hole);
  depth : OPTIONAL positive_length_measure_with_unit;
  depth_tolerance : OPTIONAL tolerance_value;
  diameter : positive_length_measure_with_unit;
  diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  placement : shape_representation;
  through_hole : BOOLEAN;
INVERSE
  bottom_condition : SET[0:1] OF round_hole_bottom_condition FOR target;
WHERE
  WR1: SIZEOF(placement\representation.items) = 1;
  WR2: SIZEOF(QUERY(ri <* placement\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ri)))) = 1;
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(depth_tolerance\tolerance_value.lower_bound);
  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(depth_tolerance\tolerance_value.upper_bound);
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(diameter_tolerance\tolerance_value.lower_bound));
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(diameter_tolerance\tolerance_value.upper_bound));
  WR7: through_hole XOR EXISTS(depth);
  WR8: NOT (through_hole AND (SIZEOF(bottom_condition) = 1));
END_ENTITY;

ENTITY basic_round_hole_occurrence
  SUBTYPE OF (shape_aspect_occurrence);
  SELF\shape_aspect_occurrence.definition : basic_round_hole;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY basic_round_hole_occurrence_in_assembly
  SUBTYPE OF (basic_round_hole_occurrence);
  modified_components : LIST[1:?] OF UNIQUE multi_level_reference_designator;
END_ENTITY;

ENTITY basic_sparse_matrix
  SUBTYPE OF (explicit_table_function, multiple_arity_generic_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[3:3] OF maths_function;
  default_entry : maths_value;
  order : ordering_type;
DERIVE
  index : maths_function := SELF\multiple_arity_generic_expression.operands[1];
  loc : maths_function := SELF\multiple_arity_generic_expression.operands[2];
  val : maths_function := SELF\multiple_arity_generic_expression.operands[3];
WHERE
  WR1: function_is_1d_table(index);
  WR2: function_is_1d_table(loc);
  WR3: function_is_1d_table(val);
  WR4: check_sparse_index_domain(index.domain, index_base, shape, order);
  WR5: check_sparse_index_to_loc(index.range, loc.domain);
  WR6: loc.domain = val.domain;
  WR7: check_sparse_loc_range(loc.range, index_base, shape, order);
  WR8: member_of(default_entry, val.range);
END_ENTITY;

ENTITY bead
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) <= 1) AND (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) > 2))) = 0);
  WR2: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | NOT (i.name IN ['orientation','base radius']))) > 0))) = 0;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) > 1))) = 0;
  WR4: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'sweep path') AND (sa.description = 'path feature component occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'path feature component usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sar.relating_shape_aspect)))) = 1))) = 1;
  WR5: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'bead profile') AND (sa.description = 'open profile occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE'] * TYPEOF(sar.relating_shape_aspect)) = 1))) = 1))) = 1;
  WR6: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'end condition') AND (sa.description = 'bead end occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'bead end usage') AND (sar.description = 'starting') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD_END' IN TYPEOF(sar.relating_shape_aspect)))) = 1))) = 1;
  WR7: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'end condition') AND (sa.description = 'bead end occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'bead end usage') AND (sar.description = 'ending') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD_END' IN TYPEOF(sar.relating_shape_aspect)))) = 1))) = 1;
END_ENTITY;

ENTITY bead_end
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['linear','open','radiused'];
  WR3: (SELF.description <> 'linear') XOR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) > 0);
  WR4: (SELF.description <> 'linear') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 2))) = 1);
  WR5: (SELF.description <> 'linear') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'end length') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1);
  WR6: (SELF.description <> 'linear') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'end shape') AND (i\descriptive_representation_item.description IN ['straight','tapered']) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)))) = 1))) = 1);
  WR7: SIZEOF(QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'bead end usage') AND (sar.description IN ['starting','ending']) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD' IN TYPEOF(sar.related_shape_aspect.of_shape.definition)) AND (sar.related_shape_aspect.of_shape.definition\characterized_object.name = 'end condition') AND (sar.related_shape_aspect.of_shape.definition\characterized_object.description = 'bead end occurrence'))) = 1;
END_ENTITY;

ENTITY between_shape_aspect
  SUBTYPE OF (continuous_shape_aspect);
WHERE
  WR1: SIZEOF(QUERY(sar <* SELF\composite_shape_aspect.component_relationships | sar\shape_aspect_relationship.name = 'start feature')) = 1;
  WR2: SIZEOF(QUERY(sar <* SELF\composite_shape_aspect.component_relationships | sar\shape_aspect_relationship.name = 'end feature')) = 1;
END_ENTITY;

ENTITY beveled_sheet_representation
  SUBTYPE OF (shape_representation);
END_ENTITY;

ENTITY bezier_curve
  SUBTYPE OF (b_spline_curve);
END_ENTITY;

ENTITY bezier_surface
  SUBTYPE OF (b_spline_surface);
END_ENTITY;

ENTITY bezier_volume
  SUBTYPE OF (b_spline_volume);
END_ENTITY;

ENTITY binary_assembly_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (parallel_assembly_constraint,
                                surface_distance_assembly_constraint_with_dimension,
                                angle_assembly_constraint_with_dimension,
                                perpendicular_assembly_constraint,
                                incidence_assembly_constraint,
                                coaxial_assembly_constraint,
                                tangent_assembly_constraint))
  SUBTYPE OF (assembly_geometric_constraint, representation_relationship_with_transformation);
  SELF\representation_relationship.rep_1 : representative_shape_representation;
  SELF\representation_relationship.rep_2 : representative_shape_representation;
WHERE
  WR1: (SELF\explicit_constraint.constrained_elements[1]\geometric_representation_item.dim = 3) AND (SELF\explicit_constraint.reference_elements[1]\geometric_representation_item.dim = 3);
  WR2: (SELF\representation_relationship.rep_1 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND (SELF\representation_relationship.rep_2 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
  WR3: (SIZEOF(SELF\explicit_constraint.constrained_elements) = 1) AND (SIZEOF(SELF\explicit_constraint.reference_elements) = 1);
  WR4: (SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1 = SELF\explicit_constraint.reference_elements[1]) AND (SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2 = SELF\explicit_constraint.constrained_elements[1]);
END_ENTITY;

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

ENTITY binary_function_call
  ABSTRACT SUPERTYPE OF (ONEOF (atan_function))
  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_literal
  SUBTYPE OF (generic_literal);
  lit_value : BINARY;
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 (numeric_expression, binary_generic_expression);
  SELF\binary_generic_expression.operands : LIST[2:2] OF numeric_expression;
END_ENTITY;

ENTITY binary_representation_item
  SUBTYPE OF (representation_item);
  binary_value : BINARY;
END_ENTITY;

ENTITY block
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
END_ENTITY;

ENTITY block_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
END_ENTITY;

ENTITY boolean_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (defined_function, boolean_expression);
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 (simple_boolean_expression, generic_literal);
  the_value : BOOLEAN;
END_ENTITY;

ENTITY boolean_representation_item
  SUBTYPE OF (representation_item, boolean_literal);
END_ENTITY;

ENTITY boolean_result
  SUBTYPE OF (geometric_representation_item);
  operator : boolean_operator;
  first_operand : boolean_operand;
  second_operand : boolean_operand;
END_ENTITY;

ENTITY boolean_result_2d
  SUBTYPE OF (boolean_result);
  SELF\boolean_result.first_operand : boolean_operand_2d;
  SELF\boolean_result.second_operand : boolean_operand_2d;
END_ENTITY;

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

ENTITY boss
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SELF\characterized_object.description IN ['circular','complex','rectangular'];
  WR2: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boss height occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'path feature component usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear') AND (sdr.name = 'boss height'))) = 1))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({1 <= SIZEOF(pdr.used_representation.items) <= 2}))) = 1)) = 1;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'fillet radius'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'fillet radius'))) <= 1))) = 0))) = 0;
  WR6: (NOT (SELF\characterized_object.description = 'circular')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'circular profile occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))) = 1))) = 1))) = 0);
  WR7: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'top condition occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'boss top usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS_TOP' IN TYPEOF(fcr.relating_shape_aspect))))) = 1)))) = 1)))) = 0;
  WR8: (NOT (SELF\characterized_object.description = 'circular')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'change in diameter occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'taper usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr.related_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN TYPEOF(fcr.relating_shape_aspect))))) = 1))) <= 1))) = 0);
  WR9: (NOT (SELF\characterized_object.description = 'complex')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1)) = 1))) = 1))) = 0);
  WR10: (NOT (SELF\characterized_object.description IN ['complex','rectangular'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'change in boundary occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'taper usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr.related_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])))) = 1))) <= 1))) = 0);
  WR11: (NOT (SELF\characterized_object.description = 'rectangular')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'rectangular profile occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))) = 1))) = 1))) = 0);
  WR12: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY boss_top
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['planar','complex']);
  WR3: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0));
  WR4: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0));
  WR5: (NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation))) = 1)))) = 0);
  WR6: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'boss top usage') AND (sar.name IN ['boss height start','boss height end'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | ((fcr.related_shape_aspect.description = 'top condition occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS_TOP' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) <= 1)))) = 0);
  WR8: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR9: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'top radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY bound_parameter_environment
  SUBTYPE OF (environment);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_VARIATIONAL_PARAMETER' IN TYPEOF(SELF\environment.syntactic_representation)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_ATTRIBUTE_REFERENCE' IN TYPEOF(SELF\environment.semantics));
END_ENTITY;

ENTITY bound_variable_semantics
  SUBTYPE OF (variable_semantics);
END_ENTITY;

ENTITY bound_variational_parameter
  SUBTYPE OF (variational_parameter);
DERIVE
  SELF\variational_parameter.parameter_current_value : maths_value := ?;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_PARAMETER_ENVIRONMENT' IN TYPEOF(SELF\generic_variable.interpretation);
END_ENTITY;

ENTITY boundary_curve
  SUBTYPE OF (composite_curve_on_surface);
WHERE
  WR1: SELF\composite_curve.closed_curve;
END_ENTITY;

ENTITY boundary_curve_of_b_spline_or_rectangular_composite_surface
  SUBTYPE OF (founded_item);
  basis_surface : b_spline_or_rectangular_composite_surface_select;
  boundary_type : surface_boundary_type;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY bounded_curve
  SUPERTYPE OF (ONEOF (polyline,
                       b_spline_curve,
                       trimmed_curve,
                       bounded_pcurve,
                       bounded_surface_curve,
                       composite_curve,
                       locally_refined_spline_curve))
  SUBTYPE OF (curve);
END_ENTITY;

ENTITY bounded_curve_with_length
  SUBTYPE OF (bounded_curve, clgc_with_dimension);
DERIVE
  SELF\curve_length_geometric_constraint.constrained_elements : SET[1:1] OF bounded_curve_with_length := [SELF];
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCALLY_REFINED_SPLINE_CURVE'] * TYPEOF(SELF)) = 0;
END_ENTITY;

ENTITY bounded_pcurve
  SUBTYPE OF (pcurve, bounded_curve);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN TYPEOF(SELF\pcurve.reference_to_curve.items[1]));
END_ENTITY;

ENTITY bounded_surface
  SUPERTYPE OF (ONEOF (b_spline_surface,
                       rectangular_trimmed_surface,
                       curve_bounded_surface,
                       rectangular_composite_surface,
                       locally_refined_spline_surface))
  SUBTYPE OF (surface);
END_ENTITY;

ENTITY bounded_surface_curve
  SUBTYPE OF (surface_curve, bounded_curve);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN TYPEOF(SELF\surface_curve.curve_3d));
END_ENTITY;

ENTITY box_domain
  SUBTYPE OF (founded_item);
  corner : cartesian_point;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
  zlength : positive_length_measure;
WHERE
  WR1: SIZEOF(QUERY(item <* USEDIN(SELF, '') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOXED_HALF_SPACE' IN TYPEOF(item)))) = 0;
END_ENTITY;

ENTITY boxed_half_space
  SUBTYPE OF (half_space_solid);
  enclosure : box_domain;
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 brep_with_voids
  SUBTYPE OF (manifold_solid_brep);
  voids : SET[1:?] OF oriented_closed_shell;
END_ENTITY;

ENTITY butt_splice_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY butt_splice_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY bytes_representation_item
  SUBTYPE OF (binary_representation_item);
DERIVE
  no_of_bytes : INTEGER := BLENGTH(SELF\binary_representation_item.binary_value) DIV 8;
WHERE
  WR1: BLENGTH(SELF\binary_representation_item.binary_value) MOD 8 = 0;
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 camera_image
  SUPERTYPE OF (ONEOF (camera_image_2d_with_scale,
                       camera_image_3d_with_scale))
  SUBTYPE OF (mapped_item);
  SELF\mapped_item.mapping_source : camera_usage;
  SELF\mapped_item.mapping_target : planar_box;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
END_ENTITY;

ENTITY camera_image_2d_with_scale
  SUBTYPE OF (camera_image);
DERIVE
  scale : positive_ratio_measure := (SELF\mapped_item.mapping_target\planar_extent.size_in_x) / (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window\planar_extent.size_in_x);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D2' IN TYPEOF(SELF\mapped_item.mapping_source.mapping_origin));
  WR2: aspect_ratio(SELF\mapped_item.mapping_target) = aspect_ratio(SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window);
  WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window_clipping;
END_ENTITY;

ENTITY camera_image_3d_with_scale
  SUBTYPE OF (camera_image);
DERIVE
  scale : positive_ratio_measure := ((SELF\mapped_item.mapping_target\planar_extent.size_in_x) / (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_x));
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3' IN TYPEOF(SELF\mapped_item.mapping_source.mapping_origin));
  WR2: aspect_ratio(SELF\mapped_item.mapping_target) = aspect_ratio(SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window);
  WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.front_plane_clipping AND SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_volume_sides_clipping;
  WR4: (SELF\mapped_item.mapping_target\planar_extent.size_in_x > 0) AND (SELF\mapped_item.mapping_target\planar_extent.size_in_y > 0);
  WR5: (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_x > 0) AND (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_y > 0);
  WR6: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(SELF\mapped_item.mapping_target\planar_box.placement)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\mapped_item.mapping_target\planar_box.placement));
END_ENTITY;

ENTITY camera_model
  ABSTRACT SUPERTYPE OF (ONEOF (camera_model_d2,
                                camera_model_d3))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION.TRANSFORM_ITEM_1')) + SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPING_ORIGIN'))) > 0;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')) = 0;
END_ENTITY;

ENTITY camera_model_d2
  SUBTYPE OF (camera_model);
  view_window : planar_box;
  view_window_clipping : BOOLEAN;
WHERE
  WR1: SELF\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY camera_model_d3
  SUBTYPE OF (camera_model);
  view_reference_system : axis2_placement_3d;
  perspective_of_volume : view_volume;
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY camera_model_d3_multi_clipping
  SUBTYPE OF (camera_model_d3);
  shape_clipping : SET[1:?] OF camera_model_d3_multi_clipping_intersection_select;
END_ENTITY;

ENTITY camera_model_d3_multi_clipping_intersection
  SUBTYPE OF (geometric_representation_item);
  shape_clipping : SET[2:?] OF camera_model_d3_multi_clipping_intersection_select;
END_ENTITY;

ENTITY camera_model_d3_multi_clipping_union
  SUBTYPE OF (geometric_representation_item);
  shape_clipping : SET[2:?] OF camera_model_d3_multi_clipping_union_select;
END_ENTITY;

ENTITY camera_model_d3_with_hlhsr
  SUBTYPE OF (camera_model_d3);
  hidden_line_surface_removal : BOOLEAN;
END_ENTITY;

ENTITY camera_model_with_light_sources
  SUBTYPE OF (camera_model_d3);
  sources : SET[1:?] OF light_source;
END_ENTITY;

ENTITY camera_usage
  SUBTYPE OF (representation_map);
  SELF\representation_map.mapping_origin : camera_model;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN TYPEOF(SELF\representation_map.mapped_representation));
END_ENTITY;

ENTITY capacitance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.farad);
END_ENTITY;

ENTITY cartesian_11
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF);
END_ENTITY;

ENTITY cartesian_complex_number_region
  SUBTYPE OF (maths_space, generic_literal);
  real_constraint : real_interval;
  imag_constraint : real_interval;
WHERE
  WR1: min_exists(real_constraint) OR max_exists(real_constraint) OR min_exists(imag_constraint) OR max_exists(imag_constraint);
END_ENTITY;

ENTITY cartesian_point
  SUPERTYPE OF (ONEOF (cylindrical_point,
                       polar_point,
                       spherical_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 (geometric_representation_item, functionally_defined_transformation);
  axis1 : OPTIONAL direction;
  axis2 : OPTIONAL direction;
  local_origin : cartesian_point;
  scale : OPTIONAL REAL;
DERIVE
  scl : REAL := NVL(scale, 1.0);
WHERE
  WR1: scl > 0.0;
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 causal_consequence
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : risk_consequence;
  SELF\product_definition_relationship.related_product_definition : risk_consequence;
END_ENTITY;

ENTITY cc_design_approval
  SUBTYPE OF (approval_assignment);
  items : SET[1:?] OF approved_item;
END_ENTITY;

ENTITY cc_design_certification
  SUBTYPE OF (certification_assignment);
  items : SET[1:?] OF certified_item;
END_ENTITY;

ENTITY cc_design_contract
  SUBTYPE OF (contract_assignment);
  items : SET[1:?] OF contracted_item;
END_ENTITY;

ENTITY cc_design_date_and_time_assignment
  SUBTYPE OF (date_and_time_assignment);
  items : SET[1:?] OF date_time_item;
END_ENTITY;

ENTITY cc_design_person_and_organization_assignment
  SUBTYPE OF (person_and_organization_assignment);
  items : SET[1:?] OF cc_person_organization_item;
WHERE
  WR1: cc_design_person_and_organization_correlation(SELF);
END_ENTITY;

ENTITY cc_design_security_classification
  SUBTYPE OF (security_classification_assignment);
  items : SET[1:?] OF cc_classified_item;
END_ENTITY;

ENTITY cc_design_specification_reference
  SUBTYPE OF (document_reference);
  items : SET[1:?] OF cc_specified_item;
END_ENTITY;

ENTITY cdgc_with_dimension
  SUBTYPE OF (curve_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

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

ENTITY centre_of_symmetry
  SUBTYPE OF (derived_shape_aspect);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 (geometric_item_specific_usage, chain_based_item_identified_representation_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 chained_representation_link;
DERIVE
  root : representation := nodes[1];
  SELF\item_identified_representation_usage.used_representation : representation := nodes[HIINDEX(nodes)];
  leaf : representation := used_representation;
  directed_link : LIST[1:?] OF representation_relationship := get_directed_link(nodes, undirected_link);
WHERE
  WR1: EXISTS(directed_link);
END_ENTITY;

ENTITY chamfer
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'chamfer face')))) <= 1)))) = 0);
  WR2: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN TYPEOF(fcr.related_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.related_shape_aspect.description = 'first offset')))) = 1);
  WR3: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN TYPEOF(fcr.related_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.related_shape_aspect.description = 'second offset')))) = 1);
END_ENTITY;

ENTITY chamfer_offset
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: (SELF.description IN ['first offset','second offset']);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR4: ((NOT (SELF.description = 'first offset')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset amount')))) = 1)))) = 0)))) = 0));
  WR5: ((NOT (SELF.description = 'first offset')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape')))) <= 1)))) = 0));
  WR6: ((NOT (SELF.description = 'second offset')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset amount')) OR ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset angle'))))) = 1)))) = 0)))) = 0));
  WR7: ((NOT (SELF.description = 'second offset')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape')))) <= 1)))) = 0));
  WR8: (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN TYPEOF(sdr.related_shape_aspect))))) = 1);
END_ENTITY;

ENTITY change
  SUBTYPE OF (action_assignment);
  items : SET[1:?] OF work_item;
END_ENTITY;

ENTITY change_composition_relationship
  SUBTYPE OF (group_relationship);
  SELF\group_relationship.relating_group : change_group;
  SELF\group_relationship.related_group : change_element;
DERIVE
  element : change_element := SELF\group_relationship.related_group;
  composition : change_group := SELF\group_relationship.relating_group;
END_ENTITY;

ENTITY change_element
  ABSTRACT SUPERTYPE OF (ONEOF (modify_element,
                                delete_element,
                                add_element))
  SUBTYPE OF (group, characterized_object);
END_ENTITY;

ENTITY change_element_sequence
  SUBTYPE OF (group_relationship);
  SELF\group_relationship.relating_group : change_element;
  SELF\group_relationship.related_group : change_element;
DERIVE
  next : change_element := SELF\group_relationship.related_group;
  previous : change_element := SELF\group_relationship.relating_group;
END_ENTITY;

ENTITY change_group
  SUBTYPE OF (group);
END_ENTITY;

ENTITY change_group_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : change_group;
  item : change_relationship_select;
END_ENTITY;

ENTITY change_request
  SUBTYPE OF (action_request_assignment);
  items : SET[1:?] OF change_request_item;
END_ENTITY;

ENTITY character_glyph_font_usage;
  character : generic_character_glyph_symbol;
  font : text_font;
END_ENTITY;

ENTITY character_glyph_style_outline
  SUBTYPE OF (founded_item);
  outline_style : curve_style;
END_ENTITY;

ENTITY character_glyph_style_stroke
  SUBTYPE OF (founded_item);
  stroke_style : curve_style;
END_ENTITY;

ENTITY character_glyph_symbol
  SUBTYPE OF (generic_character_glyph_symbol);
  character_box : planar_extent;
  baseline_ratio : ratio_measure;
DERIVE
  box_height : length_measure := character_box.size_in_y;
WHERE
  WR1: {0.0 <= baseline_ratio <= 1.0};
  WR2: item_in_context(character_box, SELF\representation.context_of_items);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(box_height);
END_ENTITY;

ENTITY character_glyph_symbol_outline
  SUBTYPE OF (character_glyph_symbol);
  outlines : SET[1:?] OF annotation_fill_area;
WHERE
  WR1: outlines <= SELF\representation.items;
END_ENTITY;

ENTITY character_glyph_symbol_stroke
  SUBTYPE OF (character_glyph_symbol);
  strokes : SET[1:?] OF curve;
WHERE
  WR1: strokes <= SELF\representation.items;
END_ENTITY;

ENTITY characteristic_data_column_header
  SUBTYPE OF (general_property);
END_ENTITY;

ENTITY characteristic_data_column_header_link
  SUBTYPE OF (general_property_relationship);
END_ENTITY;

ENTITY characteristic_data_table_header
  SUBTYPE OF (general_property);
END_ENTITY;

ENTITY characteristic_data_table_header_decomposition
  SUBTYPE OF (general_property_relationship);
END_ENTITY;

ENTITY characteristic_type
  SUBTYPE OF (group);
END_ENTITY;

ENTITY characterized_chain_based_item_within_representation
  SUBTYPE OF (characterized_item_within_representation);
  nodes : LIST[2:?] OF UNIQUE representation;
  undirected_link : LIST[1:?] OF chained_representation_link;
DERIVE
  root : representation := nodes[1];
  SELF\characterized_item_within_representation.rep : representation := nodes[HIINDEX(nodes)];
  leaf : representation := rep;
  directed_link : LIST[1:?] OF representation_relationship := get_directed_link(nodes, undirected_link);
WHERE
  WR1: EXISTS(directed_link);
END_ENTITY;

ENTITY characterized_class
  SUBTYPE OF (characterized_object, class);
END_ENTITY;

ENTITY characterized_experience
  SUBTYPE OF (characterized_object, experience);
END_ENTITY;

ENTITY characterized_item_within_representation
  SUBTYPE OF (characterized_object);
  item : representation_item;
  rep : representation;
UNIQUE
  UR1: item, rep;
WHERE
  WR1: rep IN using_representations(item);
END_ENTITY;

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

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

ENTITY characterized_object_relationship;
  name : label;
  description : OPTIONAL text;
  relating_object : characterized_object;
  related_object : characterized_object;
END_ENTITY;

ENTITY characterized_person_type_definition
  SUBTYPE OF (characterized_object, person_type_definition);
END_ENTITY;

ENTITY characterized_product_concept_feature
  SUBTYPE OF (product_concept_feature, characterized_object);
END_ENTITY;

ENTITY characterized_product_concept_feature_category
  SUBTYPE OF (product_concept_feature_category, characterized_object);
END_ENTITY;

ENTITY characterized_representation
  SUBTYPE OF (representation, characterized_object);
DERIVE
  SELF\characterized_object.name : label := SELF\representation.name;
  SELF\characterized_object.description : text := SELF\representation.description;
END_ENTITY;

ENTITY circle
  SUBTYPE OF (conic);
  radius : positive_length_measure;
END_ENTITY;

ENTITY circular_area
  SUBTYPE OF (primitive_2d);
  centre : cartesian_point;
  radius : positive_length_measure;
END_ENTITY;

ENTITY circular_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY circular_involute
  SUBTYPE OF (curve);
  position : axis2_placement;
  base_radius : positive_length_measure;
END_ENTITY;

ENTITY circular_path
  SUBTYPE OF (path_node);
  via_point : cartesian_point;
END_ENTITY;

ENTITY circular_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.related_shape_aspect)))) = 1)))) <= 3)))) = 0);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 5))))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')))) <= 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'base feature rotation')))) <= 1)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of features')))) = 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'angular spacing')))) = 1)))) = 0)))) = 0);
  WR8: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY circular_runout_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
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 class_system
  SUBTYPE OF (group);
END_ENTITY;

ENTITY class_usage_effectivity_context_assignment
  SUBTYPE OF (effectivity_context_assignment);
  items : SET[1:?] OF class_usage_effectivity_context_item;
WHERE
  WR1: SELF.role.name = 'class usage influence';
  WR2: SIZEOF(QUERY(i <* SELF.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)))) = 0;
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EFFECTIVITY_ASSIGNMENT' IN TYPEOF(SELF.assigned_effectivity_assignment)) AND (SIZEOF(TYPEOF(SELF.assigned_effectivity_assignment.assigned_effectivity)) = 1) AND (SELF.assigned_effectivity_assignment.assigned_effectivity.id = 'class usage') AND (SIZEOF(QUERY(i <* SELF.assigned_effectivity_assignment\applied_effectivity_assignment.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE' IN TYPEOF(i)))) = 0);
END_ENTITY;

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

ENTITY classification_assignment_relationship;
  id : OPTIONAL identifier;
  description : OPTIONAL text;
  relating : classification_assignment;
  related : classification_assignment;
  relation_type : STRING;
WHERE
  WR1: acyclic_classification_assignment_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFICATION_ASSIGNMENT_RELATIONSHIP');
END_ENTITY;

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

ENTITY clgc_with_dimension
  SUBTYPE OF (curve_length_geometric_constraint);
  length_value : positive_length_measure;
END_ENTITY;

ENTITY closed_curve_style_parameters
  SUBTYPE OF (curve_style_parameters_representation);
END_ENTITY;

ENTITY closed_path_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
END_ENTITY;

ENTITY closed_shell
  SUBTYPE OF (connected_face_set);
END_ENTITY;

ENTITY clothoid
  SUBTYPE OF (curve);
  position : axis2_placement;
  clothoid_constant : length_measure;
END_ENTITY;

ENTITY coaxial_assembly_constraint
  SUBTYPE OF (binary_assembly_constraint, coaxial_geometric_constraint);
END_ENTITY;

ENTITY coaxial_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF axial_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF axial_geometry_constraint_element;
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\explicit_constraint.reference_elements | SIZEOF(TYPEOF(q) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERE']) > 0)) = 0;
END_ENTITY;

ENTITY coaxiality_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
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
  successor : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
  predecessor : collection_version := SELF\product_definition_formation_relationship.relating_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 colour;
END_ENTITY;

ENTITY colour_rgb
  SUBTYPE OF (colour_specification);
  red : REAL;
  green : REAL;
  blue : REAL;
WHERE
  WR1: {0.0 <= red <= 1.0};
  WR2: {0.0 <= green <= 1.0};
  WR3: {0.0 <= blue <= 1.0};
END_ENTITY;

ENTITY colour_specification
  SUBTYPE OF (colour);
  name : label;
END_ENTITY;

ENTITY common_datum
  SUBTYPE OF (composite_shape_aspect, datum);
WHERE
  WR1: SIZEOF(SELF\composite_shape_aspect.component_relationships) = 2;
  WR2: SIZEOF(QUERY(sar <* SELF\composite_shape_aspect.component_relationships | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(sar.related_shape_aspect)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM' IN TYPEOF(sar.related_shape_aspect))))) = 0;
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 (boolean_expression, binary_generic_expression);
  SELF\binary_generic_expression.operands : LIST[2:2] OF expression;
WHERE
  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2]))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[2]))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF\binary_generic_expression.operands[1])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 complex_area
  ABSTRACT SUPERTYPE OF (path_area_with_parameters
                         ANDOR primitive_2d_with_inner_boundary)
  SUBTYPE OF (primitive_2d);
END_ENTITY;

ENTITY complex_clause
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY complex_conjunctive_clause
  SUBTYPE OF (complex_clause);
END_ENTITY;

ENTITY complex_disjunctive_clause
  SUBTYPE OF (complex_clause);
END_ENTITY;

ENTITY complex_number_literal
  SUBTYPE OF (generic_literal);
  real_part : REAL;
  imag_part : REAL;
END_ENTITY;

ENTITY complex_number_literal_polar
  SUBTYPE OF (complex_number_literal);
  modulus : REAL;
  argument : REAL;
DERIVE
  SELF\complex_number_literal.real_part : REAL := modulus * COS(argument);
  SELF\complex_number_literal.imag_part : REAL := modulus * SIN(argument);
WHERE
  WR1: modulus >= 0;
  WR2: {0 <= argument <= 2 * PI};
END_ENTITY;

ENTITY complex_shelled_solid
  SUBTYPE OF (shelled_solid);
  thickened_face_list : LIST[1:?] OF SET[1:?] OF face_surface;
  thickness_list : LIST[1:?] OF length_measure;
WHERE
  WR1: SIZEOF(thickened_face_list) = SIZEOF(thickness_list);
  WR2: SIZEOF(QUERY(q <* thickness_list | (q = 0))) = 0;
END_ENTITY;

ENTITY complex_triangulated_face
  SUBTYPE OF (tessellated_face);
  pnindex : LIST[0:?] OF INTEGER;
  triangle_strips : LIST[0:?] OF LIST[3:?] OF INTEGER;
  triangle_fans : LIST[0:?] OF LIST[3:?] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> SELF\tessellated_face.coordinates.npoints));
  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
END_ENTITY;

ENTITY complex_triangulated_surface_set
  SUBTYPE OF (tessellated_surface_set);
  pnindex : LIST[0:?] OF INTEGER;
  triangle_strips : LIST[0:?] OF LIST[3:?] OF INTEGER;
  triangle_fans : LIST[0:?] OF LIST[3:?] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> SELF\tessellated_surface_set.coordinates.npoints));
  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
END_ENTITY;

ENTITY component_definition
  SUBTYPE OF (product_definition, product_definition_relationship);
DERIVE
  SELF\product_definition_relationship.related_product_definition : component_definition := SELF;
WHERE
  WR1: NOT EXISTS(SELF\product_definition_relationship.description);
  WR2: NOT EXISTS(SELF\property_definition.description);
  WR3: SELF\product_definition_relationship.id = SELF\product_definition.id;
  WR4: SELF\product_definition_relationship.name = 'definition usage';
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY component_feature
  SUBTYPE OF (shape_aspect);
  SELF\shape_aspect.of_shape : assembly_component;
END_ENTITY;

ENTITY component_feature_joint
  SUBTYPE OF (shape_aspect_relationship, shape_aspect);
  SELF\shape_aspect_relationship.relating_shape_aspect : component_feature;
  SELF\shape_aspect_relationship.related_shape_aspect : component_feature;
END_ENTITY;

ENTITY component_feature_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : component_feature;
  SELF\shape_aspect_relationship.related_shape_aspect : component_feature;
WHERE
  WR1: SELF\shape_aspect_relationship.related_shape_aspect :<>: SELF\shape_aspect_relationship.relating_shape_aspect;
END_ENTITY;

ENTITY component_mating_constraint_condition
  SUBTYPE OF (shape_aspect);
UNIQUE
  UR1: SELF\shape_aspect.name, SELF\shape_aspect.of_shape;
END_ENTITY;

ENTITY component_path_shape_aspect
  SUBTYPE OF (shape_aspect);
  location : multi_or_next_assembly_usage_occurrence;
  component_shape_aspect : internal_or_reflected_shape_aspect;
UNIQUE
  UR1: location, component_shape_aspect;
END_ENTITY;

ENTITY component_terminal
  SUBTYPE OF (component_feature);
END_ENTITY;

ENTITY composite_assembly_sequence_definition
  SUBTYPE OF (product_definition);
WHERE
  WR1: SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN TYPEOF(pdr))) > 0;
END_ENTITY;

ENTITY composite_assembly_table
  SUBTYPE OF (part_laminate_table);
END_ENTITY;

ENTITY composite_curve
  SUBTYPE OF (bounded_curve);
  segments : LIST[1:?] OF composite_curve_segment;
  self_intersect : LOGICAL;
DERIVE
  n_segments : INTEGER := SIZEOF(segments);
  closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous;
WHERE
  WR1: ((NOT closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 1)) OR ((closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 0));
END_ENTITY;

ENTITY composite_curve_on_surface
  SUPERTYPE OF (boundary_curve)
  SUBTYPE OF (composite_curve);
DERIVE
  basis_surface : SET[0:2] OF surface := get_basis_surface(SELF);
WHERE
  WR1: SIZEOF(basis_surface) > 0;
  WR2: constraints_composite_curve_on_surface(SELF);
END_ENTITY;

ENTITY composite_curve_segment
  SUBTYPE OF (founded_item);
  transition : transition_code;
  same_sense : BOOLEAN;
  parent_curve : curve;
INVERSE
  using_curves : BAG[1:?] OF composite_curve FOR segments;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN TYPEOF(parent_curve));
END_ENTITY;

ENTITY composite_curve_transition_locator
  SUBTYPE OF (founded_item);
  basis_curve : composite_curve;
  transition_index : INTEGER;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY composite_group_shape_aspect
  SUBTYPE OF (composite_shape_aspect);
END_ENTITY;

ENTITY composite_hole
  SUBTYPE OF (compound_feature);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SELF\characterized_object.description IN ['counterbore','countersunk']);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY(sar <* csa.component_relationships | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN TYPEOF(sar.related_shape_aspect)))))) = 2)))) = 1)))) = 1);
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR ((NOT (SELF\characterized_object.description = 'countersunk')) OR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY(sar <* csa.component_relationships | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN TYPEOF(sar.related_shape_aspect)) AND (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(sar.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in diameter occurrence') AND (SIZEOF(QUERY(fcr2 <* QUERY(sar2 <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar2.description = 'taper usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar2)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr2.related_shape_aspect)))) = 1)))) = 0)))) = 0))))) = 1)))) = 1)))) = 1));
END_ENTITY;

ENTITY composite_material_designation
  SUBTYPE OF (material_designation);
END_ENTITY;

ENTITY composite_shape_aspect
  SUPERTYPE OF (ONEOF (continuous_shape_aspect,
                       common_datum,
                       composite_group_shape_aspect))
  SUBTYPE OF (shape_aspect);
INVERSE
  component_relationships : SET[2:?] OF shape_aspect_relationship FOR relating_shape_aspect;
END_ENTITY;

ENTITY composite_sheet_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION'] * TYPEOF(SELF)) = 1;
END_ENTITY;

ENTITY composite_text
  SUBTYPE OF (geometric_representation_item);
  collected_text : SET[2:?] OF text_or_character;
WHERE
  WR1: acyclic_composite_text(SELF, collected_text);
END_ENTITY;

ENTITY composite_text_with_associated_curves
  SUBTYPE OF (composite_text);
  associated_curves : SET[1:?] OF curve;
END_ENTITY;

ENTITY composite_text_with_blanking_box
  SUBTYPE OF (composite_text);
  blanking : planar_box;
END_ENTITY;

ENTITY composite_text_with_delineation
  SUBTYPE OF (composite_text);
  delineation : text_delineation;
END_ENTITY;

ENTITY composite_text_with_extent
  SUBTYPE OF (composite_text);
  extent : planar_extent;
END_ENTITY;

ENTITY composite_unit_shape_aspect
  SUBTYPE OF (composite_shape_aspect);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_GROUP_SHAPE_ASPECT' IN TYPEOF(SELF));
END_ENTITY;

ENTITY compound_feature
  SUBTYPE OF (feature_definition);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((csa.name = 'compound feature in solid') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa))))) = 1))) = 1);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa))) = 1))) = 1);
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY(fcr <* csa.component_relationships | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(fcr))))) = 0)))) = 1)))) = 1);
  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)))) = 1))) = 1);
  WR5: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY(sar <* csa.component_relationships | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THREAD' IN TYPEOF(sar.related_shape_aspect)))) = 0)))) = 1)))) = 1);
  WR6: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY(sar <* csa.component_relationships | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_FEATURE' IN TYPEOF(sar.related_shape_aspect)) AND (sar.related_shape_aspect\characterized_object.name <> SELF\characterized_object.name)))) = 0))) = 1))) = 1);
END_ENTITY;

ENTITY compound_representation_item
  SUPERTYPE OF (ONEOF (point_and_vector,
                       point_array)
               ANDOR (ONEOF (row_representation_item,
                    table_representation_item)))
  SUBTYPE OF (representation_item);
  item_element : compound_item_definition;
END_ENTITY;

ENTITY compound_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items)) AND (SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 3);
  WR2: SIZEOF(QUERY(cbsr_i <* SELF\representation.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(cbsr_i)) <> 1)) = 0;
  WR3: SIZEOF(QUERY(cbsr_i <* SELF\representation.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(cbsr_i)) = 1)) > 0;
  WR4: SIZEOF(QUERY(cbsr_i <* SELF\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(cbsr_i)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'] * TYPEOF(cbsr_i\mapped_item.mapping_source)) <> 1))) = 0;
END_ENTITY;

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

ENTITY concentricity_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
END_ENTITY;

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

ENTITY concept_feature_relationship;
  name : label;
  description : OPTIONAL text;
  relating_product_concept_feature : product_concept_feature;
  related_product_concept_feature : product_concept_feature;
END_ENTITY;

ENTITY concept_feature_relationship_with_condition
  SUBTYPE OF (concept_feature_relationship);
  conditional_operator : concept_feature_operator;
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_concept_feature
  SUBTYPE OF (product_concept_feature);
  condition : concept_feature_relationship_with_condition;
END_ENTITY;

ENTITY conditional_configuration
  SUBTYPE OF (conditional_effectivity);
  configuration_type : STRING;
  inheritance_type : STRING;
END_ENTITY;

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

ENTITY conductance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.siemens);
END_ENTITY;

ENTITY configurable_item
  SUBTYPE OF (configuration_item);
  item_concept_feature : SET[1:?] OF product_concept_feature_association;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 configured_effectivity_assignment
  SUBTYPE OF (effectivity_assignment);
  items : SET[1:?] OF configured_effectivity_item;
WHERE
  WR1: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY'] * TYPEOF(SELF.assigned_effectivity)) = 1) AND (SELF.assigned_effectivity.id = 'configuration validity');
  WR2: SIZEOF(SELF.items) = 1;
  WR3: SIZEOF(QUERY(i <* SELF.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) OR NOT (i\product_definition.frame_of_reference.name IN ['conceptual definition', 'part occurrence', 'functional definition', 'alternative definition']))) = 0;
  WR4: SELF.role.name IN ['design','usage'];
  WR5: (SELF.role.name <> 'design') OR (SIZEOF(QUERY(i <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) AND (i\product_definition.frame_of_reference.name = 'part occurrence'))) = 0);
  WR6: (SELF.role.name <> 'usage') OR (SIZEOF(QUERY(i <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) AND (i\product_definition.frame_of_reference.name = 'conceptual definition'))) = 0);
  WR7: SELF.role.description IN ['exception','inherited','local'];
  WR8: SIZEOF(QUERY(x <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY_CONTEXT_ASSIGNMENT.ASSIGNED_EFFECTIVITY_ASSIGNMENT') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURED_EFFECTIVITY_CONTEXT_ASSIGNMENT' IN TYPEOF(x))) = 1;
END_ENTITY;

ENTITY configured_effectivity_context_assignment
  SUBTYPE OF (effectivity_context_assignment);
  SELF\effectivity_context_assignment.assigned_effectivity_assignment : configured_effectivity_assignment;
  items : SET[1:?] OF configured_effectivity_context_item;
WHERE
  WR1: SIZEOF(SELF.items) = 1;
END_ENTITY;

ENTITY conic
  SUPERTYPE OF (ONEOF (circle,
                       ellipse,
                       hyperbola,
                       parabola))
  SUBTYPE OF (curve);
  position : axis2_placement;
END_ENTITY;

ENTITY conical_stepped_hole_transition
  SUBTYPE OF (geometric_representation_item);
  transition_number : positive_integer;
  cone_apex_angle : plane_angle_measure;
  cone_base_radius : positive_length_measure;
END_ENTITY;

ENTITY conical_surface
  SUBTYPE OF (elementary_surface);
  radius : length_measure;
  semi_angle : plane_angle_measure;
WHERE
  WR1: radius >= 0.0;
END_ENTITY;

ENTITY connected_edge_set
  SUBTYPE OF (topological_representation_item);
  ces_edges : SET[1:?] OF edge;
END_ENTITY;

ENTITY connected_edge_sub_set
  SUBTYPE OF (connected_edge_set);
  parent_edge_set : connected_edge_set;
WHERE
  WR1: SELF :<>: parent_edge_set;
END_ENTITY;

ENTITY connected_face_set
  SUPERTYPE OF (ONEOF (closed_shell,
                       open_shell))
  SUBTYPE OF (topological_representation_item);
  cfs_faces : SET[1:?] OF face;
END_ENTITY;

ENTITY connected_face_sub_set
  SUBTYPE OF (connected_face_set);
  parent_face_set : connected_face_set;
WHERE
  WR1: SELF :<>: parent_face_set;
END_ENTITY;

ENTITY connection_definition_to_connection
  SUBTYPE OF (group);
END_ENTITY;

ENTITY connection_zone_based_assembly_joint
  SUBTYPE OF (assembly_joint);
END_ENTITY;

ENTITY connection_zone_interface_plane_relationship
  SUBTYPE OF (shape_aspect, shape_aspect_relationship);
UNIQUE
  UR1: SELF\shape_aspect_relationship.name;
END_ENTITY;

ENTITY connectivity_definition
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY connectivity_definition_item_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : connectivity_definition;
END_ENTITY;

ENTITY constant_function
  SUBTYPE OF (maths_function, generic_literal);
  sole_output : maths_value;
  source_of_domain : maths_space_or_function;
WHERE
  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
  WR2: expression_is_constant(domain_from(source_of_domain));
END_ENTITY;

ENTITY constituent_shape_aspect
  SUBTYPE OF (shape_aspect);
  parent : shape_aspect;
DERIVE
  SELF\shape_aspect.of_shape : product_definition_shape := get_product_definition_shape(SELF);
END_ENTITY;

ENTITY constrained_kinematic_motion_representation
  SUBTYPE OF (representation_relationship_with_transformation);
  SELF\representation_relationship.rep_1 : representative_shape_representation;
  SELF\representation_relationship.rep_2 : representative_shape_representation;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2));
  WR2: ((dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) = 3) AND (dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) = 3));
  WR3: (SELF\representation_relationship.rep_1 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND (SELF\representation_relationship.rep_2 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_PAIR' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator);
END_ENTITY;

ENTITY constructive_geometry_representation
  SUBTYPE OF (representation);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items)) AND ({2 <= SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension <= 3});
  WR2: SIZEOF(QUERY(cgr_i <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONICAL_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CYLINDRICAL_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HYPERBOLA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_2D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARABOLA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_TRIMMED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_LINEAR_EXTRUSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_REVOLUTION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOROIDAL_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET'] * TYPEOF(cgr_i)) <> 1)) = 0;
  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) > 0;
END_ENTITY;

ENTITY constructive_geometry_representation_relationship
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : constructive_geometry_representation_or_shape_representation;
  SELF\representation_relationship.rep_2 : constructive_geometry_representation;
WHERE
  WR1: (SELF\representation_relationship.rep_1\representation.context_of_items :=: SELF\representation_relationship.rep_2\representation.context_of_items) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation_relationship.rep_1\representation.context_of_items));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY contact_feature
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY contact_feature_definition
  SUBTYPE OF (shape_feature_definition);
END_ENTITY;

ENTITY contact_feature_definition_fit_relationship
  SUBTYPE OF (shape_feature_definition_fit_relationship);
  SELF\characterized_object_relationship.relating_object : contact_feature_definition;
  SELF\characterized_object_relationship.related_object : contact_feature_definition;
END_ENTITY;

ENTITY contact_feature_fit_relationship
  SUBTYPE OF (shape_feature_fit_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : contact_feature;
  SELF\shape_aspect_relationship.related_shape_aspect : contact_feature;
END_ENTITY;

ENTITY contact_ratio_representation
  SUBTYPE OF (representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1) AND (SIZEOF(QUERY(i <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] * TYPEOF(i)) = 1) AND (i.name = 'ratio value'))) = 1);
  WR2: (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | pdr\property_definition_representation.name = 'contact ratio reference')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | (pdr\property_definition_representation.name = 'contact ratio reference') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(pdr\property_definition_representation.definition\property_definition.definition)))) = 1);
  WR3: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | SIZEOF(QUERY(gpa <* USEDIN(pdr.definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(gpa\general_property_association.base_definition)) AND (gpa\general_property_association.base_definition\general_property.name = 'surface_condition'))) = 1)) = 1);
END_ENTITY;

ENTITY contacting_feature
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: SELF\shape_aspect.product_definitional = FALSE;
END_ENTITY;

ENTITY contained_acceptance
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_control;
  SELF\action_relationship.related_action : risk_acceptance;
END_ENTITY;

ENTITY contained_analysis
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_assessment;
  SELF\action_relationship.related_action : risk_analysis;
END_ENTITY;

ENTITY contained_communication
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_control;
  SELF\action_relationship.related_action : risk_communication;
END_ENTITY;

ENTITY contained_estimation
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_analysis;
  SELF\action_relationship.related_action : risk_estimation;
END_ENTITY;

ENTITY contained_evaluation
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_assessment;
  SELF\action_relationship.related_action : risk_evaluation;
END_ENTITY;

ENTITY contained_identification
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_analysis;
  SELF\action_relationship.related_action : risk_identification;
END_ENTITY;

ENTITY contained_treatments
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_control;
  SELF\action_relationship.related_action : risk_treatment;
END_ENTITY;

ENTITY containing_message
  SUBTYPE OF (group_assignment);
  items : SET[1:1] OF structured_message;
  SELF\group_assignment.assigned_group : message_contents_group;
DERIVE
  message_contents_group : message_contents_group := SELF\group_assignment.assigned_group;
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_invisibility
  SUBTYPE OF (invisibility);
  presentation_context : invisibility_context;
END_ENTITY;

ENTITY context_dependent_kinematic_link_representation;
  representation_relation : kinematic_link_representation_association;
  represented_product_relation : product_definition_relationship_kinematics;
END_ENTITY;

ENTITY context_dependent_over_riding_styled_item
  SUBTYPE OF (over_riding_styled_item);
  style_context : LIST[1:?] OF style_context_select;
WHERE
  WR1: (SIZEOF(QUERY(sc <* style_context | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(sc))) = 1) OR (SIZEOF(QUERY(sc <* style_context | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(sc)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN TYPEOF(sc)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP' IN TYPEOF(sc)))) = SIZEOF(style_context));
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: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(represented_product_relation\property_definition.definition);
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

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

ENTITY continuous_shape_aspect
  SUPERTYPE OF (ONEOF (between_shape_aspect,
                       all_around_shape_aspect))
  SUBTYPE OF (composite_shape_aspect);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 convex_hexahedron
  SUBTYPE OF (faceted_primitive);
WHERE
  WR1: SIZEOF(points) = 8;
  WR2: above_plane(points[1], points[2], points[3], points[4]) = 0.0;
  WR3: above_plane(points[5], points[8], points[7], points[6]) = 0.0;
  WR4: above_plane(points[1], points[4], points[8], points[5]) = 0.0;
  WR5: above_plane(points[4], points[3], points[7], points[8]) = 0.0;
  WR6: above_plane(points[3], points[2], points[6], points[7]) = 0.0;
  WR7: above_plane(points[1], points[5], points[6], points[2]) = 0.0;
  WR8: same_side([points[1],points[2],points[3]], [points[5],points[6],points[7],points[8]]);
  WR9: same_side([points[1],points[4],points[8]], [points[3],points[7],points[6],points[2]]);
  WR10: same_side([points[1],points[2],points[5]], [points[3],points[7],points[8],points[4]]);
  WR11: same_side([points[5],points[6],points[7]], [points[1],points[2],points[3],points[4]]);
  WR12: same_side([points[3],points[7],points[6]], [points[1],points[4],points[8],points[5]]);
  WR13: same_side([points[3],points[7],points[8]], [points[1],points[5],points[6],points[2]]);
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 coordinates_list
  SUBTYPE OF (tessellated_item);
  npoints : INTEGER;
  position_coords : LIST[1:?] OF LIST[3:3] OF REAL;
WHERE
  WR1: npoints = SIZEOF(position_coords);
  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPOSITIONED_TESSELLATED_ITEM'] * TYPEOF(SELF)) = 0;
END_ENTITY;

ENTITY core_sample
  SUBTYPE OF (point_based_llai);
END_ENTITY;

ENTITY core_sample_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY cos_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY counterbore_hole_definition
  SUBTYPE OF (explicit_composite_hole);
  counterbore : LIST[1:?] OF UNIQUE explicit_round_hole;
  drilled_hole_depth : OPTIONAL positive_length_measure_with_unit;
  drilled_hole_depth_tolerance : OPTIONAL tolerance_value;
  drilled_hole_diameter : positive_length_measure_with_unit;
  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  through_hole : BOOLEAN;
INVERSE
  bottom_condition : SET[0:1] OF round_hole_bottom_condition FOR target;
WHERE
  WR1: through_hole XOR EXISTS(drilled_hole_depth);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
  WR6: NOT (through_hole AND (SIZEOF(bottom_condition) = 1));
END_ENTITY;

ENTITY counterbore_hole_occurrence
  SUBTYPE OF (shape_aspect_occurrence);
  SELF\shape_aspect_occurrence.definition : counterbore_hole_definition;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY counterbore_hole_occurrence_in_assembly
  SUBTYPE OF (counterbore_hole_occurrence);
  modified_components : LIST[1:?] OF UNIQUE multi_level_reference_designator;
END_ENTITY;

ENTITY counterdrill_hole_definition
  SUBTYPE OF (explicit_composite_hole);
  counterbore : explicit_round_hole;
  counterdrill_angle : positive_plane_angle_measure_with_unit;
  counterdrill_angle_tolerance : OPTIONAL tolerance_value;
  drilled_hole_depth : OPTIONAL positive_length_measure_with_unit;
  drilled_hole_depth_tolerance : OPTIONAL tolerance_value;
  drilled_hole_diameter : positive_length_measure_with_unit;
  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  through_hole : BOOLEAN;
INVERSE
  bottom_condition : SET[0:1] OF round_hole_bottom_condition FOR target;
WHERE
  WR1: through_hole XOR EXISTS(drilled_hole_depth);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(counterdrill_angle_tolerance\tolerance_value.lower_bound);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(counterdrill_angle_tolerance\tolerance_value.upper_bound);
  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
  WR5: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
  WR7: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
  WR8: NOT (through_hole AND (SIZEOF(bottom_condition) = 1));
END_ENTITY;

ENTITY counterdrill_hole_occurrence
  SUBTYPE OF (shape_aspect_occurrence);
  SELF\shape_aspect_occurrence.definition : counterdrill_hole_definition;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY counterdrill_hole_occurrence_in_assembly
  SUBTYPE OF (counterdrill_hole_occurrence);
  modified_components : LIST[1:?] OF UNIQUE multi_level_reference_designator;
END_ENTITY;

ENTITY countersink_hole_definition
  SUBTYPE OF (explicit_composite_hole);
  countersink_angle : positive_plane_angle_measure_with_unit;
  countersink_angle_tolerance : OPTIONAL tolerance_value;
  countersink_diameter : positive_length_measure_with_unit;
  countersink_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  drilled_hole_depth : OPTIONAL positive_length_measure_with_unit;
  drilled_hole_depth_tolerance : OPTIONAL tolerance_value;
  drilled_hole_diameter : positive_length_measure_with_unit;
  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  through_hole : BOOLEAN;
INVERSE
  bottom_condition : SET[0:1] OF round_hole_bottom_condition FOR target;
WHERE
  WR1: through_hole XOR EXISTS(drilled_hole_depth);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(countersink_angle_tolerance\tolerance_value.lower_bound);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(countersink_angle_tolerance\tolerance_value.upper_bound);
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(countersink_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(countersink_diameter_tolerance\tolerance_value.lower_bound));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(countersink_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(countersink_diameter_tolerance\tolerance_value.upper_bound));
  WR6: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
  WR7: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
  WR8: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
  WR9: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(drilled_hole_diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
  WR10: NOT (through_hole AND (SIZEOF(bottom_condition) = 1));
END_ENTITY;

ENTITY countersink_hole_occurrence
  SUBTYPE OF (shape_aspect_occurrence);
  SELF\shape_aspect_occurrence.definition : countersink_hole_definition;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY countersink_hole_occurrence_in_assembly
  SUBTYPE OF (countersink_hole_occurrence);
  modified_components : LIST[1:?] OF UNIQUE multi_level_reference_designator;
END_ENTITY;

ENTITY criterion_report_item_with_number_of_instances
  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
  statistical_value : count_measure;
  value_type : summary_report_style_type;
UNIQUE
  UR1: SELF\data_equivalence_inspection_criterion_report_item.criterion_report, value_type;
END_ENTITY;

ENTITY criterion_report_item_with_value
  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
  report_value : measure_with_unit;
  value_type : label;
UNIQUE
  UR1: SELF\data_equivalence_inspection_criterion_report_item.criterion_report, value_type;
END_ENTITY;

ENTITY cross_sectional_alternative_shape_element
  SUBTYPE OF (cross_sectional_part_shape_element);
INVERSE
  items : SET[2:?] OF shape_aspect_relationship FOR relating_shape_aspect;
END_ENTITY;

ENTITY cross_sectional_group_shape_element
  SUPERTYPE OF (ONEOF (cross_sectional_group_shape_element_with_tubular_cover,
                       cross_sectional_group_shape_element_with_lacing,
                       twisted_cross_sectional_group_shape_element))
  SUBTYPE OF (cross_sectional_part_shape_element);
INVERSE
  items : SET[1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
END_ENTITY;

ENTITY cross_sectional_group_shape_element_with_lacing
  SUBTYPE OF (cross_sectional_group_shape_element);
END_ENTITY;

ENTITY cross_sectional_group_shape_element_with_tubular_cover
  SUBTYPE OF (cross_sectional_group_shape_element);
END_ENTITY;

ENTITY cross_sectional_occurrence_shape_element
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY cross_sectional_part_shape_element
  SUPERTYPE OF (ONEOF (cross_sectional_alternative_shape_element,
                       cross_sectional_group_shape_element))
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY csg_2d_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF csg_2d_shape_select;
WHERE
  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
  WR2: SIZEOF(QUERY(it <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID'] * TYPEOF(it)) = 1) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION' IN TYPEOF(it\mapped_item.mapping_source.mapped_representation))))) >= 1;
  WR3: SIZEOF(QUERY(it <* SELF.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) AND (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION') IN TYPEOF(it\mapped_item.mapping_source.mapped_representation)))))) = 0;
END_ENTITY;

ENTITY csg_primitive_solid_2d
  SUBTYPE OF (csg_solid_2d);
  SELF\csg_solid.tree_root_expression : bounded_primitive_2d;
END_ENTITY;

ENTITY csg_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF csg_shape_representation_select;
WHERE
  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR3: SIZEOF(QUERY(sr <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA' IN TYPEOF(it))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REVOLVED_FACE_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTRUDED_FACE_SOLID'] * TYPEOF(sr\solid_replica.parent_solid)) = 0))) = 0;
  WR4: SIZEOF(QUERY(it <* SELF.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(it)))) > 0;
END_ENTITY;

ENTITY csg_solid
  SUBTYPE OF (solid_model);
  tree_root_expression : csg_select;
END_ENTITY;

ENTITY csg_solid_2d
  SUBTYPE OF (csg_solid);
  SELF\csg_solid.tree_root_expression : csg_select_2d;
WHERE
  WR1: valid_csg_2d_primitives(SELF);
END_ENTITY;

ENTITY cubic_bezier_tessellated_edge
  SUBTYPE OF (tessellated_edge);
  SELF\tessellated_edge.line_strip : LIST[4:?] OF INTEGER;
END_ENTITY;

ENTITY cubic_bezier_triangulated_face
  SUBTYPE OF (tessellated_face);
  ctriangles : LIST[1:?] OF LIST[10:10] OF INTEGER;
WHERE
  WR1: SIZEOF(SELF\tessellated_face.normals) = 0;
END_ENTITY;

ENTITY cubic_tessellated_connecting_edge
  SUBTYPE OF (cubic_bezier_tessellated_edge);
  smooth : LOGICAL;
  face1 : cubic_bezier_triangulated_face;
  face2 : cubic_bezier_triangulated_face;
END_ENTITY;

ENTITY currency
  ABSTRACT SUPERTYPE OF ((ONEOF (externally_defined_currency,
                                 iso4217_currency)))
  SUBTYPE OF (context_dependent_unit);
WHERE
  WR1: ((SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0));
END_ENTITY;

ENTITY currency_measure_with_unit
  SUBTYPE OF (measure_with_unit);
  SELF\measure_with_unit.unit_component : currency;
END_ENTITY;

ENTITY current_change_element_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : current_element_assignment_select;
  items : SET[1:?] OF change_management_object;
END_ENTITY;

ENTITY curve
  SUPERTYPE OF (ONEOF (line,
                       conic,
                       clothoid,
                       circular_involute,
                       pcurve,
                       surface_curve,
                       offset_curve_2d,
                       offset_curve_3d,
                       curve_replica))
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;

ENTITY curve_11
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
END_ENTITY;

ENTITY curve_based_path
  SUBTYPE OF (path_node);
  path_curve : curve;
END_ENTITY;

ENTITY curve_based_path_with_orientation
  SUBTYPE OF (kinematic_path_segment);
  position_curve : bounded_curve;
  orientation_curve : bounded_curve;
WHERE
  WR1: TYPEOF(position_curve) = TYPEOF(orientation_curve);
END_ENTITY;

ENTITY curve_based_path_with_orientation_and_parameters
  SUBTYPE OF (curve_based_path_with_orientation);
  parameters : path_parameter_representation;
END_ENTITY;

ENTITY curve_bounded_surface
  SUBTYPE OF (bounded_surface);
  basis_surface : surface;
  boundaries : SET[1:?] OF boundary_curve;
  implicit_outer : BOOLEAN;
WHERE
  WR1: (NOT implicit_outer) OR (SIZEOF(QUERY(temp <* boundaries | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) = 0);
  WR2: (NOT (implicit_outer)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(basis_surface));
  WR3: SIZEOF(QUERY(temp <* boundaries | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) <= 1;
  WR4: SIZEOF(QUERY(temp <* boundaries | (temp\composite_curve_on_surface.basis_surface[1] <> basis_surface))) = 0;
END_ENTITY;

ENTITY curve_dimension
  SUBTYPE OF (dimension_curve_directed_callout);
END_ENTITY;

ENTITY curve_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF curve;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
  near_points : SET[0:4] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY curve_length_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF bounded_curve;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY curve_replica
  SUBTYPE OF (curve);
  parent_curve : curve;
  transformation : cartesian_transformation_operator;
WHERE
  WR1: transformation.dim = parent_curve.dim;
  WR2: acyclic_curve_replica(SELF, parent_curve);
END_ENTITY;

ENTITY curve_segment_set
  SUBTYPE OF (geometric_representation_item);
  segments : SET[1:?] OF composite_curve_segment;
END_ENTITY;

ENTITY curve_smoothness_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:1] OF curve_segment_set;
  smoothness : transition_code;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY curve_style
  SUBTYPE OF (founded_item);
  name : label;
  curve_font : OPTIONAL curve_font_or_scaled_curve_font_select;
  curve_width : OPTIONAL size_select;
  curve_colour : OPTIONAL colour;
WHERE
  WR1: EXISTS(curve_font) OR EXISTS(curve_width) OR EXISTS(curve_colour);
END_ENTITY;

ENTITY curve_style_font
  SUBTYPE OF (founded_item);
  name : label;
  pattern_list : LIST[1:?] OF curve_style_font_pattern;
END_ENTITY;

ENTITY curve_style_font_and_scaling
  SUBTYPE OF (founded_item);
  name : label;
  curve_font : curve_style_font_select;
  curve_font_scaling : REAL;
END_ENTITY;

ENTITY curve_style_font_pattern
  SUBTYPE OF (founded_item);
  visible_segment_length : positive_length_measure;
  invisible_segment_length : positive_length_measure;
END_ENTITY;

ENTITY curve_style_parameters_representation
  SUBTYPE OF (representation);
END_ENTITY;

ENTITY curve_style_parameters_with_ends
  SUBTYPE OF (curve_style_parameters_representation);
END_ENTITY;

ENTITY curve_style_rendering;
  rendering_method : shading_curve_method;
  rendering_properties : surface_rendering_properties;
END_ENTITY;

ENTITY curve_swept_solid_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_AREA_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_DISK_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_AREA_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_DISK_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR3: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_SWEPT_SOLID_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR4: SIZEOF(QUERY(scsas <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE_SWEPT_AREA_SOLID' IN TYPEOF(it)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(scsas\surface_curve_swept_area_solid.directrix)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(scsas\surface_curve_swept_area_solid.directrix))))) = 0;
END_ENTITY;

ENTITY curve_with_excessive_segments
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_COMPOSITE_CURVE_SELECT']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY curve_with_small_curvature_radius
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY cyclide_segment_solid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  radius1 : positive_length_measure;
  radius2 : positive_length_measure;
  cone_angle1 : plane_angle_measure;
  cone_angle2 : plane_angle_measure;
  turn_angle : plane_angle_measure;
END_ENTITY;

ENTITY cylindrical_11
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY cylindrical_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY cylindrical_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : cylindrical_pair;
  actual_translation : length_measure;
  actual_rotation : plane_angle_measure;
END_ENTITY;

ENTITY cylindrical_pair_with_range
  SUBTYPE OF (cylindrical_pair);
  lower_limit_actual_translation : OPTIONAL length_measure;
  upper_limit_actual_translation : OPTIONAL length_measure;
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR (lower_limit_actual_translation < upper_limit_actual_translation);
  WR2: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY cylindrical_point
  SUBTYPE OF (cartesian_point);
  r : length_measure;
  theta : plane_angle_measure;
  z : length_measure;
DERIVE
  SELF\cartesian_point.coordinates : LIST[3:3] OF length_measure := [r * COS(theta),r * SIN(theta),z];
WHERE
  WR1: r >= 0.0;
END_ENTITY;

ENTITY cylindrical_surface
  SUBTYPE OF (elementary_surface);
  radius : positive_length_measure;
END_ENTITY;

ENTITY cylindrical_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  radius : positive_length_measure;
  height : positive_length_measure;
END_ENTITY;

ENTITY cylindricity_tolerance
  SUBTYPE OF (geometric_tolerance);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY darting_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY darting_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY data_environment;
  name : label;
  description : text;
  elements : SET[1:?] OF characterized_property_representation;
END_ENTITY;

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

ENTITY data_equivalence_criteria_representation
  SUBTYPE OF (representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY data_equivalence_criterion
  SUBTYPE OF (representation_item);
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_criterion_assessment_association;
  criterion : data_equivalence_criterion;
  assessment_specification : data_equivalence_assessment_specification;
END_ENTITY;

ENTITY data_equivalence_criterion_inspection_association
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : data_equivalence_criterion;
  SELF\representation_item_relationship.related_representation_item : data_equivalence_inspection_requirement;
END_ENTITY;

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

ENTITY data_equivalence_definition_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_data_equivalence_definition : data_equivalence_definition;
  related_data_equivalence_definition : data_equivalence_definition;
END_ENTITY;

ENTITY data_equivalence_definition_representation_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  definition : data_equivalence_definition;
  used_representation : used_equivalence_representation_select;
END_ENTITY;

ENTITY data_equivalence_inspected_element_pair
  SUBTYPE OF (representation_item);
  comparing_elements : SET[1:?] OF inspected_equivalence_element_select;
  compared_elements : SET[1:?] OF inspected_equivalence_element_select;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_criterion_report
  SUBTYPE OF (data_equivalence_inspection_report);
  statistical_values : SET[1:?] OF data_equivalence_inspection_criterion_report_item;
END_ENTITY;

ENTITY data_equivalence_inspection_criterion_report_item
  ABSTRACT SUPERTYPE OF (ONEOF (criterion_report_item_with_number_of_instances,
                                criterion_report_item_with_value)
                        ANDOR ONEOF (a3m_equivalence_criterion_report_item_with_measured_value,
                             criterion_report_item_with_number_of_instances,
                             criterion_report_item_with_value))
  SUBTYPE OF (representation_item);
INVERSE
  criterion_report : data_equivalence_inspection_criterion_report FOR statistical_values;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_instance_report
  SUBTYPE OF (data_equivalence_inspection_report);
  inspected_instances : LIST[1:?] OF data_equivalence_inspection_instance_report_item;
END_ENTITY;

ENTITY data_equivalence_inspection_instance_report_item
  SUBTYPE OF (representation_item);
  inspected_element : data_equivalence_inspected_element_pair_select;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_report
  ABSTRACT SUPERTYPE OF (ONEOF (data_equivalence_inspection_criterion_report,
                                data_equivalence_inspection_instance_report))
  SUBTYPE OF (representation_item);
  inspection_result : data_equivalence_inspection_result;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_requirement
  SUBTYPE OF (representation_item);
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_result
  SUBTYPE OF (representation_item);
  criterion_inspected : data_equivalence_criterion;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_equivalence_inspection_result_representation
  SUBTYPE OF (representation);
  criteria_inspected : data_equivalence_criteria_representation;
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY data_equivalence_inspection_result_with_judgement
  SUBTYPE OF (data_equivalence_inspection_result);
  judgement : BOOLEAN;
END_ENTITY;

ENTITY data_equivalence_report_request;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  criterion_of_report_request : data_equivalence_criterion;
END_ENTITY;

ENTITY data_quality_assessment_measurement_association;
  assessment_specification : data_quality_criterion_assessment_association;
  measurement_requirement : data_quality_criterion_measurement_association;
WHERE
  WR1: SELF.measurement_requirement\representation_item_relationship.relating_representation_item :=: SELF.assessment_specification.criterion;
END_ENTITY;

ENTITY data_quality_assessment_specification;
  description : text;
END_ENTITY;

ENTITY data_quality_criteria_representation
  SUBTYPE OF (representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY data_quality_criterion
  SUBTYPE OF (representation_item);
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_criterion_assessment_association;
  criterion : data_quality_criterion;
  assessment_specification : data_quality_assessment_specification;
END_ENTITY;

ENTITY data_quality_criterion_measurement_association
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : data_quality_criterion;
  SELF\representation_item_relationship.related_representation_item : data_quality_measurement_requirement;
END_ENTITY;

ENTITY data_quality_definition;
  description : text;
END_ENTITY;

ENTITY data_quality_definition_relationship;
  description : text;
  relating_data_quality_definition : data_quality_definition;
  related_data_quality_definition : data_quality_definition;
END_ENTITY;

ENTITY data_quality_definition_representation_relationship;
  description : text;
  definition : data_quality_definition;
  used_representation : used_quality_representation_select;
END_ENTITY;

ENTITY data_quality_inspection_criterion_report
  SUBTYPE OF (data_quality_inspection_report);
  statistical_values : SET[1:2] OF data_quality_inspection_criterion_report_item;
WHERE
  WR1: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF\data_quality_inspection_report.inspection_result.criterion_inspected, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_REPORT_REQUEST.CRITERION_OF_REPORT_REQUEST')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUMMARY_REPORT_REQUEST' IN TYPEOF(i1))) > 0;
  WR2: (SIZEOF(SELF.statistical_values) = 1) OR (SELF.statistical_values[1].value_type <> SELF.statistical_values[2].value_type);
END_ENTITY;

ENTITY data_quality_inspection_criterion_report_item
  SUBTYPE OF (representation_item);
  statistical_value : INTEGER;
  value_type : statistical_value_type;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_inspection_instance_report
  SUBTYPE OF (data_quality_inspection_report);
  inspected_instances : LIST[1:?] OF data_quality_inspection_instance_report_item;
WHERE
  WR1: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF\data_quality_inspection_report.inspection_result.criterion_inspected, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_REPORT_REQUEST.CRITERION_OF_REPORT_REQUEST')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DETAILED_REPORT_REQUEST' IN TYPEOF(i1))) > 0;
END_ENTITY;

ENTITY data_quality_inspection_instance_report_item
  SUBTYPE OF (representation_item);
  inspected_elements : SET[1:?] OF inspected_element_select;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_inspection_report
  SUPERTYPE OF (ONEOF (data_quality_inspection_criterion_report,
                       data_quality_inspection_instance_report))
  SUBTYPE OF (representation_item);
  inspection_result : data_quality_inspection_result;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_inspection_result
  SUBTYPE OF (representation_item);
  criterion_inspected : data_quality_criterion;
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_inspection_result_representation
  SUBTYPE OF (representation);
  criteria_inspected : data_quality_criteria_representation;
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q))) > 0;
  WR2: SIZEOF(inspected_product_definition(SELF)) > 0;
END_ENTITY;

ENTITY data_quality_inspection_result_with_judgement
  SUBTYPE OF (data_quality_inspection_result);
  judgement : BOOLEAN;
END_ENTITY;

ENTITY data_quality_measurement_requirement
  SUBTYPE OF (representation_item);
WHERE
  WR1: SIZEOF(QUERY(q <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN TYPEOF(q))) = 0;
END_ENTITY;

ENTITY data_quality_report_measurement_association
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : data_quality_measurement_requirement;
  SELF\representation_item_relationship.related_representation_item : data_quality_inspection_report;
END_ENTITY;

ENTITY data_quality_report_request
  ABSTRACT SUPERTYPE OF (ONEOF (summary_report_request,
                                detailed_report_request));
  description : text;
  criterion_of_report_request : data_quality_criterion;
END_ENTITY;

ENTITY date
  SUPERTYPE OF (ONEOF (calendar_date,
                       ordinal_date,
                       week_of_year_and_day_date,
                       year_month));
  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_representation_item
  SUBTYPE OF (representation_item, date);
END_ENTITY;

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

ENTITY date_time_representation_item
  SUBTYPE OF (representation_item, date_and_time);
END_ENTITY;

ENTITY date_time_role;
  name : label;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 : OPTIONAL date_time_or_event_occurrence;
WHERE
  WR1: EXISTS(effectivity_end_date) OR EXISTS(effectivity_start_date);
END_ENTITY;

ENTITY datum
  SUBTYPE OF (shape_aspect);
  identification : identifier;
INVERSE
  established_by_relationships : SET[1:?] OF shape_aspect_relationship FOR related_shape_aspect;
UNIQUE
  UR1: identification, SELF\shape_aspect.of_shape;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM' IN TYPEOF(SELF)) XOR ((SIZEOF(QUERY(x <* SELF\datum.established_by_relationships | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET'] * TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)) = 1)) >= 1));
  WR2: SIZEOF(QUERY(x <* SELF\datum.established_by_relationships | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE' IN TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)))) <= 1;
  WR3: SELF\shape_aspect.product_definitional = FALSE;
  WR4: SELF\shape_aspect.name = '';
END_ENTITY;

ENTITY datum_feature
  SUPERTYPE OF (ONEOF (dimensional_location_with_datum_feature,
                       dimensional_size_with_datum_feature))
  SUBTYPE OF (shape_aspect);
INVERSE
  feature_basis_relationship : SET[1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
WHERE
  WR1: SIZEOF(QUERY(sar <* SELF\datum_feature.feature_basis_relationship | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(sar\shape_aspect_relationship.related_shape_aspect)))) = 1;
  WR2: SELF\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY datum_feature_callout
  SUBTYPE OF (draughting_callout);
END_ENTITY;

ENTITY datum_reference;
  precedence : INTEGER;
  referenced_datum : datum;
WHERE
  WR1: precedence > 0;
END_ENTITY;

ENTITY datum_reference_compartment
  SUBTYPE OF (general_datum_reference);
INVERSE
  owner : datum_system FOR constituents;
END_ENTITY;

ENTITY datum_reference_element
  SUBTYPE OF (general_datum_reference);
DERIVE
  owner : general_datum_reference := sts_get_general_datum_reference(SELF);
WHERE
  WR1: SELF <> owner;
  WR2: EXISTS(owner);
  WR3: SELF\shape_aspect.of_shape = owner\shape_aspect.of_shape;
END_ENTITY;

ENTITY datum_reference_modifier_with_value;
  modifier_type : datum_reference_modifier_type;
  modifier_value : length_measure_with_unit;
WHERE
  WR1: modifier_value\measure_with_unit.value_component > 0.0;
END_ENTITY;

ENTITY datum_system
  SUBTYPE OF (shape_aspect);
  constituents : LIST[1:3] OF UNIQUE datum_reference_compartment;
UNIQUE
  UR1: SELF\shape_aspect.of_shape, SELF\shape_aspect.name;
WHERE
  WR1: SELF\shape_aspect.product_definitional = FALSE;
END_ENTITY;

ENTITY datum_system_for_composite_group_element
  SUBTYPE OF (datum_system);
  element : shape_aspect_relationship;
DERIVE
  associated_coordinate_system : axis2_placement_3d := coordinate_system_relation\geometric_item_specific_usage.identified_item;
INVERSE
  coordinate_system_relation : geometric_item_specific_usage FOR definition;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_GROUP_SHAPE_ASPECT' IN TYPEOF(element\shape_aspect_relationship.relating_shape_aspect);
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_GROUP_SHAPE_ASPECT' IN TYPEOF(element\shape_aspect_relationship.related_shape_aspect));
END_ENTITY;

ENTITY datum_target
  SUBTYPE OF (shape_aspect);
  target_id : identifier;
DERIVE
  the_datum : SET[1:?] OF datum := QUERY(sar <* SELF\datum_target.target_basis_relationship | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(sar\shape_aspect_relationship.related_shape_aspect)));
  combined_datum_target_string : STRING := the_datum[1]\datum.identification + target_id;
INVERSE
  target_basis_relationship : SET[1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
UNIQUE
  UR1: combined_datum_target_string, SELF\shape_aspect.of_shape;
WHERE
  WR1: SIZEOF(the_datum) = 1;
  WR2: SELF\shape_aspect.product_definitional = TRUE;
  WR3: 0 < VALUE(target_id);
  WR4: SELF\shape_aspect.name = '';
  WR5: NOT EXISTS(SELF\shape_aspect.description);
END_ENTITY;

ENTITY datum_target_callout
  SUBTYPE OF (draughting_callout);
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 default_model_geometric_view
  SUBTYPE OF (model_geometric_view, shape_aspect);
DERIVE
  SELF\shape_aspect.product_definitional : LOGICAL := FALSE;
UNIQUE
  UR1: of_shape;
WHERE
  WR1: SELF\characterized_object.name = SELF\shape_aspect.name;
  WR2: NOT EXISTS(SELF\characterized_object.description);
  WR3: NOT EXISTS(SELF\shape_aspect.description);
END_ENTITY;

ENTITY default_tolerance_table
  SUBTYPE OF (representation);
WHERE
  WR1: SIZEOF(QUERY(i <* SELF.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFAULT_TOLERANCE_TABLE_CELL' IN TYPEOF(i)))) = 0;
  WR2: (SIZEOF(QUERY(rr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1') | rr.name < 'general tolerance definition')) = 0) AND (SIZEOF(QUERY(rr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1') | (rr.name = 'general tolerance definition') AND (rr.rep_2.name < 'default tolerance'))) = 0) AND (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) = 0);
END_ENTITY;

ENTITY default_tolerance_table_cell
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: SIZEOF(QUERY(x <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFAULT_TOLERANCE_TABLE' IN TYPEOF(x))) = 1;
  WR2: default_tolerance_table_cell_wr2(SELF\compound_representation_item.item_element);
  WR3: default_tolerance_table_cell_wr3(SELF\compound_representation_item.item_element);
  WR4: default_tolerance_table_cell_wr4(SELF\compound_representation_item.item_element);
  WR5: default_tolerance_table_cell_wr5(SELF\compound_representation_item.item_element);
END_ENTITY;

ENTITY defined_character_glyph
  SUBTYPE OF (geometric_representation_item);
  definition : defined_glyph_select;
  placement : axis2_placement;
END_ENTITY;

ENTITY defined_constraint
  ABSTRACT SUPERTYPE OF (equal_parameter_constraint)
  SUBTYPE OF (explicit_constraint);
END_ENTITY;

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

ENTITY defined_symbol
  SUBTYPE OF (geometric_representation_item);
  definition : defined_symbol_select;
  target : symbol_target;
END_ENTITY;

ENTITY definite_integral_expression
  SUBTYPE OF (quantifier_expression);
  lower_limit_neg_infinity : BOOLEAN;
  upper_limit_pos_infinity : BOOLEAN;
DERIVE
  integrand : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
  variable_of_integration : maths_variable := SELF\multiple_arity_generic_expression.operands[2];
  SELF\quantifier_expression.variables : LIST[1:1] OF UNIQUE generic_variable := [variable_of_integration];
WHERE
  WR1: has_values_space(integrand);
  WR2: space_is_continuum(values_space_of(integrand));
  WR3: definite_integral_expr_check(SELF\multiple_arity_generic_expression.operands, lower_limit_neg_infinity, upper_limit_pos_infinity);
END_ENTITY;

ENTITY definite_integral_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  variable_of_integration : input_selector;
  lower_limit_neg_infinity : BOOLEAN;
  upper_limit_pos_infinity : BOOLEAN;
DERIVE
  integrand : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: space_is_continuum(integrand.range);
  WR2: definite_integral_check(integrand.domain, variable_of_integration, lower_limit_neg_infinity, upper_limit_pos_infinity);
END_ENTITY;

ENTITY definitional_product_definition_usage
  SUBTYPE OF (product_definition_usage);
UNIQUE
  UR1: relating_product_definition, related_product_definition;
END_ENTITY;

ENTITY definitional_representation
  SUBTYPE OF (representation);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items);
END_ENTITY;

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

ENTITY definitional_representation_relationship_with_same_context
  SUBTYPE OF (definitional_representation_relationship);
WHERE
  WR1: SELF\representation_relationship.rep_1.context_of_items :=: SELF\representation_relationship.rep_2.context_of_items;
END_ENTITY;

ENTITY degenerate_pcurve
  SUBTYPE OF (point);
  basis_surface : surface;
  reference_to_curve : definitional_representation;
WHERE
  WR1: SIZEOF(reference_to_curve\representation.items) = 1;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(reference_to_curve\representation.items[1]);
  WR3: reference_to_curve\representation.items[1]\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY degenerate_toroidal_surface
  SUBTYPE OF (toroidal_surface);
  select_outer : BOOLEAN;
WHERE
  WR1: major_radius < minor_radius;
END_ENTITY;

ENTITY delete_element
  SUBTYPE OF (change_element);
END_ENTITY;

ENTITY dependent_product_definition_exchange_context
  ABSTRACT SUPERTYPE
  SUBTYPE OF (product_definition_context);
WHERE
  WR1: SIZEOF(TYPEOF(SELF) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IDENTIFICATION_DEPENDENT_PRODUCT_DEFINITION_EXCHANGE_CONTEXT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LANGUAGE_DEPENDENT_PRODUCT_DEFINITION_EXCHANGE_CONTEXT']) > 0;
END_ENTITY;

ENTITY dependent_variable_definition
  SUBTYPE OF (unary_generic_expression);
  name : label;
  description : text;
END_ENTITY;

ENTITY derived_shape_aspect
  SUPERTYPE OF (ONEOF (apex,
                       centre_of_symmetry,
                       geometric_alignment,
                       geometric_contact,
                       geometric_intersection,
                       parallel_offset,
                       perpendicular_to,
                       extension,
                       tangent))
  SUBTYPE OF (shape_aspect);
INVERSE
  deriving_relationships : SET[1:?] OF shape_aspect_deriving_relationship FOR relating_shape_aspect;
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.0));
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 description_text_assignment_relationship;
  id : OPTIONAL identifier;
  description : OPTIONAL text;
  relating : description_text_assignment;
  related : description_text_assignment;
  relation_type : STRING;
WHERE
  WR1: acyclic_description_text_assignment_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_TEXT_ASSIGNMENT_RELATIONSHIP');
END_ENTITY;

ENTITY descriptive_representation_item
  SUPERTYPE OF (ONEOF (tagged_text_item,
                       uniform_resource_identifier))
  SUBTYPE OF (representation_item);
  description : text;
END_ENTITY;

ENTITY design_context
  SUBTYPE OF (product_definition_context);
WHERE
  WR1: SELF.life_cycle_stage = 'design';
END_ENTITY;

ENTITY design_make_from_relationship
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY detailed_equivalence_report_request
  SUBTYPE OF (data_equivalence_report_request);
  report_request_type : detailed_report_style_type;
  report_sequence : preferred_report_ordering;
END_ENTITY;

ENTITY detailed_equivalence_report_request_with_number_of_instances
  SUBTYPE OF (detailed_equivalence_report_request);
  number_of_instances : INTEGER;
DERIVE
  SELF\detailed_equivalence_report_request.report_request_type : detailed_report_style_type := inspected_element;
END_ENTITY;

ENTITY detailed_report_request
  SUBTYPE OF (data_quality_report_request);
  detailed_report_request_type : detailed_report_type;
  report_sequence : preferred_ordering;
END_ENTITY;

ENTITY detailed_report_request_with_number_of_data
  SUBTYPE OF (detailed_report_request);
  number_of_data : INTEGER;
DERIVE
  SELF\detailed_report_request.detailed_report_request_type : detailed_report_type := measured_element;
END_ENTITY;

ENTITY diameter_dimension
  SUBTYPE OF (dimension_curve_directed_callout);
END_ENTITY;

ENTITY dielectric_constant_measure_with_unit
  SUBTYPE OF (ratio_measure_with_unit);
END_ENTITY;

ENTITY different_angle_of_assembly_constraint
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_plane_angle_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY different_assembly_centroid
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_cartesian_point];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY different_assembly_centroid_using_notional_solid
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_cartesian_point];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY different_assembly_constraint_type
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
END_ENTITY;

ENTITY different_assembly_volume
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_volume_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_volume_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY different_bounding_box
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[3:3] OF a3ms_element_type_name := [etns_manifold_solid_brep,etns_shell_based_surface_model,etns_shell_based_wireframe_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_two_cartesian_points];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
END_ENTITY;

ENTITY different_centroid
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[3:3] OF a3ms_element_type_name := [etns_manifold_solid_brep,etns_shell_based_surface_model,etns_shell_based_wireframe_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_cartesian_point];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
END_ENTITY;

ENTITY different_component_identification_via_multi_level_reference
  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_multi_level_reference_designator];
END_ENTITY;

ENTITY different_component_shape
  SUBTYPE OF (a3m_equivalence_criterion_of_component_property_difference);
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_shape_representation];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ma_element_type_name := [etna_shape_representation];
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_a3ms_inspected_equivalence_element_select];
INVERSE
  shape_criteria : SET[1:?] OF a3ma_assembly_and_shape_criteria_relationship FOR relating_representation_item;
END_ENTITY;

ENTITY different_component_type
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_assembly_component_usage];
END_ENTITY;

ENTITY different_curve_length
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_edge_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_length_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
END_ENTITY;

ENTITY different_length_of_assembly_constraint
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY different_number_of_closed_shell
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_manifold_solid_brep];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_count_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY different_number_of_components
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_count_measure];
END_ENTITY;

ENTITY different_number_of_geometric_elements
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[2:2] OF a3ms_element_type_name := [etns_manifold_solid_brep,etns_shell_based_surface_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_three_count_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY different_number_of_geometric_elements_wireframe_model
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_shell_based_wireframe_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_two_count_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY different_number_of_topological_elements
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[2:2] OF a3ms_element_type_name := [etns_manifold_solid_brep,etns_shell_based_surface_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_five_count_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY different_number_of_topological_elements_wireframe_model
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_shell_based_wireframe_model];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_four_count_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY different_placement_of_component
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_length_measure_and_context_dependent_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_context_dependent_shape_representation];
INVERSE
  assessment_threshold_2 : a3ma_equivalence_criterion_assessment_threshold_relationship FOR relating_representation_item;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = mdna_length_measure);
  WR2: (a3ma_get_value_limit_type(SELF.assessment_threshold_2\representation_item_relationship.related_representation_item) = mdna_context_dependent_measure) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_UNIT' IN TYPEOF(SELF.assessment_threshold_2\representation_item_relationship.related_representation_item\measure_with_unit.unit_component));
END_ENTITY;

ENTITY different_surface_area
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_area_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_area_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_area_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
END_ENTITY;

ENTITY different_surface_normal
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_plane_angle_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,ddns_point_on_surface];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_plane_angle_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'discretization_distance_tolerance');
END_ENTITY;

ENTITY different_volume
  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_manifold_solid_brep];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_volume_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_volume_measure];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_volume_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
END_ENTITY;

ENTITY dimension_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR (SIZEOF(QUERY(dce_1 <* SELF\draughting_callout.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(dce_1))))) = 0);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR (SIZEOF(QUERY(dce_1 <* SELF\draughting_callout.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(dce_1))))) = 0);
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR (SIZEOF(QUERY(dce_1 <* SELF\draughting_callout.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(dce_1))))) = 0);
END_ENTITY;

ENTITY dimension_callout_component_relationship
  SUBTYPE OF (draughting_callout_relationship);
WHERE
  WR1: SELF.name IN ['prefix','suffix'];
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_DIMENSION_CALLOUT' IN TYPEOF(SELF.relating_draughting_callout);
  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_DIMENSION_CALLOUT']) = 0;
  WR4: SELF.related_draughting_callout.contents * SELF.relating_draughting_callout.contents = SELF.related_draughting_callout.contents;
  WR5: ((SELF.name = 'prefix') AND (SIZEOF(QUERY(ato <* QUERY(con <* SELF.related_draughting_callout.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | NOT (ato.name = 'prefix text'))) = 0));
  WR6: ((SELF.name = 'suffix') AND (SIZEOF(QUERY(ato <* QUERY(con <* SELF.related_draughting_callout.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | NOT (ato.name = 'suffix text'))) = 0));
END_ENTITY;

ENTITY dimension_callout_relationship
  SUBTYPE OF (draughting_callout_relationship);
WHERE
  WR1: SELF.name IN ['primary','secondary'];
  WR2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) >= 1;
  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT']) = 0;
  WR4: SELF.related_draughting_callout.contents * SELF.relating_draughting_callout.contents = SELF.related_draughting_callout.contents;
END_ENTITY;

ENTITY dimension_curve
  SUBTYPE OF (annotation_curve_occurrence);
WHERE
  WR1: (SIZEOF(QUERY(dct <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN TYPEOF(dct))))) <= 2);
  WR2: SIZEOF(QUERY(dcdc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN TYPEOF(dcdc)))) >= 1;
  WR3: (SIZEOF(QUERY(dct1 <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN TYPEOF(dct1)) AND (dct1\dimension_curve_terminator.role = dimension_extent_usage.origin)))) <= 1) AND (SIZEOF(QUERY(dct2 <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN TYPEOF(dct2)) AND (dct2\dimension_curve_terminator.role = dimension_extent_usage.target)))) <= 1);
END_ENTITY;

ENTITY dimension_curve_directed_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(QUERY(d_c <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(d_c)))) <= 2;
  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
END_ENTITY;

ENTITY dimension_curve_terminator
  SUBTYPE OF (terminator_symbol);
  role : dimension_extent_usage;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN TYPEOF(SELF\terminator_symbol.annotated_curve);
END_ENTITY;

ENTITY dimension_curve_terminator_to_projection_curve_associativity
  SUBTYPE OF (annotation_occurrence_associativity);
  SELF\annotation_occurrence_relationship.relating_annotation_occurrence : dimension_curve_terminator;
  SELF\annotation_occurrence_relationship.related_annotation_occurrence : projection_curve;
END_ENTITY;

ENTITY dimension_pair
  SUBTYPE OF (draughting_callout_relationship);
WHERE
  WR1: SELF.name IN ['chained','parallel'];
  WR2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) = 1;
  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) = 1;
END_ENTITY;

ENTITY dimension_related_tolerance_zone_element;
  related_dimension : dimensional_location;
  related_element : tolerance_zone_definition;
END_ENTITY;

ENTITY dimension_text_associativity
  SUBTYPE OF (text_literal, mapped_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DIMENSION_REPRESENTATION' IN TYPEOF(SELF\mapped_item.mapping_source.mapped_representation));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT' IN TYPEOF(SELF\mapped_item.mapping_target));
  WR3: SIZEOF(QUERY(ato <* QUERY(si <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(si))) | NOT (SIZEOF(QUERY(dc <* USEDIN(ato, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT' IN TYPEOF(dc))) * [SELF\mapped_item.mapping_target]) = 1))) = 0;
END_ENTITY;

ENTITY dimensional_characteristic_representation;
  dimension : dimensional_characteristic;
  representation : shape_dimension_representation;
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 dimensional_location
  SUPERTYPE OF (ONEOF (angular_location,
                       dimensional_location_with_path))
  SUBTYPE OF (shape_aspect_relationship);
WHERE
  WR1: SELF\shape_aspect_relationship.relating_shape_aspect :<>: SELF\shape_aspect_relationship.related_shape_aspect;
  WR2: SELF\shape_aspect_relationship.relating_shape_aspect.of_shape :=: SELF\shape_aspect_relationship.related_shape_aspect.of_shape;
  WR3: (SELF\shape_aspect_relationship.relating_shape_aspect\shape_aspect.product_definitional <> UNKNOWN) AND (SELF\shape_aspect_relationship.related_shape_aspect\shape_aspect.product_definitional <> UNKNOWN);
END_ENTITY;

ENTITY dimensional_location_with_datum_feature
  SUBTYPE OF (datum_feature, dimensional_location);
END_ENTITY;

ENTITY dimensional_location_with_normal_constraint
  SUBTYPE OF (directed_dimensional_location);
  classification : dimensional_location_with_normal_constraint_type;
  SELF\shape_aspect_relationship.relating_shape_aspect : surface_or_face_surface_shape_aspect;
  SELF\shape_aspect_relationship.related_shape_aspect : surface_or_face_surface_shape_aspect;
DERIVE
  surface2 : surface_or_face_surface_shape_aspect := SELF\shape_aspect_relationship.related_shape_aspect;
  surface1 : surface_or_face_surface_shape_aspect := SELF\shape_aspect_relationship.relating_shape_aspect;
INVERSE
  associated_geometric_tolerance : SET[0:0] OF geometric_tolerance FOR toleranced_shape_aspect;
WHERE
  WR1: TYPEOF(surface1) = TYPEOF(surface2);
  WR2: surface1 :<>: surface2;
END_ENTITY;

ENTITY dimensional_location_with_path
  SUBTYPE OF (dimensional_location);
  path : shape_aspect;
END_ENTITY;

ENTITY dimensional_size
  SUPERTYPE OF (ONEOF (angular_size,
                       dimensional_size_with_path));
  applies_to : shape_aspect;
  name : label;
DERIVE
  id : identifier := get_id_value(SELF);
UNIQUE
  UR1: id, applies_to;
WHERE
  WR1: applies_to\shape_aspect.product_definitional = TRUE;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY dimensional_size_with_datum_feature
  SUBTYPE OF (datum_feature, dimensional_size);
WHERE
  WR1: SELF\dimensional_size.applies_to :=: SELF;
END_ENTITY;

ENTITY dimensional_size_with_path
  SUBTYPE OF (dimensional_size);
  path : shape_aspect;
END_ENTITY;

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

ENTITY directed_action_assignment
  ABSTRACT SUPERTYPE ;
  assigned_directed_action : directed_action;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY directed_angle
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) = 1;
  WR3: SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 1))) = 1;
  WR4: SELF.description IN ['punch direction','profile normal','surface normal'];
  WR5: SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'angle') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
END_ENTITY;

ENTITY directed_dimensional_location
  SUBTYPE OF (dimensional_location);
END_ENTITY;

ENTITY directed_tolerance_zone
  SUBTYPE OF (tolerance_zone_with_datum);
  direction : directed_tolerance_zone_type;
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.0)) > 0;
END_ENTITY;

ENTITY direction_feature_tolerance_zone
  SUBTYPE OF (tolerance_zone_with_datum);
  width_direction : direction_feature_application_type;
  angle : OPTIONAL plane_angle_measure_with_unit;
DERIVE
  indicated_datum : datum := SELF\tolerance_zone_with_datum.datum_reference\datum_system.constituents[1]\general_datum_reference.base;
WHERE
  WR1: SIZEOF(SELF\tolerance_zone_with_datum.datum_reference\datum_system.constituents) = 1;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(indicated_datum);
  WR3: (width_direction <> direction_feature_application_type.inclined) XOR EXISTS(angle);
  WR4: SELF\tolerance_zone.form\tolerance_zone_form.name IN ['between two coaxial cylinders', 'between two equidistant complex surfaces or two parallel planes', 'between two non-equidistant complex surfaces or two non-parallel planes', 'between two equidistant surfaces'];
END_ENTITY;

ENTITY direction_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1);
  WR2: (SIZEOF(QUERY(it <* SELF.items | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(it))))) = 0);
END_ENTITY;

ENTITY disallowed_assembly_relationship_usage
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE']);
END_ENTITY;

ENTITY disconnected_face_set
  SUBTYPE OF (erroneous_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY discontinuous_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (g1_discontinuous_curve,
                                g2_discontinuous_curve,
                                g1_discontinuous_surface,
                                g2_discontinuous_surface))
  SUBTYPE OF (inapt_geometry);
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 (document, characterized_object);
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_identifier
  SUBTYPE OF (group);
UNIQUE
  UR1: SELF\group.name, SELF\group.description;
END_ENTITY;

ENTITY document_identifier_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : document_identifier;
  items : SET[1:?] OF document_identifier_assigned_item;
END_ENTITY;

ENTITY document_product_association
  ABSTRACT SUPERTYPE ;
  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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.sievert);
END_ENTITY;

ENTITY double_offset_shelled_solid
  SUBTYPE OF (shelled_solid);
  thickness2 : length_measure;
WHERE
  WR1: thickness2 <> 0;
  WR2: SELF\shelled_solid.thickness <> thickness2;
END_ENTITY;

ENTITY draped_defined_transformation
  SUBTYPE OF (transformation_with_derived_angle);
END_ENTITY;

ENTITY draped_orientation_angle
  SUBTYPE OF (ply_orientation_angle);
END_ENTITY;

ENTITY draughting_annotation_occurrence
  SUBTYPE OF (annotation_occurrence);
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(QUERY(sty <* SELF.styles | NOT ((SIZEOF(sty.styles) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sty.styles[1]))))) = 0);
  WR2: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(QUERY(sty <* SELF.styles | NOT ((SIZEOF(sty.styles) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1]))))) = 0);
  WR3: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(QUERY(bound <* SELF.item\annotation_fill_area.boundaries | NOT (SIZEOF(QUERY(si <* USEDIN(bound, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)))) > 0))) = 0);
  WR4: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(QUERY(sty <* SELF.styles | NOT ((SIZEOF(sty.styles) = 1) AND (SIZEOF(TYPEOF(sty.styles[1]) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_STYLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NULL_STYLE']) = 1)))) = 0);
  WR5: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(SELF.item)))) OR (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SYMBOL_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SUBFIGURE_REPRESENTATION'] * TYPEOF(SELF.item\mapped_item.mapping_source.mapped_representation)) = 1);
  WR6: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(QUERY(sty <* SELF.styles | NOT ((SIZEOF(sty.styles) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE' IN TYPEOF(sty.styles[1]))))) = 0);
  WR7: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF(TYPEOF(SELF.item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL']) = 1);
  WR8: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR (SIZEOF(QUERY(tl <* SELF.item\composite_text.collected_text | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(tl)))) = 0);
  WR9: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(SELF.item)))) OR (SELF.item\text_literal.alignment IN ['baseline left','baseline centre','baseline right']);
  WR10: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR (SIZEOF(QUERY(tl <* QUERY(text <* SELF.item\composite_text.collected_text | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(text))) | NOT (tl\text_literal.alignment IN ['baseline left','baseline centre','baseline right']))) = 0);
  WR11: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item))) OR check_text_alignment(SELF.item);
  WR12: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item))) OR check_text_font(SELF.item);
  WR13: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR (SIZEOF(QUERY(tl <* QUERY(text <* SELF.item\composite_text.collected_text | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(text))) | NOT (SIZEOF(TYPEOF(tl) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_BLANKING_BOX', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_ASSOCIATED_CURVES']) = 0))) = 0);
  WR14: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_ASSOCIATED_CURVES' IN TYPEOF(SELF.item)))) OR (SIZEOF(QUERY(crv <* SELF.item\text_literal_with_associated_curves.associated_curves | NOT (SIZEOF(QUERY(si <* USEDIN(crv, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)))) > 0))) = 0);
  WR15: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT_WITH_ASSOCIATED_CURVES' IN TYPEOF(SELF.item)))) OR (SIZEOF(QUERY(crv <* SELF.item\composite_text_with_associated_curves.associated_curves | NOT (SIZEOF(QUERY(si <* USEDIN(crv, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)))) > 0))) = 0);
  WR16: SIZEOF(QUERY(cs <* QUERY(sty <* SELF.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sty.styles[1]))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(cs.styles[1]\curve_style.curve_width)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(cs.styles[1]\curve_style.curve_width\measure_with_unit.value_component))))) = 0;
  WR17: SIZEOF(QUERY(fas <* QUERY(sty <* SELF.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1]))) | NOT ((SIZEOF(QUERY(fs <* fas.styles[1]\fill_area_style.fill_styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_TILES' IN TYPEOF(fs)))) <= 1) AND (SIZEOF(QUERY(fst <* QUERY(fs <* fas.styles[1]\fill_area_style.fill_styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_TILES' IN TYPEOF(fs))) | NOT (SIZEOF(fst\fill_area_style_tiles.tiles) = 1))) = 0)))) = 0;
  WR18: SIZEOF(QUERY(fas <* QUERY(sty <* SELF.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1]))) | NOT (SIZEOF(QUERY(fsh <* QUERY(fs <* fas.styles[1]\fill_area_style.fill_styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_HATCHING' IN TYPEOF(fs))) | NOT (fsh\fill_area_style_hatching.point_of_reference_hatch_line :=: fsh\fill_area_style_hatching.pattern_start))) = 0))) = 0;
  WR19: SIZEOF(QUERY(ts <* QUERY(sty <* SELF.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE' IN TYPEOF(sty.styles[1]))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE_WITH_BOX_CHARACTERISTICS' IN TYPEOF(ts.styles[1])))) = 0;
  WR20: SIZEOF(QUERY(ts <* QUERY(sty <* SELF.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE_WITH_BOX_CHARACTERISTICS' IN TYPEOF(sty.styles[1]))) | NOT (SIZEOF(ts.styles[1]\text_style_with_box_characteristics.characteristics) = 4))) = 0;
END_ENTITY;

ENTITY draughting_callout
  SUBTYPE OF (geometric_representation_item);
  contents : SET[1:?] OF draughting_callout_element;
WHERE
  WR1: (SIZEOF(QUERY(l_1 <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(l_1)))) = 0) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND (SIZEOF(QUERY(l_1 <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(l_1)))) = 0) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND (SIZEOF(QUERY(l_1 <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(l_1)))) = 0) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN (TYPEOF(SELF)));
  WR2: SIZEOF(QUERY(apo <* contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_PLACEHOLDER_OCCURRENCE' IN TYPEOF(apo)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNAL_IMAGE_PLACEMENT_IN_CALLOUT' IN TYPEOF(apo)))) < 2;
END_ENTITY;

ENTITY draughting_callout_relationship;
  name : label;
  description : text;
  relating_draughting_callout : draughting_callout;
  related_draughting_callout : draughting_callout;
END_ENTITY;

ENTITY draughting_elements
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(QUERY(l_c <* QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(con))) | NOT (SIZEOF(QUERY(ldc <* USEDIN(l_c, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN TYPEOF(ldc)))) <= 1))) = 0;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN TYPEOF(SELF)) OR (SIZEOF(QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN TYPEOF(con)))) <= 2);
  WR3: SIZEOF(QUERY(rc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF(rc)) AND (rc.name = 'primary'))) <= 1;
  WR4: SIZEOF(QUERY(rc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF(rc)) AND (rc.name = 'secondary'))) <= 1;
  WR5: SIZEOF(QUERY(sec <* QUERY(rc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF(rc)) AND (rc.name = 'secondary')) | NOT (SIZEOF(QUERY(prim <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF(prim)) AND (prim.name = 'primary'))) = 1))) = 0;
END_ENTITY;

ENTITY draughting_model
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF draughting_model_item_select;
UNIQUE
  UR1: SELF\representation.name;
WHERE
  WR1: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL'] * TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) = 1))) = 0;
  WR2: SIZEOF(QUERY(smi <* QUERY(si <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(si\styled_item.item))) | (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY(sty <* smi\styled_item.styles | (NOT (SIZEOF(QUERY(psa <* sty.styles | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(psa))))) = 1)))) = 1))))) = 0;
END_ENTITY;

ENTITY draughting_model_item_association
  SUBTYPE OF (item_identified_representation_usage);
  SELF\item_identified_representation_usage.definition : draughting_model_item_definition;
  SELF\item_identified_representation_usage.used_representation : annotation_representation_select;
  SELF\item_identified_representation_usage.identified_item : draughting_model_item_association_select;
END_ENTITY;

ENTITY draughting_model_item_association_with_external_image_placement
  SUBTYPE OF (draughting_model_item_association);
  SELF\draughting_model_item_association.used_representation : draughting_model;
  SELF\item_identified_representation_usage.identified_item : draughting_callout;
  image : external_image_placement_in_callout;
END_ENTITY;

ENTITY draughting_model_item_association_with_placeholder
  SUBTYPE OF (draughting_model_item_association);
  SELF\draughting_model_item_association.used_representation : draughting_model;
  SELF\item_identified_representation_usage.identified_item : draughting_callout;
  annotation_placeholder : annotation_placeholder_occurrence;
END_ENTITY;

ENTITY draughting_pre_defined_colour
  SUBTYPE OF (pre_defined_colour);
WHERE
  WR1: SELF\pre_defined_item.name IN ['red','green','blue','yellow','magenta','cyan','black','white'];
END_ENTITY;

ENTITY draughting_pre_defined_curve_font
  SUBTYPE OF (pre_defined_curve_font);
WHERE
  WR1: SELF\pre_defined_item.name IN ['continuous','chain','chain double dash','dashed','dotted'];
END_ENTITY;

ENTITY draughting_pre_defined_text_font
  SUBTYPE OF (pre_defined_text_font);
WHERE
  WR1: SELF\pre_defined_item.name[1:8] = 'ISO 3098';
END_ENTITY;

ENTITY draughting_specification_reference
  SUBTYPE OF (document_reference);
  specified_items : SET[1:?] OF specified_item;
WHERE
  WR1: (SELF.assigned_document.kind.product_data_type = 'draughting specification');
END_ENTITY;

ENTITY draughting_subfigure_representation
  SUBTYPE OF (symbol_representation);
  SELF\representation.items : SET[1:?] OF draughting_subfigure_representation_item;
WHERE
  WR1: SIZEOF(QUERY(item <* SELF\representation.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT'] * TYPEOF(item)) = 1)) >= 1;
  WR2: SIZEOF(QUERY(srm <* QUERY(rm <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_REPRESENTATION_MAP' IN TYPEOF(rm))) | NOT (SIZEOF(QUERY(a_s <* QUERY(mi <* srm.map_usage | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(mi))) | NOT (SIZEOF(QUERY(aso <* USEDIN(a_s, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE' IN TYPEOF(aso)))) = 0))) = 0))) > 0;
  WR3: SIZEOF(SELF.context_of_items.representations_in_context) = 1;
END_ENTITY;

ENTITY draughting_symbol_representation
  SUBTYPE OF (symbol_representation);
  SELF\representation.items : SET[1:?] OF draughting_symbol_representation_item;
UNIQUE
  UR1: SELF\representation.name;
WHERE
  WR1: SIZEOF(QUERY(item <* SELF\representation.items | (SIZEOF(TYPEOF(item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE']) = 1))) >= 1;
  WR2: SIZEOF(QUERY(item <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE' IN TYPEOF(item))) = 0;
  WR3: SIZEOF(QUERY(rm <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_REPRESENTATION_MAP' IN TYPEOF(rm)))) = 0;
  WR4: SIZEOF(SELF.context_of_items.representations_in_context) = 1;
END_ENTITY;

ENTITY draughting_text_literal_with_delineation
  SUBTYPE OF (text_literal_with_delineation);
WHERE
  WR1: SELF.delineation IN ['underline','overline'];
END_ENTITY;

ENTITY draughting_title;
  items : SET[1:?] OF draughting_titled_item;
  language : label;
  contents : text;
END_ENTITY;

ENTITY drawing_definition;
  drawing_number : identifier;
  drawing_type : OPTIONAL label;
END_ENTITY;

ENTITY drawing_revision
  SUBTYPE OF (presentation_set);
  revision_identifier : identifier;
  drawing_identifier : drawing_definition;
  intended_scale : OPTIONAL text;
UNIQUE
  UR1: revision_identifier, drawing_identifier;
END_ENTITY;

ENTITY drawing_revision_sequence;
  predecessor : drawing_revision;
  successor : drawing_revision;
WHERE
  WR1: predecessor :<>: successor;
END_ENTITY;

ENTITY drawing_sheet_layout
  SUBTYPE OF (draughting_symbol_representation);
END_ENTITY;

ENTITY drawing_sheet_revision
  SUBTYPE OF (presentation_area);
  revision_identifier : identifier;
WHERE
  WR1: SIZEOF(QUERY(item <* SELF\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN (TYPEOF(item))) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN (TYPEOF(item\mapped_item.mapping_source.mapped_representation))))) = 0;
END_ENTITY;

ENTITY drawing_sheet_revision_sequence
  SUBTYPE OF (representation_relationship);
WHERE
  WR1: SELF\representation_relationship.rep_1 :<>: SELF\representation_relationship.rep_2;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN TYPEOF(SELF\representation_relationship.rep_1);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN TYPEOF(SELF\representation_relationship.rep_2);
END_ENTITY;

ENTITY drawing_sheet_revision_usage
  SUBTYPE OF (area_in_set);
  sheet_number : identifier;
UNIQUE
  UR1: sheet_number, SELF\area_in_set.in_set;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN TYPEOF(SELF\area_in_set.area)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_REVISION' IN TYPEOF(SELF\area_in_set.in_set));
END_ENTITY;

ENTITY dupin_cyclide_surface
  SUBTYPE OF (elementary_surface);
  generalised_major_radius : positive_length_measure;
  generalised_minor_radius : positive_length_measure;
  skewness : length_measure;
WHERE
  WR1: skewness >= 0.0;
END_ENTITY;

ENTITY duplicated_datum
  SUBTYPE OF (erroneous_pmi_representation);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_datum_pair];
END_ENTITY;

ENTITY eccentric_cone
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  height : positive_length_measure;
  x_offset : length_measure;
  y_offset : length_measure;
  ratio : REAL;
WHERE
  WR1: ratio >= 0.0;
END_ENTITY;

ENTITY eccentric_conical_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  height : positive_length_measure;
  x_offset : length_measure;
  y_offset : length_measure;
  ratio : REAL;
WHERE
  WR1: ratio >= 0.0;
END_ENTITY;

ENTITY edge
  SUPERTYPE OF (ONEOF (edge_curve,
                       oriented_edge,
                       subedge))
  SUBTYPE OF (topological_representation_item);
  edge_start : vertex;
  edge_end : vertex;
END_ENTITY;

ENTITY edge_based_topological_representation_with_length_constraint
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF edge_based_topological_representation_with_length_constraint_items;
DERIVE
  single_set : SET[1:1] OF connected_edge_set := QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN TYPEOF(item)));
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN TYPEOF(it))) = 1;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SUB_SET' IN TYPEOF(single_set[1])) XOR item_in_context(single_set[1]\connected_edge_sub_set.parent_edge_set, SELF\representation.context_of_items);
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SUB_SET' IN TYPEOF(single_set[1])) XOR (SIZEOF(QUERY(ed <* single_set[1].ces_edges | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BOUNDED_CURVE_WITH_LENGTH' IN TYPEOF(ed)))) = 0);
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SUB_SET' IN TYPEOF(single_set[1])) XOR (SIZEOF(QUERY(ed <* single_set[1].ces_edges | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BOUNDED_CURVE_WITH_LENGTH' IN TYPEOF(ed)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE' IN TYPEOF(ed))))) = 0);
  WR5: SIZEOF(QUERY(pa <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH' IN TYPEOF(pa)) AND NOT (SIZEOF(QUERY(oe <* pa\path.edge_list | NOT (oe.edge_element IN single_set[1].ces_edges) OR NOT (oe.edge_element\subedge.parent_edge IN single_set[1].ces_edges))) = 0))) = 0;
  WR6: SIZEOF(QUERY(vp <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vp)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN TYPEOF(vp.vertex_geometry)))) = 0;
END_ENTITY;

ENTITY edge_based_wireframe_model
  SUBTYPE OF (geometric_representation_item);
  ebwm_boundary : SET[1:?] OF connected_edge_set;
END_ENTITY;

ENTITY edge_based_wireframe_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1))) >= 1;
  WR3: SIZEOF(QUERY(ebwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(eb <* ebwm\edge_based_wireframe_model.ebwm_boundary | NOT (SIZEOF(QUERY(edges <* eb.ces_edges | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(edges)))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(ebwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(eb <* ebwm\edge_based_wireframe_model.ebwm_boundary | NOT (SIZEOF(QUERY(pline_edges <* QUERY(edges <* eb.ces_edges | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(edges\edge_curve.edge_geometry))) | NOT (SIZEOF(pline_edges\edge_curve.edge_geometry\polyline.points) > 2))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(ebwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(eb <* ebwm\edge_based_wireframe_model.ebwm_boundary | NOT (SIZEOF(QUERY(edges <* eb.ces_edges | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(edges.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(edges.edge_end))))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(ebwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(eb <* ebwm\edge_based_wireframe_model.ebwm_boundary | NOT (SIZEOF(QUERY(edges <* eb.ces_edges | NOT valid_wireframe_edge_curve(edges\edge_curve.edge_geometry))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(ebwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(eb <* ebwm\edge_based_wireframe_model.ebwm_boundary | NOT (SIZEOF(QUERY(edges <* eb.ces_edges | NOT (valid_wireframe_vertex_point(edges.edge_start\vertex_point.vertex_geometry) AND valid_wireframe_vertex_point(edges.edge_end\vertex_point.vertex_geometry)))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR9: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
END_ENTITY;

ENTITY edge_blended_solid
  ABSTRACT SUPERTYPE OF (track_blended_solid
                         ANDOR (ONEOF (solid_with_constant_radius_edge_blend,
                              solid_with_chamfered_edges)))
  SUBTYPE OF (modified_solid);
  blended_edges : LIST[1:?] OF UNIQUE edge_curve;
END_ENTITY;

ENTITY edge_bounded_curve_with_length
  SUBTYPE OF (edge_curve);
  SELF\edge.edge_start : vertex_point;
  SELF\edge.edge_end : vertex_point;
  SELF\edge_curve.edge_geometry : bounded_curve_with_length;
WHERE
  WR1: TYPEOF(edge_start\vertex_point.vertex_geometry) = TYPEOF(dummy_gri || point());
  WR2: TYPEOF(edge_end\vertex_point.vertex_geometry) = TYPEOF(dummy_gri || point());
END_ENTITY;

ENTITY edge_curve
  SUBTYPE OF (edge, geometric_representation_item);
  edge_geometry : curve;
  same_sense : BOOLEAN;
END_ENTITY;

ENTITY edge_loop
  SUBTYPE OF (loop, path);
DERIVE
  ne : INTEGER := SIZEOF(SELF\path.edge_list);
WHERE
  WR1: (SELF\path.edge_list[1].edge_start) :=: (SELF\path.edge_list[ne].edge_end);
END_ENTITY;

ENTITY edge_round
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0);
  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND (SIZEOF(impl_rep.used_representation.items) <= 3)))) = 0))) = 0);
  WR3: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR4: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first offset'))) <= 1))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second offset'))) <= 1))) = 0))) = 0);
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'edge round face'))) <= 1))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape'))) <= 1))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape'))) <= 1))) = 0;
END_ENTITY;

ENTITY edge_sealing
  SUBTYPE OF (line_based_llai);
END_ENTITY;

ENTITY edge_sealing_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY edge_with_excessive_segments
  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.coulomb);
END_ENTITY;

ENTITY electric_current_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 1.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY electric_potential_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.volt);
END_ENTITY;

ENTITY elementary_brep_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF advanced_brep_shape_representation_items_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(fcs)))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(fcs\face_surface.face_geometry))))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE'] * TYPEOF(oe.edge_element\edge_curve.edge_geometry)) = 1))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND (NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >= 3)))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(msb\manifold_solid_brep.outer))) = 0;
  WR9: SIZEOF(QUERY(brv <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) = 0))) = 0;
  WR10: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR11: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex\vertex_point.vertex_geometry))))) = 0))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY elementary_function
  SUBTYPE OF (maths_function, generic_literal);
  func_id : elementary_function_enumerators;
END_ENTITY;

ENTITY elementary_space
  SUBTYPE OF (maths_space, generic_literal);
  space_id : elementary_space_enumerators;
END_ENTITY;

ENTITY elementary_surface
  SUPERTYPE OF (ONEOF (plane,
                       cylindrical_surface,
                       conical_surface,
                       spherical_surface,
                       toroidal_surface))
  SUBTYPE OF (surface);
  position : axis2_placement_3d;
END_ENTITY;

ENTITY ellipse
  SUBTYPE OF (conic);
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
END_ENTITY;

ENTITY ellipsoid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  semi_axis_3 : positive_length_measure;
END_ENTITY;

ENTITY ellipsoid_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  semi_axis_3 : positive_length_measure;
END_ENTITY;

ENTITY elliptic_area
  SUBTYPE OF (primitive_2d);
  position : axis2_placement_2d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
END_ENTITY;

ENTITY end_task
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY energy_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.joule);
END_ENTITY;

ENTITY entirely_narrow_face
  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  width_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY entirely_narrow_solid
  SUBTYPE OF (inapt_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  width_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY entirely_narrow_surface
  SUBTYPE OF (nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  width_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY entity_assertion
  SUBTYPE OF (fact_type);
END_ENTITY;

ENTITY enum_reference_prefix
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

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

ENTITY envelope_relationship
  SUBTYPE OF (product_relationship);
END_ENTITY;

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

ENTITY equal_parameter_constraint
  SUBTYPE OF (defined_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF variational_parameter;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF variational_parameter;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) >= 2;
END_ENTITY;

ENTITY equals_expression
  SUBTYPE OF (binary_boolean_expression);
END_ENTITY;

ENTITY equivalence_instance_report_item_with_notable_instances
  SUBTYPE OF (a3m_equivalence_inspection_instance_report_item);
  notable_instances : LIST[1:?] OF equivalence_notable_instance;
END_ENTITY;

ENTITY equivalence_notable_instance;
  comparing_elements : LIST[0:?] OF equivalence_detected_difference_select;
  compared_elements : LIST[0:?] OF equivalence_detected_difference_select;
  measured_value : equivalence_measured_value_select;
WHERE
  WR1: (SIZEOF(comparing_elements) <> 0) OR (SIZEOF(compared_elements) <> 0);
END_ENTITY;

ENTITY erroneous_b_spline_curve_definition
  SUBTYPE OF (erroneous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY erroneous_b_spline_surface_definition
  SUBTYPE OF (erroneous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY erroneous_data
  ABSTRACT SUPERTYPE OF (ONEOF (erroneous_topology,
                                erroneous_geometry,
                                erroneous_topology_and_geometry_relationship,
                                erroneous_manifold_solid_brep))
  SUBTYPE OF (shape_data_quality_criterion);
END_ENTITY;

ENTITY erroneous_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (inconsistent_curve_transition_code,
                                erroneous_b_spline_curve_definition,
                                inconsistent_surface_transition_code,
                                erroneous_b_spline_surface_definition))
  SUBTYPE OF (erroneous_data);
END_ENTITY;

ENTITY erroneous_manifold_solid_brep
  ABSTRACT SUPERTYPE OF (ONEOF (wrongly_oriented_void,
                                wrongly_placed_void,
                                intersecting_shells_in_solid,
                                solid_with_wrong_number_of_voids))
  SUBTYPE OF (erroneous_data);
END_ENTITY;

ENTITY erroneous_pmi_representation
  ABSTRACT SUPERTYPE OF (ONEOF (incorrect_datum_reference_by_datum_target,
                                incorrect_unit_of_tolerance_value,
                                duplicated_datum))
  SUBTYPE OF (a3m_erroneous_pmi_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY erroneous_relation_of_pmi_and_feature
  ABSTRACT SUPERTYPE OF (ONEOF (no_general_part_feature_association,
                                incorrect_relation_of_geometric_tolerance_and_feature,
                                incorrect_relation_of_geometric_tolerance_and_datum_feature,
                                inconsistent_feature_for_range_symbol,
                                insufficiently_constrained_datum_system,
                                incorrect_spatial_arrangement_of_datum_targets,
                                incorrect_geometric_relation_of_datum_and_toleranced_feature,
                                incorrect_relation_of_geometric_tolerance_modifier_to_feature,
                                inconsistent_length_between_annotation_value_and_shape,
                                inconsistent_angle_between_annotation_value_and_shape))
  SUBTYPE OF (a3m_erroneous_pmi_data);
END_ENTITY;

ENTITY erroneous_topology
  ABSTRACT SUPERTYPE OF (ONEOF (open_edge_loop,
                                open_closed_shell,
                                inconsistent_adjacent_face_normals,
                                disconnected_face_set))
  SUBTYPE OF (erroneous_data);
END_ENTITY;

ENTITY erroneous_topology_and_geometry_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (inconsistent_edge_and_curve_directions,
                                inconsistent_face_and_surface_normals,
                                inconsistent_face_and_closed_shell_normals,
                                intersecting_loops_in_face,
                                wrongly_placed_loop))
  SUBTYPE OF (erroneous_data);
END_ENTITY;

ENTITY evaluated_characteristic
  SUBTYPE OF (representation, representation_relationship);
UNIQUE
  UR1: SELF\representation_relationship.rep_1, SELF\representation_relationship.rep_2;
WHERE
  WR1: SELF\representation_relationship.rep_1 <> SELF\representation_relationship.rep_2;
END_ENTITY;

ENTITY evaluated_characteristic_of_product_as_individual_test_result
  SUBTYPE OF (evaluated_characteristic);
END_ENTITY;

ENTITY evaluated_degenerate_pcurve
  SUBTYPE OF (degenerate_pcurve);
  equivalent_point : cartesian_point;
END_ENTITY;

ENTITY evaluation_product_definition
  SUBTYPE OF (product_definition);
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_characterized_object
  SUBTYPE OF (characterized_object, event_occurrence);
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 event_probability
  SUBTYPE OF (property_definition);
  SELF\property_definition.definition : event_occurrence_characterized_object;
END_ENTITY;

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

ENTITY excessive_use_of_groups
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP']);
END_ENTITY;

ENTITY excessive_use_of_layers
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT']);
END_ENTITY;

ENTITY excessively_high_degree_curve
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY excessively_high_degree_surface
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY exclusive_product_concept_feature_category
  SUBTYPE OF (product_concept_feature_category);
END_ENTITY;

ENTITY executed_action
  SUBTYPE OF (action);
END_ENTITY;

ENTITY exit_loop
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY exp_function
  SUBTYPE OF (unary_function_call);
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_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_experience_type : experience_type;
  related_experience_type : experience_type;
END_ENTITY;

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

ENTITY explicit_composite_hole
  SUBTYPE OF (composite_hole);
  placement : shape_representation;
INVERSE
  explicit_shape : SET[0:?] OF item_identified_representation_usage FOR definition;
WHERE
  WR1: SIZEOF(QUERY(ri <* placement\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ri)))) = 1;
  WR2: (SIZEOF(explicit_shape) = 0) OR (SIZEOF(QUERY(es <* explicit_shape | NOT (placement = es\item_identified_representation_usage.used_representation))) = 0);
END_ENTITY;

ENTITY explicit_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (defined_constraint,
                                free_form_constraint))
  SUBTYPE OF (variational_representation_item);
  description : OPTIONAL text;
  constrained_elements : SET[1:?] OF representation_item;
  reference_elements : SET[0:?] OF representation_item;
WHERE
  WR1: SIZEOF(constrained_elements * reference_elements) = 0;
END_ENTITY;

ENTITY explicit_geometric_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (fixed_element_geometric_constraint,
                                parallel_geometric_constraint,
                                point_distance_geometric_constraint,
                                skew_line_distance_geometric_constraint,
                                curve_distance_geometric_constraint,
                                surface_distance_geometric_constraint,
                                radius_geometric_constraint,
                                curve_length_geometric_constraint,
                                parallel_offset_geometric_constraint,
                                angle_geometric_constraint,
                                perpendicular_geometric_constraint,
                                incidence_geometric_constraint,
                                coaxial_geometric_constraint,
                                tangent_geometric_constraint,
                                symmetry_geometric_constraint,
                                swept_point_curve_geometric_constraint,
                                swept_curve_surface_geometric_constraint,
                                curve_smoothness_geometric_constraint,
                                surface_smoothness_geometric_constraint))
  SUBTYPE OF (defined_constraint, geometric_representation_item);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_representation_item;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF geometric_representation_item;
END_ENTITY;

ENTITY explicit_procedural_geometric_representation_item_relationship
  SUBTYPE OF (explicit_procedural_representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : procedural_shape_representation_sequence;
  SELF\representation_item_relationship.related_representation_item : geometric_representation_item;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_SHAPE_REPRESENTATION_SEQUENCE' IN TYPEOF(SELF\representation_item_relationship.related_representation_item));
END_ENTITY;

ENTITY explicit_procedural_representation_item_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : procedural_representation_sequence;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_REPRESENTATION_SEQUENCE' IN TYPEOF(SELF\representation_item_relationship.related_representation_item));
  WR2: SIZEOF(QUERY(q <* using_representations(SELF\representation_item_relationship.related_representation_item) | item_in_context(SELF\representation_item_relationship.relating_representation_item, q.context_of_items))) > 0;
END_ENTITY;

ENTITY explicit_procedural_representation_relationship
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : procedural_representation;
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_REPRESENTATION' IN TYPEOF(SELF\representation_relationship.rep_2))) AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION' IN TYPEOF(SELF\representation_relationship.rep_2)));
  WR2: SELF\representation_relationship.rep_1.context_of_items :=: SELF\representation_relationship.rep_2.context_of_items;
END_ENTITY;

ENTITY explicit_procedural_shape_representation_relationship
  SUBTYPE OF (explicit_procedural_representation_relationship);
  SELF\representation_relationship.rep_1 : procedural_shape_representation;
  SELF\representation_relationship.rep_2 : shape_representation;
END_ENTITY;

ENTITY explicit_round_hole
  SUBTYPE OF (round_hole);
  depth : positive_length_measure_with_unit;
  depth_tolerance : OPTIONAL tolerance_value;
  diameter : positive_length_measure_with_unit;
  diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
  placement : shape_representation;
WHERE
  WR1: SIZEOF(QUERY(ri <* placement\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ri)))) = 1;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(depth_tolerance\tolerance_value.lower_bound);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(depth_tolerance\tolerance_value.upper_bound);
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(diameter_tolerance\tolerance_value.lower_bound));
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(diameter_tolerance\tolerance_value.upper_bound));
END_ENTITY;

ENTITY explicit_table_function
  ABSTRACT SUPERTYPE OF (ONEOF (listed_real_data,
                                listed_integer_data,
                                listed_logical_data,
                                listed_string_data,
                                listed_complex_number_data,
                                listed_data,
                                externally_listed_data,
                                linearized_table_function,
                                basic_sparse_matrix))
  SUBTYPE OF (maths_function);
  index_base : zero_or_one;
  shape : LIST[1:?] OF positive_integer;
END_ENTITY;

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

ENTITY expression_conversion_based_unit
  SUBTYPE OF (context_dependent_unit, variable_semantics);
INVERSE
  associated_variable_environment : environment FOR semantics;
END_ENTITY;

ENTITY expression_denoted_function
  SUBTYPE OF (maths_function, unary_generic_expression);
DERIVE
  expr : generic_expression := SELF\unary_generic_expression.operand;
WHERE
  WR1: (schema_prefix + 'FUNCTION_SPACE') IN TYPEOF(values_space_of(expr));
END_ENTITY;

ENTITY expression_extension_numeric
  SUBTYPE OF (measure_with_unit, numeric_expression);
END_ENTITY;

ENTITY expression_extension_string
  SUBTYPE OF (measure_with_unit, string_expression);
END_ENTITY;

ENTITY expression_extension_to_select;
  type_expression_associated : expression_extension_select;
END_ENTITY;

ENTITY extended_tuple_space
  SUBTYPE OF (maths_space, generic_literal);
  base : tuple_space;
  extender : maths_space;
WHERE
  WR1: expression_is_constant(base) AND expression_is_constant(extender);
  WR2: no_cyclic_space_reference(SELF, []);
  WR3: extender <> the_empty_space;
END_ENTITY;

ENTITY extension
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
END_ENTITY;

ENTITY extent
  SUBTYPE OF (characterized_object);
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_identification_assignment_relationship;
  id : OPTIONAL identifier;
  description : OPTIONAL text;
  relating : external_identification_assignment;
  related : external_identification_assignment;
  relation_type : STRING;
WHERE
  WR1: acyclic_external_identification_assignment_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP');
END_ENTITY;

ENTITY external_image_placement_in_callout
  SUBTYPE OF (annotation_occurrence, geometric_representation_item);
  image : document;
  SELF\styled_item.item : geometric_set;
  role : annotation_placeholder_occurrence_role;
INVERSE
  the_callout : draughting_callout FOR contents;
  the_draughting_model_item_association_with_external_image_placement : SET[0:1] OF draughting_model_item_association_with_external_image_placement FOR image;
WHERE
  WR1: md_valid_content_in_geometric_set_for_external_image(item);
END_ENTITY;

ENTITY external_source;
  source_id : source_item;
DERIVE
  description : text := get_description_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 externally_conditioned_data_quality_criteria_representation
  SUBTYPE OF (data_quality_criteria_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY externally_conditioned_data_quality_criterion
  SUBTYPE OF (data_quality_criterion, data_quality_measurement_requirement);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) = 0;
  WR2: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN TYPEOF(i1))) = 0;
  WR3: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN TYPEOF(i1))) = 0;
END_ENTITY;

ENTITY externally_conditioned_data_quality_inspection_instance_report_item
  SUBTYPE OF (data_quality_inspection_instance_report_item);
  SELF\data_quality_inspection_instance_report_item.inspected_elements : SET[1:?] OF inspected_ecdq_element_select;
WHERE
  WR1: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT.INSPECTED_INSTANCES')) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(i1.inspection_result)))) = 0;
END_ENTITY;

ENTITY externally_conditioned_data_quality_inspection_result
  SUBTYPE OF (data_quality_inspection_result);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_CRITERION' IN TYPEOF(SELF\data_quality_inspection_result.criterion_inspected);
END_ENTITY;

ENTITY externally_conditioned_data_quality_inspection_result_representation
  SUBTYPE OF (data_quality_inspection_result_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY externally_defined_character_glyph
  SUBTYPE OF (externally_defined_item);
END_ENTITY;

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

ENTITY externally_defined_colour
  SUBTYPE OF (colour_specification, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_context_dependent_unit
  SUBTYPE OF (context_dependent_unit, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_conversion_based_unit
  SUBTYPE OF (conversion_based_unit, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_currency
  SUBTYPE OF (currency, externally_defined_context_dependent_unit);
END_ENTITY;

ENTITY externally_defined_curve_font
  SUBTYPE OF (externally_defined_item);
END_ENTITY;

ENTITY externally_defined_dimension_definition
  SUBTYPE OF (dimensional_size, externally_defined_item);
WHERE
  WR1: (SELF\externally_defined_item.item_id = 'external size dimension') AND (SELF\externally_defined_item.source.source_id = 'external size dimension specification');
  WR2: 1 >= SIZEOF(QUERY(adr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_REFERENCE.ITEMS') | (adr.assigned_document.description = 'external size dimension specification')));
END_ENTITY;

ENTITY externally_defined_feature_definition
  SUBTYPE OF (feature_definition, externally_defined_item);
WHERE
  WR1: (((SELF\characterized_object.description = 'thread') AND (SELF\externally_defined_item.item_id = 'external thread') AND (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR ((SELF\characterized_object.description = 'gear') AND (SELF\externally_defined_item.item_id = 'external gear') AND (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR ((SELF\characterized_object.description = 'marking') AND (SELF\externally_defined_item.item_id = 'external marking') AND (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR ((SELF\characterized_object.description = 'knurl') AND (SELF\externally_defined_item.item_id = 'external knurl') AND (SELF\externally_defined_item.source.source_id = 'external feature specification')));
  WR2: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({5 <= SIZEOF(pdr.used_representation.items) <= 10}))) = 1)) = 1));
  WR3: ((NOT (SELF\characterized_object.description = 'marking')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 2))) = 1)) = 1));
  WR4: ((NOT (SELF\characterized_object.description = 'knurl')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 1))) = 1)) = 1));
  WR5: (NOT (SELF\characterized_object.description IN ['knurl','thread'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) <= 1)))) = 0);
  WR6: ((NOT (SELF\characterized_object.description = 'marking')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'marking text')))) = 1)))) = 0)))) = 0));
  WR7: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'removal direction') AND ((it.description = 'internal') OR (it.description = 'external'))))) = 1)))) = 0)))) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'qualifier')))) <= 1)))) = 0)))) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'hand')))) = 1)))) = 0)))) = 0));
  WR10: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class')))) = 1)))) = 0)))) = 0));
  WR11: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'form')))) = 1)))) = 0)))) = 0));
  WR12: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter')))) <= 1)))) = 0)))) = 0));
  WR13: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of threads')))) = 1)))) = 0)))) = 0));
  WR14: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class 2')))) <= 1)))) = 0)))) = 0);
  WR15: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal size')))) <= 1)))) = 0)))) = 0);
  WR16: (NOT (SELF\characterized_object.description IN ['knurl','gear','thread'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) <= 1)))) = 0);
  WR17: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (10 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) >= 11))) = 1)) = 1));
  WR18: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of teeth')))) = 1)))) = 0)))) = 0));
  WR19: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'reference pressure angle')))) = 1)))) = 0)))) = 0));
  WR20: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'rake shift factor')))) = 1)))) = 0)))) = 0));
  WR21: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal tooth depth')))) = 1)))) = 0)))) = 0));
  WR22: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'face width')))) = 1)))) = 0)))) = 0));
  WR23: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip diameter')))) = 1)))) = 0)))) = 0));
  WR24: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'module or diametral pitch') AND ((it.description = 'module') OR (it.description = 'diametral pitch'))))) = 1)))) = 0)))) = 0));
  WR25: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'normal attribute')))) = 1)))) = 0)))) = 0));
  WR26: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'internal or external gear') AND ((it.description = 'internal') OR (it.description = 'external'))))) = 1)))) = 0)))) = 0));
  WR27: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root fillet radius')))) <= 1)))) = 0)))) = 0));
END_ENTITY;

ENTITY externally_defined_general_property
  SUBTYPE OF (general_property, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_hatch_style
  SUBTYPE OF (externally_defined_item, geometric_representation_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 externally_defined_item_with_multiple_references
  SUBTYPE OF (externally_defined_item);
  references : LIST[1:?] OF UNIQUE source_item;
UNIQUE
  UR1: references;
WHERE
  WR1: NOT (SELF\externally_defined_item.item_id IN references);
END_ENTITY;

ENTITY externally_defined_marker
  SUBTYPE OF (externally_defined_symbol, pre_defined_marker);
END_ENTITY;

ENTITY externally_defined_picture_representation_item
  SUBTYPE OF (picture_representation_item);
INVERSE
  source : applied_external_identification_assignment FOR items;
WHERE
  WR1: NOT (SELF\representation_item.name IN pre_defined_picture_representation_types);
END_ENTITY;

ENTITY externally_defined_representation
  SUBTYPE OF (representation, externally_defined_item);
  SELF\representation.items : SET[1:?] OF externally_defined_representation_item;
END_ENTITY;

ENTITY externally_defined_representation_item
  SUBTYPE OF (representation_item, externally_defined_item);
END_ENTITY;

ENTITY externally_defined_string
  SUBTYPE OF (externally_defined_representation_item);
END_ENTITY;

ENTITY externally_defined_style
  SUBTYPE OF (externally_defined_item, founded_item);
END_ENTITY;

ENTITY externally_defined_symbol
  SUBTYPE OF (externally_defined_item);
END_ENTITY;

ENTITY externally_defined_terminator_symbol
  SUBTYPE OF (externally_defined_symbol);
END_ENTITY;

ENTITY externally_defined_text_font
  SUBTYPE OF (externally_defined_item);
END_ENTITY;

ENTITY externally_defined_tile
  SUBTYPE OF (externally_defined_item);
END_ENTITY;

ENTITY externally_defined_tile_style
  SUBTYPE OF (externally_defined_item, geometric_representation_item);
END_ENTITY;

ENTITY externally_listed_data
  SUBTYPE OF (explicit_table_function, generic_literal, externally_defined_item);
  value_range : maths_space;
WHERE
  WR1: expression_is_constant(value_range);
END_ENTITY;

ENTITY extreme_instance;
  locations_of_extreme_value : SET[1:?] OF location_of_extreme_value_select;
  measured_value : measured_value_select;
END_ENTITY;

ENTITY extreme_patch_width_variation
  SUBTYPE OF (geometry_with_local_irregularity);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY extruded_area_solid
  SUBTYPE OF (swept_area_solid);
  extruded_direction : direction;
  depth : positive_length_measure;
WHERE
  WR1: dot_product((SELF\swept_area_solid.swept_area.basis_surface\elementary_surface.position.p[3]), extruded_direction) <> 0.0;
END_ENTITY;

ENTITY extruded_face_solid
  SUBTYPE OF (swept_face_solid);
  extruded_direction : direction;
  depth : positive_length_measure;
WHERE
  WR1: dot_product((SELF\swept_face_solid.swept_face.face_geometry\elementary_surface.position.p[3]), extruded_direction) <> 0.0;
END_ENTITY;

ENTITY extruded_face_solid_with_draft_angle
  SUBTYPE OF (extruded_face_solid_with_trim_conditions);
  draft_angle : plane_angle_measure;
WHERE
  WR1: draft_angle <> 0;
END_ENTITY;

ENTITY extruded_face_solid_with_multiple_draft_angles
  SUBTYPE OF (extruded_face_solid_with_trim_conditions);
  drafted_edges : LIST[2:?] OF SET[1:?] OF edge_curve;
  draft_angles : LIST[2:?] OF plane_angle_measure;
WHERE
  WR1: SIZEOF(drafted_edges) = SIZEOF(draft_angles);
  WR2: SIZEOF(QUERY(q <* draft_angles | q = 0)) = 0;
  WR3: SIZEOF(QUERY(q <* drafted_edges | (SIZEOF(QUERY(r <* q | NOT (SELF\swept_face_solid.swept_face IN using_items(r, [])))) > 0))) = 0;
END_ENTITY;

ENTITY extruded_face_solid_with_trim_conditions
  SUPERTYPE OF (ONEOF (extruded_face_solid_with_draft_angle,
                       extruded_face_solid_with_multiple_draft_angles))
  SUBTYPE OF (extruded_face_solid);
  first_trim_condition : trim_condition_select;
  second_trim_condition : trim_condition_select;
  first_trim_intent : trim_intent;
  second_trim_intent : trim_intent;
  first_offset : non_negative_length_measure;
  second_offset : non_negative_length_measure;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(first_trim_condition)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(second_trim_condition)));
  WR2: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) AND ((first_trim_intent = trim_intent.offset) OR (first_trim_intent = trim_intent.up_to_next))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition)) AND ((second_trim_intent = trim_intent.offset) OR (second_trim_intent = trim_intent.up_to_next))));
  WR3: NOT (((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition))) AND ((first_trim_intent = trim_intent.blind) OR (first_trim_intent = trim_intent.through_all))) OR ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition))) AND ((second_trim_intent = trim_intent.blind) OR (second_trim_intent = trim_intent.through_all))));
  WR4: (((first_trim_intent = trim_intent.offset) AND (first_offset > 0)) XOR ((first_trim_intent <> trim_intent.offset) AND (first_offset = 0))) AND (((second_trim_intent = trim_intent.offset) AND (second_offset > 0)) XOR ((second_trim_intent <> trim_intent.offset) AND (second_offset = 0)));
  WR5: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition))) AND (first_trim_condition = second_trim_condition));
END_ENTITY;

ENTITY face
  SUPERTYPE OF (ONEOF (face_surface,
                       oriented_face,
                       subface))
  SUBTYPE OF (topological_representation_item);
  bounds : SET[1:?] OF face_bound;
WHERE
  WR1: NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF))));
  WR2: SIZEOF(QUERY(temp <* bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF(temp))) <= 1;
END_ENTITY;

ENTITY face_based_surface_model
  SUBTYPE OF (geometric_representation_item);
  fbsm_faces : SET[1:?] OF connected_face_set;
END_ENTITY;

ENTITY face_bound
  SUBTYPE OF (topological_representation_item);
  bound : loop;
  orientation : BOOLEAN;
END_ENTITY;

ENTITY face_outer_bound
  SUBTYPE OF (face_bound);
END_ENTITY;

ENTITY face_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) >= 1);
  WR2: (SIZEOF(QUERY(it <* SELF.items | (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(it)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(it)))))) = 0);
END_ENTITY;

ENTITY face_shape_representation_relationship
  SUBTYPE OF (representation_relationship);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(SELF.rep_1));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(SELF.rep_2));
END_ENTITY;

ENTITY face_surface
  SUBTYPE OF (face, geometric_representation_item);
  face_geometry : surface;
  same_sense : BOOLEAN;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_SURFACE' IN TYPEOF(face_geometry));
END_ENTITY;

ENTITY face_surface_shape_aspect
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional;
END_ENTITY;

ENTITY face_surface_with_excessive_patches_in_one_direction
  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY faceted_brep
  SUBTYPE OF (manifold_solid_brep);
END_ENTITY;

ENTITY faceted_brep_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF faceted_brep_shape_representation_items_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1))) > 0;
  WR2: SIZEOF(QUERY(fbrep <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(csh <* msb_shells(fbrep) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(fcs)) AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(fcs\face_surface.face_geometry)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(fcs\face_surface.face_geometry\elementary_surface.position.location)))))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(fbrep <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(csh <* msb_shells(fbrep) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(bnds <* fcs.bounds | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF(bnds)))) = 1))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(msb <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP' IN TYPEOF(it))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(msb\manifold_solid_brep.outer)))) = 0;
  WR5: SIZEOF(QUERY(brv <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) = 0))) = 0;
  WR6: SIZEOF(QUERY(mi <* QUERY(it <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
END_ENTITY;

ENTITY faceted_primitive
  SUPERTYPE OF (ONEOF (tetrahedron,
                       convex_hexahedron))
  SUBTYPE OF (geometric_representation_item);
  points : LIST[4:?] OF UNIQUE cartesian_point;
WHERE
  WR1: points[1].dim = 3;
END_ENTITY;

ENTITY fact_type
  SUBTYPE OF (property_definition);
END_ENTITY;

ENTITY feature_component_definition
  SUBTYPE OF (characterized_object);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')) = 1)))) = 0);
END_ENTITY;

ENTITY feature_component_relationship
  SUPERTYPE OF (ONEOF (pattern_omit_membership,
                       pattern_offset_membership))
  SUBTYPE OF (shape_aspect_relationship);
WHERE
  WR1: ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRANSITION_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN'] * TYPEOF(SELF.relating_shape_aspect)) = 1) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MACHINING_FEATURE_DEFINITION' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition)));
END_ENTITY;

ENTITY feature_definition
  SUPERTYPE OF (ONEOF (boss,
                       compound_feature,
                       externally_defined_feature_definition,
                       flat_face,
                       gear,
                       marking,
                       outer_round,
                       outside_profile,
                       pocket,
                       protrusion,
                       removal_volume,
                       replicate_feature,
                       revolved_profile,
                       rib_top,
                       round_hole,
                       rounded_end,
                       spherical_cap,
                       step,
                       slot,
                       thread,
                       turned_knurl))
  SUBTYPE OF (characterized_object);
END_ENTITY;

ENTITY feature_definition_with_connection_area
  SUBTYPE OF (shape_feature_definition);
END_ENTITY;

ENTITY feature_for_datum_target_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.related_shape_aspect : datum_target;
UNIQUE
  UR1: related_shape_aspect;
WHERE
  WR1: SELF\shape_aspect_relationship.relating_shape_aspect\shape_aspect.of_shape :=: related_shape_aspect\shape_aspect.of_shape;
  WR2: SELF\shape_aspect_relationship.relating_shape_aspect\shape_aspect.product_definitional = TRUE;
END_ENTITY;

ENTITY feature_in_panel
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SELF.description IN ['pocket','boss','stairstep'];
  WR2: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND NOT ({2 <= SIZEOF(pdr.used_representation.items) <= 3}))) = 0;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | NOT (i.name IN ['orientation','base radius','target radius']))) > 0))) = 0;
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR5: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'target radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR6: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'base boundary') AND (sa.description IN ['directed angle occurrence','closed profile occurrence']))) = 1;
  WR7: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'target boundary') AND (sa.description IN ['directed angle occurrence','closed profile occurrence']))) = 1;
  WR8: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'directed angle occurrence'))) <= 1;
  WR9: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'directed angle occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'directed angle usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTED_ANGLE' IN TYPEOF(sar.relating_shape_aspect)))) = 1))) = SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'directed angle occurrence')));
  WR10: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'closed profile occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sar.relating_shape_aspect)) = 1))) = 1))) = SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'closed profile occurrence')));
  WR11: (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation))) <= 1) AND (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND NOT (pdr.used_representation.name = 'target face'))) = 0);
  WR12: (SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'target boundary') AND (sa.description = 'directed angle occurrence'))) = 0) OR (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)))) = 1);
END_ENTITY;

ENTITY feature_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(srwp_i)))) > 0))) > 0)) = 0;
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'base feature placement'))) > 1))) = 0))) = 0;
END_ENTITY;

ENTITY fiber_orientation_angle_tolerance_deviation_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY fiber_orientation_angle_tolerance_deviation_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY fill_area_style
  SUBTYPE OF (founded_item);
  name : label;
  fill_styles : SET[1:?] OF fill_style_select;
WHERE
  WR1: SIZEOF(QUERY(fill_style <* fill_styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_COLOUR' IN TYPEOF(fill_style))) <= 1;
END_ENTITY;

ENTITY fill_area_style_colour;
  name : label;
  fill_colour : colour;
END_ENTITY;

ENTITY fill_area_style_hatching
  SUBTYPE OF (geometric_representation_item);
  hatch_line_appearance : curve_style;
  start_of_next_hatch_line : one_direction_repeat_factor;
  point_of_reference_hatch_line : cartesian_point;
  pattern_start : cartesian_point;
  hatch_line_angle : plane_angle_measure;
END_ENTITY;

ENTITY fill_area_style_tile_coloured_region
  SUBTYPE OF (geometric_representation_item);
  closed_curve : curve_or_annotation_curve_occurrence;
  region_colour : colour;
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(closed_curve))) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN TYPEOF(closed_curve)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE' IN TYPEOF(closed_curve)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(closed_curve)) AND (closed_curve\b_spline_curve.closed_curve = TRUE)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(closed_curve)) AND (closed_curve\composite_curve.closed_curve = TRUE)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(closed_curve)) AND (closed_curve\polyline.points[LOINDEX(closed_curve\polyline.points)] = closed_curve\polyline.points[HIINDEX(closed_curve\polyline.points)]));
END_ENTITY;

ENTITY fill_area_style_tile_curve_with_style
  SUBTYPE OF (geometric_representation_item);
  styled_curve : annotation_curve_occurrence;
END_ENTITY;

ENTITY fill_area_style_tile_symbol_with_style
  SUBTYPE OF (geometric_representation_item);
  symbol : annotation_symbol_occurrence;
END_ENTITY;

ENTITY fill_area_style_tiles
  SUBTYPE OF (geometric_representation_item);
  tiling_pattern : two_direction_repeat_factor;
  tiles : SET[1:?] OF fill_area_style_tile_shape_select;
  tiling_scale : positive_ratio_measure;
END_ENTITY;

ENTITY fillet
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0);
  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND (SIZEOF(impl_rep.used_representation.items) <= 3)))) = 0))) = 0);
  WR3: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR4: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first offset'))) <= 1))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'constant radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second offset'))) <= 1))) = 0))) = 0);
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'fillet face'))) = 1))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape'))) = 1))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape'))) = 1))) = 0;
END_ENTITY;

ENTITY final_solution
  SUBTYPE OF (product_definition_formation);
  status : STRING;
INVERSE
  specification : SET[1:?] OF product_definition FOR formation;
END_ENTITY;

ENTITY finite_function
  SUBTYPE OF (maths_function, generic_literal);
  pairs : SET[1:?] OF LIST[2:2] OF maths_value;
WHERE
  WR1: VALUE_UNIQUE(list_selected_components(pairs, 1));
END_ENTITY;

ENTITY finite_integer_interval
  SUBTYPE OF (maths_space, generic_literal);
  min : INTEGER;
  max : INTEGER;
DERIVE
  size : positive_integer := max - min + 1;
WHERE
  WR1: min <= max;
END_ENTITY;

ENTITY finite_real_interval
  SUBTYPE OF (maths_space, generic_literal);
  min : REAL;
  min_closure : open_closed;
  max : REAL;
  max_closure : open_closed;
WHERE
  WR1: min < max;
END_ENTITY;

ENTITY finite_space
  SUBTYPE OF (maths_space, generic_literal);
  members : SET OF maths_value;
WHERE
  WR1: VALUE_UNIQUE(members);
  WR2: SIZEOF(QUERY(expr <* QUERY(member <* members | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_EXPRESSION' IN TYPEOF(member)) | NOT expression_is_constant(expr))) = 0;
  WR3: no_cyclic_space_reference(SELF, []);
END_ENTITY;

ENTITY fixed_constituent_assembly_constraint
  SUBTYPE OF (assembly_geometric_constraint, fixed_element_geometric_constraint);
  fixed_constituent : representative_shape_representation;
WHERE
  WR1: SELF\explicit_constraint.constrained_elements[1]\geometric_representation_item.dim = 3;
  WR2: (assembly_leaf(using_product_definition_of_shape_representation(fixed_constituent)[1]));
  WR3: (SIZEOF(SELF\explicit_constraint.constrained_elements) = 1) AND (SIZEOF(SELF\explicit_constraint.reference_elements) = 0);
  WR4: fixed_constituent IN (using_representations(SELF\explicit_constraint.constrained_elements[1]) + using_representation_with_mapping(SELF\explicit_constraint.constrained_elements[1]));
END_ENTITY;

ENTITY fixed_element_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY fixed_instance_attribute_set
  SUBTYPE OF (variational_representation_item);
  fixed_attributes : SET[1:?] OF instance_attribute_reference;
WHERE
  WR1: SIZEOF(QUERY(q <* using_representations(SELF) | SIZEOF(QUERY(r <* q.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FIXED_INSTANCE_ATTRIBUTE_SET' IN TYPEOF(r))) > 1)) = 0;
END_ENTITY;

ENTITY fixed_reference_swept_surface
  SUBTYPE OF (swept_surface);
  directrix : curve;
  fixed_reference : direction;
END_ENTITY;

ENTITY flat_face
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction')))) = 1)))) = 0);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear') AND (sdr.name = 'course of travel')))) = 1)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'removal boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'removal boundary')))) = 1)))) = 1)))) = 0);
  WR4: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'boundary'))) = 1))) <= 1))) = 0;
  WR5: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
  WR6: SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name = 'uncut volume') AND (SIZEOF(QUERY(sar <* csa.component_relationships | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] * TYPEOF(sar.related_shape_aspect)) = 1)))) = 1)))) <= 1)))) = 1;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'removal depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY flat_pattern_ply_representation_relationship
  SUBTYPE OF (shape_representation_relationship);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN (TYPEOF(SELF\representation_relationship.rep_1) * TYPEOF(SELF\representation_relationship.rep_2));
  WR2: SELF\representation_relationship.rep_1\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
END_ENTITY;

ENTITY flatness_tolerance
  SUBTYPE OF (geometric_tolerance);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY force_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.newton);
END_ENTITY;

ENTITY format_function
  SUBTYPE OF (string_expression, binary_generic_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: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION') IN TYPEOF(value_to_format)) AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION') IN TYPEOF(format_string));
END_ENTITY;

ENTITY forward_chaining_rule
  SUBTYPE OF (rule_definition);
END_ENTITY;

ENTITY forward_chaining_rule_premise
  SUBTYPE OF (property_definition, property_definition_representation, representation);
END_ENTITY;

ENTITY founded_item
  ABSTRACT SUPERTYPE OF (ONEOF (b_spline_curve_knot_locator,
                                b_spline_curve_segment,
                                b_spline_surface_knot_locator,
                                b_spline_surface_patch,
                                b_spline_surface_strip,
                                boundary_curve_of_b_spline_or_rectangular_composite_surface,
                                box_domain,
                                character_glyph_style_outline,
                                character_glyph_style_stroke,
                                composite_curve_segment,
                                composite_curve_transition_locator,
                                curve_style,
                                curve_style_font,
                                curve_style_font_and_scaling,
                                curve_style_font_pattern,
                                externally_defined_style,
                                fill_area_style,
                                interpolated_configuration_segment,
                                kinematic_path_segment,
                                plane_angle_and_length_pair,
                                plane_angle_and_ratio_pair,
                                point_style,
                                presentation_style_assignment,
                                rectangular_composite_surface_transition_locator,
                                surface_patch,
                                surface_side_style,
                                surface_style_boundary,
                                surface_style_control_grid,
                                surface_style_fill_area,
                                surface_style_parameter_line,
                                surface_style_segmentation_curve,
                                surface_style_silhouette,
                                surface_style_usage,
                                symbol_style,
                                text_style,
                                view_volume)
                        ANDOR ONEOF (character_glyph_style_outline,
                             character_glyph_style_stroke,
                             curve_style,
                             curve_style_font,
                             curve_style_font_and_scaling,
                             curve_style_font_pattern,
                             externally_defined_style,
                             fill_area_style,
                             point_style,
                             presentation_style_assignment,
                             surface_side_style,
                             surface_style_boundary,
                             surface_style_control_grid,
                             surface_style_fill_area,
                             surface_style_parameter_line,
                             surface_style_segmentation_curve,
                             surface_style_silhouette,
                             surface_style_usage,
                             symbol_style,
                             text_style));
DERIVE
  users : SET[0:?] OF founded_item_select := using_items(SELF, []);
WHERE
  WR1: SIZEOF(users) > 0;
  WR2: NOT (SELF IN users);
END_ENTITY;

ENTITY free_edge
  SUBTYPE OF (inapt_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, []);
  WR5: SIZEOF(QUERY(sdqr <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(sdqr)) AND (SIZEOF(QUERY(sdqiir <* bag_to_set(USEDIN(sdqr, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(sdqiir)) AND (SIZEOF(QUERY(sdqiri <* sdqiir.inspected_instances | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN TYPEOF(sdqiri.inspected_elements[1])))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY free_form_assignment
  SUBTYPE OF (free_form_constraint);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\free_form_constraint.constrained_elements | q IN used_variables(SELF\free_form_constraint.constraining_expression))) = 0;
  WR2: SIZEOF(QUERY(q <* SELF\free_form_constraint.reference_elements | NOT (q IN used_variables(SELF\free_form_constraint.constraining_expression)))) = 0;
  WR3: SIZEOF(SELF\free_form_constraint.reference_elements) >= 1;
  WR4: SIZEOF(QUERY(q <* SELF\free_form_constraint.constrained_elements | NOT (compatible_spaces(values_space_of(SELF\free_form_constraint.constraining_expression), q\maths_variable.values_space)))) = 0;
END_ENTITY;

ENTITY free_form_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (free_form_assignment,
                                free_form_relation))
  SUBTYPE OF (explicit_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF variational_parameter;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF variational_parameter;
  constraining_expression : expression;
END_ENTITY;

ENTITY free_form_relation
  SUBTYPE OF (free_form_constraint);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN TYPEOF(SELF\free_form_constraint.constraining_expression);
  WR2: SIZEOF(QUERY(q <* (SELF\free_form_constraint.constrained_elements + SELF\free_form_constraint.reference_elements) | NOT (q IN used_variables(SELF\free_form_constraint.constraining_expression)))) = 0;
END_ENTITY;

ENTITY free_kinematic_motion_representation
  SUBTYPE OF (representation_relationship_with_transformation);
  SELF\representation_relationship.rep_1 : representative_shape_representation;
  SELF\representation_relationship.rep_2 : representative_shape_representation;
  motion : kinematic_path;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2));
  WR3: ((dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) = 3) AND (dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) = 3));
  WR4: (SELF\representation_relationship.rep_1 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND (SELF\representation_relationship.rep_2 IN (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) + using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
END_ENTITY;

ENTITY free_variable_semantics
  SUBTYPE OF (variable_semantics);
END_ENTITY;

ENTITY frequency_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.hertz);
END_ENTITY;

ENTITY frozen_assignment
  SUBTYPE OF (approval_assignment);
  items : SET[1:?] OF change_management_object;
END_ENTITY;

ENTITY fully_constrained_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := FALSE;
END_ENTITY;

ENTITY func
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY function_application
  SUBTYPE OF (multiple_arity_generic_expression);
  func : maths_function_select;
  arguments : LIST[1:?] OF maths_expression;
DERIVE
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF generic_expression := [convert_to_maths_function(func)] + convert_to_operands(arguments);
WHERE
  WR1: function_applicability(func, arguments);
END_ENTITY;

ENTITY function_space
  SUBTYPE OF (maths_space, generic_literal);
  domain_constraint : space_constraint_type;
  domain_argument : maths_space;
  range_constraint : space_constraint_type;
  range_argument : maths_space;
WHERE
  WR1: expression_is_constant(domain_argument) AND expression_is_constant(range_argument);
  WR2: (domain_argument <> the_empty_space) AND (range_argument <> the_empty_space);
  WR3: (domain_constraint <> sc_member) OR NOT member_of(the_empty_space, domain_argument);
  WR4: (range_constraint <> sc_member) OR NOT member_of(the_empty_space, range_argument);
  WR5: NOT (any_space_satisfies(domain_constraint, domain_argument) AND any_space_satisfies(range_constraint, range_argument));
END_ENTITY;

ENTITY functional_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY functional_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

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

ENTITY g1_discontinuity_between_adjacent_faces
  SUBTYPE OF (non_smooth_geometry_transition_across_edge);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
END_ENTITY;

ENTITY g1_discontinuous_curve
  SUBTYPE OF (discontinuous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY g1_discontinuous_surface
  SUBTYPE OF (discontinuous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
END_ENTITY;

ENTITY g2_discontinuity_between_adjacent_faces
  SUBTYPE OF (non_smooth_geometry_transition_across_edge);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  assessment_specification_2 : shape_data_quality_assessment_by_numerical_test;
  flat_curvature_radius_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR5: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR6: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE']);
END_ENTITY;

ENTITY g2_discontinuous_curve
  SUBTYPE OF (discontinuous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  assessment_specification_2 : shape_data_quality_assessment_by_numerical_test;
  flat_curvature_radius_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR5: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
  WR6: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY g2_discontinuous_surface
  SUBTYPE OF (discontinuous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  assessment_specification_2 : shape_data_quality_assessment_by_numerical_test;
  flat_curvature_radius_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR5: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
  WR6: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE']);
END_ENTITY;

ENTITY gap_between_adjacent_edges_in_loop
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_between_edge_and_base_surface
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_between_faces_related_to_an_edge
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_between_pcurves_related_to_an_edge
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_between_vertex_and_base_surface
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_between_vertex_and_edge
  SUBTYPE OF (geometric_gap_in_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY gap_in_triangulated_face
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangulated_face];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_triangle_edge];
INVERSE
  offset_radius : tsdq_positive_length_measure_for_gap_in_triangulated_face FOR criterion_to_assign_the_value;
WHERE
  WR1: (SELF.offset_radius.name = 'offset_radius');
END_ENTITY;

ENTITY gap_in_triangulated_shell_or_solid
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell,tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_triangle_edge];
INVERSE
  specific_applied_values : SET[2:2] OF tsdq_positive_length_measure_for_gap_in_triangulated_shell_or_solid FOR criterion_to_assign_the_value;
WHERE
  WR1: (SIZEOF(QUERY(ie <* specific_applied_values | ie.name = 'approximation_tolerance')) = 1) AND (SIZEOF(QUERY(ie <* specific_applied_values | ie.name = 'offset_radius')) = 1);
END_ENTITY;

ENTITY gear
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (10 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) <= 13))) = 1)) = 1;
  WR2: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of teeth'))) = 1))) = 0))) = 0);
  WR3: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'reference pressure angle'))) = 1))) = 0))) = 0);
  WR4: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'rake shift factor'))) = 1))) = 0))) = 0);
  WR5: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal tooth depth'))) = 1))) = 0))) = 0);
  WR6: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'face width'))) = 1))) = 0))) = 0);
  WR7: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip diameter'))) = 1))) = 0))) = 0);
  WR8: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'module or diametral pitch') AND ((it.description = 'module') OR (it.description = 'diametral pitch')))) = 1))) = 0))) = 0);
  WR9: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'internal or external gear') AND ((it.description = 'internal') OR (it.description = 'external')))) = 1))) = 0))) = 0);
  WR10: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'normal attribute'))) = 1))) = 0))) = 0);
  WR11: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root fillet radius'))) <= 1))) = 0))) = 0);
  WR12: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'reference helix angle'))) = 1))) = 0))) = 0);
  WR13: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'gear tooth') AND ((it.description = 'left hand tooth') OR (it.description = 'right hand tooth')))) = 1))) = 0))) = 0);
  WR14: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip angle'))) = 1))) = 0))) = 0);
  WR15: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root angle'))) = 1))) = 0))) = 0);
  WR16: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'applied shape') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect))) = 1)) = 1))) = 0;
END_ENTITY;

ENTITY gear_pair
  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
  radius_first_link : length_measure;
  radius_second_link : length_measure;
  bevel : plane_angle_measure;
  helical_angle : plane_angle_measure;
  gear_ratio : REAL;
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY gear_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : gear_pair;
  actual_rotation_1 : plane_angle_measure;
DERIVE
  actual_rotation_2 : plane_angle_measure := -actual_rotation_1 * SELF\pair_value.applies_to_pair\gear_pair.gear_ratio;
END_ENTITY;

ENTITY gear_pair_with_range
  SUBTYPE OF (gear_pair);
  lower_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation_1) OR NOT EXISTS(upper_limit_actual_rotation_1)) XOR (lower_limit_actual_rotation_1 < upper_limit_actual_rotation_1);
END_ENTITY;

ENTITY general_datum_reference
  ABSTRACT SUPERTYPE OF (ONEOF (datum_reference_compartment,
                                datum_reference_element))
  SUBTYPE OF (shape_aspect);
  base : datum_or_common_datum;
  modifiers : OPTIONAL SET[1:?] OF datum_reference_modifier;
WHERE
  WR1: SELF\shape_aspect.name = '';
  WR2: NOT EXISTS(SELF\shape_aspect.description);
  WR3: NOT EXISTS(SELF\shape_aspect.id);
  WR4: SELF\shape_aspect.product_definitional = FALSE;
  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(base)) OR (SELF\shape_aspect.of_shape = base\shape_aspect.of_shape);
  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM_LIST' IN TYPEOF(base)) OR (SELF\shape_aspect.of_shape = base[1]\shape_aspect.of_shape);
END_ENTITY;

ENTITY general_feature
  SUBTYPE OF (shape_feature_definition);
WHERE
  WR1: (SIZEOF(get_property_definition_representations(SELF)) <= 1) AND (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) <= 1);
  WR2: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'course of travel occurrence')) = SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'course of travel'))) = 1)));
  WR3: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'course of travel occurrence')) = SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sar.relating_shape_aspect)))) = 1)));
  WR4: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'boundary occurrence')) = SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'boundary occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage'))) = 1)));
  WR5: (SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(sa)))) <= 1) AND (SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(sa)) AND (sa.name = 'general compound feature') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE' IN TYPEOF(sar.related_shape_aspect)))) >= 2))) <= 1);
END_ENTITY;

ENTITY general_linear_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  sum_index : one_or_two;
DERIVE
  mat : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: function_is_2d_table(mat);
  WR2: (space_dimension(mat.range) = 1) AND subspace_of_es(factor1(mat.range), es_numbers);
END_ENTITY;

ENTITY general_material_property
  SUBTYPE OF (general_property);
WHERE
  WR1: SIZEOF(QUERY(gpa <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.BASE_DEFINITION') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_PROPERTY' IN TYPEOF(gpa\general_property_association.derived_definition)))) = 0;
END_ENTITY;

ENTITY general_part_feature_without_pmi
  SUBTYPE OF (inapt_relation_of_pmi_and_feature);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_shape_aspect];
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(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE'] * TYPEOF(derived_definition)) > 0) OR (SIZEOF(USEDIN(derived_definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')) = 1);
  WR2: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE'] * TYPEOF(derived_definition)) > 0) OR (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 generated_finite_numeric_space
  SUBTYPE OF (finite_space);
  start_value : maths_number;
  increment_value : maths_number;
  increment_number : positive_integer;
DERIVE
  SELF\finite_space.members : SET[2:?] OF maths_number := make_numeric_set(start_value, increment_value, increment_number);
WHERE
  WR1: increment_value <> 0.0;
END_ENTITY;

ENTITY generic_character_glyph_symbol
  ABSTRACT SUPERTYPE
  SUBTYPE OF (symbol_representation);
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_product_definition_reference
  ABSTRACT SUPERTYPE OF (ONEOF (product_definition_reference,
                                product_definition_reference_with_local_representation));
  source : external_source;
END_ENTITY;

ENTITY generic_property_relationship;
  name : label;
  description : text;
  relating : generic_property_definition_select;
  related : generic_property_definition_select;
  relation_type : STRING;
WHERE
  WR1: acyclic_generic_property_relationship(SELF, [related], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_PROPERTY_RELATIONSHIP');
END_ENTITY;

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

ENTITY geometric_alignment
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) > 1;
END_ENTITY;

ENTITY geometric_contact
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 2;
END_ENTITY;

ENTITY geometric_curve_set
  SUBTYPE OF (geometric_set);
WHERE
  WR1: SIZEOF(QUERY(temp <* SELF\geometric_set.elements | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(temp)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(temp))))) = 0;
END_ENTITY;

ENTITY geometric_gap_in_topology
  ABSTRACT SUPERTYPE OF (ONEOF (gap_between_adjacent_edges_in_loop,
                                gap_between_vertex_and_base_surface,
                                gap_between_vertex_and_edge,
                                gap_between_edge_and_base_surface,
                                gap_between_pcurves_related_to_an_edge,
                                gap_between_faces_related_to_an_edge))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY geometric_intersection
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) > 1;
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_model;
  SELF\item_identified_representation_usage.identified_item : geometric_model_item;
END_ENTITY;

ENTITY geometric_model_element_relationship
  SUBTYPE OF (geometric_representation_item, representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : geometric_representation_item;
  SELF\representation_item_relationship.related_representation_item : geometric_representation_item;
UNIQUE
  UR1: SELF\representation_item_relationship.relating_representation_item, SELF\representation_item_relationship.related_representation_item;
WHERE
  WR1: SELF\representation_item_relationship.relating_representation_item :<>: SELF\representation_item_relationship.related_representation_item;
END_ENTITY;

ENTITY geometric_representation_context
  SUPERTYPE OF (ONEOF (geometric_representation_context_with_parameter,
                       path_parameter_representation_context))
  SUBTYPE OF (representation_context);
  coordinate_space_dimension : dimension_count;
END_ENTITY;

ENTITY geometric_representation_context_with_parameter
  SUBTYPE OF (geometric_representation_context);
  parameter_unit : OPTIONAL unit;
END_ENTITY;

ENTITY geometric_representation_item
  SUPERTYPE OF (ONEOF (rotation_about_direction,
                       su_parameters)
               ANDOR ONEOF (kinematic_path,
                    placement)
             ANDOR (ONEOF (camera_model,
                  camera_model_d3_multi_clipping_intersection,
                  camera_model_d3_multi_clipping_union,
                  curve,
                  direction,
                  light_source))
           ANDOR (ONEOF (curve,
                planar_extent))
         ANDOR (ONEOF (annotation_fill_area,
              composite_text,
              curve,
              defined_character_glyph,
              defined_symbol,
              point,
              symbol_target,
              text_literal))
       ANDOR (ONEOF (block,
            boolean_result,
            cartesian_transformation_operator,
            curve,
            cyclide_segment_solid,
            direction,
            edge_based_wireframe_model,
            edge_curve,
            ellipsoid,
            face_based_surface_model,
            face_surface,
            faceted_primitive,
            geometric_set,
            half_space_solid,
            placement,
            point,
            poly_loop,
            primitive_2d,
            rectangular_pyramid,
            right_angular_wedge,
            right_circular_cone,
            right_circular_cylinder,
            scanned_data_item,
            shell_based_surface_model,
            shell_based_wireframe_model,
            solid_model,
            sphere,
            surface,
            tessellated_item,
            torus,
            vector,
            vertex_point,
            volume))
     ANDOR (ONEOF (curve,
          externally_defined_hatch_style,
          externally_defined_tile_style,
          fill_area_style_hatching,
          fill_area_style_tile_coloured_region,
          fill_area_style_tile_curve_with_style,
          fill_area_style_tile_symbol_with_style,
          fill_area_style_tiles,
          one_direction_repeat_factor,
          point,
          vector)))
  SUBTYPE OF (representation_item);
DERIVE
  dim : dimension_count := dimension_of(SELF);
WHERE
  WR1: SIZEOF(QUERY(using_rep <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(using_rep.context_of_items)))) = 0;
END_ENTITY;

ENTITY geometric_set
  SUPERTYPE OF (ONEOF (geometric_curve_set))
  SUBTYPE OF (geometric_representation_item);
  elements : SET[1:?] OF geometric_set_select;
END_ENTITY;

ENTITY geometric_tolerance
  ABSTRACT SUPERTYPE OF (geometric_tolerance_with_datum_reference
                         ANDOR geometric_tolerance_with_defined_unit
                        ANDOR ONEOF (geometric_tolerance_with_modifiers,
                             modified_geometric_tolerance)
                      ANDOR unequally_disposed_geometric_tolerance
                     ANDOR ONEOF (cylindricity_tolerance,
                          flatness_tolerance,
                          line_profile_tolerance,
                          position_tolerance,
                          roundness_tolerance,
                          straightness_tolerance,
                          surface_profile_tolerance));
  name : label;
  description : OPTIONAL text;
  magnitude : OPTIONAL length_measure_with_unit;
  toleranced_shape_aspect : geometric_tolerance_target;
DERIVE
  controlling_shape : product_definition_shape := sts_get_product_definition_shape(toleranced_shape_aspect);
  id : identifier := get_id_value(SELF);
INVERSE
  auxiliary_classification : SET[0:?] OF geometric_tolerance_auxiliary_classification FOR described_item;
  tolerance_relationship : SET[0:?] OF geometric_tolerance_relationship FOR relating_geometric_tolerance;
UNIQUE
  UR1: id, controlling_shape;
WHERE
  WR1: magnitude\measure_with_unit.value_component >= 0.0;
  WR2: EXISTS(controlling_shape);
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP' IN TYPEOF(toleranced_shape_aspect)) OR (toleranced_shape_aspect\shape_aspect_relationship.relating_shape_aspect.of_shape :=: toleranced_shape_aspect\shape_aspect_relationship.related_shape_aspect.of_shape);
  WR4: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
  WR5: SIZEOF(QUERY(tr <* tolerance_relationship | tr.name = 'composite tolerance')) <= 1;
END_ENTITY;

ENTITY geometric_tolerance_auxiliary_classification;
  attribute_value : geometric_tolerance_auxiliary_classification_enum;
  described_item : geometric_tolerance;
END_ENTITY;

ENTITY geometric_tolerance_related_to_edge
  SUBTYPE OF (inapt_relation_of_pmi_and_feature);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_geometric_tolerance];
END_ENTITY;

ENTITY geometric_tolerance_relationship;
  name : label;
  description : text;
  relating_geometric_tolerance : geometric_tolerance;
  related_geometric_tolerance : geometric_tolerance;
WHERE
  WR1: NOT (name = 'composite tolerance') OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN TYPEOF(related_geometric_tolerance))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN TYPEOF(related_geometric_tolerance))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN TYPEOF(related_geometric_tolerance)));
  WR2: NOT (name = 'composite tolerance') OR (relating_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect :=: related_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect);
  WR3: acyclic_geometric_tolerance_relationship(SELF, [related_geometric_tolerance], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE');
END_ENTITY;

ENTITY geometric_tolerance_with_datum_reference
  SUPERTYPE OF (ONEOF (angularity_tolerance,
                       circular_runout_tolerance,
                       coaxiality_tolerance,
                       concentricity_tolerance,
                       parallelism_tolerance,
                       perpendicularity_tolerance,
                       symmetry_tolerance,
                       total_runout_tolerance))
  SUBTYPE OF (geometric_tolerance);
  datum_system : SET[1:?] OF datum_system_or_reference;
WHERE
  WR1: (SIZEOF(QUERY(ds <* datum_system | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN TYPEOF(ds))) = 0) OR (SIZEOF(datum_system) = 1);
END_ENTITY;

ENTITY geometric_tolerance_with_defined_area_unit
  SUBTYPE OF (geometric_tolerance_with_defined_unit);
  area_type : area_unit_type;
  second_unit_size : OPTIONAL length_or_plane_angle_measure_with_unit_select;
WHERE
  WR1: NOT (EXISTS(second_unit_size) XOR (area_type IN [area_unit_type.rectangular,area_unit_type.cylindrical,area_unit_type.spherical]));
  WR2: NOT (area_type = area_unit_type.cylindrical) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\geometric_tolerance_with_defined_unit.unit_size)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
  WR3: NOT (area_type = area_unit_type.rectangular) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\geometric_tolerance_with_defined_unit.unit_size)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
  WR4: NOT (area_type = area_unit_type.spherical) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(SELF\geometric_tolerance_with_defined_unit.unit_size)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
  WR5: NOT (area_type = area_unit_type.spherical) OR (SIZEOF(QUERY(tz <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_ZONE.DEFINING_TOLERANCE') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_TOLERANCE_ZONE' IN TYPEOF(tz)))) <> 0);
END_ENTITY;

ENTITY geometric_tolerance_with_defined_unit
  SUBTYPE OF (geometric_tolerance);
  unit_size : length_or_plane_angle_measure_with_unit_select;
WHERE
  WR1: ('NUMBER' IN TYPEOF(unit_size\measure_with_unit.value_component)) AND (unit_size\measure_with_unit.value_component > 0.0);
END_ENTITY;

ENTITY geometric_tolerance_with_maximum_tolerance
  SUBTYPE OF (geometric_tolerance_with_modifiers);
  maximum_upper_tolerance : length_measure_with_unit;
WHERE
  WR1: (geometric_tolerance_modifier.maximum_material_requirement IN SELF\geometric_tolerance_with_modifiers.modifiers) OR (geometric_tolerance_modifier.least_material_requirement IN SELF\geometric_tolerance_with_modifiers.modifiers);
  WR2: (maximum_upper_tolerance\measure_with_unit.unit_component = SELF\geometric_tolerance.magnitude\measure_with_unit.unit_component) AND (maximum_upper_tolerance\measure_with_unit.value_component > SELF\geometric_tolerance.magnitude\measure_with_unit.value_component);
END_ENTITY;

ENTITY geometric_tolerance_with_modifiers
  SUBTYPE OF (geometric_tolerance);
  modifiers : SET[1:?] OF geometric_tolerance_modifier;
WHERE
  WR1: NOT (geometric_tolerance_modifier.circle_a IN modifiers) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CENTRE_OF_SYMMETRY' IN TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)) AND (SELF\geometric_tolerance.toleranced_shape_aspect\shape_aspect.product_definitional = FALSE));
  WR2: NOT (geometric_tolerance_modifier.circle_a IN modifiers) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DERIVED_SHAPE_ASPECT' IN TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)) AND (SIZEOF(SELF\geometric_tolerance.toleranced_shape_aspect\derived_shape_aspect.deriving_relationships) = 1));
  WR3: NOT (SIZEOF([geometric_tolerance_modifier.individually, geometric_tolerance_modifier.each_element, geometric_tolerance_modifier.each_radial_element] * modifiers) = 1) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_GROUP_SHAPE_ASPECT' IN TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect));
  WR4: SIZEOF([geometric_tolerance_modifier.individually, geometric_tolerance_modifier.each_element, geometric_tolerance_modifier.each_radial_element] * modifiers) <= 1;
END_ENTITY;

ENTITY geometrical_tolerance_callout
  SUBTYPE OF (draughting_callout);
END_ENTITY;

ENTITY geometrically_bounded_2d_wireframe_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
  WR2: SIZEOF(QUERY(item <* SELF.items | NOT (SIZEOF(TYPEOF(item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) = 1))) = 0;
  WR3: SIZEOF(QUERY(item <* SELF.items | SIZEOF(TYPEOF(item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) = 1)) >= 1;
  WR4: SIZEOF(QUERY(mi <* QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(item))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR5: SIZEOF(QUERY(gcs <* QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item))) | NOT (SIZEOF(QUERY(elem <* gcs\geometric_set.elements | NOT (SIZEOF(TYPEOF(elem) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_2D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE']) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(gcs <* QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item))) | NOT (SIZEOF(QUERY(crv <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(elem))) | NOT (valid_basis_curve_in_2d_wireframe(crv)))) = 0))) = 0;
  WR7: SIZEOF(QUERY(gcs <* QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item))) | NOT (SIZEOF(QUERY(pnt <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(elem))) | NOT (SIZEOF(TYPEOF(pnt) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']) = 1))) = 0))) = 0;
END_ENTITY;

ENTITY geometrically_bounded_surface_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR3: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY(mr_it <* mi\mapped_item.mapping_source.mapped_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(mr_it)))) > 0)))) = 0;
  WR4: SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(pnt <* QUERY(gsel <* gs\geometric_set.elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(gsel)) | NOT (gbsf_check_point(pnt)))) = 0))) = 0;
  WR5: SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cv <* QUERY(gsel <* gs\geometric_set.elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(gsel)) | NOT (gbsf_check_curve(cv)))) = 0))) = 0;
  WR6: SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(sf <* QUERY(gsel <* gs\geometric_set.elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(gsel)) | NOT (gbsf_check_surface(sf)))) = 0))) = 0;
  WR7: SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | SIZEOF(QUERY(gsel <* gs\geometric_set.elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(gsel))) > 0)) > 0;
END_ENTITY;

ENTITY geometrically_bounded_wireframe_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | NOT (SIZEOF(TYPEOF(it) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) = 1))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | (SIZEOF(TYPEOF(it) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) = 1))) >= 1;
  WR3: SIZEOF(QUERY(gcs <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(crv <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(elem))) | NOT valid_geometrically_bounded_wf_curve(crv))) = 0))) = 0;
  WR4: SIZEOF(QUERY(gcs <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(pnts <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(elem))) | NOT valid_geometrically_bounded_wf_point(pnts))) = 0))) = 0;
  WR5: SIZEOF(QUERY(gcs <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(cnc <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC' IN TYPEOF(elem))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(cnc\conic.position)))) = 0))) = 0;
  WR6: SIZEOF(QUERY(gcs <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(pline <* QUERY(elem <* gcs\geometric_set.elements | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(elem))) | NOT (SIZEOF(pline\polyline.points) > 2))) = 0))) = 0;
  WR7: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
END_ENTITY;

ENTITY geometry_to_topology_item_association
  SUBTYPE OF (item_defined_transformation);
  SELF\item_defined_transformation.transform_item_1 : geometry_association_item_select;
  SELF\item_defined_transformation.transform_item_2 : topology_association_item_select;
END_ENTITY;

ENTITY geometry_to_topology_model_association
  SUBTYPE OF (representation_relationship_with_transformation, shape_representation_relationship);
  SELF\representation_relationship_with_transformation.transformation_operator : set_item_defined_transformation;
DERIVE
  items : SET OF item_defined_transformation := get_item_defined_transformations(transformation_operator);
INVERSE
  product_context : SET[1:?] OF context_dependent_shape_representation FOR representation_relation;
WHERE
  WR1: SIZEOF(QUERY(it <* items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRY_TO_TOPOLOGY_ITEM_ASSOCIATION' IN TYPEOF(it)))) = 0;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFINITIONAL_REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
END_ENTITY;

ENTITY geometry_with_local_irregularity
  ABSTRACT SUPERTYPE OF (ONEOF (extreme_patch_width_variation,
                                zero_surface_normal,
                                abrupt_change_of_surface_normal))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY geometry_with_local_near_degeneracy
  ABSTRACT SUPERTYPE OF (ONEOF (curve_with_small_curvature_radius,
                                short_length_curve_segment,
                                surface_with_small_curvature_radius,
                                small_area_surface_patch,
                                narrow_surface_patch,
                                indistinct_surface_knots,
                                indistinct_curve_knots,
                                nearly_degenerate_surface_boundary,
                                nearly_degenerate_surface_patch))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY global_assignment
  SUBTYPE OF (representation_item_relationship);
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 gps_filter;
  filter_type : gps_filtration_type;
  filter_data : LIST[1:?] OF measure_with_unit;
INVERSE
  owner : gps_filtration_specification FOR filter_data;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_MODIFIERS' IN TYPEOF(owner\gps_filtration_specification.base_target)) OR (SIZEOF([geometric_tolerance_modifier.reference_minimax_feature_without_constraint, geometric_tolerance_modifier.reference_minimax_feature_with_external_material_constraint, geometric_tolerance_modifier.reference_minimax_feature_with_internal_material_constraint, geometric_tolerance_modifier.reference_least_square_feature_without_constraint, geometric_tolerance_modifier.reference_least_square_feature_with_external_material_constraint, geometric_tolerance_modifier.reference_least_square_feature_with_internal_material_constraint, geometric_tolerance_modifier.reference_minimum_circumscribed_feature, geometric_tolerance_modifier.reference_maximum_inscribed_feature, geometric_tolerance_modifier.total_range_deviations, geometric_tolerance_modifier.peak_height, geometric_tolerance_modifier.valley_depth, geometric_tolerance_modifier.standard_deviation] * owner\gps_filtration_specification.base_target\geometric_tolerance_with_modifiers.modifiers) <> 0);
END_ENTITY;

ENTITY gps_filtration_specification;
  base_target : gps_filtration_specification_target;
  filter_data : LIST[1:?] OF gps_filter;
END_ENTITY;

ENTITY ground_fact
  SUBTYPE OF (atomic_formula);
END_ENTITY;

ENTITY group
  SUPERTYPE OF (ONEOF (change_group,
                       change_element));
  name : label;
  description : OPTIONAL text;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY group_assignment
  ABSTRACT SUPERTYPE OF (ONEOF (current_change_element_assignment,
                                previous_change_element_assignment,
                                change_group_assignment));
  assigned_group : group;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY group_geometric_tolerance_with_datum_system_reference
  SUBTYPE OF (geometric_tolerance);
  datum_system : SET[1:?] OF datum_system_for_composite_group_element;
  SELF\geometric_tolerance.toleranced_shape_aspect : composite_group_shape_aspect;
END_ENTITY;

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

ENTITY guide_curve
  SUBTYPE OF (line_based_llai);
END_ENTITY;

ENTITY guide_curve_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY half_space_2d
  SUBTYPE OF (primitive_2d);
  base_curve : curve;
  agreement_flag : BOOLEAN;
END_ENTITY;

ENTITY half_space_solid
  SUBTYPE OF (geometric_representation_item);
  base_surface : surface;
  agreement_flag : BOOLEAN;
END_ENTITY;

ENTITY hardness_representation
  SUBTYPE OF (representation);
WHERE
  WR1: ({2 <= SIZEOF(SELF.items) <= 4}) AND (SIZEOF(QUERY(i <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (i.name IN ['measuring method','measuring position']))) + SIZEOF(QUERY(i <* items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] * TYPEOF(i)) = 1) AND (i.name IN ['depth','hardness']))) = SIZEOF(SELF.items));
  WR2: SIZEOF(QUERY(i <* SELF.items | i.name = 'measuring method')) = 1;
  WR3: SIZEOF(QUERY(i <* SELF.items | i.name = 'hardness')) = 1;
  WR4: SIZEOF(QUERY(i <* SELF.items | i.name = 'measuring position')) <= 1;
  WR5: SIZEOF(QUERY(i <* SELF.items | i.name = 'depth')) <= 1;
  WR6: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | SIZEOF(QUERY(gpa <* USEDIN(pdr.definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(gpa.base_definition)) AND (gpa\general_property_association.base_definition\general_property.name = 'surface_condition'))) = 1)) = 1);
END_ENTITY;

ENTITY harness_node
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY harness_segment
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY hash_based_v5_uuid_attribute
  SUBTYPE OF (v5_uuid_attribute);
  hash_function : STRING;
WHERE
  WR1: hash_function <> '';
END_ENTITY;

ENTITY hexahedron_volume
  SUBTYPE OF (volume);
  points : LIST[8:8] OF cartesian_point;
WHERE
  WR1: above_plane(points[1], points[2], points[3], points[4]) = 0.0;
  WR2: above_plane(points[5], points[8], points[7], points[6]) = 0.0;
  WR3: above_plane(points[1], points[4], points[8], points[5]) = 0.0;
  WR4: above_plane(points[4], points[3], points[7], points[8]) = 0.0;
  WR5: above_plane(points[3], points[2], points[6], points[7]) = 0.0;
  WR6: above_plane(points[1], points[5], points[6], points[2]) = 0.0;
  WR7: same_side([points[1],points[2],points[3]], [points[5],points[6],points[7],points[8]]);
  WR8: same_side([points[1],points[4],points[8]], [points[3],points[7],points[6],points[2]]);
  WR9: same_side([points[1],points[2],points[5]], [points[3],points[7],points[8],points[4]]);
  WR10: same_side([points[5],points[6],points[7]], [points[1],points[2],points[3],points[4]]);
  WR11: same_side([points[3],points[7],points[6]], [points[1],points[4],points[8],points[5]]);
  WR12: same_side([points[3],points[7],points[8]], [points[1],points[5],points[6],points[2]]);
  WR13: points[1].dim = 3;
END_ENTITY;

ENTITY hidden_element_over_riding_styled_item
  SUBTYPE OF (context_dependent_over_riding_styled_item);
  SELF\context_dependent_over_riding_styled_item.style_context : LIST[1:1] OF presentation_view;
  SELF\styled_item.item : camera_image;
INVERSE
  container : SET[1:?] OF presentation_view FOR items;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3_WITH_HLHSR' IN TYPEOF(SELF.item\mapped_item.mapping_source.mapping_origin);
END_ENTITY;

ENTITY hierarchical_interface_connection
  SUBTYPE OF (interface_connection);
END_ENTITY;

ENTITY high_degree_axi_symmetric_surface
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  approximation_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY high_degree_conic
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  approximation_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY high_degree_linear_curve
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  approximation_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY high_degree_planar_surface
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  approximation_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY high_order_kinematic_pair
  ABSTRACT SUPERTYPE OF (ONEOF (linear_flexible_and_planar_curve_pair,
                                point_on_surface_pair,
                                point_on_planar_curve_pair,
                                planar_curve_pair,
                                surface_pair))
  SUBTYPE OF (kinematic_pair);
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_2 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY hole_bottom
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['through','flat','flat with radius','flat with taper','spherical','conical']);
  WR3: ((NOT (SELF.description = 'through')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 0)))) = 0));
  WR4: ((NOT (SELF.description IN ['flat with radius','flat with taper','spherical','conical'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0));
  WR5: ((NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 0)))) = 0)))) = 0));
  WR6: ((NOT (SELF.description IN ['flat with radius','spherical'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0));
  WR7: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0));
  WR8: ((NOT (SELF.description = 'conical')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND (SIZEOF(impl_rep.used_representation.items) <= 2)))) = 0)))) = 0));
  WR9: ((SELF.description = 'through') OR (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | ((fcr.name IN ['hole depth start','hole depth end'])))) >= 1));
  WR10: ((NOT (SELF.description = 'flat with radius')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'corner radius')))) = 1)))) = 0)))) = 0));
  WR11: ((NOT (SELF.description = 'spherical')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0));
  WR12: ((NOT (SELF.description = 'conical')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip radius')))) <= 1)))) = 0)))) = 0));
  WR13: ((NOT (SELF.description = 'conical')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip angle')))) = 1)))) = 0)))) = 0));
  WR14: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | ((fcr.related_shape_aspect.description = 'bottom condition occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HOLE_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1);
  WR15: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'final diameter')))) = 1)))) = 0)))) = 0));
  WR16: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'taper diameter')))) = 1)))) = 0)))) = 0));
END_ENTITY;

ENTITY hole_in_panel
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'hole profile') AND (sa.description = 'closed profile occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'profile usage') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sar.relating_shape_aspect)) = 1))) = 1))) = 1;
  WR2: SIZEOF(get_property_definition_representations(SELF)) = SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | SIZEOF(pdr.used_representation.items) = 1));
END_ENTITY;

ENTITY homogeneous_linear_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  sum_index : one_or_two;
DERIVE
  mat : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: function_is_2d_table(mat);
  WR2: (space_dimension(mat.range) = 1) AND subspace_of_es(factor1(mat.range), es_numbers);
END_ENTITY;

ENTITY homokinetic_pair
  SUBTYPE OF (universal_pair);
WHERE
  WR1: NOT EXISTS(SELF.input_skew_angle);
END_ENTITY;

ENTITY hybrid_brep_edge_assignment
  SUBTYPE OF (geometric_representation_item);
  associated_topological_representation_item : hybrid_brep_edge_select;
  hybrid_brep_curve : LIST[1:?] OF hybrid_brep_curve_select;
INVERSE
  owner : hybrid_brep_shape_representation FOR items;
WHERE
  WR1: (owner\hybrid_brep_shape_representation.reference_representation IN using_representations(associated_topological_representation_item)) AND (owner IN get_representations_for_items(list_to_set(hybrid_brep_curve)));
END_ENTITY;

ENTITY hybrid_brep_face_assignment
  SUBTYPE OF (geometric_representation_item);
  associated_topological_representation_item : hybrid_brep_face_select;
  hybrid_brep_surface : LIST[1:?] OF hybrid_brep_surface_select;
INVERSE
  owner : hybrid_brep_shape_representation FOR items;
WHERE
  WR1: (owner\hybrid_brep_shape_representation.reference_representation IN using_representations(associated_topological_representation_item)) AND (owner IN get_representations_for_items(list_to_set(hybrid_brep_surface)));
END_ENTITY;

ENTITY hybrid_brep_shape_representation
  SUBTYPE OF (shape_representation);
  associated_geometric_representation : OPTIONAL SET[1:?] OF shape_representation;
  SELF\representation.items : SET[1:?] OF hybrid_brep_shape_assignment_select;
  SELF\representation.context_of_items : geometric_representation_context;
  reference_representation : hybrid_brep_reference_shape_representation;
WHERE
  WR1: context_of_items\geometric_representation_context.coordinate_space_dimension = 3.0;
  WR2: NOT (SELF IN associated_geometric_representation);
  WR3: NOT (reference_representation IN associated_geometric_representation);
  WR4: SELF :<>: reference_representation;
END_ENTITY;

ENTITY hybrid_brep_vertex_assignment
  SUBTYPE OF (geometric_representation_item);
  associated_topological_representation_item : hybrid_brep_vertex_select;
  hybrid_brep_point : LIST[1:?] OF hybrid_brep_point_select;
INVERSE
  owner : hybrid_brep_shape_representation FOR items;
WHERE
  WR1: (owner\hybrid_brep_shape_representation.reference_representation IN using_representations(associated_topological_representation_item)) AND (owner IN get_representations_for_items(list_to_set(hybrid_brep_point)));
END_ENTITY;

ENTITY hyperbola
  SUBTYPE OF (conic);
  semi_axis : positive_length_measure;
  semi_imag_axis : positive_length_measure;
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_dependent_product_definition_exchange_context
  SUBTYPE OF (dependent_product_definition_exchange_context);
  identification_context : exchange_identification_context_select;
END_ENTITY;

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

ENTITY idrm_classification_assignment
  SUBTYPE OF (classification_assignment);
  items : SET[1:?] OF idrm_marked_item;
END_ENTITY;

ENTITY illuminance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.lux);
END_ENTITY;

ENTITY implicit_explicit_positioned_sketch_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : repositioned_neutral_sketch;
  SELF\representation_item_relationship.related_representation_item : positioned_sketch;
WHERE
  WR1: SIZEOF(QUERY(q <* using_representations(SELF\representation_item_relationship.related_representation_item) | item_in_context(SELF\representation_item_relationship.relating_representation_item, q.context_of_items))) > 0;
END_ENTITY;

ENTITY implicit_intersection_curve
  SUBTYPE OF (implicit_planar_curve);
  external_surface : surface;
END_ENTITY;

ENTITY implicit_model_intersection_curve
  SUBTYPE OF (implicit_planar_curve);
  intersected_model : surface_or_solid_model;
END_ENTITY;

ENTITY implicit_planar_curve
  ABSTRACT SUPERTYPE OF (ONEOF (implicit_intersection_curve,
                                implicit_projected_curve,
                                implicit_model_intersection_curve,
                                implicit_silhouette_curve))
  SUBTYPE OF (curve, auxiliary_geometric_representation_item);
  using_sketch : positioned_sketch;
  computed_representation : curve;
DERIVE
  curve_plane : plane := get_plane_of_implicit_geometry(using_sketch);
WHERE
  WR1: SIZEOF(TYPEOF(computed_representation) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IMPLICIT_PLANAR_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA']) = 0;
END_ENTITY;

ENTITY implicit_planar_intersection_point
  SUBTYPE OF (implicit_point_on_plane);
  external_curve : curve;
END_ENTITY;

ENTITY implicit_planar_projection_point
  SUBTYPE OF (implicit_point_on_plane);
  external_point : point;
  projection_direction : direction;
END_ENTITY;

ENTITY implicit_point_on_plane
  ABSTRACT SUPERTYPE OF (ONEOF (implicit_planar_intersection_point,
                                implicit_planar_projection_point))
  SUBTYPE OF (point, auxiliary_geometric_representation_item);
  using_sketch : positioned_sketch;
  computed_representation : cartesian_point;
DERIVE
  plane_of_point : plane := get_plane_of_implicit_geometry(using_sketch);
WHERE
  WR1: (plane_of_point\elementary_surface.position.location = computed_representation) XOR (dot_product(plane_of_point\elementary_surface.position.p[3], get_relative_direction_2points(plane_of_point\elementary_surface.position.location, computed_representation)) = 0);
  WR2: SIZEOF(TYPEOF(computed_representation) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IMPLICIT_POINT_ON_PLANE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA']) = 0;
END_ENTITY;

ENTITY implicit_projected_curve
  SUBTYPE OF (implicit_planar_curve);
  external_curve : curve;
  projection_direction : direction;
END_ENTITY;

ENTITY implicit_silhouette_curve
  SUBTYPE OF (implicit_planar_curve);
  silhouetted_model : surface_or_solid_model;
  view_direction : direction;
END_ENTITY;

ENTITY imported_curve_function
  SUBTYPE OF (maths_function, generic_literal);
  geometry : curve;
  parametric_domain : tuple_space;
WHERE
  WR1: expression_is_constant(parametric_domain);
END_ENTITY;

ENTITY imported_point_function
  SUBTYPE OF (maths_function, generic_literal);
  geometry : point;
END_ENTITY;

ENTITY imported_surface_function
  SUBTYPE OF (maths_function, generic_literal);
  geometry : surface;
  parametric_domain : tuple_space;
WHERE
  WR1: expression_is_constant(parametric_domain);
END_ENTITY;

ENTITY imported_volume_function
  SUBTYPE OF (maths_function, generic_literal);
  geometry : volume;
  parametric_domain : tuple_space;
WHERE
  WR1: expression_is_constant(parametric_domain);
END_ENTITY;

ENTITY in_zone
  SUBTYPE OF (group);
END_ENTITY;

ENTITY inappropriate_element_visibility
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM']);
END_ENTITY;

ENTITY inappropriate_use_of_layer
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT']);
END_ENTITY;

ENTITY inapt_data
  ABSTRACT SUPERTYPE OF (ONEOF (inapt_topology,
                                inapt_geometry,
                                inapt_topology_and_geometry_relationship,
                                inapt_manifold_solid_brep))
  SUBTYPE OF (shape_data_quality_criterion);
END_ENTITY;

ENTITY inapt_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (nearly_degenerate_geometry,
                                discontinuous_geometry,
                                self_intersecting_geometry,
                                geometry_with_local_near_degeneracy,
                                overlapping_geometry,
                                multiply_defined_geometry,
                                geometry_with_local_irregularity,
                                overcomplex_geometry))
  SUBTYPE OF (inapt_data);
END_ENTITY;

ENTITY inapt_manifold_solid_brep
  ABSTRACT SUPERTYPE OF (ONEOF (partly_overlapping_solids,
                                small_volume_solid,
                                multiply_defined_solids,
                                entirely_narrow_solid,
                                solid_with_excessive_number_of_voids))
  SUBTYPE OF (inapt_data);
END_ENTITY;

ENTITY inapt_pmi_representation
  ABSTRACT SUPERTYPE OF (semantic_pmi_without_presentation)
  SUBTYPE OF (a3m_inapt_pmi_data);
END_ENTITY;

ENTITY inapt_relation_of_pmi_and_feature
  ABSTRACT SUPERTYPE OF (ONEOF (geometric_tolerance_related_to_edge,
                                general_part_feature_without_pmi))
  SUBTYPE OF (a3m_inapt_pmi_data);
END_ENTITY;

ENTITY inapt_topology
  ABSTRACT SUPERTYPE OF (ONEOF (free_edge,
                                non_manifold_at_edge,
                                non_manifold_at_vertex,
                                over_used_vertex))
  SUBTYPE OF (inapt_data);
END_ENTITY;

ENTITY inapt_topology_and_geometry_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (topology_related_to_nearly_degenerate_geometry,
                                geometric_gap_in_topology,
                                non_smooth_geometry_transition_across_edge,
                                topology_related_to_self_intersecting_geometry,
                                steep_geometry_transition_across_edge,
                                topology_related_to_overlapping_geometry,
                                topology_related_to_multiply_defined_geometry,
                                overcomplex_topology_and_geometry_relationship))
  SUBTYPE OF (inapt_data);
END_ENTITY;

ENTITY incidence_assembly_constraint
  SUBTYPE OF (binary_assembly_constraint, incidence_geometric_constraint);
END_ENTITY;

ENTITY incidence_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF geometric_constraint_element;
  near_points : SET[0:?] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY included_text_block
  SUBTYPE OF (mapped_item);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_TEXT_REPRESENTATION' IN TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
END_ENTITY;

ENTITY inclusion_product_concept_feature
  SUBTYPE OF (conditional_concept_feature);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PACKAGE_PRODUCT_CONCEPT_FEATURE' IN TYPEOF(SELF));
  WR2: SIZEOF(QUERY(cfr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATING_PRODUCT_CONCEPT_FEATURE') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF(cfr))) + SIZEOF(QUERY(cfr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATED_PRODUCT_CONCEPT_FEATURE') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF(cfr))) = 0;
  WR3: SELF.condition.conditional_operator.name = 'implication';
END_ENTITY;

ENTITY inconsistent_adjacent_face_normals
  SUBTYPE OF (erroneous_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_OR_OPEN_SHELL_SELECT']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_angle_between_annotation_value_and_shape
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF pmidq_inspected_element_type_name := [pmidqi_dimensional_location,pmidqi_dimensional_size];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_positive_plane_angle_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (pmidq_get_value_limit_type(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY inconsistent_curve_transition_code
  SUBTYPE OF (erroneous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  angle_tolerance : plane_angle_measure;
  curvature_ratio_tolerance : ratio_measure;
  distance_tolerance : length_measure;
  flat_curvature_radius_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_TRANSITION_LOCATOR']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_edge_and_curve_directions
  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  distance_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_element_reference
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
END_ENTITY;

ENTITY inconsistent_face_and_closed_shell_normals
  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_face_and_surface_normals
  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_feature_for_range_symbol
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_geometric_tolerance];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY inconsistent_length_between_annotation_value_and_shape
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF pmidq_inspected_element_type_name := [pmidqi_dimensional_location,pmidqi_dimensional_size];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_positive_length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (pmidq_get_value_limit_type(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY inconsistent_normals_of_adjacent_faces
  SUBTYPE OF (a3m_erroneous_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_adjacent_triangulated_face_pair];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_inconsistent_normals_of_adjacent_faces FOR criterion_to_assign_the_value;
WHERE
  WR1: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY inconsistent_normals_of_adjacent_triangles
  SUBTYPE OF (a3m_erroneous_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_adjacent_triangle_pair];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
END_ENTITY;

ENTITY inconsistent_surface_transition_code
  SUBTYPE OF (erroneous_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  angle_tolerance : plane_angle_measure;
  curvature_ratio_tolerance : ratio_measure;
  distance_tolerance : length_measure;
  flat_curvature_radius_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE_TRANSITION_LOCATOR']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inconsistent_triangle_normal_and_normal_at_vertex
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_plane_angle_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_vertex];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY incorrect_datum_reference_by_datum_target
  SUBTYPE OF (erroneous_pmi_representation);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_datum_target];
END_ENTITY;

ENTITY incorrect_geometric_relation_of_datum_and_toleranced_feature
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_datum];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
INVERSE
  allowance : pmidq_length_measure_for_incorrect_geometric_relation_of_datum_and_toleranced_feature FOR criterion_to_assign_the_value;
END_ENTITY;

ENTITY incorrect_relation_of_geometric_tolerance_and_datum_feature
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_geometric_tolerance];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY incorrect_relation_of_geometric_tolerance_and_feature
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_geometric_tolerance];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY incorrect_relation_of_geometric_tolerance_modifier_to_feature
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_geometric_tolerance];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY incorrect_spatial_arrangement_of_datum_targets
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_datum];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
INVERSE
  allowance : pmidq_length_measure_for_incorrect_spatial_arrangement_of_datum_targets FOR criterion_to_assign_the_value;
END_ENTITY;

ENTITY incorrect_unit_of_tolerance_value
  SUBTYPE OF (erroneous_pmi_representation);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[3:3] OF pmidq_inspected_element_type_name := [pmidqi_dimensional_location,pmidqi_dimensional_size,pmidqi_geometric_tolerance];
END_ENTITY;

ENTITY independent_limits_of_linear_dimensional_size_characteristic_representation
  SUBTYPE OF (dimensional_characteristic_representation);
  SELF\dimensional_characteristic_representation.dimension : dimensional_size;
  limits : LIST[2:?] OF UNIQUE shape_dimension_representation;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_SIZE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE_WITH_PATH'] * TYPEOF(dimension)) = 0;
END_ENTITY;

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

ENTITY indirectly_selected_elements
  SUBTYPE OF (user_selected_elements);
  indirectly_picked_items : SET[1:?] OF representation_item;
END_ENTITY;

ENTITY indirectly_selected_shape_elements
  SUBTYPE OF (indirectly_selected_elements, user_selected_shape_elements);
  SELF\indirectly_selected_elements.indirectly_picked_items : SET[1:?] OF shape_representation_item;
END_ENTITY;

ENTITY indistinct_curve_knots
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY indistinct_surface_knots
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY inductance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.henry);
END_ENTITY;

ENTITY information_right
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY information_usage_right
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY inner_void_in_triangulated_solid
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_tessellated_shell];
END_ENTITY;

ENTITY instance_attribute_reference
  SUBTYPE OF (variable_semantics);
  attribute_name : attribute_identifier;
  owning_instance : representation_item;
END_ENTITY;

ENTITY instance_report_item_with_extreme_instances
  SUBTYPE OF (shape_data_quality_inspection_instance_report_item);
  extreme_instances : LIST[1:?] OF extreme_instance;
END_ENTITY;

ENTITY instance_usage_context_assignment
  SUBTYPE OF (product_definition_context);
  items : SET[1:?] OF instance_usage_context_select;
END_ENTITY;

ENTITY instanced_feature
  SUBTYPE OF (feature_definition, shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.product_definitional;
END_ENTITY;

ENTITY insufficiently_constrained_datum_system
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF pmidq_inspected_element_type_name := [pmidqi_datum_system];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
INVERSE
  allowance : pmidq_length_measure_for_insufficiently_constrained_datum_system FOR criterion_to_assign_the_value;
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 int_value_function
  SUBTYPE OF (value_function);
END_ENTITY;

ENTITY integer_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (numeric_defined_function);
END_ENTITY;

ENTITY integer_interval_from_min
  SUBTYPE OF (maths_space, generic_literal);
  min : INTEGER;
END_ENTITY;

ENTITY integer_interval_to_max
  SUBTYPE OF (maths_space, generic_literal);
  max : INTEGER;
END_ENTITY;

ENTITY integer_representation_item
  SUBTYPE OF (representation_item, int_literal);
END_ENTITY;

ENTITY integer_tuple_literal
  SUBTYPE OF (generic_literal);
  lit_value : LIST[1:?] OF INTEGER;
END_ENTITY;

ENTITY interface_component
  SUBTYPE OF (physical_component);
END_ENTITY;

ENTITY interface_connection
  SUBTYPE OF (group);
END_ENTITY;

ENTITY interface_connector_as_planned
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY interface_connector_as_realized
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY interface_connector_definition
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY interface_connector_design
  SUBTYPE OF (product_definition_formation);
END_ENTITY;

ENTITY interface_connector_design_to_planned
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_design;
  SELF\product_definition_formation_relationship.related_product_definition_formation : interface_connector_as_planned;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
END_ENTITY;

ENTITY interface_connector_design_to_realized
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_design;
  SELF\product_definition_formation_relationship.related_product_definition_formation : interface_connector_as_realized;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
END_ENTITY;

ENTITY interface_connector_occurrence
  SUBTYPE OF (group);
END_ENTITY;

ENTITY interface_connector_planned_to_realized
  SUBTYPE OF (product_definition_formation_relationship);
  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_as_planned;
  SELF\product_definition_formation_relationship.related_product_definition_formation : interface_connector_as_realized;
WHERE
  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
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 interfaced_group_component
  SUBTYPE OF (assembly_group_component);
END_ENTITY;

ENTITY interpolated_configuration_representation
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : geometric_representation_context_with_parameter;
  SELF\representation.items : SET[1:?] OF interpolated_configuration_sequence;
END_ENTITY;

ENTITY interpolated_configuration_segment
  SUBTYPE OF (founded_item);
  state : mechanism_state_representation;
  t_parameter : parameter_value;
  interpolation : interpolation_type;
END_ENTITY;

ENTITY interpolated_configuration_sequence
  SUBTYPE OF (geometric_representation_item);
  segments : LIST[2:?] OF interpolated_configuration_segment;
DERIVE
  n_segments : INTEGER := SIZEOF(segments);
  closed_interpolation : LOGICAL := segments[n_segments].interpolation <> discontinuous_interpolation_type;
  configured_mechanism : mechanism_representation := segments[1].state.represented_mechanism;
WHERE
  WR1: SIZEOF(QUERY(ics <* segments | ics.state.represented_mechanism :<>: configured_mechanism)) = 0;
END_ENTITY;

ENTITY intersecting_connected_face_sets
  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY intersecting_loops_in_face
  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY intersecting_shells_in_solid
  SUBTYPE OF (erroneous_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY intersection_curve
  SUBTYPE OF (surface_curve);
WHERE
  WR1: SIZEOF(SELF\surface_curve.associated_geometry) = 2;
  WR2: associated_surface(SELF\surface_curve.associated_geometry[1]) <> associated_surface(SELF\surface_curve.associated_geometry[2]);
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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_low)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_high));
  WR2: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_high)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_item))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_high)));
END_ENTITY;

ENTITY invisibility;
  invisible_items : SET[1:?] OF invisible_item;
END_ENTITY;

ENTITY iso4217_currency
  SUBTYPE OF (currency);
END_ENTITY;

ENTITY item_defined_transformation
  SUPERTYPE OF (ONEOF (topology_to_geometry_item_association,
                       geometry_to_topology_item_association));
  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 : item_identified_representation_usage_definition;
  used_representation : representation;
  identified_item : item_identified_representation_usage_select;
UNIQUE
  UR1: used_representation, identified_item;
  UR2: used_representation, definition;
WHERE
  WR1: valid_identified_item_in_representation(identified_item, used_representation);
END_ENTITY;

ENTITY item_link_motion_relationship
  SUBTYPE OF (link_motion_relationship);
  SELF\representation_relationship.rep_1 : shape_representation;
  item : geometric_representation_item;
END_ENTITY;

ENTITY joggle
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND NOT ({5 <= SIZEOF(pdr.used_representation.items) <= 10}))) = 0;
  WR2: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | NOT (i.name IN ['orientation', 'base radius 1', 'base radius 2', 'direction angle 1', 'direction angle 2', 'height', 'slope angle 1', 'slope angle 2', 'top radius 1', 'top radius 2']))) > 0))) = 0;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'direction angle 1') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'direction angle 2') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR5: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'height') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
  WR6: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'slope angle 1') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR7: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'slope angle 2') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR8: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'defining path') AND (sa.description = 'path feature component occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.description = 'path feature component usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sar.relating_shape_aspect)) AND (sar.relating_shape_aspect.description = 'linear'))) = 1))) = 1;
  WR9: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.name = 'termination') AND (sa.description = 'joggle termination occurrence') AND (SIZEOF(QUERY(sar <* USEDIN(sa, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'joggle termination usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.JOGGLE_TERMINATION' IN TYPEOF(sar.relating_shape_aspect)))) = 1))) = 1;
  WR10: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius 1') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
  WR11: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius 2') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
  WR12: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'top radius 1') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
  WR13: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'top radius 2') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
END_ENTITY;

ENTITY joggle_termination
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['value termination','face termination'];
  WR3: (SELF.description = 'value termination') XOR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) = 0);
  WR4: (SELF.description <> 'value termination') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 2))) = 1);
  WR5: (SELF.description <> 'value termination') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'depth') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1);
  WR6: (SELF.description <> 'value termination') OR (SIZEOF(QUERY(pdr <* get_shape_aspect_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'angle') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1);
  WR7: SIZEOF(QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar.name = 'joggle termination usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.JOGGLE' IN TYPEOF(sar.related_shape_aspect.of_shape.definition)) AND (sar.related_shape_aspect.of_shape.definition\characterized_object.name = 'termination') AND (sar.related_shape_aspect.of_shape.definition\characterized_object.description = 'joggle termination occurrence'))) = 1;
END_ENTITY;

ENTITY kinematic_analysis_consistency;
  control : kinematic_control;
  result : kinematic_analysis_result;
WHERE
  WR1: control.controlled_mechanism :=: result.analysed_mechanism;
END_ENTITY;

ENTITY kinematic_analysis_result;
  analysed_mechanism : mechanism_representation;
  result : kinematic_result;
END_ENTITY;

ENTITY kinematic_control;
  controlled_mechanism : mechanism_representation;
  contained_kinematic_programs : kinematic_analysis_definition;
END_ENTITY;

ENTITY kinematic_joint
  SUBTYPE OF (edge);
  SELF\edge.edge_start : kinematic_link;
  SELF\edge.edge_end : kinematic_link;
UNIQUE
  UR1: edge_start, edge_end;
WHERE
  WR1: edge_start :<>: edge_end;
END_ENTITY;

ENTITY kinematic_link
  SUBTYPE OF (vertex);
END_ENTITY;

ENTITY kinematic_link_representation
  ABSTRACT SUPERTYPE OF (ONEOF (linear_flexible_link_representation,
                                rigid_link_representation))
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : geometric_representation_context;
  SELF\representation.items : SET[1:?] OF kinematic_link_representation_items;
  represented_link : kinematic_link;
INVERSE
  associated_shape_representation : SET[0:1] OF kinematic_link_representation_association FOR rep_1;
END_ENTITY;

ENTITY kinematic_link_representation_association
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : kinematic_link_representation;
  SELF\representation_relationship.rep_2 : shape_representation;
WHERE
  WR1: (SELF\representation_relationship.rep_2.context_of_items :=: SELF\representation_relationship.rep_1.context_of_items) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY kinematic_loop
  SUBTYPE OF (edge_loop);
  SELF\path.edge_list : LIST[1:?] OF UNIQUE oriented_joint;
END_ENTITY;

ENTITY kinematic_pair
  ABSTRACT SUPERTYPE OF (ONEOF (high_order_kinematic_pair,
                                low_order_kinematic_pair_with_motion_coupling,
                                low_order_kinematic_pair)
                        ANDOR actuated_kinematic_pair)
  SUBTYPE OF (geometric_representation_item, item_defined_transformation);
  joint : kinematic_joint;
  SELF\item_defined_transformation.transform_item_1 : rigid_placement;
  SELF\item_defined_transformation.transform_item_2 : rigid_placement;
DERIVE
  associated_link_representations_1 : SET[1:?] OF kinematic_link_representation := sort_link_associations(link_representation_associations, TRUE);
  associated_link_representations_2 : SET[1:?] OF kinematic_link_representation := sort_link_associations(link_representation_associations, FALSE);
  SELF\item_defined_transformation.name : label := SELF\representation_item.name;
INVERSE
  link_representation_associations : SET[1:?] OF pair_representation_relationship FOR transformation_operator;
END_ENTITY;

ENTITY kinematic_path
  ABSTRACT SUPERTYPE OF (ONEOF (kinematic_path_defined_by_nodes,
                                kinematic_path_defined_by_curves))
  SUBTYPE OF (geometric_representation_item);
  segments : LIST[1:?] OF kinematic_path_segment;
  t_start : parameter_value;
DERIVE
  n_segments : INTEGER := SIZEOF(segments);
  closed_path : LOGICAL := segments[n_segments].transition <> discontinuous;
WHERE
  WR1: SIZEOF(QUERY(using_rep <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT_WITH_PARAMETER' IN TYPEOF(using_rep.context_of_items)))) = 0;
END_ENTITY;

ENTITY kinematic_path_defined_by_curves
  SUBTYPE OF (kinematic_path);
  SELF\kinematic_path.segments : LIST[1:?] OF curve_based_path_with_orientation;
END_ENTITY;

ENTITY kinematic_path_defined_by_nodes
  SUBTYPE OF (kinematic_path);
  SELF\kinematic_path.segments : LIST[1:?] OF path_node;
  placement_start : placement;
END_ENTITY;

ENTITY kinematic_path_segment
  ABSTRACT SUPERTYPE OF (ONEOF (path_node,
                                curve_based_path_with_orientation))
  SUBTYPE OF (founded_item);
  t_end : parameter_value;
  transition : transition_code;
END_ENTITY;

ENTITY kinematic_property_definition_representation
  ABSTRACT SUPERTYPE OF (ONEOF (kinematic_property_topology_representation,
                                kinematic_property_mechanism_representation))
  SUBTYPE OF (property_definition_representation);
  SELF\property_definition_representation.definition : product_definition_kinematics;
END_ENTITY;

ENTITY kinematic_property_mechanism_representation
  SUBTYPE OF (kinematic_property_definition_representation);
  SELF\property_definition_representation.used_representation : mechanism_representation;
  base : kinematic_link_representation;
WHERE
  WR1: SIZEOF(QUERY(i <* used_representation.items | (base :=: i\representation_relationship.rep_1) OR (base :=: i\representation_relationship.rep_2))) > 0;
END_ENTITY;

ENTITY kinematic_property_topology_representation
  SUBTYPE OF (kinematic_property_definition_representation);
  SELF\property_definition_representation.used_representation : kinematic_topology_representation_select;
  base : kinematic_link;
WHERE
  WR1: used_representation IN using_representations(base);
END_ENTITY;

ENTITY kinematic_topology_directed_structure
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF oriented_joint;
  parent : kinematic_topology_structure;
WHERE
  WR1: context_of_items :=: parent.context_of_items;
  WR2: get_kinematic_joints_from_oriented_joints(items) <= parent.items;
END_ENTITY;

ENTITY kinematic_topology_network_structure
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF kinematic_loop;
  parent : kinematic_topology_structure;
WHERE
  WR1: context_of_items :=: parent.context_of_items;
  WR2: get_kinematic_joints_from_kinematic_loops(items) <= parent.items;
END_ENTITY;

ENTITY kinematic_topology_structure
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF kinematic_joint;
WHERE
  WR1: SIZEOF(QUERY(item <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(item))) = 0;
END_ENTITY;

ENTITY kinematic_topology_substructure
  SUBTYPE OF (kinematic_topology_structure);
  parent : kinematic_topology_structure;
WHERE
  WR1: context_of_items :=: parent.context_of_items;
  WR2: SELF\kinematic_topology_structure.items <= parent\kinematic_topology_structure.items;
END_ENTITY;

ENTITY kinematic_topology_tree_structure
  SUBTYPE OF (kinematic_topology_directed_structure);
END_ENTITY;

ENTITY known_source
  SUBTYPE OF (external_source, pre_defined_item);
END_ENTITY;

ENTITY laid_defined_transformation
  SUBTYPE OF (transformation_with_derived_angle);
END_ENTITY;

ENTITY laid_orientation_angle
  SUBTYPE OF (ply_orientation_angle);
END_ENTITY;

ENTITY laminate_table
  SUPERTYPE OF (ONEOF (part_laminate_table,
                       zone_structural_makeup))
  SUBTYPE OF (product_definition);
END_ENTITY;

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

ENTITY language_dependent_product_definition_exchange_context
  SUBTYPE OF (dependent_product_definition_exchange_context);
  language : language;
END_ENTITY;

ENTITY large_aspect_ratio_triangle
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_ratio_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_representative_triangle];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY large_number_of_triangles
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_count_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell,tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY leader_curve
  SUBTYPE OF (annotation_curve_occurrence);
WHERE
  WR1: SIZEOF(QUERY(ldc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN TYPEOF(ldc))) >= 1;
END_ENTITY;

ENTITY leader_directed_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(QUERY(l_1 <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(l_1)))) >= 1;
  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
END_ENTITY;

ENTITY leader_directed_dimension
  SUBTYPE OF (leader_directed_callout);
WHERE
  WR1: SIZEOF(QUERY(con <* SELF.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(con))) = 1;
END_ENTITY;

ENTITY leader_terminator
  SUBTYPE OF (terminator_symbol);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(SELF\terminator_symbol.annotated_curve);
END_ENTITY;

ENTITY length_function
  SUBTYPE OF (numeric_expression, unary_generic_expression);
  SELF\unary_generic_expression.operand : string_expression;
END_ENTITY;

ENTITY length_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY light_source
  SUPERTYPE OF (ONEOF (light_source_ambient,
                       light_source_directional,
                       light_source_positional,
                       light_source_spot))
  SUBTYPE OF (geometric_representation_item);
  light_colour : colour;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')) = 0;
END_ENTITY;

ENTITY light_source_ambient
  SUBTYPE OF (light_source);
END_ENTITY;

ENTITY light_source_directional
  SUBTYPE OF (light_source);
  orientation : direction;
END_ENTITY;

ENTITY light_source_positional
  SUBTYPE OF (light_source);
  position : cartesian_point;
  constant_attenuation : REAL;
  distance_attenuation : REAL;
END_ENTITY;

ENTITY light_source_spot
  SUBTYPE OF (light_source);
  position : cartesian_point;
  orientation : direction;
  concentration_exponent : REAL;
  constant_attenuation : REAL;
  distance_attenuation : REAL;
  spread_angle : positive_plane_angle_measure;
END_ENTITY;

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

ENTITY limited_length_area_indicator
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY limits_and_fits;
  form_variance : label;
  zone_variance : label;
  grade : label;
  source : text;
END_ENTITY;

ENTITY line
  SUBTYPE OF (curve);
  pnt : cartesian_point;
  dir : vector;
WHERE
  WR1: dir.dim = pnt.dim;
END_ENTITY;

ENTITY line_and_point_on_plane
  SUBTYPE OF (line_on_plane_pcurve, point_on_plane);
DERIVE
  SELF\pcurve.basis_surface : plane := SELF\point_on_surface.basis_surface;
END_ENTITY;

ENTITY line_based_llai
  SUPERTYPE OF (ONEOF (edge_sealing,
                       guide_curve))
  SUBTYPE OF (limited_length_area_indicator);
END_ENTITY;

ENTITY line_on_plane_pcurve
  SUBTYPE OF (pcurve);
  SELF\pcurve.basis_surface : plane;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE' IN TYPEOF(SELF\pcurve.reference_to_curve\representation.items[1]);
END_ENTITY;

ENTITY line_profile_tolerance
  SUBTYPE OF (geometric_tolerance);
END_ENTITY;

ENTITY linear_array_component_definition_link
  SUBTYPE OF (product_definition, product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : linear_array_placement_group_component;
  SELF\product_definition_relationship.related_product_definition : linear_array_placement_group_component;
WHERE
  WR1: SELF\product_definition_relationship.related_product_definition :<>: SELF\product_definition_relationship.relating_product_definition;
  WR2: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_ARRAY_COMPONENT_DEFINITION_LINK');
END_ENTITY;

ENTITY linear_array_placement_group_component
  SUBTYPE OF (array_placement_group);
END_ENTITY;

ENTITY linear_dimension
  SUBTYPE OF (dimension_curve_directed_callout);
END_ENTITY;

ENTITY linear_flexible_and_pinion_pair
  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
  pinion_radius : length_measure;
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY linear_flexible_and_planar_curve_pair
  SUBTYPE OF (high_order_kinematic_pair);
  pair_curve : curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_curve IN r.items))) = 0;
  WR2: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY linear_flexible_link_representation
  SUBTYPE OF (kinematic_link_representation);
END_ENTITY;

ENTITY linear_path
  SUBTYPE OF (path_node);
DERIVE
  SELF\kinematic_path_segment.transition : transition_code := continuous;
END_ENTITY;

ENTITY linear_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'profile length')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY linearized_table_function
  SUPERTYPE OF (ONEOF (standard_table_function,
                       regular_table_function,
                       triangular_matrix,
                       symmetric_matrix,
                       banded_matrix))
  SUBTYPE OF (explicit_table_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  first : INTEGER;
DERIVE
  source : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: function_is_1d_array(source);
  WR2: member_of(first, source\maths_function.domain);
END_ENTITY;

ENTITY link_motion_relationship
  SUBTYPE OF (definitional_representation_relationship, representation_relationship_with_transformation);
  SELF\representation_relationship.rep_1 : link_or_shape_representation;
  SELF\representation_relationship.rep_2 : link_motion_representation_along_path;
  SELF\representation_relationship_with_transformation.transformation_operator : link_motion_transformation;
WHERE
  WR1: transformation_operator\item_defined_transformation.transform_item_1 IN rep_1.items;
  WR2: transformation_operator\item_defined_transformation.transform_item_2 IN rep_2.items;
END_ENTITY;

ENTITY link_motion_representation_along_path
  SUPERTYPE OF (ONEOF (prescribed_path,
                       resulting_path))
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF kinematic_path;
  SELF\representation.context_of_items : geometric_representation_context_with_parameter;
END_ENTITY;

ENTITY link_motion_transformation
  SUBTYPE OF (item_defined_transformation);
  SELF\item_defined_transformation.transform_item_1 : rigid_placement;
  SELF\item_defined_transformation.transform_item_2 : kinematic_path;
END_ENTITY;

ENTITY listed_complex_number_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[2:?] OF REAL;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values) DIV 2];
WHERE
  WR1: NOT ODD(SIZEOF(values));
END_ENTITY;

ENTITY listed_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[1:?] OF maths_value;
  value_range : maths_space;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values)];
WHERE
  WR1: expression_is_constant(value_range);
  WR2: SIZEOF(QUERY(val <* values | NOT (member_of(val, value_range)))) = 0;
END_ENTITY;

ENTITY listed_integer_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[1:?] OF INTEGER;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values)];
END_ENTITY;

ENTITY listed_logical_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[1:?] OF LOGICAL;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values)];
END_ENTITY;

ENTITY listed_product_space
  SUBTYPE OF (maths_space, generic_literal);
  factors : LIST OF maths_space;
WHERE
  WR1: SIZEOF(QUERY(space <* factors | NOT (expression_is_constant(space)))) = 0;
  WR2: no_cyclic_space_reference(SELF, []);
  WR3: NOT (the_empty_space IN factors);
END_ENTITY;

ENTITY listed_real_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[1:?] OF REAL;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values)];
END_ENTITY;

ENTITY listed_string_data
  SUBTYPE OF (explicit_table_function, generic_literal);
  values : LIST[1:?] OF STRING;
DERIVE
  SELF\explicit_table_function.shape : LIST[1:?] OF positive_integer := [SIZEOF(values)];
END_ENTITY;

ENTITY literal_conjunction
  SUBTYPE OF (simple_clause);
END_ENTITY;

ENTITY literal_disjunction
  SUBTYPE OF (simple_clause);
END_ENTITY;

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

ENTITY local_b_spline
  SUBTYPE OF (representation_item);
  degree : INTEGER;
  knots : LIST[2:?] OF INTEGER;
  multiplicities : LIST[2:?] OF INTEGER;
WHERE
  WR1: degree > 0;
  WR2: SIZEOF(knots) = SIZEOF(multiplicities);
  WR3: constraints_param_local_b_spline(degree, knots, multiplicities);
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 locally_refined_spline_curve
  SUBTYPE OF (bounded_curve);
  b_splines : LIST[2:?] OF local_b_spline;
  knot_values : spline_knot_values;
  control_points_list : LIST[2:?] OF cartesian_point;
  scaling_factors : LIST[2:?] OF REAL;
  closed_curve : LOGICAL;
  locally_refined_spline_type : locally_refined_spline_type_enum;
  self_intersect : LOGICAL;
  domain : LIST[2:2] OF REAL;
WHERE
  WR1: SIZEOF(b_splines) = SIZEOF(control_points_list);
  WR2: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
  WR3: constraints_scaling(scaling_factors);
END_ENTITY;

ENTITY locally_refined_spline_surface
  SUBTYPE OF (bounded_surface);
  u_b_splines : LIST[4:?] OF local_b_spline;
  v_b_splines : LIST[4:?] OF local_b_spline;
  u_knots : spline_knot_values;
  v_knots : spline_knot_values;
  control_points_list : LIST[4:?] OF cartesian_point;
  scaling_factors : LIST[4:?] OF REAL;
  linearly_independent : linearly_independent_enum;
  locally_refined_spline_type : locally_refined_spline_type_enum;
  self_intersect : LOGICAL;
  u_closed : LOGICAL;
  v_closed : LOGICAL;
  domain : LIST[2:2] OF LIST[2:2] OF REAL;
WHERE
  WR1: SIZEOF(u_b_splines) = SIZEOF(control_points_list);
  WR2: SIZEOF(v_b_splines) = SIZEOF(control_points_list);
  WR3: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
  WR4: constraints_scaling(scaling_factors);
END_ENTITY;

ENTITY locally_refined_spline_volume
  SUBTYPE OF (volume);
  u_b_splines : LIST[8:?] OF local_b_spline;
  v_b_splines : LIST[8:?] OF local_b_spline;
  w_b_splines : LIST[8:?] OF local_b_spline;
  u_knots : spline_knot_values;
  v_knots : spline_knot_values;
  w_knots : spline_knot_values;
  control_points_list : LIST[8:?] OF cartesian_point;
  scaling_factors : LIST[8:?] OF REAL;
  linearly_independent : linearly_independent_enum;
  locally_refined_spline_type : locally_refined_spline_type_enum;
  domain : LIST[3:3] OF LIST[2:2] OF REAL;
WHERE
  WR1: SIZEOF(u_b_splines) = SIZEOF(control_points_list);
  WR2: SIZEOF(v_b_splines) = SIZEOF(control_points_list);
  WR3: SIZEOF(w_b_splines) = SIZEOF(control_points_list);
  WR4: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
  WR5: constraints_scaling(scaling_factors);
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_in_aggregate_representation_item
  SUBTYPE OF (compound_representation_item);
  SELF\compound_representation_item.item_element : location_in_aggregate_item;
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_relationship
  SUBTYPE OF (group);
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 location_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1);
  WR2: (SIZEOF(QUERY(it <* SELF.items | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(it))))) = 0);
END_ENTITY;

ENTITY locator
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND NOT ({2 <= SIZEOF(pdr.used_representation.items) <= 5}))) = 0;
  WR2: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'diameter') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'tip radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'tip angle') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) = 1;
  WR5: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | (i.name = 'base radius') AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(i)) = 2))) = 1))) <= 1;
END_ENTITY;

ENTITY log10_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY log2_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY log_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY logical_literal
  SUBTYPE OF (generic_literal);
  lit_value : LOGICAL;
END_ENTITY;

ENTITY logical_representation_item
  SUBTYPE OF (representation_item, logical_literal);
END_ENTITY;

ENTITY loop
  SUPERTYPE OF (ONEOF (vertex_loop,
                       edge_loop,
                       poly_loop))
  SUBTYPE OF (topological_representation_item);
END_ENTITY;

ENTITY looping_element
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY loss_tangent_measure_with_unit
  SUBTYPE OF (ratio_measure_with_unit);
END_ENTITY;

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

ENTITY low_order_kinematic_pair
  SUPERTYPE OF (ONEOF (revolute_pair,
                       cylindrical_pair,
                       spherical_pair,
                       spherical_pair_with_pin,
                       planar_pair,
                       unconstrained_pair,
                       fully_constrained_pair,
                       prismatic_pair,
                       universal_pair,
                       low_order_kinematic_pair_with_range))
  SUBTYPE OF (kinematic_pair);
  t_x : BOOLEAN;
  t_y : BOOLEAN;
  t_z : BOOLEAN;
  r_x : BOOLEAN;
  r_y : BOOLEAN;
  r_z : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
  WR2: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_2 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY low_order_kinematic_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : low_order_kinematic_pair;
  actual_translation_x : length_measure;
  actual_translation_y : length_measure;
  actual_translation_z : length_measure;
  actual_rotation_x : plane_angle_measure;
  actual_rotation_y : plane_angle_measure;
  actual_rotation_z : plane_angle_measure;
END_ENTITY;

ENTITY low_order_kinematic_pair_with_motion_coupling
  ABSTRACT SUPERTYPE OF (ONEOF (gear_pair,
                                linear_flexible_and_pinion_pair,
                                rack_and_pinion_pair,
                                screw_pair))
  SUBTYPE OF (kinematic_pair);
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_2 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY low_order_kinematic_pair_with_range
  SUBTYPE OF (low_order_kinematic_pair);
  lower_limit_actual_rotation_x : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation_x : OPTIONAL plane_angle_measure;
  lower_limit_actual_rotation_y : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation_y : OPTIONAL plane_angle_measure;
  lower_limit_actual_rotation_z : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation_z : OPTIONAL plane_angle_measure;
  lower_limit_actual_translation_x : OPTIONAL length_measure;
  upper_limit_actual_translation_x : OPTIONAL length_measure;
  lower_limit_actual_translation_y : OPTIONAL length_measure;
  upper_limit_actual_translation_y : OPTIONAL length_measure;
  lower_limit_actual_translation_z : OPTIONAL length_measure;
  upper_limit_actual_translation_z : OPTIONAL length_measure;
END_ENTITY;

ENTITY luminous_flux_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.lumen);
END_ENTITY;

ENTITY luminous_intensity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 1.0);
END_ENTITY;

ENTITY machining_process_executable
  SUBTYPE OF (process_operation);
END_ENTITY;

ENTITY magnetic_flux_density_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.tesla);
END_ENTITY;

ENTITY magnetic_flux_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.weber);
END_ENTITY;

ENTITY make_from_feature_relationship
  SUBTYPE OF (component_feature_relationship);
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 manifold_solid_brep
  SUBTYPE OF (solid_model);
  outer : closed_shell;
END_ENTITY;

ENTITY manifold_subsurface_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF manifold_subsurface_shape_representation_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR3: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(cfss)))) = 0;
  WR4: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(cfss\connected_face_sub_set.parent_face_set)) AND (SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT advanced_face_properties(fac))) = 0)) OR (SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fac)))) = 0)))) = 0;
  WR5: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | (SIZEOF(QUERY(fac <* cfss\connected_face_set.cfs_faces | NOT advanced_face_properties(fac))) = 0))) = 0;
  WR6: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE' IN TYPEOF(oe.edge_element))))) = 0))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY(bnds <* fcs.bounds | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1))) = 0)))) = 0))) = 0;
  WR9: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] * TYPEOF(oe.edge_element\edge_curve.edge_geometry)) = 1))) = 0))) = 0)))) = 0))) = 0;
  WR10: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND (NOT ((SIZEOF(QUERY(sc_ag <* oe.edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(sc_ag)))) = 0))))) = 0))) = 0)))) = 0))) = 0;
  WR11: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND (NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >= 3)))) = 0))) = 0)))) = 0))) = 0;
END_ENTITY;

ENTITY manifold_surface_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF manifold_surface_shape_representation_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY(mr_it <* mi\mapped_item.mapping_source.mapped_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(mr_it)))) > 0)))) = 0;
  WR3: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(sh <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL'] * TYPEOF(sh)) = 1))) = 0))) = 0;
  WR4: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(fa)))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (msf_surface_check(fa\face_surface.face_geometry))))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(bnds <* fa.bounds | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1))) = 0)))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(sbsm <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe_cv <* QUERY(oe <* elp_fbnds\path.edge_list | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE'] * TYPEOF(oe_cv.edge_element\edge_curve.edge_geometry)) = 1))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR9: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT (msf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR10: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_element.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_element.edge_end))))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR11: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(oe.edge_element.edge_start\vertex_point.vertex_geometry)) = 1) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(oe.edge_element.edge_end\vertex_point.vertex_geometry)) = 1)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR12: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vlp_fbnds\vertex_loop.loop_vertex)))) = 0)))) = 0))) = 0))) = 0;
  WR13: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(QUERY(fa <* cfs\connected_face_set.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry)) = 1))) = 0)))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY manufacturing_edge_of_part
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY manufacturing_edge_of_part_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY manufacturing_edge_of_ply
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY manufacturing_edge_of_ply_llai_specification
  SUBTYPE OF (product_definition);
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 marking
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({2 <= SIZEOF(pdr.used_representation.items) <= 6}))) = 1)) = 1;
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'marking text')))) = 1)))) = 0)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'special instructions')))) <= 1)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'font name')))) <= 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'character height')))) <= 1)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'character spacing')))) <= 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
END_ENTITY;

ENTITY mass_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY mated_part_relationship
  SUBTYPE OF (group, group_assignment, product_definition_shape, product_definition_relationship, shape_aspect);
  items : SET[0:?] OF product_definition;
DERIVE
  SELF\group_assignment.assigned_group : mated_part_relationship := SELF;
  SELF\property_definition.definition : mated_part_relationship := SELF;
  SELF\shape_aspect.of_shape : mated_part_relationship := SELF;
END_ENTITY;

ENTITY material_designation;
  name : label;
  definitions : SET[1:?] OF characterized_definition;
END_ENTITY;

ENTITY material_designation_characterization;
  name : label;
  description : text;
  designation : material_designation;
  property : characterized_material_property;
END_ENTITY;

ENTITY material_property
  SUBTYPE OF (property_definition);
UNIQUE
  UR1: SELF\property_definition.name, SELF\property_definition.definition;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_OBJECT' IN TYPEOF(SELF\property_definition.definition)) OR (SIZEOF(bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) - QUERY(temp <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_PROPERTY_REPRESENTATION' IN TYPEOF(temp)))) = 0);
END_ENTITY;

ENTITY material_property_representation
  SUBTYPE OF (property_definition_representation);
  dependent_environment : data_environment;
END_ENTITY;

ENTITY mathematical_description;
  described : maths_expression;
  describing : STRING;
  encoding : label;
END_ENTITY;

ENTITY maths_boolean_variable
  SUBTYPE OF (maths_variable, boolean_variable);
WHERE
  WR1: subspace_of_es(SELF\maths_variable.values_space, es_booleans);
END_ENTITY;

ENTITY maths_enum_literal
  SUBTYPE OF (generic_literal);
  lit_value : maths_enum_atom;
END_ENTITY;

ENTITY maths_function
  ABSTRACT SUPERTYPE OF (ONEOF (finite_function,
                                constant_function,
                                selector_function,
                                elementary_function,
                                restriction_function,
                                repackaging_function,
                                reindexed_array_function,
                                series_composed_function,
                                parallel_composed_function,
                                explicit_table_function,
                                homogeneous_linear_function,
                                general_linear_function,
                                b_spline_basis,
                                b_spline_function,
                                rationalize_function,
                                partial_derivative_function,
                                definite_integral_function,
                                abstracted_expression_function,
                                expression_denoted_function,
                                imported_point_function,
                                imported_curve_function,
                                imported_surface_function,
                                imported_volume_function,
                                application_defined_function))
  SUBTYPE OF (generic_expression);
DERIVE
  domain : tuple_space := derive_function_domain(SELF);
  range : tuple_space := derive_function_range(SELF);
END_ENTITY;

ENTITY maths_integer_variable
  SUBTYPE OF (maths_variable, int_numeric_variable);
WHERE
  WR1: subspace_of_es(SELF\maths_variable.values_space, es_integers);
END_ENTITY;

ENTITY maths_real_variable
  SUBTYPE OF (maths_variable, real_numeric_variable);
WHERE
  WR1: subspace_of_es(SELF\maths_variable.values_space, es_reals);
END_ENTITY;

ENTITY maths_space
  ABSTRACT SUPERTYPE OF (ONEOF (elementary_space,
                                finite_integer_interval,
                                integer_interval_from_min,
                                integer_interval_to_max,
                                finite_real_interval,
                                real_interval_from_min,
                                real_interval_to_max,
                                cartesian_complex_number_region,
                                polar_complex_number_region,
                                finite_space,
                                uniform_product_space,
                                listed_product_space,
                                extended_tuple_space,
                                function_space))
  SUBTYPE OF (generic_expression);
END_ENTITY;

ENTITY maths_string_variable
  SUBTYPE OF (maths_variable, string_variable);
WHERE
  WR1: subspace_of_es(SELF\maths_variable.values_space, es_strings);
END_ENTITY;

ENTITY maths_tuple_literal
  SUBTYPE OF (generic_literal);
  lit_value : LIST OF maths_value;
END_ENTITY;

ENTITY maths_value_precision_qualifier;
  precision_value : maths_value;
END_ENTITY;

ENTITY maths_variable
  SUBTYPE OF (generic_variable);
  values_space : maths_space;
  name : label;
WHERE
  WR1: expression_is_constant(values_space);
END_ENTITY;

ENTITY mating_material
  SUBTYPE OF (property_definition, group);
  SELF\property_definition.definition : product_definition_usage_relationship;
UNIQUE
  UR1: SELF\property_definition.definition;
END_ENTITY;

ENTITY mating_material_items
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : mating_material;
  items : SET[1:?] OF product_definition_or_assembly_component_usage;
END_ENTITY;

ENTITY maximum_function
  SUBTYPE OF (multiple_arity_function_call);
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 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATHS_VALUE_PRECISION_QUALIFIER' IN TYPEOF(temp)))) < 2;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(SELF\measure_qualification.qualified_measure));
END_ENTITY;

ENTITY measure_representation_item
  SUBTYPE OF (representation_item, measure_with_unit);
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 mechanical_context
  SUBTYPE OF (product_context);
WHERE
  WR1: SELF.discipline_type = 'mechanical';
END_ENTITY;

ENTITY mechanical_design_and_draughting_relationship
  SUBTYPE OF (definitional_representation_relationship_with_same_context);
  SELF\representation_relationship.rep_1 : mechanical_design_and_draughting_relationship_select;
  SELF\representation_relationship.rep_2 : mechanical_design_and_draughting_relationship_select;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL' IN TYPEOF(rep_2)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL' IN TYPEOF(rep_1)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_2)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_1)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_2)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_1)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
END_ENTITY;

ENTITY mechanical_design_geometric_presentation_area
  SUBTYPE OF (presentation_area);
  SELF\representation.items : SET[1:?] OF mechanical_design_geometric_presentation_area_items;
WHERE
  WR1: SIZEOF(QUERY(it1 <* SELF.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(it1\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR2: SIZEOF(QUERY(pv <* QUERY(mi1 <* QUERY(it1 <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(mi1\mapped_item.mapping_source.mapped_representation)) | NOT (SIZEOF(QUERY(it2 <* pv\mapped_item.mapping_source.mapped_representation\representation.items | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(it2)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it2)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(it2\mapped_item.mapping_source.mapped_representation))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2)) AND NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN TYPEOF(it2\mapped_item.mapping_source.mapped_representation)))))) = 0))) = 0;
  WR3: (SIZEOF(QUERY(ps <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ((ps\presentation_size.size.size_in_x <= 0) OR (ps\presentation_size.size.size_in_y <= 0)))) = 0) AND (SIZEOF(QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | (SIZEOF(QUERY(ps <* USEDIN(ais, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ((ps\presentation_size.size.size_in_x <= 0) OR (ps\presentation_size.size.size_in_y <= 0)))) > 0))) = 0);
  WR4: (SIZEOF(QUERY(ps <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(ps.size.placement)))) = 1) AND (SIZEOF(QUERY(ps <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ps.size.placement)))) = 0) OR ((SIZEOF(QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | (SIZEOF(QUERY(ps <* USEDIN(ais, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(ps.size.placement)))) = 1))) = 1) AND (SIZEOF(QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | (SIZEOF(QUERY(ps <* USEDIN(ais, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ps.size.placement)))) = 0))) = 1));
END_ENTITY;

ENTITY mechanical_design_geometric_presentation_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF mechanical_design_geometric_presentation_representation_items;
WHERE
  WR1: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'] * TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) = 1))) = 0;
  WR2: SIZEOF(QUERY(smi <* QUERY(si <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(si\styled_item.item))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation))))) = 0;
  WR3: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(pss <* psa.styles | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE'] * TYPEOF(pss)) = 1))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psbc <* QUERY(psa <* si\styled_item.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN TYPEOF(psa)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION'] * TYPEOF(psbc\presentation_style_by_context.style_context)) = 1))) = 0))) = 0;
  WR5: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ps <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE' IN TYPEOF(pss)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(ps\point_style.marker_size)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ps\point_style.marker_colour)) = 1)))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(cs <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(pss)) | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(cs\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(cs\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(cs\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_SIDE_STYLE' IN TYPEOF(ssu\surface_style_usage.style)))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sspl <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE' IN TYPEOF(sses)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0))) = 0;
  WR9: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sscg <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID' IN TYPEOF(sses)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0))) = 0;
  WR10: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssh <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE' IN TYPEOF(sses)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0))) = 0;
  WR11: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssc <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE' IN TYPEOF(sses)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0))) = 0;
  WR12: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(ssbd <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY' IN TYPEOF(sses)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY mechanical_design_presentation_representation_with_draughting
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF camera_model_d3;
END_ENTITY;

ENTITY mechanical_design_requirement_item_association
  SUBTYPE OF (pmi_requirement_item_association);
  SELF\pmi_requirement_item_association.requirement : requirement_assignment;
END_ENTITY;

ENTITY mechanical_design_shaded_presentation_area
  SUBTYPE OF (presentation_area);
  SELF\representation.items : SET[1:?] OF mechanical_design_shaded_presentation_area_items;
WHERE
  WR1: SIZEOF(QUERY(it1 <* SELF.items | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(it1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(it1\mapped_item.mapping_source.mapped_representation)))))) = 0;
  WR2: SIZEOF(QUERY(pv <* QUERY(mi1 <* QUERY(it1 <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(mi1\mapped_item.mapping_source.mapped_representation)) | NOT (SIZEOF(QUERY(it2 <* pv\mapped_item.mapping_source.mapped_representation\representation.items | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(it2)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it2)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(it2\mapped_item.mapping_source.mapped_representation))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2)) AND NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN TYPEOF(it2\mapped_item.mapping_source.mapped_representation)))))) = 0))) = 0;
  WR3: (SIZEOF(QUERY(ps <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | NOT ((ps\presentation_size.size.size_in_x > 0) AND (ps\presentation_size.size.size_in_y > 0)))) = 0) AND (SIZEOF(QUERY(pset <* QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SET' IN TYPEOF(ais.in_set)) | SIZEOF(QUERY(ps <* USEDIN(pset, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | NOT ((ps\presentation_size.size.size_in_x > 0) AND (ps\presentation_size.size.size_in_y > 0)))) = 0)) = 0);
  WR4: (SIZEOF(QUERY(psize <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(psize.size.placement))) = 1) AND (SIZEOF(QUERY(pset <* QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SET' IN TYPEOF(ais.in_set)) | SIZEOF(QUERY(psize <* USEDIN(pset, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(psize.size.placement)))) = 0)) = 0);
  WR5: SIZEOF(QUERY(pv <* QUERY(mi1 <* QUERY(it1 <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN TYPEOF(mi1\mapped_item.mapping_source.mapped_representation)) | NOT (SIZEOF(QUERY(ci <* pv\mapped_item.mapping_source.mapped_representation\representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(ci)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3_WITH_HLHSR', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_WITH_LIGHT_SOURCES'] * TYPEOF(ci\mapped_item.mapping_source.mapping_origin)) = 1))) = 0))) = 0;
END_ENTITY;

ENTITY mechanical_design_shaded_presentation_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF mechanical_design_shaded_presentation_representation_items;
WHERE
  WR1: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION'] * TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) = 1))) = 0;
  WR2: SIZEOF(QUERY(smi <* QUERY(si <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(si\styled_item.item))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation))))) = 0;
  WR3: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(pss <* psa.styles | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE'] * TYPEOF(pss)) = 1))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psbc <* QUERY(psa <* si\styled_item.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN TYPEOF(psa)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION'] * TYPEOF(psbc\presentation_style_by_context.style_context)) = 1))) = 0))) = 0;
  WR5: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ps <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE' IN TYPEOF(pss)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MARKER_TYPE' IN TYPEOF(ps\point_style.marker)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(ps\point_style.marker_size)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ps\point_style.marker_colour)) = 1)))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(cs <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(pss)) | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(cs\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(cs\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(cs\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_SIDE_STYLE' IN TYPEOF(ssu\surface_style_usage.style)))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_FILL_AREA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_RENDERING'] * TYPEOF(sses)) = 1))) = 0))) = 0))) = 0))) = 0;
  WR9: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(ssfa <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_FILL_AREA' IN TYPEOF(sses)) | NOT (SIZEOF(QUERY(fss <* ssfa\surface_style_fill_area.fill_area.fill_styles | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_COLOUR' IN TYPEOF(fss)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(fss\fill_area_style_colour.fill_colour)) = 1)))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR10: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sspl <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE' IN TYPEOF(sses)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_font)) = 1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style_rendering.rendering_properties.rendered_colour)) = 1))))) = 0))) = 0))) = 0))) = 0;
  WR11: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sscg <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID' IN TYPEOF(sses)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_font)) = 1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style_rendering.rendering_properties.rendered_colour)) = 1))))) = 0))) = 0))) = 0))) = 0;
  WR12: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssh <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE' IN TYPEOF(sses)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_font)) = 1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style_rendering.rendering_properties.rendered_colour)) = 1))))) = 0))) = 0))) = 0))) = 0;
  WR13: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssc <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE' IN TYPEOF(sses)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_font)) = 1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style_rendering.rendering_properties.rendered_colour)) = 1))))) = 0))) = 0))) = 0))) = 0;
  WR14: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(ssbd <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY' IN TYPEOF(sses)) | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_colour)) = 1) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_width)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_font)) = 1)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style_rendering.rendering_properties.rendered_colour)) = 1))))) = 0))) = 0))) = 0))) = 0;
  WR15: SIZEOF(QUERY(si <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles | NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(ssre <* QUERY(sses <* ssu\surface_style_usage.style\surface_side_style.styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_RENDERING' IN TYPEOF(sses)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF(ssre\surface_style_rendering.surface_colour)) = 1))) = 0))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY mechanism_representation
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : geometric_representation_context;
  SELF\representation.items : SET[1:?] OF pair_representation_relationship;
  represented_topology : kinematic_topology_representation_select;
DERIVE
  represented_joints : SET[1:?] OF kinematic_joint := collect_joints(items);
WHERE
  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: represented_topology.items)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_DIRECTED_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: get_kinematic_joints_from_oriented_joints(represented_topology.items))) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_NETWORK_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: get_kinematic_joints_from_kinematic_loops(represented_topology.items)));
END_ENTITY;

ENTITY mechanism_state_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF pair_value;
  represented_mechanism : mechanism_representation;
DERIVE
  SELF\representation.context_of_items : geometric_representation_context := represented_mechanism.context_of_items;
END_ENTITY;

ENTITY message_contents_assignment
  SUBTYPE OF (group_assignment);
  items : SET[1:?] OF representation;
  SELF\group_assignment.assigned_group : message_contents_group;
DERIVE
  message_contents_group : message_contents_group := SELF\group_assignment.assigned_group;
END_ENTITY;

ENTITY message_contents_group
  SUBTYPE OF (group);
END_ENTITY;

ENTITY message_relationship
  SUBTYPE OF (product_relationship);
  SELF\product_relationship.relating_product : structured_message;
  SELF\product_relationship.related_product : structured_message;
DERIVE
  related_message : structured_message := SELF\product_relationship.related_product;
  relating_message : structured_message := SELF\product_relationship.relating_product;
END_ENTITY;

ENTITY min_and_major_ply_orientation_basis
  SUBTYPE OF (representation_item_relationship, geometric_representation_item);
  SELF\representation_item_relationship.relating_representation_item : axis2_placement_3d;
  SELF\representation_item_relationship.related_representation_item : axis2_placement_3d;
DERIVE
  major_orientation_basis : axis2_placement_3d := SELF\representation_item_relationship.related_representation_item;
  minor_orientation_basis : axis2_placement_3d := SELF\representation_item_relationship.relating_representation_item;
END_ENTITY;

ENTITY minimum_function
  SUBTYPE OF (multiple_arity_function_call);
END_ENTITY;

ENTITY minus_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY minus_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY mismatch_of_arcwise_connected_curves
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_edge_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_edge_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,ddns_point_on_curve];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'discretization_distance_tolerance');
END_ENTITY;

ENTITY mismatch_of_arcwise_connected_surfaces
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,ddns_point_on_surface];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'discretization_distance_tolerance');
END_ENTITY;

ENTITY mismatch_of_arcwise_connected_surfaces_boundary
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content, a3m_equivalence_inspection_requirement_with_values);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,ddns_point_on_curve];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'discretization_distance_tolerance');
END_ENTITY;

ENTITY mismatch_of_component
  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ma_detected_difference_type_name := [ddna_assembly_component_usage];
END_ENTITY;

ENTITY mismatch_of_edges
  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_edge_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_edge,ddns_several_edges];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY mismatch_of_faces
  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_face,ddns_several_faces];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY mismatch_of_point_cloud_and_related_geometry
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[2:2] OF a3ms_element_type_name := [etns_connected_edge_set,etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_point_cloud_dataset];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[3:3] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,ddns_point_on_curve,ddns_point_on_surface];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[1:1] OF a3ms_accuracy_type_name := [atns_length_measure];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY mismatch_of_points
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_vertex_point];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_vertex_point];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_length_measure;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_no_element];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY mismatch_of_underlying_edge_geometry
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_edge];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY mismatch_of_underlying_face_geometry
  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.comparing_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[1:1] OF a3ms_detected_difference_type_name := [ddns_face];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY missing_assembly_constraint
  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ma_detected_difference_type_name := [ddna_no_element,ddna_binary_assembly_constraint];
END_ENTITY;

ENTITY missing_component
  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ma_detected_difference_type_name := [ddna_no_element,ddna_assembly_component_usage];
END_ENTITY;

ENTITY missing_edge
  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_edge_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_no_element,ddns_edge];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY missing_face
  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
DERIVE
  SELF\a3m_equivalence_criterion.compared_element_types : LIST[1:1] OF a3ms_element_type_name := [etns_connected_face_set];
  SELF\a3m_equivalence_criterion.measured_data_type : a3ms_measured_data_type_name := mdns_boolean_value;
  SELF\a3m_equivalence_criterion.detected_difference_types : LIST[2:2] OF a3ms_detected_difference_type_name := [ddns_no_element,ddns_face];
  SELF\a3m_equivalence_criterion.accuracy_types : LIST[0:0] OF a3ms_accuracy_type_name := [];
END_ENTITY;

ENTITY mod_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY model_geometric_view
  SUBTYPE OF (characterized_item_within_representation);
  SELF\characterized_item_within_representation.rep : draughting_model;
  SELF\characterized_item_within_representation.item : camera_model;
END_ENTITY;

ENTITY modified_geometric_tolerance
  SUBTYPE OF (geometric_tolerance);
  modifier : limit_condition;
END_ENTITY;

ENTITY modified_pattern
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE'] * TYPEOF(fcr.related_shape_aspect.of_shape.definition)) >= 1) AND (fcr.description = 'base shape'))) = 1;
  WR2: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] * TYPEOF(fcr.related_shape_aspect.of_shape.definition)) = 1) AND (fcr.description = 'base pattern'))) = 1;
  WR3: SIZEOF(QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (SIZEOF(QUERY(msar <* USEDIN(sar.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATTERN_OFFSET_MEMBERSHIP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATTERN_OMIT_MEMBERSHIP'] * TYPEOF(sar)) = 1) AND (sar.description = 'modified pattern') AND (sar :<>: msar))) >= 1))) = 0;
END_ENTITY;

ENTITY modified_solid
  ABSTRACT SUPERTYPE OF (ONEOF (edge_blended_solid,
                                sculptured_solid,
                                shelled_solid,
                                modified_solid_with_placed_configuration))
  SUBTYPE OF (solid_model);
  rationale : text;
  base_solid : base_solid_select;
END_ENTITY;

ENTITY modified_solid_with_placed_configuration
  ABSTRACT SUPERTYPE OF (ONEOF (solid_with_depression,
                                solid_with_protrusion,
                                solid_with_shape_element_pattern))
  SUBTYPE OF (modified_solid);
  placing : axis2_placement_3d;
END_ENTITY;

ENTITY modify_element
  SUBTYPE OF (change_element);
END_ENTITY;

ENTITY moments_of_inertia_representation
  SUBTYPE OF (representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1) AND (SIZEOF(QUERY(i <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (i.name = 'moments of inertia matrix'))) = 1);
  WR2: SIZEOF(QUERY(i <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM' IN TYPEOF(i)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIST_REPRESENTATION_ITEM' IN TYPEOF(i\compound_representation_item.item_element)) AND value_range_aggregate_rep_item(i\compound_representation_item.item_element))) = 1;
END_ENTITY;

ENTITY monitor
  SUBTYPE OF (risk_activity_structure);
  SELF\action_relationship.relating_action : risk_control;
  SELF\action_relationship.related_action : risk_assessment;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 multi_level_reference_designator
  SUBTYPE OF (assembly_component_usage);
  location : LIST[1:?] OF UNIQUE next_assembly_usage_occurrence;
DERIVE
  SELF\product_definition_relationship.relating_product_definition : product_definition := location[1]\product_definition_relationship.relating_product_definition;
  root : product_definition := relating_product_definition;
  SELF\product_definition_relationship.related_product_definition : product_definition_or_reference := location[HIINDEX(location)]\product_definition_relationship.related_product_definition;
  leaf : product_definition_or_reference := related_product_definition;
UNIQUE
  UR1: location;
WHERE
  WR1: unambiguously_specified_multi_level_reference_designator(location);
  WR2: SIZEOF(QUERY(cp <* location | NOT (EXISTS(cp\assembly_component_usage.reference_designator)))) = 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 OF (ONEOF (maximum_function,
                                minimum_function))
  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 (numeric_expression, multiple_arity_generic_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF numeric_expression;
END_ENTITY;

ENTITY multiply_defined_cartesian_points
  SUBTYPE OF (multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_curves
  SUBTYPE OF (multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_directions
  SUBTYPE OF (multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY multiply_defined_edges
  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_faces
  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (multiply_defined_curves,
                                multiply_defined_surfaces,
                                multiply_defined_cartesian_points,
                                multiply_defined_directions,
                                multiply_defined_placements))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY multiply_defined_placements
  SUBTYPE OF (multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  assessment_specification_2 : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_LENGTH_PAIR');
  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT']);
  WR5: validate_locations_of_extreme_value_type(SELF, []);
  WR6: validate_accuracy_types(SELF, []);
  WR7: SIZEOF(QUERY(sdqr <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(sdqr)) AND (SIZEOF(QUERY(sdqiir <* bag_to_set(USEDIN(sdqr, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT')) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(sdqiir)) AND (SIZEOF(QUERY(sdqiri <* sdqiir.inspected_instances | (TYPEOF(sdqiri.inspected_elements[1]) <> TYPEOF(sdqiri.inspected_elements[2])))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY multiply_defined_solids
  SUBTYPE OF (inapt_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_surfaces
  SUBTYPE OF (multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY multiply_defined_vertices
  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY name_assignment
  ABSTRACT SUPERTYPE ;
  assigned_name : label;
DERIVE
  role : object_role := get_role(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 narrow_surface_patch
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  width_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY near_point_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : curve_or_surface_constraint_element;
  SELF\representation_item_relationship.related_representation_item : point;
END_ENTITY;

ENTITY nearly_degenerate_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (small_area_surface,
                                short_length_curve,
                                entirely_narrow_surface))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY nearly_degenerate_surface_boundary
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDARY_CURVE_OF_B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY nearly_degenerate_surface_patch
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY nearly_overlapping_triangles
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_plane_angle_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_adjacent_triangle_pair];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY neutral_sketch_representation
  SUBTYPE OF (shape_representation);
  neutral_sketch_semantics : curves_or_area;
  SELF\representation.items : SET[1:?] OF sketch_element_select;
WHERE
  WR1: SIZEOF(QUERY(q <* items | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(q)) AND (q\geometric_representation_item.dim = 3)))) = 0;
END_ENTITY;

ENTITY next_assembly_usage_occurrence
  SUBTYPE OF (assembly_component_usage);
DERIVE
  product_definition_occurrence_id : identifier := SELF\product_definition_relationship.related_product_definition\product_definition_occurrence.id;
UNIQUE
  UR1: SELF\assembly_component_usage.reference_designator, SELF\product_definition_relationship.relating_product_definition;
  UR2: product_definition_occurrence_id, SELF\product_definition_relationship.relating_product_definition;
END_ENTITY;

ENTITY ngon_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 4)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'number of sides') OR (srwp_i.name = 'circumscribed diameter') OR (srwp_i.name = 'corner radius') OR (srwp_i.name = 'diameter across flats'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of sides'))) = 1))) = 0))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name IN ['circumscribed diameter','diameter across flats']))) = 1))) = 0))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'corner radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY no_general_part_feature_association
  SUBTYPE OF (erroneous_relation_of_pmi_and_feature);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[5:5] OF pmidq_inspected_element_type_name := [pmidqi_datum,pmidqi_datum_target,pmidqi_dimensional_location,pmidqi_dimensional_size,pmidqi_geometric_tolerance];
  SELF\a3m_data_quality_criterion.measured_data_type : pmidq_measured_data_type_name := pmidqm_boolean_value;
END_ENTITY;

ENTITY no_splice_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY no_splice_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY non_agreed_accuracy_parameter_usage
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT']);
END_ENTITY;

ENTITY non_agreed_scale_usage
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_TRANSFORMATION_OPERATOR_3D']);
END_ENTITY;

ENTITY non_agreed_unit_usage
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT']);
END_ENTITY;

ENTITY non_homogeneous_triangle_size
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_ratio_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangulated_face];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_representative_triangle];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY non_manifold_at_edge
  SUBTYPE OF (inapt_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY non_manifold_at_triangle_edge
  SUBTYPE OF (a3m_erroneous_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_edge];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_non_manifold_at_triangle_edge FOR criterion_to_assign_the_value;
WHERE
  WR1: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY non_manifold_at_triangle_vertex
  SUBTYPE OF (a3m_erroneous_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_vertex];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_non_manifold_at_triangle_vertex FOR criterion_to_assign_the_value;
WHERE
  WR1: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY non_manifold_at_vertex
  SUBTYPE OF (inapt_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY non_manifold_surface_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF non_manifold_surface_shape_representation_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY(mr_it <* mi\mapped_item.mapping_source.mapped_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(mr_it)))) > 0)))) = 0;
  WR3: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE'] * TYPEOF(fa)) = 1))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(f_sf <* QUERY(fa <* cfs.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(fa))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(f_sf)) OR (nmsf_surface_check(f_sf\face_surface.face_geometry))))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(o_fa <* QUERY(fa <* cfs.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(fa))) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(o_fa\oriented_face.face_element)) OR (nmsf_surface_check(o_fa\oriented_face.face_element\face_surface.face_geometry))))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(bnds <* fa.bounds | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1))) = 0)))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(fbsm <* QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe_cv <* QUERY(oe <* elp_fbnds\path.edge_list | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(oe.edge_element)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE'] * TYPEOF(oe_cv.edge_element\edge_curve.edge_geometry)) = 1))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR9: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT (nmsf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR10: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_element.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_element.edge_end))))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR11: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds\path.edge_list | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(oe.edge_element.edge_start\vertex_point.vertex_geometry)) = 1) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(oe.edge_element.edge_end\vertex_point.vertex_geometry)) = 1)))) = 0))) = 0)))) = 0))) = 0))) = 0;
  WR12: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vlp_fbnds\vertex_loop.loop_vertex)))) = 0)))) = 0))) = 0))) = 0;
  WR13: SIZEOF(QUERY(fbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cfs <* fbsm\face_based_surface_model.fbsm_faces | NOT (SIZEOF(QUERY(fa <* cfs.cfs_faces | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(fa)) OR (SIZEOF(QUERY(vlp_fbnds <* QUERY(bnds <* fa.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] * TYPEOF(vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry)) = 1))) = 0)))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY non_referenced_coordinate_system
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D']);
END_ENTITY;

ENTITY non_smooth_geometry_transition_across_edge
  ABSTRACT SUPERTYPE OF (ONEOF (g1_discontinuity_between_adjacent_faces,
                                g2_discontinuity_between_adjacent_faces))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY non_uniform_zone_definition
  SUBTYPE OF (tolerance_zone_definition);
END_ENTITY;

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

ENTITY null_representation_item
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY numeric_defined_function
  ABSTRACT SUPERTYPE OF (ONEOF (integer_defined_function,
                                real_defined_function))
  SUBTYPE OF (numeric_expression, defined_function);
END_ENTITY;

ENTITY numeric_expression
  ABSTRACT SUPERTYPE OF (ONEOF (simple_numeric_expression,
                                unary_numeric_expression,
                                binary_numeric_expression,
                                multiple_arity_numeric_expression,
                                length_function,
                                value_function,
                                numeric_defined_function))
  SUBTYPE OF (expression);
DERIVE
  is_int : BOOLEAN := is_int_expr(SELF);
  sql_mappable : BOOLEAN := 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(SELF));
END_ENTITY;

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

ENTITY observation
  SUBTYPE OF (action_actual);
END_ENTITY;

ENTITY observation_consequence
  SUBTYPE OF (applied_action_assignment);
END_ENTITY;

ENTITY observation_relationship
  SUBTYPE OF (action_relationship);
END_ENTITY;

ENTITY odd_function
  SUBTYPE OF (unary_boolean_expression);
  SELF\unary_generic_expression.operand : numeric_expression;
WHERE
  WR1: is_int_expr(operand);
END_ENTITY;

ENTITY offset_curve_2d
  SUBTYPE OF (curve);
  basis_curve : curve;
  distance : length_measure;
  self_intersect : LOGICAL;
WHERE
  WR1: basis_curve.dim = 2;
END_ENTITY;

ENTITY offset_curve_3d
  SUBTYPE OF (curve);
  basis_curve : curve;
  distance : length_measure;
  self_intersect : LOGICAL;
  ref_direction : direction;
WHERE
  WR1: (basis_curve.dim = 3) AND (ref_direction.dim = 3);
END_ENTITY;

ENTITY offset_surface
  SUBTYPE OF (surface);
  basis_surface : surface;
  distance : length_measure;
  self_intersect : LOGICAL;
END_ENTITY;

ENTITY one_direction_repeat_factor
  SUBTYPE OF (geometric_representation_item);
  repeat_factor : vector;
END_ENTITY;

ENTITY open_closed_shell
  SUBTYPE OF (erroneous_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY open_edge_loop
  SUBTYPE OF (erroneous_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY open_path
  SUBTYPE OF (path);
DERIVE
  ne : INTEGER := SIZEOF(SELF\path.edge_list);
WHERE
  WR1: (SELF\path.edge_list[1].edge_element.edge_start) :<>: (SELF\path.edge_list[ne].edge_element.edge_end);
END_ENTITY;

ENTITY open_path_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
END_ENTITY;

ENTITY open_shell
  SUBTYPE OF (connected_face_set);
END_ENTITY;

ENTITY or_expression
  SUBTYPE OF (multiple_arity_boolean_expression);
END_ENTITY;

ENTITY ordinal_date
  SUBTYPE OF (date);
  day_component : day_in_year_number;
WHERE
  WR1: (NOT leap_year(SELF.year_component) AND {1 <= day_component <= 365}) OR (leap_year(SELF.year_component) AND {1 <= day_component <= 366});
END_ENTITY;

ENTITY ordinate_dimension
  SUBTYPE OF (projection_directed_callout);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 oriented_closed_shell
  SUBTYPE OF (closed_shell);
  closed_shell_element : closed_shell;
  orientation : BOOLEAN;
DERIVE
  SELF\connected_face_set.cfs_faces : SET[1:?] OF face := conditional_reverse(SELF.orientation, SELF.closed_shell_element.cfs_faces);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(SELF.closed_shell_element));
END_ENTITY;

ENTITY oriented_edge
  SUBTYPE OF (edge);
  edge_element : edge;
  orientation : BOOLEAN;
DERIVE
  SELF\edge.edge_start : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_start, SELF.edge_element.edge_end);
  SELF\edge.edge_end : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_end, SELF.edge_element.edge_start);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(SELF.edge_element));
END_ENTITY;

ENTITY oriented_face
  SUBTYPE OF (face);
  face_element : face;
  orientation : BOOLEAN;
DERIVE
  SELF\face.bounds : SET[1:?] OF face_bound := conditional_reverse(SELF.orientation, SELF.face_element.bounds);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(SELF.face_element));
END_ENTITY;

ENTITY oriented_joint
  SUBTYPE OF (oriented_edge);
  SELF\oriented_edge.edge_element : kinematic_joint;
END_ENTITY;

ENTITY oriented_open_shell
  SUBTYPE OF (open_shell);
  open_shell_element : open_shell;
  orientation : BOOLEAN;
DERIVE
  SELF\connected_face_set.cfs_faces : SET[1:?] OF face := conditional_reverse(SELF.orientation, SELF.open_shell_element.cfs_faces);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_OPEN_SHELL' IN TYPEOF(SELF.open_shell_element));
END_ENTITY;

ENTITY oriented_path
  SUBTYPE OF (path);
  path_element : path;
  orientation : BOOLEAN;
DERIVE
  SELF\path.edge_list : LIST[1:?] OF UNIQUE oriented_edge := conditional_reverse(SELF.orientation, SELF.path_element.edge_list);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(SELF.path_element));
END_ENTITY;

ENTITY oriented_surface
  SUBTYPE OF (surface);
  orientation : BOOLEAN;
END_ENTITY;

ENTITY oriented_tolerance_zone
  SUBTYPE OF (tolerance_zone_with_datum);
  orientation : oriented_tolerance_zone_type;
  angle : OPTIONAL plane_angle_measure_with_unit;
WHERE
  WR1: (orientation <> oriented_tolerance_zone_type.angular) XOR EXISTS(angle);
END_ENTITY;

ENTITY outer_boundary_curve
  SUBTYPE OF (boundary_curve);
END_ENTITY;

ENTITY outer_round
  SUBTYPE OF (feature_definition);
WHERE
  WR1: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 3))) = 1)) = 1));
  WR2: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({2 <= SIZEOF(pdr.used_representation.items) <= 3}))) = 1)) = 1));
  WR3: (SELF\characterized_object.description IN ['outer diameter','outer diameter to shoulder']);
  WR4: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length')))) = 1)))) = 0)))) = 0));
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')))) = 1)))) = 0)))) = 0);
  WR6: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'v-shape boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'v-shape')))) = 1)))) = 1)))) = 0));
  WR7: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'reduced size occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_ROUND' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND (sdr.name = 'reduced size')))) = 1)))) <= 1)))) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length')))) <= 1)))) = 0)))) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'feature length')))) <= 1)))) = 0)))) = 0));
END_ENTITY;

ENTITY outside_profile
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 1))) = 1)) = 1;
  WR2: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['boundary occurrence', 'non-planar boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']))) = 1))) = 0;
  WR3: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'outside boundary'))) = 1))) = 1))) = 0);
  WR4: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | NOT (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile floor usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROFILE_FLOOR' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTSIDE_PROFILE' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) = 1))) = 0))) = 0);
  WR5: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['outside boundary', 'complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'path feature component usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.name = 'profile swept shape') AND (sdr.relating_shape_aspect.description = 'linear'))) = 1))) = 1))) = 0);
  WR6: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'complex boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1))) = 1))) = 1))) = 0);
  WR7: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'partial circular boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR8: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'closed circular boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR9: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'open rectangular boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR10: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'closed rectangular boundary occurrence'))) = 1))) = 0)) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR11: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['boundary occurrence', 'complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']))) = 1))) = 0) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction')))) = 1)))) = 0);
  WR12: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY over_riding_styled_item
  SUBTYPE OF (styled_item);
  over_ridden_style : styled_item;
END_ENTITY;

ENTITY over_used_vertex
  SUBTYPE OF (inapt_topology);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY overcomplex_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (excessively_high_degree_curve,
                                excessively_high_degree_surface,
                                surface_with_excessive_patches_in_one_direction,
                                curve_with_excessive_segments,
                                high_degree_linear_curve,
                                high_degree_planar_surface,
                                high_degree_conic,
                                high_degree_axi_symmetric_surface))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY overcomplex_topology_and_geometry_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (unused_patches,
                                edge_with_excessive_segments,
                                face_surface_with_excessive_patches_in_one_direction))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY overlap_splice_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY overlap_splice_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY overlapping_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (partly_overlapping_curves,
                                partly_overlapping_surfaces))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY package_product_concept_feature
  SUBTYPE OF (product_concept_feature);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE' IN TYPEOF(SELF));
  WR2: SIZEOF(QUERY(cfr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATING_PRODUCT_CONCEPT_FEATURE') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF(cfr)) AND (SIZEOF(QUERY(ipcf <* USEDIN(cfr, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE.CONDITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE' IN TYPEOF(ipcf))) = 1))) > 0;
END_ENTITY;

ENTITY pair_representation_relationship
  SUBTYPE OF (geometric_representation_item, representation_relationship_with_transformation);
  SELF\representation_relationship.rep_1 : kinematic_link_representation;
  SELF\representation_relationship.rep_2 : kinematic_link_representation;
  SELF\representation_relationship_with_transformation.transformation_operator : kinematic_pair;
WHERE
  WR1: transformation_operator\item_defined_transformation.transform_item_1 IN rep_1.items;
  WR2: transformation_operator\item_defined_transformation.transform_item_2 IN rep_2.items;
  WR3: rep_1\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_start;
  WR4: rep_2\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_end;
END_ENTITY;

ENTITY pair_value
  ABSTRACT SUPERTYPE OF (ONEOF (sliding_surface_pair_value,
                                rolling_surface_pair_value,
                                revolute_pair_value,
                                prismatic_pair_value,
                                screw_pair_value,
                                cylindrical_pair_value,
                                spherical_pair_value,
                                sliding_curve_pair_value,
                                rolling_curve_pair_value,
                                gear_pair_value,
                                rack_and_pinion_pair_value,
                                universal_pair_value,
                                planar_pair_value,
                                unconstrained_pair_value,
                                point_on_surface_pair_value,
                                point_on_planar_curve_pair_value,
                                low_order_kinematic_pair_value))
  SUBTYPE OF (geometric_representation_item);
  applies_to_pair : kinematic_pair;
END_ENTITY;

ENTITY parabola
  SUBTYPE OF (conic);
  focal_dist : length_measure;
WHERE
  WR1: focal_dist <> 0.0;
END_ENTITY;

ENTITY parallel_assembly_constraint
  SUBTYPE OF (binary_assembly_constraint, parallel_geometric_constraint);
END_ENTITY;

ENTITY parallel_assembly_constraint_with_dimension
  SUBTYPE OF (parallel_assembly_constraint, pgc_with_dimension);
END_ENTITY;

ENTITY parallel_composed_function
  SUBTYPE OF (maths_function, multiple_arity_generic_expression);
  source_of_domain : maths_space_or_function;
  prep_functions : LIST[1:?] OF maths_function;
  final_function : maths_function_select;
DERIVE
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF generic_expression := convert_to_operands_prcmfn(source_of_domain, prep_functions, final_function);
WHERE
  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
  WR2: expression_is_constant(domain_from(source_of_domain));
  WR3: parallel_composed_function_domain_check(domain_from(source_of_domain), prep_functions);
  WR4: parallel_composed_function_composability_check(prep_functions, final_function);
END_ENTITY;

ENTITY parallel_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF linear_geometry_constraint_element;
END_ENTITY;

ENTITY parallel_offset
  SUBTYPE OF (derived_shape_aspect);
  offset : measure_with_unit;
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
END_ENTITY;

ENTITY parallel_offset_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve_or_surface_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF curve_or_surface_constraint_element;
  offset_type : parallel_offset_type;
WHERE
  WR1: NOT (((offset_type = curve_2d_offset) OR (offset_type = curve_3d_offset)) AND (SIZEOF(QUERY(q <* (SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(q))) > 0));
  WR2: NOT ((offset_type = surface_offset) AND (SIZEOF(QUERY(q <* (SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(q))) > 0));
END_ENTITY;

ENTITY parallelism_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
END_ENTITY;

ENTITY parametric_representation_context
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY part_laminate_table
  SUPERTYPE OF (ONEOF (composite_assembly_table,
                       ply_laminate_table))
  SUBTYPE OF (laminate_table);
END_ENTITY;

ENTITY partial_circular_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 3)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'sweep angle')))) = 1)))) = 0)))) = 0);
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
END_ENTITY;

ENTITY partial_derivative_expression
  SUBTYPE OF (unary_generic_expression);
  d_variables : LIST[1:?] OF maths_variable;
  extension : extension_options;
DERIVE
  derivand : generic_expression := SELF\unary_generic_expression.operand;
WHERE
  WR1: has_values_space(derivand);
  WR2: space_is_continuum(values_space_of(derivand));
  WR3: SIZEOF(QUERY(vbl <* d_variables | (NOT subspace_of(values_space_of(vbl), the_reals)) AND (NOT subspace_of(values_space_of(vbl), the_complex_numbers)))) = 0;
END_ENTITY;

ENTITY partial_derivative_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  d_variables : LIST[1:?] OF input_selector;
  extension : extension_options;
DERIVE
  derivand : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: space_is_continuum(derivand.range);
  WR2: partial_derivative_check(derivand.domain, d_variables);
END_ENTITY;

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

ENTITY partly_overlapping_curves
  SUBTYPE OF (overlapping_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY partly_overlapping_edges
  SUBTYPE OF (topology_related_to_overlapping_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY partly_overlapping_faces
  SUBTYPE OF (topology_related_to_overlapping_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY partly_overlapping_solids
  SUBTYPE OF (inapt_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY partly_overlapping_surfaces
  SUBTYPE OF (overlapping_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
  interference_tolerance : length_measure;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY path
  SUPERTYPE OF (ONEOF (open_path,
                       edge_loop,
                       oriented_path))
  SUBTYPE OF (topological_representation_item);
  edge_list : LIST[1:?] OF UNIQUE oriented_edge;
WHERE
  WR1: path_head_to_tail(SELF);
END_ENTITY;

ENTITY path_area_with_parameters
  SUBTYPE OF (complex_area, mapped_item);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF\mapped_item.mapping_target);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_PARAMETERS_REPRESENTATION' IN TYPEOF(SELF\mapped_item.mapping_source\representation_map.mapped_representation);
  WR3: SELF\mapped_item.mapping_source\representation_map.mapping_origin\representation_item.name = 'curve width';
END_ENTITY;

ENTITY path_feature_component
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['partial circular','complete circular','linear','complex']);
  WR3: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0));
  WR4: ((SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0));
  WR5: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) = 0)))) = 0));
  WR6: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0));
  WR7: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'sweep angle')))) = 1)))) = 0)))) = 0));
  WR8: ((NOT (SELF.description = 'complete circular')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0));
  WR9: ((NOT (SELF.description = 'complete circular')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0));
  WR10: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0));
  WR11: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'distance')))) = 1)))) = 0)))) = 0));
  WR12: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)))) = 1)))) = 0));
  WR13: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'sweep path') AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'profile shape'))) = 1)))) = 1)))) = 0));
END_ENTITY;

ENTITY path_node
  ABSTRACT SUPERTYPE OF (ONEOF (point_to_point_path,
                                circular_path,
                                linear_path,
                                curve_based_path))
  SUBTYPE OF (kinematic_path_segment);
  placement_end : placement;
END_ENTITY;

ENTITY path_parameter_representation
  SUBTYPE OF (definitional_representation);
  SELF\representation.context_of_items : path_parameter_representation_context;
  SELF\representation.items : SET[1:?] OF bounded_curve;
WHERE
  WR1: SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
END_ENTITY;

ENTITY path_parameter_representation_context
  SUBTYPE OF (geometric_representation_context, parametric_representation_context);
END_ENTITY;

ENTITY path_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) >= 1);
  WR2: (SIZEOF(QUERY(i <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH'] * TYPEOF(i)) = 1))) >= 1);
END_ENTITY;

ENTITY pattern_offset_membership
  SUBTYPE OF (feature_component_relationship);
WHERE
  WR1: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.relating_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | ((SIZEOF(QUERY(pdr <* (QUERY(pd <* USEDIN(fcr.related_shape_aspect.of_shape, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] * TYPEOF(pdr.definition)) = 1)) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | (fcr.description = 'modified pattern') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)))) >= 1);
  WR3: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) AND (NOT (SIZEOF(QUERY(modfcr <* QUERY(modsar <* USEDIN(fcr.relating_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] * TYPEOF(modsar.related_shape_aspect.of_shape.definition)) = 1) AND (modsar :<>: fcr))) | (NOT (modfcr.related_shape_aspect.of_shape.definition :=: SELF.relating_shape_aspect.of_shape.definition)))) = 0))))) = 0);
  WR4: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 2)))) = 0));
  WR5: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 1)))) = 0));
  WR6: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 2)))) = 0)))) = 0));
  WR7: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'index number')))) = 1)))) = 0)))) = 0));
  WR8: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'offset')))) = 1)))) = 0)))) = 0));
  WR9: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) = 0)))) = 0));
  WR10: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'row index')))) = 1)))) = 0)))) = 0));
  WR11: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'column index')))) = 1)))) = 0)))) = 0));
  WR12: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'offset distance')))) = 1)))) = 0)))) = 0));
  WR13: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'offset direction')))) = 1)))) = 0));
END_ENTITY;

ENTITY pattern_omit_membership
  SUBTYPE OF (feature_component_relationship);
WHERE
  WR1: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.relating_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | ((SIZEOF(QUERY(pdr <* (QUERY(pd <* USEDIN(fcr.related_shape_aspect.of_shape, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] * TYPEOF(pdr.definition)) = 1)) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | (fcr.description = 'modified pattern') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)))) >= 1);
  WR3: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) AND (NOT (SIZEOF(QUERY(modfcr <* QUERY(modsar <* USEDIN(fcr.relating_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] * TYPEOF(modsar.related_shape_aspect.of_shape.definition)) = 1) AND (modsar :<>: fcr))) | (NOT (modfcr.related_shape_aspect.of_shape.definition :=: SELF.relating_shape_aspect.of_shape.definition)))) = 0))))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 1)))) = 0);
  WR5: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 1)))) = 0)))) = 0));
  WR6: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'index number')))) = 1)))) = 0)))) = 0));
  WR7: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 2)))) = 0)))) = 0));
  WR8: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'row index')))) = 1)))) = 0)))) = 0));
  WR9: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY(pd <* USEDIN(SELF.related_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'column index')))) = 1)))) = 0)))) = 0));
END_ENTITY;

ENTITY pcurve
  SUBTYPE OF (curve);
  basis_surface : surface;
  reference_to_curve : definitional_representation;
WHERE
  WR1: SIZEOF(reference_to_curve\representation.items) = 1;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(reference_to_curve\representation.items[1]);
  WR3: reference_to_curve\representation.items[1]\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY pdgc_with_dimension
  SUBTYPE OF (point_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

ENTITY percentage_laminate_table
  SUBTYPE OF (zone_structural_makeup);
END_ENTITY;

ENTITY perpendicular_assembly_constraint
  SUBTYPE OF (binary_assembly_constraint, perpendicular_geometric_constraint);
END_ENTITY;

ENTITY perpendicular_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:2] OF linear_geometry_constraint_element;
WHERE
  WR1: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 2) AND NOT ((SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE' IN TYPEOF(q))) = SIZEOF(SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements)) XOR (SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(q))) = SIZEOF(SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements))));
  WR2: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) IN [2,3]);
  WR3: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 0) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 3)) AND NOT ((SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE' IN TYPEOF(q))) = 3) XOR (SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(q))) = 3));
END_ENTITY;

ENTITY perpendicular_to
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
END_ENTITY;

ENTITY perpendicularity_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_person_type_definition : person_type_definition;
  related_person_type_definition : person_type_definition;
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 pgc_with_dimension
  SUBTYPE OF (parallel_geometric_constraint);
  distance_value : non_negative_length_measure;
  negative_direction : BOOLEAN;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: SIZEOF(QUERY(q <* (SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements) | SIZEOF(TYPEOF(q) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR']) > 0)) = 0;
END_ENTITY;

ENTITY physical_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY physical_component
  SUBTYPE OF (assembly_component);
END_ENTITY;

ENTITY physical_component_feature
  SUPERTYPE OF ((ONEOF (physical_component_terminal,
                        physical_component_interface_terminal)))
  SUBTYPE OF (component_feature);
END_ENTITY;

ENTITY physical_component_interface_terminal
  SUBTYPE OF (physical_component_feature);
END_ENTITY;

ENTITY physical_component_terminal
  SUBTYPE OF (component_terminal, physical_component_feature);
END_ENTITY;

ENTITY physical_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY picture_representation
  SUBTYPE OF (presentation_view);
  SELF\representation.items : SET[2:?] OF picture_representation_item_select;
INVERSE
  size : presentation_size FOR unit;
WHERE
  WR1: SIZEOF(QUERY(item <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item))) = 1;
  WR2: SIZEOF(QUERY(se <* QUERY(item <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PICTURE_REPRESENTATION_ITEM' IN TYPEOF(se\styled_item.item)))) = 0;
END_ENTITY;

ENTITY picture_representation_item
  ABSTRACT SUPERTYPE OF (ONEOF (externally_defined_picture_representation_item,
                                predefined_picture_representation_item))
  SUBTYPE OF (bytes_representation_item);
END_ENTITY;

ENTITY placed_datum_target_feature
  SUBTYPE OF (datum_target);
DERIVE
  representation_associations : SET[0:?] OF property_definition_representation := get_shape_aspect_property_definition_representations(SELF);
WHERE
  WR1: SELF.description IN ['point','line','rectangle','circle','circular curve'];
  WR2: SIZEOF(QUERY(pdr <* representation_associations | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1;
  WR3: valid_datum_target_parameters(SELF);
END_ENTITY;

ENTITY placed_feature
  SUBTYPE OF (shape_aspect);
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 planar_box
  SUBTYPE OF (planar_extent);
  placement : axis2_placement;
END_ENTITY;

ENTITY planar_curve_pair
  SUPERTYPE OF (ONEOF (sliding_curve_pair,
                       rolling_curve_pair)
               ANDOR planar_curve_pair_range)
  SUBTYPE OF (high_order_kinematic_pair);
  curve_1 : curve;
  curve_2 : curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (curve_1 IN r.items))) = 0;
  WR2: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (curve_2 IN r.items))) = 0;
  WR3: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY planar_curve_pair_range
  SUBTYPE OF (planar_curve_pair);
  range_on_curve_1 : trimmed_curve;
  range_on_curve_2 : trimmed_curve;
WHERE
  WR1: SELF\planar_curve_pair.curve_1 :=: range_on_curve_1.basis_curve;
  WR2: SELF\planar_curve_pair.curve_2 :=: range_on_curve_2.basis_curve;
  WR3: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (range_on_curve_1 IN r.items))) = 0;
  WR4: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (range_on_curve_2 IN r.items))) = 0;
END_ENTITY;

ENTITY planar_extent
  SUBTYPE OF (geometric_representation_item);
  size_in_x : length_measure;
  size_in_y : length_measure;
END_ENTITY;

ENTITY planar_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY planar_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : planar_pair;
  actual_rotation : plane_angle_measure;
  actual_translation_x : length_measure;
  actual_translation_y : length_measure;
END_ENTITY;

ENTITY planar_pair_with_range
  SUBTYPE OF (planar_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
  lower_limit_actual_translation_x : OPTIONAL length_measure;
  upper_limit_actual_translation_x : OPTIONAL length_measure;
  lower_limit_actual_translation_y : OPTIONAL length_measure;
  upper_limit_actual_translation_y : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
  WR2: (NOT EXISTS(lower_limit_actual_translation_x) OR NOT EXISTS(upper_limit_actual_translation_x)) XOR (lower_limit_actual_translation_x < upper_limit_actual_translation_x);
  WR3: (NOT EXISTS(lower_limit_actual_translation_y) OR NOT EXISTS(upper_limit_actual_translation_y)) XOR (lower_limit_actual_translation_y < upper_limit_actual_translation_y);
END_ENTITY;

ENTITY planar_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(SELF.items) = 1;
  WR2: SIZEOF(QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(it)))) = 1;
END_ENTITY;

ENTITY plane
  SUBTYPE OF (elementary_surface);
END_ENTITY;

ENTITY plane_angle_and_length_pair
  SUBTYPE OF (founded_item);
  plane_angle_value : plane_angle_measure;
  length_value : length_measure;
END_ENTITY;

ENTITY plane_angle_and_ratio_pair
  SUBTYPE OF (founded_item);
  plane_angle_value : plane_angle_measure;
  ratio_value : ratio_measure;
END_ENTITY;

ENTITY plane_angle_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY plus_expression
  SUBTYPE OF (multiple_arity_numeric_expression);
END_ENTITY;

ENTITY plus_minus_tolerance;
  range : tolerance_method_definition;
  toleranced_dimension : dimensional_characteristic;
UNIQUE
  UR1: toleranced_dimension;
END_ENTITY;

ENTITY ply_angle_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:1] OF measure_representation_item;
END_ENTITY;

ENTITY ply_drop_off_stay_out_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY ply_drop_off_stay_out_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY ply_laminate_sequence_definition
  SUBTYPE OF (product_definition);
WHERE
  WR1: SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN TYPEOF(pdr))) > 0;
END_ENTITY;

ENTITY ply_laminate_table
  SUBTYPE OF (part_laminate_table);
END_ENTITY;

ENTITY ply_orientation_angle
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : reinforcement_orientation_basis;
  SELF\representation_relationship.rep_2 : ply_angle_representation;
END_ENTITY;

ENTITY ply_wrinkle_allowance_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY ply_wrinkle_allowance_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY pmi_requirement_item_association
  SUBTYPE OF (item_identified_representation_usage);
  requirement : characterized_object;
END_ENTITY;

ENTITY pmidq_length_measure_for_incorrect_geometric_relation_of_datum_and_toleranced_feature
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : incorrect_geometric_relation_of_datum_and_toleranced_feature;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : length_measure;
END_ENTITY;

ENTITY pmidq_length_measure_for_incorrect_spatial_arrangement_of_datum_targets
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : incorrect_spatial_arrangement_of_datum_targets;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : length_measure;
END_ENTITY;

ENTITY pmidq_length_measure_for_insufficiently_constrained_datum_system
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : insufficiently_constrained_datum_system;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : length_measure;
END_ENTITY;

ENTITY pocket
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['closed rectangular','open rectangular','complex','circular cutout','complex cutout','recess']);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'pocket depth occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (sar.name = 'pocket depth') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear')))) = 1)))) = 1)))) = 0);
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) = 1;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({1 <= SIZEOF(pdr.used_representation.items) <= 2}))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'fillet radius'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'fillet radius'))) <= 1))) = 0))) = 0;
  WR7: ((NOT (SELF\characterized_object.description IN ['complex','non-circular cutout','recess'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1)))) = 1)))) = 1)))) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'closed rectangular')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'closed boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))))) = 1)))) = 1)))) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'open rectangular')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'open boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))))) = 1)))) = 1)))) = 0));
  WR10: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'pocket bottom usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) = 1)))) = 1)))) = 0);
  WR11: ((NOT (SELF\characterized_object.description IN ['complex','non-circular cutout','recess'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in boundary occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])))) = 1)))) <= 1)))) = 0));
  WR12: (NOT (SELF\characterized_object.description = 'circular cutout')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR13: (NOT (SELF\characterized_object.description IN ['circular cutout','complex cutout'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND (sdr.relating_shape_aspect.description = 'through')))) = 1))) = 1))) = 0);
  WR14: (NOT (SELF\characterized_object.description = 'recess')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND (sdr.relating_shape_aspect.description IN ['planar','complex'])))) = 1))) = 1))) = 0);
  WR15: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
  WR16: ((NOT (SELF\characterized_object.description IN ['closed rectangular','open rectangular','complex','recess'])) OR (SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name = 'uncut volume') AND (SIZEOF(QUERY(sar <* csa.component_relationships | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] * TYPEOF(sar.related_shape_aspect)) = 1))))) = 1)))) <= 1)))) = 1));
  WR17: ((NOT (SELF\characterized_object.description IN ['closed rectangular','open rectangular'])) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in boundary occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])))) >= 1)))) <= 1)))) = 0));
END_ENTITY;

ENTITY pocket_bottom
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['planar','complex','through'];
  WR3: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor normal'))) = 1)))) = 0));
  WR4: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor location'))) = 1)))) = 0));
  WR5: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor face'))) = 1)))) = 0));
  WR6: (NOT (SELF.description IN ['planar','complex']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0));
  WR7: (NOT (SELF.description IN ['planar','complex']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(impl_rep.used_representation.items) <= 1))) = 0))) = 0));
  WR8: (NOT (SELF.description = 'through') OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 0))) = 0));
  WR9: (NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius'))) <= 1))) = 0))) = 0);
  WR10: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | ((fcr.related_shape_aspect.description = 'bottom condition occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1;
  WR11: ((NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (fcr.related_shape_aspect.description = 'bottom condition occurrence') AND (fcr.related_shape_aspect.name IN ['pocket depth start','pocket depth end']))) = 0));
END_ENTITY;

ENTITY pogc_with_dimension
  SUBTYPE OF (parallel_offset_geometric_constraint);
  offset_value : positive_length_measure;
  offset_direction_constrained : BOOLEAN;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: (NOT (offset_direction_constrained = TRUE) AND ((offset_type = curve_2d_offset) OR (offset_type = surface_offset)));
END_ENTITY;

ENTITY point
  SUPERTYPE OF (ONEOF (cartesian_point,
                       point_on_curve,
                       point_on_surface,
                       point_in_volume,
                       point_replica,
                       degenerate_pcurve))
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;

ENTITY point_and_vector
  SUBTYPE OF (compound_representation_item, geometric_representation_item);
  SELF\compound_representation_item.item_element : point_and_vector_members;
END_ENTITY;

ENTITY point_array
  SUBTYPE OF (compound_representation_item, geometric_representation_item);
  SELF\compound_representation_item.item_element : point_array_members;
END_ENTITY;

ENTITY point_based_llai
  SUPERTYPE OF (ONEOF (core_sample,
                       strategy_point))
  SUBTYPE OF (limited_length_area_indicator);
END_ENTITY;

ENTITY point_cloud_dataset
  SUBTYPE OF (scanned_data_item);
  point_coordinates : LIST[1:?] OF LIST[3:3] OF REAL;
END_ENTITY;

ENTITY point_cloud_dataset_with_colours
  SUBTYPE OF (point_cloud_dataset);
  colour_indices : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
  WR1: SIZEOF(colour_indices) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
END_ENTITY;

ENTITY point_cloud_dataset_with_intensities
  SUBTYPE OF (point_cloud_dataset);
  intensities : LIST[1:?] OF REAL;
WHERE
  WR1: SIZEOF(intensities) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
END_ENTITY;

ENTITY point_cloud_dataset_with_normals
  SUBTYPE OF (point_cloud_dataset);
  normals : LIST[1:?] OF LIST[3:3] OF REAL;
WHERE
  WR1: SIZEOF(normals) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
END_ENTITY;

ENTITY point_cloud_superdataset
  SUBTYPE OF (scanned_data_item);
  pts_per_sublist : INTEGER;
  sublists : LIST[2:?] OF point_cloud_dataset;
WHERE
  WR1: consistent_sizes(SELF.pts_per_sublist, SELF.sublists);
END_ENTITY;

ENTITY point_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF point;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
END_ENTITY;

ENTITY point_in_volume
  SUBTYPE OF (point);
  basis_volume : volume;
  point_parameter_u : parameter_value;
  point_parameter_v : parameter_value;
  point_parameter_w : parameter_value;
END_ENTITY;

ENTITY point_on_curve
  SUBTYPE OF (point);
  basis_curve : curve;
  point_parameter : parameter_value;
END_ENTITY;

ENTITY point_on_edge_curve
  SUBTYPE OF (point_on_curve);
  basis_edge_curve : edge_curve;
DERIVE
  SELF\point_on_curve.basis_curve : curve := SELF.basis_edge_curve.edge_geometry;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_edge_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY point_on_face_surface
  SUBTYPE OF (point_on_surface);
  basis_face_surface : face_surface;
DERIVE
  SELF\point_on_surface.basis_surface : surface := SELF.basis_face_surface.face_geometry;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_face_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY point_on_line
  SUBTYPE OF (point_on_curve);
  SELF\point_on_curve.basis_curve : line;
END_ENTITY;

ENTITY point_on_planar_curve_pair
  SUBTYPE OF (high_order_kinematic_pair);
  pair_curve : curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_curve IN r.items))) = 0;
  WR2: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY point_on_planar_curve_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : point_on_planar_curve_pair;
  actual_point_on_curve : point_on_curve;
  input_orientation : spatial_rotation;
DERIVE
  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair, input_orientation);
WHERE
  WR1: SELF\pair_value.applies_to_pair\point_on_planar_curve_pair.pair_curve :=: actual_point_on_curve.basis_curve;
END_ENTITY;

ENTITY point_on_planar_curve_pair_with_range
  SUBTYPE OF (point_on_planar_curve_pair);
  range_on_pair_curve : trimmed_curve;
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
  WR4: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (range_on_pair_curve IN r.items))) = 0;
END_ENTITY;

ENTITY point_on_plane
  SUBTYPE OF (point_on_surface);
  SELF\point_on_surface.basis_surface : plane;
END_ENTITY;

ENTITY point_on_surface
  SUBTYPE OF (point);
  basis_surface : surface;
  point_parameter_u : parameter_value;
  point_parameter_v : parameter_value;
END_ENTITY;

ENTITY point_on_surface_pair
  SUBTYPE OF (high_order_kinematic_pair);
  pair_surface : surface;
WHERE
  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_surface IN r.items))) = 0;
  WR2: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY point_on_surface_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : point_on_surface_pair;
  actual_point_on_surface : point_on_surface;
  input_orientation : spatial_rotation;
DERIVE
  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair, input_orientation);
WHERE
  WR1: SELF\pair_value.applies_to_pair\point_on_surface_pair.pair_surface :=: actual_point_on_surface.basis_surface;
END_ENTITY;

ENTITY point_on_surface_pair_with_range
  SUBTYPE OF (point_on_surface_pair);
  range_on_pair_surface : rectangular_trimmed_surface;
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
  WR4: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (range_on_pair_surface IN r.items))) = 0;
END_ENTITY;

ENTITY point_path
  SUBTYPE OF (compound_representation_item, geometric_representation_item);
  SELF\compound_representation_item.item_element : point_path_members;
END_ENTITY;

ENTITY point_placement_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF point_placement_shape_representation_item;
WHERE
  WR1: SIZEOF(QUERY(i <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(i)) = 1)) > 0;
END_ENTITY;

ENTITY point_replica
  SUBTYPE OF (point);
  parent_pt : point;
  transformation : cartesian_transformation_operator;
WHERE
  WR1: transformation.dim = parent_pt.dim;
  WR2: acyclic_point_replica(SELF, parent_pt);
END_ENTITY;

ENTITY point_style
  SUBTYPE OF (founded_item);
  name : label;
  marker : OPTIONAL marker_select;
  marker_size : OPTIONAL size_select;
  marker_colour : OPTIONAL colour;
WHERE
  WR1: EXISTS(marker) OR EXISTS(marker_size) OR EXISTS(marker_colour);
END_ENTITY;

ENTITY point_to_point_path
  SUBTYPE OF (path_node);
DERIVE
  SELF\kinematic_path_segment.transition : transition_code := discontinuous;
END_ENTITY;

ENTITY polar_11
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF));
END_ENTITY;

ENTITY polar_complex_number_region
  SUBTYPE OF (maths_space, generic_literal);
  centre : complex_number_literal;
  distance_constraint : real_interval;
  direction_constraint : finite_real_interval;
WHERE
  WR1: min_exists(distance_constraint) AND (real_min(distance_constraint) >= 0.0);
  WR2: {-PI <= direction_constraint.min < PI};
  WR3: direction_constraint.max - direction_constraint.min <= 2.0 * PI;
  WR4: (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.min_closure = open);
  WR5: (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.max_closure = open) OR (direction_constraint.min = -PI);
  WR6: (real_min(distance_constraint) > 0.0) OR max_exists(distance_constraint) OR (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.max_closure = open);
END_ENTITY;

ENTITY polar_point
  SUBTYPE OF (cartesian_point);
  r : length_measure;
  theta : plane_angle_measure;
DERIVE
  SELF\cartesian_point.coordinates : LIST[2:2] OF length_measure := [r * COS(theta),r * SIN(theta)];
WHERE
  WR1: r >= 0.0;
END_ENTITY;

ENTITY poly_loop
  SUBTYPE OF (loop, geometric_representation_item);
  polygon : LIST[3:?] OF UNIQUE cartesian_point;
END_ENTITY;

ENTITY polygonal_area
  SUBTYPE OF (primitive_2d);
  bounds : LIST[3:?] OF UNIQUE cartesian_point;
END_ENTITY;

ENTITY polyline
  SUBTYPE OF (bounded_curve);
  points : LIST[2:?] OF cartesian_point;
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_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_position_in_organization : position_in_organization;
  related_position_in_organization : position_in_organization;
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 position_tolerance
  SUBTYPE OF (geometric_tolerance);
END_ENTITY;

ENTITY positioned_sketch
  SUBTYPE OF (geometric_representation_item);
  sketch_basis : sketch_basis_select;
  auxiliary_elements : SET[0:?] OF auxiliary_geometric_representation_item;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(sketch_basis)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(sketch_basis\curve_bounded_surface.basis_surface)));
  WR2: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(sketch_basis)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(sketch_basis\face_surface.face_geometry)));
  WR3: SIZEOF(QUERY(q <* auxiliary_elements | (SIZEOF(TYPEOF(q) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']) = 0))) = 0;
  WR4: SIZEOF(QUERY(q <* auxiliary_elements | q\geometric_representation_item.dim <> 3)) = 0;
END_ENTITY;

ENTITY positive_length_measure_with_unit
  SUBTYPE OF (length_measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(SELF\measure_with_unit.value_component);
END_ENTITY;

ENTITY positive_plane_angle_measure_with_unit
  SUBTYPE OF (plane_angle_measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF(SELF\measure_with_unit.value_component);
END_ENTITY;

ENTITY potting_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY potting_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY power_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY power_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.watt);
END_ENTITY;

ENTITY pre_defined_character_glyph
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_colour
  SUBTYPE OF (pre_defined_item, colour);
END_ENTITY;

ENTITY pre_defined_curve_font
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_dimension_symbol
  SUBTYPE OF (pre_defined_symbol);
WHERE
  WR1: SELF.name IN ['arc length', 'conical taper', 'counterbore', 'countersink', 'depth', 'diameter', 'plus minus', 'radius', 'slope', 'spherical diameter', 'spherical radius', 'square'];
END_ENTITY;

ENTITY pre_defined_geometrical_tolerance_symbol
  SUBTYPE OF (pre_defined_symbol);
WHERE
  WR1: SELF.name IN ['angularity', 'basic dimension', 'blanked datum reference', 'circular runout', 'circularity', 'concentricity', 'cylindricity', 'datum target identification', 'diameter', 'filled datum reference', 'flatness', 'least material condition', 'maximum material condition', 'parallelism', 'perpendicularity', 'position', 'profile of a line', 'profile of a surface', 'projected tolerance zone', 'regardless of feature size', 'straightness', 'symmetry', 'total runout'];
END_ENTITY;

ENTITY pre_defined_item;
  name : label;
END_ENTITY;

ENTITY pre_defined_marker
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_point_marker_symbol
  SUBTYPE OF (pre_defined_marker, pre_defined_symbol);
WHERE
  WR1: SELF.name IN ['asterisk','circle','dot','plus','square','triangle','x'];
END_ENTITY;

ENTITY pre_defined_surface_condition_symbol
  SUBTYPE OF (pre_defined_symbol);
WHERE
  WR1: SELF.name IN ['000', '010', '020', '030', '040', '050', '060', '070', '001', '011', '021', '031', '041', '051', '061', '071', '100', '110', '120', '130', '140', '150', '160', '170', '101', '111', '121', '131', '141', '151', '161', '171', '200', '210', '220', '230', '240', '250', '260', '270', '201', '211', '221', '231', '241', '251', '261', '271'];
END_ENTITY;

ENTITY pre_defined_surface_side_style
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_symbol
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_terminator_symbol
  SUBTYPE OF (pre_defined_symbol);
WHERE
  WR1: SELF.name IN ['blanked arrow', 'blanked box', 'blanked dot', 'blanked triangle', 'dimension origin', 'filled arrow', 'filled box', 'filled dot', 'integral symbol', 'open arrow', 'slash', 'unfilled arrow', 'unfilled triangle', 'filled triangle'];
END_ENTITY;

ENTITY pre_defined_text_font
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY pre_defined_tile
  SUBTYPE OF (pre_defined_item);
END_ENTITY;

ENTITY precision_qualifier;
  precision_value : INTEGER;
END_ENTITY;

ENTITY predefined_picture_representation_item
  SUBTYPE OF (picture_representation_item);
WHERE
  WR1: SELF\representation_item.name IN pre_defined_picture_representation_types;
END_ENTITY;

ENTITY prescribed_path
  SUBTYPE OF (link_motion_representation_along_path);
  controlling_joints : OPTIONAL SET[1:6] OF kinematic_joint;
END_ENTITY;

ENTITY presentation_area
  SUBTYPE OF (presentation_representation);
WHERE
  WR1: ((SIZEOF(QUERY(ais <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA') | SIZEOF(USEDIN(ais, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')) = 1)) > 0) OR (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')) = 1));
END_ENTITY;

ENTITY presentation_layer_assignment;
  name : label;
  description : text;
  assigned_items : SET[1:?] OF layered_item;
END_ENTITY;

ENTITY presentation_representation
  SUPERTYPE OF (ONEOF (presentation_area,
                       presentation_view))
  SUBTYPE OF (representation);
  SELF\representation.context_of_items : geometric_representation_context;
WHERE
  WR1: SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_AREA' IN TYPEOF(SELF)) OR (SIZEOF(QUERY(prr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN TYPEOF(prr\representation_relationship.rep_1))) > 0) OR (SIZEOF(QUERY(rm <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION') | SIZEOF(QUERY(mi <* USEDIN(rm, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE') | SIZEOF(QUERY(rep <* using_representations(mi) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN TYPEOF(rep))) > 0)) > 0)) > 0);
END_ENTITY;

ENTITY presentation_set;
INVERSE
  areas : SET[1:?] OF area_in_set FOR in_set;
END_ENTITY;

ENTITY presentation_size;
  unit : presentation_size_assignment_select;
  size : planar_box;
UNIQUE
  UR1: unit;
WHERE
  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN TYPEOF(unit)) AND item_in_context(size, unit\representation.context_of_items)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET' IN TYPEOF(unit)) AND (SIZEOF(QUERY(ais <* unit\area_in_set.in_set.areas | NOT item_in_context(size, ais.area\representation.context_of_items))) = 0));
END_ENTITY;

ENTITY presentation_style_assignment
  SUBTYPE OF (founded_item);
  styles : SET[1:?] OF presentation_style_select;
WHERE
  WR1: SIZEOF(QUERY(style1 <* styles | NOT (SIZEOF(QUERY(style2 <* (styles - style1) | NOT ((TYPEOF(style1) <> TYPEOF(style2)) OR (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_STYLE'] * TYPEOF(style1)) = 1)))) = 0))) = 0;
  WR2: SIZEOF(QUERY(style1 <* styles | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(style1))) <= 2;
  WR3: SIZEOF(QUERY(style1 <* styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(style1)) AND (SIZEOF(QUERY(style2 <* (styles - style1) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(style2)) AND ((style1\surface_style_usage.side = both) OR (style2\surface_style_usage.side = both) OR (style1\surface_style_usage.side = style2\surface_style_usage.side)))) > 0))) = 0;
END_ENTITY;

ENTITY presentation_style_by_context
  SUBTYPE OF (presentation_style_assignment);
  style_context : style_context_select;
END_ENTITY;

ENTITY presentation_view
  SUBTYPE OF (presentation_representation);
END_ENTITY;

ENTITY presented_item
  ABSTRACT SUPERTYPE ;
END_ENTITY;

ENTITY presented_item_representation;
  presentation : presentation_representation_select;
  item : presented_item;
END_ENTITY;

ENTITY pressure_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.pascal);
END_ENTITY;

ENTITY previous_change_element_assignment
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : previous_element_assignment_select;
  items : SET[1:?] OF change_management_object;
END_ENTITY;

ENTITY primitive_2d
  SUPERTYPE OF (ONEOF (circular_area,
                       elliptic_area,
                       rectangular_area,
                       polygonal_area,
                       half_space_2d))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SELF\geometric_representation_item.dim = 2;
END_ENTITY;

ENTITY primitive_2d_with_inner_boundary
  SUBTYPE OF (complex_area, compound_representation_item);
  SELF\compound_representation_item.item_element : compound_inner_area_boundary;
DERIVE
  inner_boundary : compound_inner_area_boundary := SELF\compound_representation_item.item_element;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_AREA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPTIC_AREA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_AREA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYGONAL_AREA', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_WITH_OUTER_BOUNDARY', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_AREA_WITH_PARAMETERS'] * TYPEOF(SELF)) > 0;
  WR2: SIZEOF(QUERY(inner <* inner_boundary | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY' IN TYPEOF(inner))) = 0;
  WR3: open_path_based_inner_boundary(inner_boundary);
END_ENTITY;

ENTITY prismatic_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := FALSE;
END_ENTITY;

ENTITY prismatic_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : prismatic_pair;
  actual_translation : length_measure;
END_ENTITY;

ENTITY prismatic_pair_with_range
  SUBTYPE OF (prismatic_pair);
  lower_limit_actual_translation : OPTIONAL length_measure;
  upper_limit_actual_translation : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR (lower_limit_actual_translation < upper_limit_actual_translation);
END_ENTITY;

ENTITY probability_representation
  SUBTYPE OF (property_definition_representation);
  SELF\property_definition_representation.definition : event_probability;
END_ENTITY;

ENTITY procedural_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF procedural_representation_sequence;
END_ENTITY;

ENTITY procedural_representation_sequence
  SUBTYPE OF (representation_item);
  elements : LIST[1:?] OF representation_item;
  suppressed_items : SET[0:?] OF representation_item;
  rationale : text;
WHERE
  WR1: SIZEOF(QUERY(q <* suppressed_items | NOT (q IN elements))) = 0;
END_ENTITY;

ENTITY procedural_shape_representation
  SUBTYPE OF (procedural_representation, shape_representation);
  SELF\representation.items : SET[1:?] OF procedural_shape_representation_sequence;
END_ENTITY;

ENTITY procedural_shape_representation_sequence
  SUBTYPE OF (geometric_representation_item, procedural_representation_sequence);
  SELF\procedural_representation_sequence.elements : LIST[1:?] OF shape_representation_item;
END_ENTITY;

ENTITY procedural_solid_representation_sequence
  SUBTYPE OF (procedural_shape_representation_sequence);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_MODEL' IN TYPEOF(SELF);
END_ENTITY;

ENTITY process_operation
  SUBTYPE OF (action_method);
END_ENTITY;

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

ENTITY process_plan
  SUBTYPE OF (action);
WHERE
  WR1: SIZEOF(QUERY(ar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION') | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] * TYPEOF(ar.relating_action)) <> 1)) = 0;
  WR2: SIZEOF(QUERY(ar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION') | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] * TYPEOF(ar.related_action)) = 1) OR ((ar.name = 'process operation occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_OPERATION' IN TYPEOF(ar.related_action.chosen_method))))) = SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION'));
END_ENTITY;

ENTITY process_product_association;
  name : label;
  description : text;
  defined_product : characterized_product_definition;
  process : product_definition_process;
END_ENTITY;

ENTITY process_property_association;
  name : label;
  description : text;
  process : property_process;
  property_or_shape : property_or_shape_select;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_category_relationship;
  name : label;
  description : OPTIONAL text;
  category : product_category;
  sub_category : product_category;
WHERE
  WR1: acyclic_product_category_relationship(SELF, [SELF.sub_category]);
END_ENTITY;

ENTITY product_class
  SUBTYPE OF (product_concept, characterized_object);
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_concept_feature;
  id : identifier;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY product_concept_feature_association;
  name : label;
  description : OPTIONAL text;
  concept : product_concept;
  feature : product_concept_feature;
END_ENTITY;

ENTITY product_concept_feature_category
  SUBTYPE OF (group);
WHERE
  WR1: SIZEOF(QUERY(aga <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP_ASSIGNMENT.ASSIGNED_GROUP') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_GROUP_ASSIGNMENT' IN TYPEOF(aga)) AND ((aga\group_assignment.role\object_role.name <> 'specification category member') OR (SIZEOF(QUERY(i <* aga\applied_group_assignment.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE' IN TYPEOF(i)) AND NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE' IN TYPEOF(i)))) <> SIZEOF(aga\applied_group_assignment.items))))) = 0;
END_ENTITY;

ENTITY product_concept_feature_category_usage
  SUBTYPE OF (group_assignment);
  SELF\group_assignment.assigned_group : product_concept_feature_category;
  items : SET[1:?] OF category_usage_item;
WHERE
  WR1: SELF.role.name IN ['mandatory category usage','optional category usage'];
END_ENTITY;

ENTITY product_concept_relationship;
  name : label;
  description : OPTIONAL text;
  relating_product_concept : product_concept;
  related_product_concept : product_concept;
END_ENTITY;

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

ENTITY product_data_and_data_equivalence_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  product_data : equivalence_product_data_select;
  data_equivalence : data_equivalence_definition;
END_ENTITY;

ENTITY product_data_and_data_quality_relationship;
  description : text;
  product_data : product_definition;
  data_quality : data_quality_definition;
END_ENTITY;

ENTITY product_definition
  SUPERTYPE OF (ONEOF (composite_assembly_sequence_definition,
                       laminate_table,
                       ply_laminate_sequence_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_formation_resource
  SUBTYPE OF (action_resource, product_definition_formation);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) > 0;
  WR2: SIZEOF(QUERY(prpc <* USEDIN(SELF\product_definition_formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'part')) <> 0;
  WR3: SELF\action_resource.name = SELF\product_definition_formation.id;
  WR4: SELF\action_resource.description = SELF\product_definition_formation.description;
END_ENTITY;

ENTITY product_definition_formation_with_specified_source
  SUBTYPE OF (product_definition_formation);
  make_or_buy : source;
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_kinematics
  SUBTYPE OF (property_definition);
  SELF\property_definition.definition : product_definition;
INVERSE
  representation_relation : kinematic_property_definition_representation FOR definition;
UNIQUE
  UR1: definition;
END_ENTITY;

ENTITY product_definition_occurrence
  SUPERTYPE OF (product_definition_specified_occurrence
                ANDOR product_definition_occurrence_reference_with_local_representation);
  id : identifier;
  name : OPTIONAL label;
  description : OPTIONAL text;
  definition : OPTIONAL product_definition_or_reference_or_occurrence;
  quantity : OPTIONAL measure_with_unit;
DERIVE
  descendant_occurrences : SET[0:?] OF product_definition_specified_occurrence := get_descendant_occurrences(SELF);
INVERSE
  assembly_usages : SET[0:?] OF assembly_component_usage FOR related_product_definition;
  child_occurrences : SET[0:?] OF product_definition_specified_occurrence FOR occurrence_usage;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE' IN TYPEOF(definition)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_REFERENCE' IN TYPEOF(definition))) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE' IN TYPEOF(SELF));
  WR2: EXISTS(definition) OR (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.DESIGN')) > 0);
  WR3: NOT ('NUMBER' IN TYPEOF(quantity\measure_with_unit.value_component)) OR (quantity\measure_with_unit.value_component > 0);
END_ENTITY;

ENTITY product_definition_occurrence_reference
  SUBTYPE OF (product_definition_reference);
  product_occurrence_id : identifier;
END_ENTITY;

ENTITY product_definition_occurrence_reference_with_local_representation
  SUBTYPE OF (product_definition_occurrence, generic_product_definition_reference);
END_ENTITY;

ENTITY product_definition_occurrence_relationship;
  name : label;
  description : OPTIONAL text;
  occurrence : product_definition;
  occurrence_usage : assembly_component_usage;
WHERE
  WR1: occurrence_usage.relating_product_definition :<>: occurrence;
  WR2: occurrence_usage.related_product_definition :<>: occurrence;
  WR3: occurrence.formation :=: occurrence_usage.related_product_definition.formation;
END_ENTITY;

ENTITY product_definition_process
  SUBTYPE OF (action);
  identification : identifier;
INVERSE
  product_definitions : SET[1:?] OF process_product_association FOR process;
END_ENTITY;

ENTITY product_definition_reference
  SUBTYPE OF (generic_product_definition_reference);
  product_id : identifier;
  product_definition_formation_id : identifier;
  product_definition_id : identifier;
  id_owning_organization_name : OPTIONAL label;
END_ENTITY;

ENTITY product_definition_reference_with_local_representation
  SUBTYPE OF (generic_product_definition_reference, product_definition);
END_ENTITY;

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

ENTITY product_definition_relationship_kinematics
  SUBTYPE OF (property_definition);
  SELF\property_definition.definition : product_definition_relationship;
UNIQUE
  UR1: definition;
END_ENTITY;

ENTITY product_definition_relationship_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating : product_definition_relationship;
  related : product_definition_relationship;
END_ENTITY;

ENTITY product_definition_resource
  SUBTYPE OF (action_resource, product_definition);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) > 0;
  WR2: SELF\product_definition.frame_of_reference\application_context_element.name IN ['part definition','part occurrence','physical occurrence'];
  WR3: SELF\action_resource.name = SELF\product_definition.name;
  WR4: SELF\action_resource.description = SELF\product_definition.description;
END_ENTITY;

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

ENTITY product_definition_specified_occurrence
  SUBTYPE OF (product_definition_occurrence);
  SELF\product_definition_occurrence.definition : product_definition_occurrence_or_reference;
  occurrence_usage : product_definition_occurrence_or_reference;
UNIQUE
  UR1: occurrence_usage, id;
WHERE
  WR1: SIZEOF(assembly_usages) = 0;
  WR2: acyclic_product_definition_specified_occurrence(SELF, SELF\product_definition_occurrence.definition);
END_ENTITY;

ENTITY product_definition_substitute;
  description : OPTIONAL text;
  context_relationship : product_definition_relationship;
  substitute_definition : product_definition;
DERIVE
  name : label := get_name_value(SELF);
WHERE
  WR1: context_relationship.related_product_definition :<>: substitute_definition;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
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], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE');
END_ENTITY;

ENTITY product_definition_usage_relationship
  SUBTYPE OF (product_definition_relationship_relationship);
  SELF\product_definition_relationship_relationship.relating : product_definition_usage;
  SELF\product_definition_relationship_relationship.related : product_definition_usage;
WHERE
  WR1: relating.relating_product_definition :=: related.relating_product_definition;
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);
DERIVE
  product_design : product := SELF\product_relationship.relating_product;
  individual_product : product := SELF\product_relationship.related_product;
END_ENTITY;

ENTITY product_design_version_to_individual
  SUBTYPE OF (product_definition_formation_relationship);
DERIVE
  product_design_version : product_definition_formation := SELF\product_definition_formation_relationship.relating_product_definition_formation;
  individual_product : product_definition_formation := SELF\product_definition_formation_relationship.related_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_identification
  SUBTYPE OF (configuration_item, characterized_object);
  SELF\configuration_item.item_concept : product_class;
WHERE
  WR1: SIZEOF(QUERY(cd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.CONFIGURATION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN TYPEOF(cd.design)) AND (SIZEOF(QUERY(prpc <* USEDIN(cd.design\product_definition_formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name IN ['part','raw material','tool'])) > 0))) <= 1;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURABLE_ITEM' IN TYPEOF(SELF)) XOR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_SPECIFICATION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY product_in_attachment_slot
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY product_material_composition_relationship
  SUBTYPE OF (product_definition_relationship);
  class : label;
  constituent_amount : SET[1:?] OF characterized_product_composition_value;
  composition_basis : label;
  determination_method : text;
END_ENTITY;

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

ENTITY product_process_plan
  SUBTYPE OF (product_definition_process);
WHERE
  WR1: SIZEOF(QUERY(ar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION') | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] * TYPEOF(ar.relating_action)) <> 1)) = 0;
  WR2: SIZEOF(QUERY(ar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION') | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] * TYPEOF(ar.related_action)) = 1) OR ((ar.name = 'process operation occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_OPERATION' IN TYPEOF(ar.related_action.chosen_method))))) = SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION'));
  WR3: SIZEOF(QUERY(ppa <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PRODUCT_ASSOCIATION.PROCESS') | (ppa.name <> 'produced output') OR NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(ppa.defined_product)))) = 0;
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 product_resource
  SUBTYPE OF (action_resource, product);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) > 0;
  WR2: SIZEOF(QUERY(prpc <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'part')) <> 0;
  WR3: SELF\action_resource.name = SELF\product.name;
  WR4: SELF\action_resource.description = SELF\product.description;
END_ENTITY;

ENTITY product_specification
  SUBTYPE OF (product_identification, configurable_item);
END_ENTITY;

ENTITY profile_floor
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['planar','complex','through'];
  WR3: (NOT (SELF.description IN ['planar','complex']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0));
  WR4: (NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND (SIZEOF(impl_rep.used_representation.items) <= 2))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'through') OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 0))) = 0));
  WR6: (NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR7: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'profile floor usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTSIDE_PROFILE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROFILE_FLOOR' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1;
  WR8: ((NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'shape profile floor orientation') AND (it.description IN ['shape profile start','shape profile end'])))) = 1)))) = 0)))) = 0));
  WR9: (NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor'))) = 1))) = 1);
  WR10: (NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor'))) = 1))) = 1);
END_ENTITY;

ENTITY projected_zone_definition
  SUBTYPE OF (tolerance_zone_definition);
  projection_end : shape_aspect;
  projected_length : length_measure_with_unit;
WHERE
  WR1: ('NUMBER' IN TYPEOF(projected_length\measure_with_unit.value_component)) AND (projected_length\measure_with_unit.value_component > 0.0);
  WR2: (derive_dimensional_exponents(projected_length\measure_with_unit.unit_component) = dimensional_exponents(1, 0, 0, 0, 0, 0, 0));
END_ENTITY;

ENTITY projected_zone_definition_with_offset
  SUBTYPE OF (projected_zone_definition);
  offset : length_measure_with_unit;
END_ENTITY;

ENTITY projection_curve
  SUBTYPE OF (annotation_curve_occurrence);
END_ENTITY;

ENTITY projection_directed_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(QUERY(p_1 <* SELF\draughting_callout.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(p_1)))) <= 2;
  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
END_ENTITY;

ENTITY promissory_usage_occurrence
  SUBTYPE OF (assembly_component_usage);
END_ENTITY;

ENTITY property_definition
  SUPERTYPE OF (ONEOF (product_definition_kinematics,
                       product_definition_relationship_kinematics,
                       product_definition_shape));
  name : label;
  description : OPTIONAL text;
  definition : characterized_definition;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY property_definition_relationship;
  name : label;
  description : text;
  relating_property_definition : property_definition;
  related_property_definition : property_definition;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY property_process
  SUBTYPE OF (action);
  identification : identifier;
INVERSE
  properties : SET[1:?] OF process_property_association FOR process;
END_ENTITY;

ENTITY protrusion
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'shape volume occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'volume shape usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (sdr.relating_shape_aspect.description = 'volume shape'))) = 1)))) = 1)))) = 0);
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY pyramid_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
  height : positive_length_measure;
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_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_qualification_type : qualification_type;
  related_qualification_type : qualification_type;
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 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATHS_VALUE_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 quantifier_expression
  ABSTRACT SUPERTYPE
  SUBTYPE OF (multiple_arity_generic_expression);
  variables : LIST[1:?] OF UNIQUE generic_variable;
WHERE
  WR1: SIZEOF(QUERY(vrbl <* variables | NOT (vrbl IN SELF\multiple_arity_generic_expression.operands))) = 0;
  WR2: SIZEOF(QUERY(vrbl <* variables | NOT ((schema_prefix + 'BOUND_VARIABLE_SEMANTICS') IN TYPEOF(vrbl.interpretation.semantics)))) = 0;
END_ENTITY;

ENTITY quasi_uniform_curve
  SUBTYPE OF (b_spline_curve);
END_ENTITY;

ENTITY quasi_uniform_surface
  SUBTYPE OF (b_spline_surface);
END_ENTITY;

ENTITY quasi_uniform_volume
  SUBTYPE OF (b_spline_volume);
END_ENTITY;

ENTITY rack_and_pinion_pair
  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
  pinion_radius : length_measure;
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY rack_and_pinion_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : rack_and_pinion_pair;
  actual_displacement : length_measure;
DERIVE
  actual_rotation : plane_angle_measure := 0.0;
END_ENTITY;

ENTITY rack_and_pinion_pair_with_range
  SUBTYPE OF (rack_and_pinion_pair);
  lower_limit_rack_displacement : OPTIONAL length_measure;
  upper_limit_rack_displacement : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_rack_displacement) OR NOT EXISTS(upper_limit_rack_displacement)) XOR (lower_limit_rack_displacement < upper_limit_rack_displacement);
END_ENTITY;

ENTITY radioactivity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.becquerel);
END_ENTITY;

ENTITY radius_dimension
  SUBTYPE OF (dimension_curve_directed_callout);
WHERE
  WR1: SIZEOF(QUERY(con <* SELF.contents | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN TYPEOF(con))) <= 1;
END_ENTITY;

ENTITY radius_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF radial_geometry_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY range_characteristic
  SUBTYPE OF (representation, descriptive_representation_item);
WHERE
  WR1: NOT (SELF\representation.name IN ['tolerance', 'minimum tolerance', 'maximum tolerance', 'nominal tolerance', 'plus minus tolerance', 'symmetrical tolerance', 'statistical tolerance']);
END_ENTITY;

ENTITY ratio_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY rational_b_spline_curve
  SUBTYPE OF (b_spline_curve);
  weights_data : LIST[2:?] OF REAL;
DERIVE
  weights : ARRAY[0:upper_index_on_control_points] OF REAL := list_to_array(weights_data, 0, upper_index_on_control_points);
WHERE
  WR1: SIZEOF(weights_data) = SIZEOF(SELF\b_spline_curve.control_points_list);
  WR2: curve_weights_positive(SELF);
END_ENTITY;

ENTITY rational_b_spline_surface
  SUBTYPE OF (b_spline_surface);
  weights_data : LIST[2:?] OF LIST[2:?] OF REAL;
DERIVE
  weights : ARRAY[0:u_upper] OF ARRAY[0:v_upper] OF REAL := make_array_of_array(weights_data, 0, u_upper, 0, v_upper);
WHERE
  WR1: (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_surface.control_points_list)) AND (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_surface.control_points_list[1]));
  WR2: surface_weights_positive(SELF);
END_ENTITY;

ENTITY rational_b_spline_volume
  SUBTYPE OF (b_spline_volume);
  weights_data : LIST[2:?] OF LIST[2:?] OF LIST[2:?] OF REAL;
DERIVE
  weights : ARRAY[0:u_upper] OF ARRAY[0:v_upper] OF ARRAY[0:w_upper] OF REAL := make_array_of_array_of_array(weights_data, 0, u_upper, 0, v_upper, 0, w_upper);
WHERE
  WR1: (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_volume.control_points_list)) AND (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1])) AND (SIZEOF(weights_data[1][1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1][1]));
  WR2: volume_weights_positive(SELF);
END_ENTITY;

ENTITY rational_locally_refined_spline_curve
  SUBTYPE OF (locally_refined_spline_curve);
  weights_data : LIST[2:?] OF REAL;
WHERE
  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_curve.control_points_list);
  WR2: weights_positive(weights_data);
END_ENTITY;

ENTITY rational_locally_refined_spline_surface
  SUBTYPE OF (locally_refined_spline_surface);
  weights_data : LIST[4:?] OF REAL;
WHERE
  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_surface.control_points_list);
  WR2: weights_positive(weights_data);
END_ENTITY;

ENTITY rational_locally_refined_spline_volume
  SUBTYPE OF (locally_refined_spline_volume);
  weights_data : LIST[8:?] OF REAL;
WHERE
  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_volume.control_points_list);
  WR2: weights_positive(weights_data);
END_ENTITY;

ENTITY rational_representation_item
  SUBTYPE OF (representation_item, slash_expression);
WHERE
  WR1: SIZEOF(QUERY(operand <* SELF\binary_generic_expression.operands | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_LITERAL' IN TYPEOF(operand)))) = 0;
END_ENTITY;

ENTITY rationalize_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
DERIVE
  fun : maths_function := SELF\unary_generic_expression.operand;
WHERE
  WR1: (space_dimension(fun.domain) = 1) AND (space_dimension(fun.range) = 1);
  WR2: number_tuple_subspace_check(factor1(fun.range));
  WR3: space_dimension(factor1(fun.range)) > 1;
END_ENTITY;

ENTITY real_defined_function
  ABSTRACT SUPERTYPE
  SUBTYPE OF (numeric_defined_function);
END_ENTITY;

ENTITY real_interval_from_min
  SUBTYPE OF (maths_space, generic_literal);
  min : REAL;
  min_closure : open_closed;
END_ENTITY;

ENTITY real_interval_to_max
  SUBTYPE OF (maths_space, generic_literal);
  max : REAL;
  max_closure : open_closed;
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 real_representation_item
  SUBTYPE OF (representation_item, real_literal);
END_ENTITY;

ENTITY real_tuple_literal
  SUBTYPE OF (generic_literal);
  lit_value : LIST[1:?] OF REAL;
END_ENTITY;

ENTITY rectangular_area
  SUBTYPE OF (primitive_2d);
  position : axis2_placement_2d;
  x : positive_length_measure;
  y : positive_length_measure;
END_ENTITY;

ENTITY rectangular_array_placement_group_component
  SUBTYPE OF (array_placement_group);
END_ENTITY;

ENTITY rectangular_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 4)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'length') OR (srwp_i.name = 'width') OR (srwp_i.name = 'corner radius'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length'))) = 1))) = 0))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'corner radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY rectangular_composite_surface
  SUBTYPE OF (bounded_surface);
  segments : LIST[1:?] OF LIST[1:?] OF surface_patch;
DERIVE
  n_u : INTEGER := SIZEOF(segments);
  n_v : INTEGER := SIZEOF(segments[1]);
WHERE
  WR1: SIZEOF(QUERY(s <* segments | n_v <> SIZEOF(s))) = 0;
  WR2: constraints_rectangular_composite_surface(SELF);
END_ENTITY;

ENTITY rectangular_composite_surface_transition_locator
  SUBTYPE OF (founded_item);
  basis_surface : rectangular_composite_surface;
  surface_parameter : u_or_v_parameter;
  u_transition_index : INTEGER;
  v_transition_index : INTEGER;
WHERE
  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
END_ENTITY;

ENTITY rectangular_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.related_shape_aspect)))) = 1)))) <= 5)))) = 0);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'row layout direction')))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'column layout direction')))) = 1)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 5)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of rows')))) = 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of columns')))) = 1)))) = 0)))) = 0);
  WR8: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'row spacing')))) = 1)))) = 0)))) = 0);
  WR9: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'column spacing')))) = 1)))) = 0)))) = 0);
  WR10: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY rectangular_pyramid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
  height : positive_length_measure;
END_ENTITY;

ENTITY rectangular_trimmed_surface
  SUBTYPE OF (bounded_surface);
  basis_surface : surface;
  u1 : parameter_value;
  u2 : parameter_value;
  v1 : parameter_value;
  v2 : parameter_value;
  usense : BOOLEAN;
  vsense : BOOLEAN;
WHERE
  WR1: u1 <> u2;
  WR2: v1 <> v2;
  WR3: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(basis_surface)) AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(basis_surface)))) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_REVOLUTION' IN TYPEOF(basis_surface)) OR (usense = (u2 > u1));
  WR4: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE' IN TYPEOF(basis_surface)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOROIDAL_SURFACE' IN TYPEOF(basis_surface))) OR (vsense = (v2 > v1));
END_ENTITY;

ENTITY referenced_modified_datum
  SUBTYPE OF (datum_reference);
  modifier : limit_condition;
END_ENTITY;

ENTITY regular_table_function
  SUBTYPE OF (linearized_table_function);
  increments : LIST[1:?] OF INTEGER;
WHERE
  WR1: SIZEOF(increments) = SIZEOF(SELF\explicit_table_function.shape);
  WR2: extremal_position_check(SELF);
END_ENTITY;

ENTITY reindexed_array_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  starting_indices : LIST[1:?] OF INTEGER;
WHERE
  WR1: function_is_array(SELF\unary_generic_expression.operand);
  WR2: SIZEOF(starting_indices) = SIZEOF(shape_of_array(SELF\unary_generic_expression.operand));
END_ENTITY;

ENTITY reinforcement_orientation_basis
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:1] OF basis_11_direction_member;
END_ENTITY;

ENTITY related_consequence
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : risk_perception;
  SELF\product_definition_relationship.related_product_definition : risk_consequence;
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 removal_volume
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'shape volume occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'volume shape usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (sdr.relating_shape_aspect.description = 'volume shape'))) = 1)))) = 1)))) = 0);
END_ENTITY;

ENTITY rep_item_group
  SUBTYPE OF (group, representation_item);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT.ASSIGNED_ITEMS')) > 0;
  WR2: SIZEOF(QUERY(r <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS') | r.name = 'group representation')) > 0;
  WR3: SIZEOF(QUERY(ga <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP_ASSIGNMENT.ASSIGNED_GROUP') | ga.role.name <> 'group membership')) = 0;
  WR4: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOPOLOGICAL_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM'] * TYPEOF(SELF)) = 1;
END_ENTITY;

ENTITY repackaging_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_function;
  input_repack : repackage_options;
  output_repack : repackage_options;
  selected_output : nonnegative_integer;
WHERE
  WR1: (input_repack <> ro_wrap_as_tuple) OR ((space_dimension(operand.domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(operand.domain))));
  WR2: (output_repack <> ro_unwrap_tuple) OR ((space_dimension(operand.range) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(operand.range))));
  WR3: selected_output <= space_dimension(repackage(operand.range, output_repack));
END_ENTITY;

ENTITY reparametrised_composite_curve_segment
  SUBTYPE OF (composite_curve_segment);
  param_length : parameter_value;
WHERE
  WR1: param_length > 0.0;
END_ENTITY;

ENTITY replicate_feature
  SUPERTYPE OF (ONEOF (circular_pattern,
                       rectangular_pattern,
                       feature_pattern))
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR2: (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE'] * TYPEOF(fcr.related_shape_aspect)) >= 1) AND (fcr.name = 'pattern basis')))) = 1);
  WR3: ((SIZEOF(QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))))) + SIZEOF(QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))))) = 0);
END_ENTITY;

ENTITY repositioned_neutral_sketch
  SUBTYPE OF (mapped_item, geometric_representation_item);
DERIVE
  map : representation_map := SELF\mapped_item.mapping_source;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION' IN TYPEOF(map.mapped_representation);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(map.mapping_origin);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\mapped_item.mapping_target);
END_ENTITY;

ENTITY repositioned_tessellated_item
  SUBTYPE OF (tessellated_item);
  location : axis2_placement_3d;
WHERE
  WR1: NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CURVE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_GEOMETRIC_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_POINT_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SURFACE_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_WIRE'] * TYPEOF(SELF)) = 0);
END_ENTITY;

ENTITY representation
  SUPERTYPE OF (ONEOF (reinforcement_orientation_basis,
                       ply_angle_representation)
               ANDOR ONEOF (kinematic_topology_structure,
                    kinematic_topology_directed_structure,
                    kinematic_topology_network_structure)
             ANDOR ONEOF (interpolated_configuration_representation,
                  link_motion_representation_along_path)
           ANDOR ONEOF (kinematic_link_representation,
                kinematic_topology_structure,
                kinematic_topology_directed_structure,
                kinematic_topology_network_structure,
                mechanism_representation,
                shape_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_context_reference;
  context_identifier : identifier;
INVERSE
  representations_in_context : SET[1:?] OF representation_reference FOR context_of_items;
END_ENTITY;

ENTITY representation_item
  SUPERTYPE OF ((ONEOF (boolean_representation_item,
                        date_representation_item,
                        date_time_representation_item,
                        integer_representation_item,
                        logical_representation_item,
                        rational_representation_item,
                        real_representation_item))
               ANDOR ONEOF (binary_representation_item,
                    compound_representation_item,
                    mapped_item,
                    value_representation_item)
             ANDOR ONEOF (mapped_item,
                  styled_item));
  name : label;
WHERE
  WR1: SIZEOF(using_representations(SELF)) > 0;
END_ENTITY;

ENTITY representation_item_relationship;
  name : label;
  description : OPTIONAL text;
  relating_representation_item : representation_item;
  related_representation_item : representation_item;
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(mapping_origin, mapped_representation\representation.context_of_items);
END_ENTITY;

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

ENTITY representation_reference;
  id : identifier;
  context_of_items : representation_context_reference;
END_ENTITY;

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

ENTITY representation_relationship_with_transformation
  SUPERTYPE OF (ONEOF (topology_to_geometry_model_association,
                       geometry_to_topology_model_association))
  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;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION' IN TYPEOF(transformation_operator)) OR (SELF\representation_relationship.rep_1 IN using_representations(transformation_operator\item_defined_transformation.transform_item_1)) AND (SELF\representation_relationship.rep_2 IN using_representations(transformation_operator\item_defined_transformation.transform_item_2));
END_ENTITY;

ENTITY representative_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: unique_in_product_definition(SELF) OR unique_in_shape_aspect(SELF);
END_ENTITY;

ENTITY representative_triangle
  SUBTYPE OF (triangulated_face_element);
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: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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(si_unit_name.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 restriction_function
  SUBTYPE OF (maths_function, unary_generic_expression);
  SELF\unary_generic_expression.operand : maths_space;
END_ENTITY;

ENTITY resulting_path
  SUBTYPE OF (link_motion_representation_along_path);
  controlling_joints : SET[1:?] OF kinematic_joint;
END_ENTITY;

ENTITY retention
  SUBTYPE OF (action);
WHERE
  WR1: SIZEOF(QUERY(aa <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_ASSIGNMENT.ASSIGNED_ACTION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(aa)) AND (aa.role.name = 'retention'))) >= 1;
  WR2: (SIZEOF(QUERY(atia <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS') | (atia.role.name = 'minimum retention period'))) = 1) AND (SIZEOF(QUERY(atia <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS') | (atia.role.name = 'maximum retention period'))) = 1) AND (SIZEOF(QUERY(atia1 <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS') | (atia1.role.name = 'minimum retention period') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_INTERVAL_WITH_BOUNDS' IN TYPEOF(atia1.assigned_time_interval)) AND (EXISTS(atia1.assigned_time_interval\time_interval_with_bounds.secondary_bound) OR EXISTS(atia1.assigned_time_interval\time_interval_with_bounds.duration)) AND (SIZEOF(QUERY(atia2 <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS') | (atia2.role.name = 'maximum retention period') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_INTERVAL_WITH_BOUNDS' IN TYPEOF(atia2.assigned_time_interval)) AND (EXISTS(atia2.assigned_time_interval\time_interval_with_bounds.secondary_bound) OR EXISTS(atia2.assigned_time_interval\time_interval_with_bounds.duration)) AND (atia1.assigned_time_interval\time_interval_with_bounds.primary_bound :=: atia2.assigned_time_interval\time_interval_with_bounds.primary_bound))) = 1))) = 1);
  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION')) + SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION')) = 0;
END_ENTITY;

ENTITY revolute_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY revolute_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : revolute_pair;
  actual_rotation : plane_angle_measure;
END_ENTITY;

ENTITY revolute_pair_with_range
  SUBTYPE OF (revolute_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY revolved_area_solid
  SUBTYPE OF (swept_area_solid);
  axis : axis1_placement;
  angle : plane_angle_measure;
DERIVE
  axis_line : line := representation_item('') || geometric_representation_item() || curve() || line(axis.location, representation_item('') || geometric_representation_item() || vector(axis.z, 1.0));
END_ENTITY;

ENTITY revolved_face_solid
  SUBTYPE OF (swept_face_solid);
  axis : axis1_placement;
  angle : plane_angle_measure;
DERIVE
  axis_line : line := representation_item('') || geometric_representation_item() || curve() || line(axis.location, representation_item('') || geometric_representation_item() || vector(axis.z, 1.0));
END_ENTITY;

ENTITY revolved_face_solid_with_trim_conditions
  SUBTYPE OF (revolved_face_solid);
  first_trim_condition : trim_condition_select;
  second_trim_condition : trim_condition_select;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition)));
  WR2: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(first_trim_condition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(second_trim_condition))) AND (first_trim_condition = second_trim_condition));
END_ENTITY;

ENTITY revolved_profile
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['groove','flat','round','open profile']);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction'))) = 1;
  WR5: ((NOT (SELF\characterized_object.description = 'open profile')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'outer edge shape occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'outer edge shape')))) = 1)))) = 1)))) = 0));
  WR6: (NOT (SELF\characterized_object.description = 'flat')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'flat edge shape occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'flat edge shape')))) = 1)))) = 1)))) = 0);
  WR7: ((NOT (SELF\characterized_object.description = 'round')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'rounded edge shape occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'rounded edge shape')))) = 1)))) = 1)))) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'groove')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'sweep occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'sweep')))) = 1)))) = 1)))) = 0));
  WR9: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY rgc_with_dimension
  SUBTYPE OF (radius_geometric_constraint);
  radius_value : positive_length_measure;
END_ENTITY;

ENTITY rib_top
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'rib top condition occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'rib top usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP_FLOOR' IN TYPEOF(sdr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) = 1))) = 1))) = 0;
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction'))) = 1))) = 1;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY rib_top_floor
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['planar','complex'];
  WR3: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'rib top usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | ((fcr.related_shape_aspect.description = 'rib top condition occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP_FLOOR' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1;
  WR4: (NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'rib top face'))) = 1))) = 0);
  WR5: (NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'rib top face'))) = 1))) = 0);
  WR6: (NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'rib top floor boundary'))) = 1))) = 1))) = 0);
END_ENTITY;

ENTITY right_angular_wedge
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
  ltx : length_measure;
WHERE
  WR1: ((0.0 <= ltx) AND (ltx < x));
END_ENTITY;

ENTITY right_circular_cone
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  height : positive_length_measure;
  radius : length_measure;
  semi_angle : plane_angle_measure;
WHERE
  WR1: radius >= 0.0;
END_ENTITY;

ENTITY right_circular_cylinder
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  height : positive_length_measure;
  radius : positive_length_measure;
END_ENTITY;

ENTITY rigid_link_representation
  SUBTYPE OF (kinematic_link_representation);
END_ENTITY;

ENTITY rigid_subsketch
  SUBTYPE OF (subsketch);
END_ENTITY;

ENTITY risk
  SUBTYPE OF (product);
END_ENTITY;

ENTITY risk_acceptance
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_activity_structure
  SUBTYPE OF (action_relationship);
  SELF\action_relationship.relating_action : risk_action;
  SELF\action_relationship.related_action : risk_action;
DERIVE
  child : risk_action := SELF\action_relationship.related_action;
  parent : risk_action := SELF\action_relationship.relating_action;
END_ENTITY;

ENTITY risk_analysis
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_assessment
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_attitude
  SUBTYPE OF (property_definition_representation);
  SELF\property_definition_representation.definition : risk_level;
DERIVE
  criticality_factor : representation := SELF\property_definition_representation.used_representation;
END_ENTITY;

ENTITY risk_communication
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_consequence
  SUBTYPE OF (product_definition);
  SELF\product_definition.formation : risk_perception_formation;
END_ENTITY;

ENTITY risk_control
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_estimation
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_evaluation
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_event
  SUBTYPE OF (applied_action_method_assignment);
  SELF\applied_action_method_assignment.items : SET[1:1] OF risk_perception;
WHERE
  WR1: SELF\action_method_assignment.role.name = 'risk of event';
END_ENTITY;

ENTITY risk_identification
  SUBTYPE OF (action);
END_ENTITY;

ENTITY risk_impact_assignment;
  assigned_risk_consequence : risk_consequence;
  items : SET[1:?] OF risk_impact_item;
END_ENTITY;

ENTITY risk_level
  SUBTYPE OF (property_definition);
  SELF\property_definition.definition : risk_perception_characterized_object;
END_ENTITY;

ENTITY risk_measure
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY risk_perception
  SUBTYPE OF (product_definition);
  SELF\product_definition.formation : risk_perception_formation;
  SELF\product_definition.frame_of_reference : risk_perception_context;
DERIVE
  risk_perception_context : risk_perception_context := SELF\product_definition.frame_of_reference;
END_ENTITY;

ENTITY risk_perception_characterized_object
  SUBTYPE OF (characterized_object, risk_perception);
END_ENTITY;

ENTITY risk_perception_context
  SUBTYPE OF (product_definition_context);
END_ENTITY;

ENTITY risk_perception_formation
  SUBTYPE OF (product_definition_formation);
  SELF\product_definition_formation.of_product : risk;
DERIVE
  of_risk : risk := SELF\product_definition_formation.of_product;
END_ENTITY;

ENTITY risk_perception_relationship
  SUBTYPE OF (product_definition_relationship);
  SELF\product_definition_relationship.relating_product_definition : risk_perception;
  SELF\product_definition_relationship.related_product_definition : risk_perception;
END_ENTITY;

ENTITY risk_perception_source_assignment;
  assigned_risk : risk_perception;
  items : SET[1:?] OF risk_perception_source_item;
END_ENTITY;

ENTITY risk_relationship
  SUBTYPE OF (product_relationship);
  SELF\product_relationship.relating_product : risk;
  SELF\product_relationship.related_product : risk;
DERIVE
  related_risk : risk := SELF\product_relationship.related_product;
  relating_risk : risk := SELF\product_relationship.relating_product;
END_ENTITY;

ENTITY risk_treatment
  SUBTYPE OF (action);
  SELF\action.chosen_method : risk_measure;
END_ENTITY;

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

ENTITY rolling_curve_pair
  SUBTYPE OF (planar_curve_pair);
END_ENTITY;

ENTITY rolling_curve_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : rolling_curve_pair;
  actual_point_on_curve_1 : point_on_curve;
WHERE
  WR1: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_1 :=: actual_point_on_curve_1.basis_curve;
END_ENTITY;

ENTITY rolling_surface_pair
  SUBTYPE OF (surface_pair);
END_ENTITY;

ENTITY rolling_surface_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : rolling_surface_pair;
  actual_point_on_surface : point_on_surface;
  actual_rotation : plane_angle_measure;
WHERE
  WR1: SELF\pair_value.applies_to_pair\surface_pair.surface_1 :=: actual_point_on_surface.basis_surface;
END_ENTITY;

ENTITY rotation_about_direction
  SUBTYPE OF (geometric_representation_item);
  direction_of_axis : direction;
  rotation_angle : plane_angle_measure;
WHERE
  WR1: SIZEOF(direction_of_axis.direction_ratios) = 3;
END_ENTITY;

ENTITY round_hole
  SUPERTYPE OF (ONEOF (basic_round_hole,
                       explicit_round_hole))
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'diameter occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'diameter')))) = 1)))) = 1)))) = 0);
  WR2: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'hole depth occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'hole depth') AND (sdr.relating_shape_aspect.description = 'linear')))) = 1)))) = 1)))) = 0);
  WR3: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HOLE_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) = 1)))) = 1)))) = 0);
  WR4: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in diameter occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) = 1)))) <= 1)))) = 0);
  WR5: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)))) = 1);
END_ENTITY;

ENTITY round_hole_bottom_condition;
  target : bottom_condition_target;
  bottom_condition : round_hole_bottom_condition_enum;
  radius : OPTIONAL positive_length_measure_with_unit;
  final_diameter : OPTIONAL positive_length_measure_with_unit;
  taper_angle : OPTIONAL positive_plane_angle_measure_with_unit;
  tip_angle : OPTIONAL positive_plane_angle_measure_with_unit;
  tip_radius : OPTIONAL positive_length_measure_with_unit;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: NOT (bottom_condition = round_hole_bottom_condition_enum.spherical) OR EXISTS(radius);
  WR2: NOT (bottom_condition = round_hole_bottom_condition_enum.flat_with_radius) OR EXISTS(radius);
  WR3: NOT (bottom_condition = round_hole_bottom_condition_enum.flat_with_taper) OR EXISTS(final_diameter);
  WR4: NOT (bottom_condition = round_hole_bottom_condition_enum.flat_with_taper) OR EXISTS(taper_angle);
  WR5: NOT (bottom_condition = round_hole_bottom_condition_enum.flat) OR ((NOT EXISTS(radius)) AND (NOT EXISTS(final_diameter)) AND (NOT EXISTS(taper_angle)) AND (NOT EXISTS(tip_angle)) AND (NOT EXISTS(tip_radius)));
  WR6: NOT (bottom_condition = round_hole_bottom_condition_enum.conical) OR (EXISTS(tip_angle));
END_ENTITY;

ENTITY rounded_end
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial circular boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))))) = 1)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear')))) = 1)))) = 1)))) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
END_ENTITY;

ENTITY rounded_u_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND (SIZEOF(impl_rep.used_representation.items) <= 2)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'depth'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'width')))) = 1)))) = 0)))) = 0);
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY roundness_tolerance
  SUBTYPE OF (geometric_tolerance);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY row_representation_item
  SUBTYPE OF (compound_representation_item);
  SELF\compound_representation_item.item_element : list_representation_item;
END_ENTITY;

ENTITY row_value
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY row_variable
  SUBTYPE OF (abstract_variable);
END_ENTITY;

ENTITY rule_action
  SUBTYPE OF (action);
END_ENTITY;

ENTITY rule_condition
  SUBTYPE OF (atomic_formula);
END_ENTITY;

ENTITY rule_definition
  SUBTYPE OF (rule_software_definition);
END_ENTITY;

ENTITY rule_set
  SUBTYPE OF (rule_software_definition);
END_ENTITY;

ENTITY rule_set_group
  SUBTYPE OF (rule_software_definition);
END_ENTITY;

ENTITY rule_software_definition
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY rule_superseded_assignment
  SUBTYPE OF (action_assignment);
  items : SET[1:?] OF rule_superseded_item;
END_ENTITY;

ENTITY rule_supersedence
  SUBTYPE OF (rule_action);
END_ENTITY;

ENTITY ruled_surface_swept_area_solid
  SUBTYPE OF (surface_curve_swept_area_solid);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(SELF.reference_surface)) AND (SELF.reference_surface\b_spline_surface.u_degree = 1);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF.directrix)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(SELF.directrix\surface_curve.curve_3d)) AND (SELF.directrix\surface_curve.curve_3d\b_spline_curve.degree = SELF.reference_surface\b_spline_surface.v_degree));
END_ENTITY;

ENTITY runout_zone_definition
  SUBTYPE OF (tolerance_zone_definition);
  orientation : runout_zone_orientation;
END_ENTITY;

ENTITY runout_zone_orientation;
  angle : plane_angle_measure_with_unit;
END_ENTITY;

ENTITY runout_zone_orientation_reference_direction
  SUBTYPE OF (runout_zone_orientation);
  orientation_defining_relationship : shape_aspect_relationship;
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 scalar_variable
  SUBTYPE OF (abstract_variable);
END_ENTITY;

ENTITY scan_3d_model
  SUBTYPE OF (scanned_data_item);
  scanner_info : SET[1:?] OF scanner_property;
  scanned_points : SET[1:?] OF scanned_data_item;
WHERE
  WR1: SIZEOF(QUERY(tmp <* scanned_points | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SCAN_3D_MODEL' IN TYPEOF(tmp))) = 0;
END_ENTITY;

ENTITY scan_data_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF scanned_data_item;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(SELF\representation.context_of_items);
END_ENTITY;

ENTITY scanned_data_item
  SUPERTYPE OF (ONEOF (point_cloud_dataset,
                       point_cloud_superdataset,
                       triangulated_point_cloud_dataset,
                       scan_3d_model))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SIZEOF(QUERY(using_rep <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SCAN_DATA_SHAPE_REPRESENTATION' IN TYPEOF(using_rep)))) = 0;
END_ENTITY;

ENTITY scanner_basic_properties
  SUBTYPE OF (scanner_property);
  scanner_identification : label;
  scanner_location : axis2_placement_3d;
  scanner_uncertainty : OPTIONAL positive_length_measure;
END_ENTITY;

ENTITY scanner_property
  ABSTRACT SUPERTYPE
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY screw_pair
  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
  pitch : length_measure;
WHERE
  WR1: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY screw_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : screw_pair;
  actual_rotation : plane_angle_measure;
DERIVE
  actual_translation : length_measure := SELF\pair_value.applies_to_pair\screw_pair.pitch * plane_angle_for_pair_in_radian(SELF\pair_value.applies_to_pair, actual_rotation) / (2 * PI);
END_ENTITY;

ENTITY screw_pair_with_range
  SUBTYPE OF (screw_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY sculptured_solid
  SUBTYPE OF (modified_solid);
  sculpturing_element : generalized_surface_select;
  positive_side : BOOLEAN;
END_ENTITY;

ENTITY sdgc_with_dimension
  SUBTYPE OF (surface_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

ENTITY seam_curve
  SUBTYPE OF (surface_curve);
WHERE
  WR1: SIZEOF(SELF\surface_curve.associated_geometry) = 2;
  WR2: associated_surface(SELF\surface_curve.associated_geometry[1]) = associated_surface(SELF\surface_curve.associated_geometry[2]);
  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[1]);
  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[2]);
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;

ENTITY security_classification_level;
  name : label;
END_ENTITY;

ENTITY selector_function
  SUBTYPE OF (maths_function, generic_literal);
  selector : input_selector;
  source_of_domain : maths_space_or_function;
WHERE
  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
  WR2: expression_is_constant(domain_from(source_of_domain));
END_ENTITY;

ENTITY self_intersecting_curve
  SUBTYPE OF (self_intersecting_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  arc_length_separation_factor : REAL;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY self_intersecting_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (self_intersecting_curve,
                                self_intersecting_surface))
  SUBTYPE OF (inapt_geometry);
END_ENTITY;

ENTITY self_intersecting_loop
  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  arc_length_distance_factor : REAL;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY self_intersecting_shell
  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  geodesic_separation_factor : REAL;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY self_intersecting_surface
  SUBTYPE OF (self_intersecting_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
  geodesic_separation_factor : REAL;
  interference_tolerance : length_measure;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY self_intersecting_triangulated_face
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangulated_face];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_representative_triangle];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY self_intersecting_triangulated_shell_or_solid
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell,tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_triangulated_face];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_self_intersecting_triangulated_shell_or_solid FOR criterion_to_assign_the_value;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
  WR2: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY semantic_pmi_without_presentation
  SUBTYPE OF (inapt_pmi_representation);
DERIVE
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[5:5] OF pmidq_inspected_element_type_name := [pmidqi_datum,pmidqi_datum_target,pmidqi_dimensional_location,pmidqi_dimensional_size,pmidqi_geometric_tolerance];
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 series_composed_function
  SUBTYPE OF (maths_function, multiple_arity_generic_expression);
  SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF maths_function;
WHERE
  WR1: composable_sequence(SELF\multiple_arity_generic_expression.operands);
END_ENTITY;

ENTITY shape_aspect
  SUPERTYPE OF (ONEOF (harness_node,
                       harness_segment)
               ANDOR ONEOF (assembly_shape_constraint,
                    assembly_shape_joint,
                    connectivity_definition,
                    contact_feature,
                    transport_feature)
             ANDOR ONEOF (contacting_feature,
                  datum,
                  datum_feature,
                  datum_target,
                  datum_system,
                  general_datum_reference)
           ANDOR ONEOF (shape_aspect_occurrence,
                component_path_shape_aspect)
         ANDOR constituent_shape_aspect);
  name : label;
  description : OPTIONAL text;
  of_shape : product_definition_shape;
  product_definitional : LOGICAL;
DERIVE
  id : identifier := get_id_value(SELF);
UNIQUE
  UR1: id, of_shape;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY shape_aspect_associativity
  SUBTYPE OF (shape_aspect_relationship);
WHERE
  WR1: SELF.relating_shape_aspect.product_definitional;
  WR2: NOT (SELF.related_shape_aspect.product_definitional);
END_ENTITY;

ENTITY shape_aspect_deriving_relationship
  SUBTYPE OF (shape_aspect_relationship);
  SELF\shape_aspect_relationship.relating_shape_aspect : derived_shape_aspect;
END_ENTITY;

ENTITY shape_aspect_occurrence
  SUBTYPE OF (shape_aspect);
  definition : shape_aspect_or_characterized_object;
WHERE
  WR1: acyclic_shape_aspect_occurrence(SELF, definition);
END_ENTITY;

ENTITY shape_aspect_relationship
  SUPERTYPE OF (ONEOF (assembly_shape_joint_item_relationship,
                       assembly_shape_constraint_item_relationship,
                       connectivity_definition_item_relationship,
                       shape_feature_fit_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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY shape_aspect_relationship_representation_association;
  represented_shape_aspect_relationship : shape_aspect_relationship;
  representing_representation_relationship : representation_relationship;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN TYPEOF(representing_representation_relationship\representation_relationship.rep_1)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN TYPEOF(representing_representation_relationship\representation_relationship.rep_2));
  WR2: (represented_shape_aspect_relationship.relating_shape_aspect IN using_shape_aspect_of_shape_representation(representing_representation_relationship.rep_1)) AND (represented_shape_aspect_relationship.related_shape_aspect IN using_shape_aspect_of_shape_representation(representing_representation_relationship.rep_2));
  WR3: ((find_representative_shape_representation_of_product_definition(using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect)).context_of_items) :=: (find_representative_shape_representation_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect).context_of_items)) AND ((find_representative_shape_representation_of_product_definition(using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect)).context_of_items) :=: (find_representative_shape_representation_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect).context_of_items));
  WR4: using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect) :<>: using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect);
  WR5: find_assembly_root([using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect)]) :=: find_assembly_root([using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect)]);
END_ENTITY;

ENTITY shape_criteria_representation_with_accuracy
  SUBTYPE OF (shape_data_quality_criteria_representation);
  required_general_accuracy : SET[1:?] OF shape_measurement_accuracy;
END_ENTITY;

ENTITY shape_data_quality_assessment_by_logical_test
  SUBTYPE OF (data_quality_assessment_specification);
END_ENTITY;

ENTITY shape_data_quality_assessment_by_numerical_test
  SUBTYPE OF (data_quality_assessment_specification);
  threshold : shape_data_quality_value_limit_type_select;
END_ENTITY;

ENTITY shape_data_quality_criteria_representation
  SUBTYPE OF (data_quality_criteria_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_CRITERION' IN TYPEOF(q))) > 0;
END_ENTITY;

ENTITY shape_data_quality_criterion
  SUPERTYPE OF (ONEOF (erroneous_data,
                       inapt_data))
  SUBTYPE OF (data_quality_criterion, data_quality_measurement_requirement);
  assessment_specification : shape_data_quality_assessment_specification_select;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) = 0;
  WR2: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN TYPEOF(i1))) = 0;
  WR3: SIZEOF(QUERY(i1 <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM')) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN TYPEOF(i1))) = 0;
END_ENTITY;

ENTITY shape_data_quality_criterion_and_accuracy_association;
  required_specific_accuracy : shape_measurement_accuracy;
  shape_data_quality_criterion : shape_data_quality_criterion;
END_ENTITY;

ENTITY shape_data_quality_inspected_shape_and_result_relationship
  SUBTYPE OF (shape_representation_relationship);
  SELF\representation_relationship.rep_1 : shape_representation;
  SELF\representation_relationship.rep_2 : shape_data_quality_inspection_result_representation;
WHERE
  WR1: SIZEOF(using_product_definition_of_shape_representation(SELF.rep_1) * bag_to_set(inspected_product_definition(SELF.rep_2))) > 0;
  WR2: SELF.rep_1\representation.context_of_items :=: SELF.rep_2\representation.context_of_items;
END_ENTITY;

ENTITY shape_data_quality_inspection_criterion_report
  SUBTYPE OF (data_quality_inspection_criterion_report);
  representative_measured_value : measured_value_select;
END_ENTITY;

ENTITY shape_data_quality_inspection_instance_report
  SUBTYPE OF (data_quality_inspection_instance_report);
  SELF\data_quality_inspection_instance_report.inspected_instances : LIST[1:?] OF shape_data_quality_inspection_instance_report_item;
END_ENTITY;

ENTITY shape_data_quality_inspection_instance_report_item
  SUBTYPE OF (data_quality_inspection_instance_report_item);
  SELF\data_quality_inspection_instance_report_item.inspected_elements : SET[1:?] OF inspected_shape_element_select;
  measured_value : measured_value_select;
END_ENTITY;

ENTITY shape_data_quality_inspection_result
  SUBTYPE OF (data_quality_inspection_result);
  SELF\data_quality_inspection_result.criterion_inspected : shape_data_quality_criterion;
END_ENTITY;

ENTITY shape_data_quality_inspection_result_representation
  SUBTYPE OF (data_quality_inspection_result_representation);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q))) > 0;
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items);
  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTED_SHAPE_AND_RESULT_RELATIONSHIP.REP_2')) > 0;
END_ENTITY;

ENTITY shape_data_quality_lower_value_limit
  SUBTYPE OF (shape_data_quality_value_limit);
WHERE
  WR1: SELF\qualified_representation_item.qualifiers[1].name = 'minimum';
END_ENTITY;

ENTITY shape_data_quality_upper_value_limit
  SUBTYPE OF (shape_data_quality_value_limit);
WHERE
  WR1: SELF\qualified_representation_item.qualifiers[1].name = 'maximum';
END_ENTITY;

ENTITY shape_data_quality_value_limit
  ABSTRACT SUPERTYPE OF (ONEOF (shape_data_quality_upper_value_limit,
                                shape_data_quality_lower_value_limit))
  SUBTYPE OF (measure_representation_item, qualified_representation_item);
END_ENTITY;

ENTITY shape_data_quality_value_range
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SET_REPRESENTATION_ITEM' IN TYPEOF(SELF\compound_representation_item.item_element)) AND ((SIZEOF(SELF\compound_representation_item.item_element) = 2) AND ((SIZEOF(QUERY(i1 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i1)))) = 2) OR (SIZEOF(QUERY(i2 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(i2)))) = 2)));
  WR2: (SIZEOF(QUERY(i <* SELF\compound_representation_item.item_element | (i.name = 'upper limit'))) = 1) AND (SIZEOF(QUERY(i <* SELF\compound_representation_item.item_element | (i.name = 'lower limit'))) = 1);
  WR3: (SIZEOF(QUERY(i1 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i1)) AND (SIZEOF(QUERY(i2 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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) OR (SIZEOF(QUERY(i1 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(i1)) AND (SIZEOF(QUERY(i2 <* SELF\compound_representation_item.item_element | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(i2)) AND (i1 :<>: i2) AND (TYPEOF(i1\value_representation_item.value_component) = TYPEOF(i2\value_representation_item.value_component)))) = 1))) = 2);
END_ENTITY;

ENTITY shape_defining_relationship
  SUBTYPE OF (shape_aspect_relationship);
END_ENTITY;

ENTITY shape_definition_representation
  SUBTYPE OF (property_definition_representation);
  SELF\property_definition_representation.definition : property_definition;
  SELF\property_definition_representation.used_representation : shape_representation;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(definition)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION' IN TYPEOF(definition\property_definition.definition));
END_ENTITY;

ENTITY shape_dimension_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF shape_dimension_representation_item;
END_ENTITY;

ENTITY shape_feature_definition
  SUBTYPE OF (feature_definition);
END_ENTITY;

ENTITY shape_feature_definition_element_relationship
  SUBTYPE OF (shape_aspect_relationship, characterized_object);
DERIVE
  SELF\characterized_object.name : label := SELF\shape_aspect_relationship.name;
  SELF\characterized_object.description : text := SELF\shape_aspect_relationship.description;
END_ENTITY;

ENTITY shape_feature_definition_fit_relationship
  SUBTYPE OF (shape_feature_definition_relationship);
END_ENTITY;

ENTITY shape_feature_definition_relationship
  SUBTYPE OF (characterized_object_relationship, characterized_object);
  SELF\characterized_object_relationship.relating_object : shape_feature_definition;
  SELF\characterized_object_relationship.related_object : shape_feature_definition;
DERIVE
  SELF\characterized_object.name : label := SELF\characterized_object_relationship.name;
  SELF\characterized_object.description : text := SELF\characterized_object_relationship.description;
END_ENTITY;

ENTITY shape_feature_fit_relationship
  SUBTYPE OF (shape_aspect_relationship, characterized_object);
DERIVE
  SELF\characterized_object.name : label := SELF\shape_aspect_relationship.name;
  SELF\characterized_object.description : text := SELF\shape_aspect_relationship.description;
END_ENTITY;

ENTITY shape_inspection_result_accuracy_association;
  applied_specific_accuracy : shape_measurement_accuracy;
  shape_data_quality_result : shape_data_quality_inspection_result;
END_ENTITY;

ENTITY shape_inspection_result_representation_with_accuracy
  SUBTYPE OF (shape_data_quality_inspection_result_representation);
  applied_general_accuracy : SET[1:?] OF shape_measurement_accuracy;
END_ENTITY;

ENTITY shape_measurement_accuracy;
  description : text;
  range : shape_data_quality_value_limit_type_select;
END_ENTITY;

ENTITY shape_representation
  SUBTYPE OF (representation);
END_ENTITY;

ENTITY shape_representation_reference
  SUBTYPE OF (representation_reference);
END_ENTITY;

ENTITY shape_representation_relationship
  SUBTYPE OF (representation_relationship);
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_REFERENCE'] * (TYPEOF(SELF\representation_relationship.rep_1) + TYPEOF(SELF\representation_relationship.rep_2))) >= 1;
END_ENTITY;

ENTITY shape_representation_with_parameters
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF shape_representation_with_parameters_items;
END_ENTITY;

ENTITY shape_summary_request_with_representative_value
  SUBTYPE OF (summary_report_request);
END_ENTITY;

ENTITY sharp_triangle_vertex
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_plane_angle_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_vertex];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY shell_based_surface_model
  SUBTYPE OF (geometric_representation_item);
  sbsm_boundary : SET[1:?] OF shell;
WHERE
  WR1: constraints_geometry_shell_based_surface_model(SELF);
END_ENTITY;

ENTITY shell_based_wireframe_model
  SUBTYPE OF (geometric_representation_item);
  sbwm_boundary : SET[1:?] OF shell;
WHERE
  WR1: constraints_geometry_shell_based_wireframe_model(SELF);
END_ENTITY;

ENTITY shell_based_wireframe_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1))) >= 1;
  WR3: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(eloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(wsb))) | NOT (SIZEOF(QUERY(el <* eloop\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(el.edge_element)))) = 0))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(eloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(wsb))) | NOT (SIZEOF(QUERY(pline_el <* QUERY(el <* eloop\path.edge_list | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(el.edge_element\edge_curve.edge_geometry))) | NOT (SIZEOF(pline_el.edge_element\edge_curve.edge_geometry\polyline.points) > 2))) = 0))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(eloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(wsb))) | NOT (SIZEOF(QUERY(el <* eloop\path.edge_list | NOT valid_wireframe_edge_curve(el.edge_element\edge_curve.edge_geometry))) = 0))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(eloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(wsb))) | NOT (SIZEOF(QUERY(el <* eloop\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(el.edge_element.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(el.edge_element.edge_end))))) = 0))) = 0))) = 0))) = 0;
  WR7: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(eloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(wsb))) | NOT (SIZEOF(QUERY(el <* eloop\path.edge_list | NOT (valid_wireframe_vertex_point(el.edge_element.edge_start\vertex_point.vertex_geometry) AND valid_wireframe_vertex_point(el.edge_element.edge_end\vertex_point.vertex_geometry)))) = 0))) = 0))) = 0))) = 0;
  WR8: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(vloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(wsb))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vloop\vertex_loop.loop_vertex)))) = 0))) = 0))) = 0;
  WR9: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(ws <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(sb))) | NOT (SIZEOF(QUERY(vloop <* QUERY(wsb <* ws\wire_shell.wire_shell_extent | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(wsb))) | NOT valid_wireframe_vertex_point(vloop\vertex_loop.loop_vertex\vertex_point.vertex_geometry))) = 0))) = 0))) = 0;
  WR10: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(vs <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN TYPEOF(sb))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(vs\vertex_shell.vertex_shell_extent.loop_vertex)))) = 0))) = 0;
  WR11: SIZEOF(QUERY(sbwm <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it))) | NOT (SIZEOF(QUERY(vs <* QUERY(sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN TYPEOF(sb))) | NOT valid_wireframe_vertex_point(vs\vertex_shell.vertex_shell_extent.loop_vertex\vertex_point.vertex_geometry))) = 0))) = 0;
  WR12: SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR13: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
END_ENTITY;

ENTITY shelled_solid
  SUPERTYPE OF (ONEOF (double_offset_shelled_solid,
                       complex_shelled_solid))
  SUBTYPE OF (modified_solid);
  deleted_face_set : SET[1:?] OF face_surface;
  thickness : length_measure;
WHERE
  WR1: thickness <> 0;
END_ENTITY;

ENTITY short_height_triangle
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_representative_triangle];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_triangle_vertex];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY short_length_curve
  SUBTYPE OF (nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY short_length_curve_segment
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_SEGMENT']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY short_length_edge
  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY short_triangle_edge
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_edge];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY si_absorbed_dose_unit
  SUBTYPE OF (absorbed_dose_unit, si_unit);
WHERE
  WR1: SELF\si_unit.name = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MASS_UNIT' IN TYPEOF(SELF)) AND (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DERIVED_UNIT_ELEMENT.UNIT')) > 0)) OR (prefix = si_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_clause
  SUBTYPE OF (compound_representation_item);
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 (string_expression, simple_generic_expression);
END_ENTITY;

ENTITY simplified_counterbore_hole_definition
  SUBTYPE OF (counterbore_hole_definition);
WHERE
  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
END_ENTITY;

ENTITY simplified_counterdrill_hole_definition
  SUBTYPE OF (counterdrill_hole_definition);
WHERE
  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
END_ENTITY;

ENTITY simplified_countersink_hole_definition
  SUBTYPE OF (countersink_hole_definition);
WHERE
  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
END_ENTITY;

ENTITY simplified_spotface_hole_definition
  SUBTYPE OF (spotface_hole_definition, simplified_counterbore_hole_definition);
END_ENTITY;

ENTITY simultaneous_constraint_group
  SUBTYPE OF (variational_representation_item);
  constraint_group : SET[2:?] OF constraint_group_member;
WHERE
  WR1: SIZEOF(QUERY(q <* using_representations(SELF) | SIZEOF(QUERY(r <* q.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMULTANEOUS_CONSTRAINT_GROUP' IN TYPEOF(r)) AND (SIZEOF(QUERY(s <* constraint_group | (s IN r\simultaneous_constraint_group.constraint_group) AND NOT (r :=: SELF))) > 0))) > 0)) = 0;
  WR2: SIZEOF(QUERY(q <* using_representations(constraint_group[1]) | (SIZEOF(QUERY(r <* constraint_group | item_in_context(r, q.context_of_items))) = SIZEOF(constraint_group)))) > 0;
  WR3: SIZEOF(QUERY(q <* constraint_group | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_CONSTRAINT' IN TYPEOF(q)) AND (SIZEOF(QUERY(r <* q.constrained_elements | SIZEOF(QUERY(s <* constraint_group | r IN s.reference_elements)) > 0)) > 0)))) = 0;
END_ENTITY;

ENTITY simultaneous_task_element
  SUBTYPE OF (concurrent_task_element);
END_ENTITY;

ENTITY sin_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY single_area_csg_2d_shape_representation
  SUBTYPE OF (csg_2d_shape_representation);
  SELF\representation.items : SET[1:?] OF csg_2d_area_select;
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))) = 0;
  WR2: SIZEOF(QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID_2D' IN TYPEOF(it)))) = 1;
END_ENTITY;

ENTITY single_boundary_csg_2d_shape_representation
  SUBTYPE OF (single_area_csg_2d_shape_representation);
WHERE
  WR1: SIZEOF(QUERY(it <* SELF.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_PRIMITIVE_SOLID_2D' IN TYPEOF(it)) AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY') IN TYPEOF(it\csg_primitive_solid_2d.tree_root_expression))))) = 0;
END_ENTITY;

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

ENTITY single_texture_style_tessellation_specification
  SUBTYPE OF (texture_style_tessellation_specification);
  texture_image : label;
  texture_coordinates : LIST[1:?] OF LIST[2:2] OF non_negative_real;
  texture_format : texture_file_type;
  repeating_pattern : BOOLEAN;
END_ENTITY;

ENTITY skew_line_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF line;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF line;
  distance_value : non_negative_length_measure;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) = 2;
END_ENTITY;

ENTITY slash_expression
  SUBTYPE OF (binary_numeric_expression);
END_ENTITY;

ENTITY sliding_curve_pair
  SUBTYPE OF (planar_curve_pair);
END_ENTITY;

ENTITY sliding_curve_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : sliding_curve_pair;
  actual_point_on_curve_1 : point_on_curve;
  actual_point_on_curve_2 : point_on_curve;
WHERE
  WR1: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_1 :=: actual_point_on_curve_1.basis_curve;
  WR2: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_2 :=: actual_point_on_curve_2.basis_curve;
END_ENTITY;

ENTITY sliding_surface_pair
  SUBTYPE OF (surface_pair);
END_ENTITY;

ENTITY sliding_surface_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : sliding_surface_pair;
  actual_point_on_surface_1 : point_on_surface;
  actual_point_on_surface_2 : point_on_surface;
  actual_rotation : plane_angle_measure;
WHERE
  WR1: SELF\pair_value.applies_to_pair\surface_pair.surface_1 :=: actual_point_on_surface_1.basis_surface;
  WR2: SELF\pair_value.applies_to_pair\surface_pair.surface_2 :=: actual_point_on_surface_2.basis_surface;
END_ENTITY;

ENTITY slot
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0;
  WR2: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'swept shape occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)))) | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1))) = 1)))) = 1)))) = 0;
  WR3: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND ((sar.name = 'course of travel') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0;
  WR4: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT ((SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start', 'course of travel end'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['open','radiused','flat','woodruff'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) = 1)))) = 2) OR (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start', 'course of travel end'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['loop'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) = 1)))) = 1))))) = 0;
  WR5: (NOT (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start', 'course of travel end'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['loop'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) = 1)))) = 1)))) = 0) OR (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND ((sar.name = 'course of travel') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description IN ['complex','complete circular'])))) = 1)))) = 1)))) = 0));
  WR6: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit')))) >= 0;
END_ENTITY;

ENTITY slot_end
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['open','radiused','flat','woodruff','loop'];
  WR3: (NOT (SELF.description IN ['open','radiused','loop'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 0)))) = 0);
  WR4: (NOT (SELF.description IN ['flat','woodruff'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR5: (NOT (SELF.description IN ['flat'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) = 0)))) = 0);
  WR6: (NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first radius')))) = 1)))) = 0)))) = 0);
  WR7: (NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second radius')))) = 1)))) = 0)))) = 0);
  WR8: (NOT (SELF.description = 'woodruff')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0);
  WR9: (NOT (SELF.description IN ['woodruff'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR10: SIZEOF(QUERY(fcr <* QUERY(sar <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start','course of travel end'])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)))) | (((fcr.related_shape_aspect.description = 'end condition occurrence') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect))))) >= 1;
END_ENTITY;

ENTITY small_area_face
  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY small_area_surface
  SUBTYPE OF (nearly_degenerate_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY small_area_surface_patch
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
END_ENTITY;

ENTITY small_triangulated_shell
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY small_volume_solid
  SUBTYPE OF (inapt_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE']);
END_ENTITY;

ENTITY smeared_material_definition
  SUBTYPE OF (zone_structural_makeup);
END_ENTITY;

ENTITY software_for_data_quality_check;
  description : text;
  software_name : text;
  software_version : text;
  data_quality : data_quality_definition_representation_relationship;
END_ENTITY;

ENTITY solid_angle_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY solid_curve_font
  SUBTYPE OF (pre_defined_curve_font);
END_ENTITY;

ENTITY solid_model
  SUPERTYPE OF (ONEOF (csg_solid,
                       manifold_solid_brep,
                       swept_face_solid,
                       swept_area_solid,
                       swept_disk_solid,
                       solid_replica))
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;

ENTITY solid_replica
  SUBTYPE OF (solid_model);
  parent_solid : solid_model;
  transformation : cartesian_transformation_operator_3d;
WHERE
  WR1: acyclic_solid_replica(SELF, parent_solid);
  WR2: parent_solid\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY solid_with_angle_based_chamfer
  SUBTYPE OF (solid_with_chamfered_edges);
  offset_distance : positive_length_measure;
  left_offset : BOOLEAN;
  offset_angle : positive_plane_angle_measure;
END_ENTITY;

ENTITY solid_with_chamfered_edges
  ABSTRACT SUPERTYPE OF (ONEOF (solid_with_single_offset_chamfer,
                                solid_with_double_offset_chamfer,
                                solid_with_angle_based_chamfer))
  SUBTYPE OF (edge_blended_solid);
END_ENTITY;

ENTITY solid_with_circular_pattern
  SUPERTYPE OF (solid_with_incomplete_circular_pattern)
  SUBTYPE OF (solid_with_shape_element_pattern);
  replicate_count : positive_integer;
  angular_spacing : plane_angle_measure;
  radial_alignment : BOOLEAN;
  reference_point : point;
END_ENTITY;

ENTITY solid_with_circular_pocket
  SUBTYPE OF (solid_with_pocket);
  pocket_radius : positive_length_measure;
WHERE
  WR1: SELF\solid_with_pocket.floor_blend_radius <= pocket_radius;
END_ENTITY;

ENTITY solid_with_circular_protrusion
  SUBTYPE OF (solid_with_protrusion);
  protrusion_radius : positive_length_measure;
END_ENTITY;

ENTITY solid_with_conical_bottom_round_hole
  SUBTYPE OF (solid_with_stepped_round_hole);
  semi_apex_angle : positive_plane_angle_measure;
  tip_radius : non_negative_length_measure;
WHERE
  WR1: tip_radius < SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;

ENTITY solid_with_constant_radius_edge_blend
  SUBTYPE OF (edge_blended_solid);
  radius : positive_length_measure;
END_ENTITY;

ENTITY solid_with_curved_slot
  SUBTYPE OF (solid_with_slot);
  slot_centreline : bounded_curve;
END_ENTITY;

ENTITY solid_with_depression
  ABSTRACT SUPERTYPE OF (solid_with_through_depression
                         ANDOR ONEOF (solid_with_hole,
                              solid_with_pocket,
                              solid_with_slot,
                              solid_with_groove))
  SUBTYPE OF (modified_solid_with_placed_configuration);
  depth : positive_length_measure;
END_ENTITY;

ENTITY solid_with_double_offset_chamfer
  SUBTYPE OF (solid_with_chamfered_edges);
  left_offset_distance : positive_length_measure;
  right_offset_distance : positive_length_measure;
END_ENTITY;

ENTITY solid_with_excessive_number_of_voids
  SUBTYPE OF (inapt_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY solid_with_flat_bottom_round_hole
  SUBTYPE OF (solid_with_stepped_round_hole);
  fillet_radius : non_negative_length_measure;
WHERE
  WR1: fillet_radius < SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;

ENTITY solid_with_general_pocket
  SUBTYPE OF (solid_with_pocket);
  profile : positioned_sketch;
  reference_point : point;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE'] * TYPEOF(profile.sketch_basis)) = 1;
  WR2: profile IN using_items(reference_point, []);
END_ENTITY;

ENTITY solid_with_general_protrusion
  SUBTYPE OF (solid_with_protrusion);
  profile : positioned_sketch;
  reference_point : point;
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE'] * TYPEOF(profile.sketch_basis)) = 1;
  WR2: profile IN using_items(reference_point, []);
END_ENTITY;

ENTITY solid_with_groove
  SUBTYPE OF (solid_with_depression);
  groove_radius : positive_length_measure;
  groove_width : positive_length_measure;
  draft_angle : plane_angle_measure;
  floor_fillet_radius : non_negative_length_measure;
  external_groove : BOOLEAN;
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY solid_with_hole
  ABSTRACT SUPERTYPE OF (solid_with_stepped_round_hole)
  SUBTYPE OF (solid_with_depression);
END_ENTITY;

ENTITY solid_with_incomplete_circular_pattern
  SUBTYPE OF (solid_with_circular_pattern);
  omitted_instances : SET[1:?] OF positive_integer;
WHERE
  WR1: SIZEOF(omitted_instances) < SELF\solid_with_circular_pattern.replicate_count;
  WR2: SIZEOF(QUERY(q <* omitted_instances | q > SELF\solid_with_circular_pattern.replicate_count)) = 0;
END_ENTITY;

ENTITY solid_with_incomplete_rectangular_pattern
  SUBTYPE OF (solid_with_rectangular_pattern);
  omitted_instances : SET[1:?] OF LIST[2:2] OF positive_integer;
WHERE
  WR1: NOT ([1,1] IN omitted_instances);
  WR2: SIZEOF(omitted_instances) < ((SELF\solid_with_rectangular_pattern.row_count * SELF\solid_with_rectangular_pattern.column_count) - 1);
  WR3: SIZEOF(QUERY(q <* omitted_instances | ((q[1] > SELF\solid_with_rectangular_pattern.row_count) OR (q[2] > SELF\solid_with_rectangular_pattern.column_count)))) = 0;
END_ENTITY;

ENTITY solid_with_pocket
  ABSTRACT SUPERTYPE OF (ONEOF (solid_with_rectangular_pocket,
                                solid_with_circular_pocket,
                                solid_with_general_pocket))
  SUBTYPE OF (solid_with_depression);
  floor_blend_radius : non_negative_length_measure;
  draft_angle : plane_angle_measure;
END_ENTITY;

ENTITY solid_with_protrusion
  ABSTRACT SUPERTYPE OF (ONEOF (solid_with_circular_protrusion,
                                solid_with_rectangular_protrusion,
                                solid_with_general_protrusion))
  SUBTYPE OF (modified_solid_with_placed_configuration);
  protrusion_height : positive_length_measure;
  protrusion_draft_angle : plane_angle_measure;
END_ENTITY;

ENTITY solid_with_rectangular_pattern
  SUPERTYPE OF (solid_with_incomplete_rectangular_pattern)
  SUBTYPE OF (solid_with_shape_element_pattern);
  row_count : positive_integer;
  column_count : positive_integer;
  row_spacing : length_measure;
  column_spacing : length_measure;
WHERE
  WR1: (row_count * column_count) > 1;
END_ENTITY;

ENTITY solid_with_rectangular_pocket
  SUBTYPE OF (solid_with_pocket);
  pocket_length : positive_length_measure;
  pocket_width : positive_length_measure;
  corner_radius : non_negative_length_measure;
WHERE
  WR1: (corner_radius < pocket_width / 2) AND (corner_radius < pocket_length / 2);
END_ENTITY;

ENTITY solid_with_rectangular_protrusion
  SUBTYPE OF (solid_with_protrusion);
  protrusion_length : positive_length_measure;
  protrusion_width : positive_length_measure;
  protrusion_corner_radius : non_negative_length_measure;
WHERE
  WR1: (protrusion_corner_radius <= protrusion_width / 2) AND (protrusion_corner_radius <= protrusion_length / 2);
END_ENTITY;

ENTITY solid_with_shape_element_pattern
  ABSTRACT SUPERTYPE OF (ONEOF (solid_with_circular_pattern,
                                solid_with_rectangular_pattern))
  SUBTYPE OF (modified_solid_with_placed_configuration);
  replicated_element : modified_solid_with_placed_configuration;
END_ENTITY;

ENTITY solid_with_single_offset_chamfer
  SUBTYPE OF (solid_with_chamfered_edges);
  offset_distance : positive_length_measure;
END_ENTITY;

ENTITY solid_with_slot
  ABSTRACT SUPERTYPE OF ((ONEOF (solid_with_straight_slot,
                                 solid_with_curved_slot))
                        AND (ONEOF (solid_with_trapezoidal_section_slot,
                             solid_with_tee_section_slot)))
  SUBTYPE OF (solid_with_depression);
  slot_width : positive_length_measure;
  closed_ends : LIST[2:2] OF LOGICAL;
  end_exit_faces : LIST[2:2] OF SET[0:?] OF face_surface;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN TYPEOF(SELF)) AND (closed_ends = [FALSE,FALSE]));
  WR2: NOT (((closed_ends[1] = TRUE) AND (SIZEOF(end_exit_faces[1]) <> 0)) OR ((closed_ends[2] = TRUE) AND (SIZEOF(end_exit_faces[2]) <> 0)));
END_ENTITY;

ENTITY solid_with_spherical_bottom_round_hole
  SUBTYPE OF (solid_with_stepped_round_hole);
  sphere_radius : positive_length_measure;
WHERE
  WR1: sphere_radius >= SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;

ENTITY solid_with_stepped_round_hole
  SUPERTYPE OF (solid_with_stepped_round_hole_and_conical_transitions
                ANDOR ONEOF (solid_with_flat_bottom_round_hole,
                     solid_with_conical_bottom_round_hole,
                     solid_with_spherical_bottom_round_hole))
  SUBTYPE OF (solid_with_hole);
  segments : positive_integer;
  segment_radii : LIST[1:segments] OF positive_length_measure;
  segment_depths : LIST[1:segments] OF positive_length_measure;
DERIVE
  SELF\solid_with_depression.depth : positive_length_measure := compute_total_depth(SELF);
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN TYPEOF(SELF)) AND (SIZEOF(TYPEOF(SELF) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_FLAT_BOTTOM_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_SPHERICAL_BOTTOM_ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_FLAT_BOTTOM_ROUND_HOLE']) <> 0));
END_ENTITY;

ENTITY solid_with_stepped_round_hole_and_conical_transitions
  SUBTYPE OF (solid_with_stepped_round_hole);
  conical_transitions : SET[1:?] OF conical_stepped_hole_transition;
WHERE
  WR1: SIZEOF(conical_transitions) <= (SELF\solid_with_stepped_round_hole.segments + 1);
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN TYPEOF(SELF)) XOR (SIZEOF(conical_transitions) <= SELF\solid_with_stepped_round_hole.segments);
  WR3: validate_countersink_radii(SELF);
END_ENTITY;

ENTITY solid_with_straight_slot
  SUBTYPE OF (solid_with_slot);
  slot_length : positive_length_measure;
END_ENTITY;

ENTITY solid_with_tee_section_slot
  SUBTYPE OF (solid_with_slot);
  tee_section_width : positive_length_measure;
  collar_depth : positive_length_measure;
WHERE
  WR1: collar_depth < SELF\solid_with_depression.depth;
  WR2: tee_section_width > SELF\solid_with_slot.slot_width;
END_ENTITY;

ENTITY solid_with_through_depression
  SUBTYPE OF (solid_with_depression);
  exit_faces : SET[1:?] OF face_surface;
WHERE
  WR1: SIZEOF(TYPEOF(SELF) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_POCKET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_SLOT']) = 1;
END_ENTITY;

ENTITY solid_with_trapezoidal_section_slot
  SUBTYPE OF (solid_with_slot);
  draft_angle : plane_angle_measure;
  floor_fillet_radius : non_negative_length_measure;
END_ENTITY;

ENTITY solid_with_variable_radius_edge_blend
  SUBTYPE OF (track_blended_solid);
  point_list : LIST[2:?] OF point;
  radius_list : LIST[2:?] OF positive_length_measure;
  edge_function_list : LIST[1:?] OF blend_radius_variation_type;
WHERE
  WR1: SIZEOF(point_list) = SIZEOF(radius_list);
  WR2: SIZEOF(edge_function_list) = SIZEOF(radius_list) - 1;
  WR3: NOT ((point_list[1] = point_list[HIINDEX(point_list)]) AND NOT (radius_list[1] = radius_list[HIINDEX(radius_list)]));
END_ENTITY;

ENTITY solid_with_wrong_number_of_voids
  SUBTYPE OF (erroneous_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
  WR3: validate_locations_of_extreme_value_type(SELF, []);
  WR4: validate_accuracy_types(SELF, []);
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 specification_definition
  SUBTYPE 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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | pdr.relating_product_definition :=: next_usage.relating_product_definition)) = 1);
  WR5: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPECIFIED_HIGHER_USAGE_OCCURRENCE'] * TYPEOF(upper_usage)) = 1;
END_ENTITY;

ENTITY sphere
  SUBTYPE OF (geometric_representation_item);
  radius : positive_length_measure;
  centre : point;
END_ENTITY;

ENTITY spherical_cap
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)))) = 0)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'internal angle')))) = 1)))) = 0)))) = 0);
END_ENTITY;

ENTITY spherical_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY spherical_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : spherical_pair_select;
  input_orientation : spatial_rotation;
DERIVE
  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair, input_orientation);
END_ENTITY;

ENTITY spherical_pair_with_pin
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY spherical_pair_with_pin_and_range
  SUBTYPE OF (spherical_pair_with_pin);
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR2: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
END_ENTITY;

ENTITY spherical_pair_with_range
  SUBTYPE OF (spherical_pair);
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR2: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
END_ENTITY;

ENTITY spherical_point
  SUBTYPE OF (cartesian_point);
  r : length_measure;
  theta : plane_angle_measure;
  phi : plane_angle_measure;
DERIVE
  SELF\cartesian_point.coordinates : LIST[3:3] OF length_measure := [r * SIN(theta) * COS(phi),r * SIN(theta) * SIN(phi),r * COS(theta)];
WHERE
  WR1: r >= 0.0;
END_ENTITY;

ENTITY spherical_surface
  SUBTYPE OF (elementary_surface);
  radius : positive_length_measure;
END_ENTITY;

ENTITY spherical_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  radius : positive_length_measure;
END_ENTITY;

ENTITY spotface_definition
  SUBTYPE OF (explicit_round_hole);
  spotface_radius : positive_length_measure_with_unit;
  spotface_radius_tolerance : OPTIONAL tolerance_value;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(spotface_radius_tolerance\tolerance_value.lower_bound);
  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(spotface_radius_tolerance\tolerance_value.upper_bound);
END_ENTITY;

ENTITY spotface_hole_definition
  SUBTYPE OF (counterbore_hole_definition);
  SELF\counterbore_hole_definition.counterbore : LIST[1:?] OF UNIQUE spotface_definition;
DERIVE
  spotface : LIST[1:?] OF UNIQUE spotface_definition := SELF\counterbore_hole_definition.counterbore;
END_ENTITY;

ENTITY spotface_occurrence
  SUBTYPE OF (counterbore_hole_occurrence);
  SELF\counterbore_hole_occurrence.definition : spotface_hole_definition;
END_ENTITY;

ENTITY spotface_occurrence_in_assembly
  SUBTYPE OF (counterbore_hole_occurrence_in_assembly);
  SELF\counterbore_hole_occurrence.definition : spotface_hole_definition;
END_ENTITY;

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

ENTITY square_root_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY square_u_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 4) AND (SIZEOF(impl_rep.used_representation.items) <= 7)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR (srwp_i.name = 'first radius') OR (srwp_i.name = 'second radius') OR (srwp_i.name = 'profile limit') OR (srwp_i.name = 'depth'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first radius'))) <= 1))) = 0))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second radius'))) <= 1))) = 0))) = 0;
  WR9: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first angle'))) = 1))) = 0))) = 0;
  WR10: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second angle'))) = 1))) = 0))) = 0;
  WR11: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR12: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY standard_table_function
  SUBTYPE OF (linearized_table_function);
  order : ordering_type;
WHERE
  WR1: extremal_position_check(SELF);
END_ENTITY;

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

ENTITY start_request
  SUBTYPE OF (action_request_assignment);
  items : SET[1:?] OF start_request_item;
END_ENTITY;

ENTITY start_task
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY start_work
  SUBTYPE OF (action_assignment);
  items : SET[1:?] OF work_item;
END_ENTITY;

ENTITY state_definition_to_state_assignment_relationship
  SUBTYPE OF (ascribable_state_relationship);
  relation_type : STRING;
WHERE
  WR1: acyclic_state_definition_to_state_assignment_relationship(SELF, [SELF\ascribable_state_relationship.related_ascribable_state], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_DEFINITION_TO_STATE_ASSIGNMENT_RELATIONSHIP');
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 statechar_applied_object
  SUBTYPE OF (characterized_object, state_observed_assignment);
END_ENTITY;

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

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

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

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

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

ENTITY steep_angle_between_adjacent_edges
  SUBTYPE OF (steep_geometry_transition_across_edge);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
END_ENTITY;

ENTITY steep_angle_between_adjacent_faces
  SUBTYPE OF (steep_geometry_transition_across_edge);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
END_ENTITY;

ENTITY steep_geometry_transition_across_edge
  ABSTRACT SUPERTYPE OF (ONEOF (steep_angle_between_adjacent_edges,
                                steep_angle_between_adjacent_faces))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY step
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR2: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear')))) = 1)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'removal boundary occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0;
  WR5: SIZEOF(QUERY(pds <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY(csa <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name = 'uncut volume') AND (SIZEOF(QUERY(sar <* csa.component_relationships | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] * TYPEOF(sar.related_shape_aspect)) = 1)))) = 1)))) <= 1)))) = 1;
END_ENTITY;

ENTITY stitching_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY stitching_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY straightness_tolerance
  SUBTYPE OF (geometric_tolerance);
WHERE
  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY strategy_point
  SUBTYPE OF (point_based_llai);
END_ENTITY;

ENTITY strategy_point_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY strict_triangular_matrix
  SUBTYPE OF (triangular_matrix);
  main_diagonal_value : maths_value;
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 (simple_string_expression, generic_literal);
  the_value : STRING;
END_ENTITY;

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

ENTITY structured_dimension_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(TYPEOF(SELF) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICAL_TOLERANCE_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT']) = 0;
  WR2: SIZEOF(QUERY(ato <* QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | NOT (ato.name IN ['dimension value','tolerance value','unit text','prefix text','suffix text']))) = 0;
  WR3: SIZEOF(QUERY(ato <* QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | (ato.name = 'dimension value'))) >= 1;
  WR4: SIZEOF(QUERY(dcr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF(dcr)) AND (dcr.name = 'prefix'))) <= 1;
  WR5: SIZEOF(QUERY(dcr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF(dcr)) AND (dcr.name = 'suffix'))) <= 1;
  WR6: NOT ((SIZEOF(QUERY(ato <* QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | (ato.name = 'prefix text'))) > 0)) OR (SIZEOF(QUERY(dcr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF(dcr)) AND (dcr.name = 'prefix'))) = 1);
  WR7: NOT (SIZEOF(QUERY(ato <* QUERY(con <* SELF.contents | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(con))) | (ato.name = 'suffix text'))) > 0) OR (SIZEOF(QUERY(dcr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF(dcr)) AND (dcr.name = 'suffix'))) = 1);
END_ENTITY;

ENTITY structured_message
  SUBTYPE OF (product);
END_ENTITY;

ENTITY structured_text_composition
  SUBTYPE OF (compound_representation_item);
END_ENTITY;

ENTITY structured_text_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF string_representation_item_select;
END_ENTITY;

ENTITY styled_item
  SUBTYPE OF (representation_item);
  styles : SET[0:?] OF presentation_style_assignment;
  item : styled_item_target;
WHERE
  WR1: (SIZEOF(styles) = 0) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_TESSELLATED_ITEM_WITH_COLOURS' IN TYPEOF(SELF)) OR (SIZEOF(styles) = 1) OR (SIZEOF(styles) > 1) AND (SIZEOF(QUERY(pres_style <* styles | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN TYPEOF(pres_style)))) = 0);
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item));
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(item)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(item)) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SET_REPRESENTATION_ITEM' IN TYPEOF(item)) AND (SIZEOF(QUERY(it <* item | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(it))))) = 0));
END_ENTITY;

ENTITY styled_tessellated_item_with_colours
  SUBTYPE OF (styled_item);
  SELF\styled_item.item : tessellated_surface_item;
  colour_type : colour_type_enum;
  colour_values : LIST[1:?] OF LIST[3:4] OF unsigned_8_bit_integer;
DERIVE
  coloured_coordinate_values : coordinates_list := get_coordinate_values(item);
WHERE
  WR1: SIZEOF(SELF\styled_item.styles) = 0;
  WR2: ((colour_type = rgb8) AND (SIZEOF(QUERY(clist <* colour_values | NOT (SIZEOF(clist) = 3))) = 0)) OR ((colour_type = rgbt8) AND (SIZEOF(QUERY(clist <* colour_values | NOT (SIZEOF(clist) = 4))) = 0));
  WR3: SIZEOF(colour_values) = coloured_coordinate_values\coordinates_list.npoints;
END_ENTITY;

ENTITY su_parameters
  SUBTYPE OF (geometric_representation_item);
  a : length_measure;
  alpha : plane_angle_measure;
  b : length_measure;
  beta : plane_angle_measure;
  c : length_measure;
  gamma : plane_angle_measure;
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY subedge
  SUBTYPE OF (edge);
  parent_edge : edge;
WHERE
  WR1: SELF :<>: parent_edge;
END_ENTITY;

ENTITY subface
  SUBTYPE OF (face);
  parent_face : face;
WHERE
  WR1: NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF)) + list_to_set(list_face_loops(parent_face))));
  WR2: SELF :<>: parent_face;
END_ENTITY;

ENTITY subpath
  SUBTYPE OF (path);
  parent_path : path;
WHERE
  WR1: SELF :<>: parent_path;
  WR2: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(SELF)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH' IN TYPEOF(parent_path)));
END_ENTITY;

ENTITY subsketch
  SUBTYPE OF (geometric_representation_item);
  subsketch_elements : SET[1:?] OF sketch_element_select;
  owning_sketch : sketch_type_select;
WHERE
  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION' IN TYPEOF(owning_sketch)) AND (SIZEOF(QUERY(q <* subsketch_elements | NOT (owning_sketch IN using_representations(q)))) = 0)) XOR ((SIZEOF(TYPEOF(owning_sketch) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIONED_SKETCH', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBSKETCH']) = 1) AND (SIZEOF(QUERY(q <* subsketch_elements | NOT (owning_sketch IN using_items(q, [])))) = 0));
END_ENTITY;

ENTITY substring_expression
  SUBTYPE OF (string_expression, multiple_arity_generic_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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(operand)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index1)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 summary_report_request
  SUBTYPE OF (data_quality_report_request);
  summary_report_request_type : summary_report_type;
END_ENTITY;

ENTITY summary_report_request_with_number_of_instances
  SUBTYPE OF (data_equivalence_report_request);
  report_request_type : SET[1:3] OF summary_report_style_type;
END_ENTITY;

ENTITY supplied_part_relationship
  SUBTYPE OF (product_definition_relationship);
END_ENTITY;

ENTITY surface
  SUPERTYPE OF (ONEOF (elementary_surface,
                       swept_surface,
                       bounded_surface,
                       offset_surface,
                       surface_replica))
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;

ENTITY surface_condition_callout
  SUBTYPE OF (draughting_callout);
WHERE
  WR1: SIZEOF(QUERY(c <* SELF.contents | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'] * TYPEOF(c)) <> 1)) = 0;
END_ENTITY;

ENTITY surface_curve
  SUPERTYPE OF (ONEOF (intersection_curve,
                       seam_curve)
               ANDOR bounded_surface_curve)
  SUBTYPE OF (curve);
  curve_3d : curve;
  associated_geometry : LIST[1:2] OF pcurve_or_surface;
  master_representation : preferred_surface_curve_representation;
DERIVE
  basis_surface : SET[1:2] OF surface := get_basis_surface(SELF);
WHERE
  WR1: curve_3d.dim = 3;
  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[1])) OR (master_representation <> pcurve_s1);
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[2])) OR (master_representation <> pcurve_s2);
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(curve_3d));
END_ENTITY;

ENTITY surface_curve_swept_area_solid
  SUBTYPE OF (swept_area_solid);
  directrix : curve;
  start_param : REAL;
  end_param : REAL;
  reference_surface : surface;
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface));
END_ENTITY;

ENTITY surface_curve_swept_surface
  SUBTYPE OF (swept_surface);
  directrix : curve;
  reference_surface : surface;
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface));
END_ENTITY;

ENTITY surface_distance_assembly_constraint_with_dimension
  SUBTYPE OF (binary_assembly_constraint, sdgc_with_dimension);
END_ENTITY;

ENTITY surface_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF surface;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
  near_points : SET[0:4] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY surface_of_linear_extrusion
  SUBTYPE OF (swept_surface);
  extrusion_axis : vector;
END_ENTITY;

ENTITY surface_of_revolution
  SUBTYPE OF (swept_surface);
  axis_position : axis1_placement;
DERIVE
  axis_line : line := representation_item('') || geometric_representation_item() || curve() || line(axis_position.location, representation_item('') || geometric_representation_item() || vector(axis_position.z, 1.0));
END_ENTITY;

ENTITY surface_pair
  ABSTRACT SUPERTYPE OF (ONEOF (sliding_surface_pair,
                                rolling_surface_pair)
                        ANDOR surface_pair_with_range)
  SUBTYPE OF (high_order_kinematic_pair);
  surface_1 : surface;
  surface_2 : surface;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (surface_1 IN r.items))) = 0;
  WR2: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (surface_2 IN r.items))) = 0;
  WR3: SIZEOF(QUERY(lr <* SELF\kinematic_pair.associated_link_representations_1 | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY surface_pair_with_range
  SUBTYPE OF (surface_pair);
  range_on_surface_1 : rectangular_trimmed_surface;
  range_on_surface_2 : rectangular_trimmed_surface;
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: SELF\surface_pair.surface_1 :=: range_on_surface_1.basis_surface;
  WR2: SELF\surface_pair.surface_2 :=: range_on_surface_2.basis_surface;
  WR3: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
  WR4: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (range_on_surface_1 IN r.items))) = 0;
  WR5: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (range_on_surface_2 IN r.items))) = 0;
END_ENTITY;

ENTITY surface_patch
  SUBTYPE OF (founded_item);
  parent_surface : bounded_surface;
  u_transition : transition_code;
  v_transition : transition_code;
  u_sense : BOOLEAN;
  v_sense : BOOLEAN;
INVERSE
  using_surfaces : BAG[1:?] OF rectangular_composite_surface FOR segments;
WHERE
  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(parent_surface)));
END_ENTITY;

ENTITY surface_patch_set
  SUBTYPE OF (geometric_representation_item);
  patches : SET[1:?] OF surface_patch;
END_ENTITY;

ENTITY surface_porosity_allowance_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY surface_porosity_allowance_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY surface_preparation_area
  SUBTYPE OF (area_based_llai);
END_ENTITY;

ENTITY surface_preparation_area_llai_specification
  SUBTYPE OF (product_definition);
END_ENTITY;

ENTITY surface_profile_tolerance
  SUBTYPE OF (geometric_tolerance);
END_ENTITY;

ENTITY surface_rendering_properties;
  rendered_colour : colour;
END_ENTITY;

ENTITY surface_replica
  SUBTYPE OF (surface);
  parent_surface : surface;
  transformation : cartesian_transformation_operator_3d;
WHERE
  WR1: acyclic_surface_replica(SELF, parent_surface);
END_ENTITY;

ENTITY surface_shape_aspect
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
  WR2: SELF\shape_aspect.product_definitional;
END_ENTITY;

ENTITY surface_side_style
  SUBTYPE OF (founded_item);
  name : label;
  styles : SET[1:7] OF surface_style_element_select;
WHERE
  WR1: SIZEOF(QUERY(style1 <* styles | SIZEOF(QUERY(style2 <* styles - style1 | TYPEOF(style1) = TYPEOF(style2))) > 0)) = 0;
END_ENTITY;

ENTITY surface_smoothness_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:1] OF surface_patch_set;
  u_smoothness : transition_code;
  v_smoothness : transition_code;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY surface_style_boundary
  SUBTYPE OF (founded_item);
  style_of_boundary : curve_or_render;
END_ENTITY;

ENTITY surface_style_control_grid
  SUBTYPE OF (founded_item);
  style_of_control_grid : curve_or_render;
END_ENTITY;

ENTITY surface_style_fill_area
  SUBTYPE OF (founded_item);
  fill_area : fill_area_style;
END_ENTITY;

ENTITY surface_style_parameter_line
  SUBTYPE OF (founded_item);
  style_of_parameter_lines : curve_or_render;
  direction_counts : SET[1:2] OF direction_count_select;
WHERE
  WR1: (HIINDEX(direction_counts) = 1) XOR (TYPEOF(direction_counts[1]) <> TYPEOF(direction_counts[2]));
END_ENTITY;

ENTITY surface_style_reflectance_ambient;
  ambient_reflectance : REAL;
END_ENTITY;

ENTITY surface_style_reflectance_ambient_diffuse
  SUBTYPE OF (surface_style_reflectance_ambient);
  diffuse_reflectance : REAL;
END_ENTITY;

ENTITY surface_style_reflectance_ambient_diffuse_specular
  SUBTYPE OF (surface_style_reflectance_ambient_diffuse);
  specular_reflectance : REAL;
  specular_exponent : REAL;
  specular_colour : colour;
END_ENTITY;

ENTITY surface_style_rendering;
  rendering_method : shading_surface_method;
  surface_colour : colour;
END_ENTITY;

ENTITY surface_style_rendering_with_properties
  SUBTYPE OF (surface_style_rendering);
  properties : SET[1:2] OF rendering_properties_select;
WHERE
  WR1: (HIINDEX(properties) = 1) XOR (TYPEOF(properties[1]) <> TYPEOF(properties[2]));
END_ENTITY;

ENTITY surface_style_segmentation_curve
  SUBTYPE OF (founded_item);
  style_of_segmentation_curve : curve_or_render;
END_ENTITY;

ENTITY surface_style_silhouette
  SUBTYPE OF (founded_item);
  style_of_silhouette : curve_or_render;
END_ENTITY;

ENTITY surface_style_transparent;
  transparency : REAL;
WHERE
  WR1: {0.0 <= transparency <= 1.0};
END_ENTITY;

ENTITY surface_style_usage
  SUBTYPE OF (founded_item);
  side : surface_side;
  style : surface_side_style_select;
END_ENTITY;

ENTITY surface_texture_representation
  SUBTYPE OF (representation);
WHERE
  WR1: SIZEOF(QUERY(i <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM'] * TYPEOF(i)) <> 1)) = 0;
  WR2: (SIZEOF(QUERY(i <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i))) = 1) AND (SIZEOF(QUERY(i <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (i.name = 'measuring method'))) = 1);
  WR3: SIZEOF(QUERY(i <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] * TYPEOF(i)) = 1)) > 0;
  WR4: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')) <= 1) AND (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) = 0) AND (SIZEOF(QUERY(rr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1') | rr.rep_2.name = 'measuring direction')) = SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')));
  WR5: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | SIZEOF(QUERY(gpa <* USEDIN(pdr.definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(gpa.base_definition)) AND (gpa\general_property_association.base_definition\general_property.name = 'surface_condition'))) = 1)) = 1);
END_ENTITY;

ENTITY surface_with_excessive_patches_in_one_direction
  SUBTYPE OF (overcomplex_geometry);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT']);
  WR4: validate_locations_of_extreme_value_type(SELF, []);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY surface_with_small_curvature_radius
  SUBTYPE OF (geometry_with_local_near_degeneracy);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY surfaced_open_shell
  SUBTYPE OF (open_shell);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(q)))) = 0;
END_ENTITY;

ENTITY swept_area_solid
  SUPERTYPE OF (ONEOF (revolved_area_solid,
                       extruded_area_solid,
                       surface_curve_swept_area_solid))
  SUBTYPE OF (solid_model);
  swept_area : curve_bounded_surface;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(swept_area.basis_surface);
END_ENTITY;

ENTITY swept_curve_surface_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF surface;
  SELF\explicit_constraint.reference_elements : SET[1:1] OF swept_surface_or_solid;
END_ENTITY;

ENTITY swept_disk_solid
  SUBTYPE OF (solid_model);
  directrix : curve;
  radius : positive_length_measure;
  inner_radius : OPTIONAL positive_length_measure;
  start_param : REAL;
  end_param : REAL;
WHERE
  WR1: directrix.dim = 3;
  WR2: (NOT EXISTS(inner_radius)) OR (radius > inner_radius);
END_ENTITY;

ENTITY swept_face_solid
  SUPERTYPE OF (ONEOF (extruded_face_solid,
                       revolved_face_solid))
  SUBTYPE OF (solid_model);
  swept_face : face_surface;
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(swept_face.face_geometry);
END_ENTITY;

ENTITY swept_point_curve_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve;
  SELF\explicit_constraint.reference_elements : SET[1:1] OF swept_face_solid;
END_ENTITY;

ENTITY swept_surface
  SUPERTYPE OF (ONEOF (surface_of_linear_extrusion,
                       surface_of_revolution,
                       surface_curve_swept_surface,
                       fixed_reference_swept_surface))
  SUBTYPE OF (surface);
  swept_curve : curve;
END_ENTITY;

ENTITY symbol
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY symbol_colour;
  colour_of_symbol : colour;
END_ENTITY;

ENTITY symbol_representation
  SUBTYPE OF (representation);
END_ENTITY;

ENTITY symbol_representation_map
  SUBTYPE OF (representation_map);
  SELF\representation_map.mapped_representation : symbol_representation;
  SELF\representation_map.mapping_origin : axis2_placement;
WHERE
  WR1: SIZEOF(QUERY(mi <* SELF\representation_map.map_usage | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(mi)))) = 0;
END_ENTITY;

ENTITY symbol_style
  SUBTYPE OF (founded_item);
  name : label;
  style_of_symbol : symbol_style_select;
END_ENTITY;

ENTITY symbol_target
  SUBTYPE OF (geometric_representation_item);
  placement : axis2_placement;
  x_scale : positive_ratio_measure;
  y_scale : positive_ratio_measure;
END_ENTITY;

ENTITY symmetric_banded_matrix
  SUBTYPE OF (symmetric_matrix);
  default_entry : maths_value;
  above : nonnegative_integer;
WHERE
  WR1: member_of(default_entry, factor1(SELF\linearized_table_function.source.range));
END_ENTITY;

ENTITY symmetric_matrix
  SUBTYPE OF (linearized_table_function);
  symmetry : symmetry_type;
  triangle : lower_upper;
  order : ordering_type;
WHERE
  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
  WR2: SELF\explicit_table_function.shape[1] = SELF\explicit_table_function.shape[2];
  WR3: NOT (symmetry = symmetry_type.skew) OR ((space_dimension(SELF\linearized_table_function.source.range) = 1) AND subspace_of_es(factor1(SELF\linearized_table_function.source.range), es_numbers));
  WR4: NOT ((symmetry = symmetry_type.hermitian) OR (symmetry = symmetry_type.skew_hermitian)) OR ((space_dimension(SELF\linearized_table_function.source.range) = 1) AND subspace_of_es(factor1(SELF\linearized_table_function.source.range), es_complex_numbers));
END_ENTITY;

ENTITY symmetric_shape_aspect
  SUBTYPE OF (shape_aspect);
INVERSE
  basis_relationships : SET[1:?] OF shape_aspect_deriving_relationship FOR related_shape_aspect;
END_ENTITY;

ENTITY symmetry_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[2:2] OF geometric_representation_item;
  mirror_element : linear_geometry_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
  WR2: SIZEOF(TYPEOF(mirror_element) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR']) = 0;
  WR3: NOT ((SELF\geometric_representation_item.dim = 2) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(mirror_element)));
END_ENTITY;

ENTITY symmetry_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
END_ENTITY;

ENTITY system_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY system_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY table_representation_item
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: SIZEOF(QUERY(itet <* SELF\compound_representation_item.item_element | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROW_REPRESENTATION_ITEM' IN TYPEOF(itet)))) = 0;
END_ENTITY;

ENTITY tactile_appearance_representation
  SUBTYPE OF (representation);
WHERE
  WR1: SIZEOF(QUERY(i <* SELF.items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] * TYPEOF(i)) <> 1)) = 0;
  WR2: SIZEOF(QUERY(i <* SELF.items | name = 'depth')) <= 1;
  WR3: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | SIZEOF(QUERY(gpa <* USEDIN(pdr.definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(gpa.base_definition)) AND (gpa\general_property_association.base_definition\general_property.name = 'surface_condition'))) = 1)) = 1);
END_ENTITY;

ENTITY tagged_text_format
  SUBTYPE OF (representation_context);
END_ENTITY;

ENTITY tagged_text_item
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY tan_function
  SUBTYPE OF (unary_function_call);
END_ENTITY;

ENTITY tangent
  SUBTYPE OF (derived_shape_aspect);
WHERE
  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
END_ENTITY;

ENTITY tangent_assembly_constraint
  SUBTYPE OF (binary_assembly_constraint, tangent_geometric_constraint);
END_ENTITY;

ENTITY tangent_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve_or_surface_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF curve_or_surface_constraint_element;
  near_points : SET[0:?] OF near_point_relationship;
  tangent_contact : tangent_contact_type;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: NOT ((SELF\geometric_representation_item.dim = 2) AND (tangent_contact = surface_contact));
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY taper
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['angle taper','diameter taper','directed taper']);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) = 0)))) = 0);
  WR5: ((NOT (SELF.description = 'angle taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'taper angle')))) = 1)))) = 0)))) = 0));
  WR6: ((NOT (SELF.description = 'diameter taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'final diameter')))) = 1)))) = 0)))) = 0));
  WR7: ((NOT (SELF.description = 'directed taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'angle')))) = 1)))) = 0)))) = 0));
  WR8: ((NOT (SELF.description = 'directed taper')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'direction'))) = 1)))) = 0));
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_invocation
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY task_method
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY task_method_relationship
  SUBTYPE OF (action_method_relationship);
END_ENTITY;

ENTITY task_method_version
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY task_method_version_relationship
  SUBTYPE OF (action_method_relationship);
END_ENTITY;

ENTITY task_objective
  SUBTYPE OF (action_method);
END_ENTITY;

ENTITY task_step
  SUBTYPE OF (task_element);
END_ENTITY;

ENTITY tee_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 9) AND (SIZEOF(impl_rep.used_representation.items) <= 10)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR (srwp_i.name = 'depth') OR (srwp_i.name = 'cross bar width') OR (srwp_i.name = 'cross bar depth') OR (srwp_i.name = 'first offset') OR (srwp_i.name = 'second offset') OR (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR (srwp_i.name = 'radius'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'depth'))) = 1))) = 0))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'cross bar width'))) = 1))) = 0))) = 0;
  WR9: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'cross bar depth'))) = 1))) = 0))) = 0;
  WR10: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first offset'))) = 1))) = 0))) = 0;
  WR11: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second offset'))) = 1))) = 0))) = 0;
  WR12: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first angle'))) = 1))) = 0))) = 0;
  WR13: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second angle'))) = 1))) = 0))) = 0;
  WR14: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius'))) <= 1))) = 0))) = 0;
  WR15: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
END_ENTITY;

ENTITY terminal_feature
  SUBTYPE OF (contact_feature);
END_ENTITY;

ENTITY terminal_location_group
  SUBTYPE OF (terminal_feature);
END_ENTITY;

ENTITY terminator_symbol
  SUBTYPE OF (annotation_symbol_occurrence);
  annotated_curve : annotation_curve_occurrence;
END_ENTITY;

ENTITY tessellated_annotation_occurrence
  SUBTYPE OF (annotation_occurrence);
  SELF\styled_item.item : tessellated_geometric_set;
END_ENTITY;

ENTITY tessellated_brep_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF brep_shape_representation_items_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1))) > 0;
  WR2: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE_SURFACE' IN TYPEOF(fcs)))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR4: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* msb_shells(msb) | NOT (SIZEOF(QUERY(fcs <* csh\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(msb <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(msb\manifold_solid_brep.outer))) = 0;
  WR6: SIZEOF(QUERY(brv <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) = 0))) = 0;
  WR7: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
END_ENTITY;

ENTITY tessellated_closed_shell
  SUBTYPE OF (closed_shell);
WHERE
  WR1: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE_SURFACE' IN TYPEOF(fcs)))) = 0;
  WR2: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY tessellated_connecting_edge
  SUBTYPE OF (tessellated_edge);
  smooth : LOGICAL;
  face1 : tessellated_face;
  face2 : tessellated_face;
  line_strip_face1 : LIST[2:?] OF INTEGER;
  line_strip_face2 : LIST[2:?] OF INTEGER;
WHERE
  WR1: SIZEOF(line_strip_face1) = SIZEOF(line_strip_face2);
  WR2: SIZEOF(line_strip_face1) = SIZEOF(SELF\tessellated_edge.line_strip);
  WR3: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face1));
  WR4: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face2));
END_ENTITY;

ENTITY tessellated_constructive_geometry_representation
  SUBTYPE OF (tessellated_shape_representation);
  SELF\representation.items : SET[1:?] OF tessellated_constructive_element_select;
END_ENTITY;

ENTITY tessellated_constructive_geometry_representation_relationship
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : tessellated_constructive_geometry_representation_or_shape_representation;
  SELF\representation_relationship.rep_2 : tessellated_constructive_geometry_representation;
WHERE
  WR1: (SELF\representation_relationship.rep_1\representation.context_of_items :=: SELF\representation_relationship.rep_2\representation.context_of_items) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation_relationship.rep_1\representation.context_of_items));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY tessellated_curve_set
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  line_strips : LIST[1:?] OF LIST[2:?] OF INTEGER;
END_ENTITY;

ENTITY tessellated_edge
  SUPERTYPE OF (ONEOF (tessellated_connecting_edge,
                       cubic_bezier_tessellated_edge))
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  geometric_link : OPTIONAL edge_or_curve;
  line_strip : LIST[2:?] OF INTEGER;
END_ENTITY;

ENTITY tessellated_edge_curve
  SUBTYPE OF (edge, geometric_representation_item);
  tessellated_edge_geometry : tessellated_edge;
  same_sense : BOOLEAN;
WHERE
  WR1: NOT EXISTS(tessellated_edge_geometry\tessellated_edge.geometric_link) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(tessellated_edge_geometry\tessellated_edge.geometric_link));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(SELF));
  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(SELF\edge.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(SELF\edge.edge_end));
  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE_CURVE' IN TYPEOF(SELF\subedge.parent_edge));
END_ENTITY;

ENTITY tessellated_face
  ABSTRACT SUPERTYPE OF (ONEOF (triangulated_face,
                                complex_triangulated_face,
                                cubic_bezier_triangulated_face))
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  pnmax : INTEGER;
  normals : LIST[0:?] OF LIST[3:3] OF REAL;
  geometric_link : OPTIONAL face_or_surface;
WHERE
  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
END_ENTITY;

ENTITY tessellated_face_surface
  SUBTYPE OF (face, geometric_representation_item);
  tessellated_face_geometry : tessellated_face;
  same_sense : BOOLEAN;
WHERE
  WR1: NOT EXISTS(tessellated_face_geometry\tessellated_face.geometric_link) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(tessellated_face_geometry\tessellated_face.geometric_link));
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(SELF));
  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(SELF)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE_SURFACE' IN TYPEOF(SELF\subface.parent_face));
END_ENTITY;

ENTITY tessellated_geometric_set
  SUBTYPE OF (tessellated_item);
  children : SET[1:?] OF tessellated_item;
END_ENTITY;

ENTITY tessellated_item
  ABSTRACT SUPERTYPE OF (ONEOF (coordinates_list,
                                tessellated_solid,
                                tessellated_shell,
                                tessellated_wire,
                                tessellated_geometric_set,
                                tessellated_curve_set,
                                tessellated_point_set,
                                tessellated_surface_set,
                                tessellated_structured_item))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SIZEOF(QUERY(using_rep <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHAPE_REPRESENTATION' IN TYPEOF(using_rep)))) = 0;
END_ENTITY;

ENTITY tessellated_manifold_subsurface_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF tessellated_manifold_subsurface_shape_representation_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) = 0;
  WR3: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_OPEN_SHELL' IN TYPEOF(cfss)))) = 0;
  WR4: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE_CURVE' IN TYPEOF(oe.edge_element)) OR ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE' IN TYPEOF(oe.edge_element))))) = 0))) = 0))) = 0))) = 0;
  WR5: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0))) = 0;
  WR6: SIZEOF(QUERY(cfss <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY(bnds <* fcs.bounds | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1))) = 0)))) = 0))) = 0;
END_ENTITY;

ENTITY tessellated_manifold_surface_shape_representation
  SUBTYPE OF (shape_representation);
  SELF\representation.items : SET[1:?] OF manifold_surface_shape_representation_select;
WHERE
  WR1: SIZEOF(QUERY(it <* items | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
  WR2: SIZEOF(QUERY(mi <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY(mr_it <* mi\mapped_item.mapping_source.mapped_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(mr_it)))) > 0)))) = 0;
  WR3: SIZEOF(QUERY(sbsm <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(sh <* sbsm\shell_based_surface_model.sbsm_boundary | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_OPEN_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CLOSED_SHELL'] * TYPEOF(sh)) = 1))) = 0))) = 0;
END_ENTITY;

ENTITY tessellated_open_shell
  SUBTYPE OF (open_shell);
WHERE
  WR1: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE_SURFACE' IN TYPEOF(fcs)))) = 0;
  WR2: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE_CURVE' IN TYPEOF(oe.edge_element)))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(fcs <* SELF\connected_face_set.cfs_faces | NOT (SIZEOF(QUERY(elp_fbnds <* QUERY(bnds <* fcs.bounds | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF(QUERY(oe <* elp_fbnds.bound\path.edge_list | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX_POINT' IN TYPEOF(oe.edge_end))))) = 0))) = 0))) = 0;
END_ENTITY;

ENTITY tessellated_point_set
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  point_list : LIST[1:?] OF INTEGER;
END_ENTITY;

ENTITY tessellated_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(SELF\representation.context_of_items);
  WR2: NOT (SIZEOF(QUERY(it <* SELF.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_ITEM' IN TYPEOF(it))) = 0);
END_ENTITY;

ENTITY tessellated_shape_representation_with_accuracy_parameters
  SUBTYPE OF (tessellated_shape_representation);
  tessellation_accuracy_parameters : SET[1:?] OF tessellation_accuracy_parameter_item;
END_ENTITY;

ENTITY tessellated_shell
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_structured_item;
  topological_link : OPTIONAL connected_face_set;
END_ENTITY;

ENTITY tessellated_solid
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_structured_item;
  geometric_link : OPTIONAL manifold_solid_brep;
END_ENTITY;

ENTITY tessellated_structured_item
  SUPERTYPE OF (ONEOF (tessellated_face,
                       tessellated_edge,
                       tessellated_vertex))
  SUBTYPE OF (tessellated_item);
END_ENTITY;

ENTITY tessellated_surface_set
  ABSTRACT SUPERTYPE OF (ONEOF (triangulated_surface_set,
                                complex_triangulated_surface_set))
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  pnmax : INTEGER;
  normals : LIST[0:?] OF LIST[3:3] OF REAL;
WHERE
  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
END_ENTITY;

ENTITY tessellated_vertex
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  topological_link : OPTIONAL vertex_point;
  point_index : INTEGER;
END_ENTITY;

ENTITY tessellated_vertex_point
  SUBTYPE OF (vertex, geometric_representation_item);
  tessellated_vertex_geometry : tessellated_vertex;
WHERE
  WR1: NOT EXISTS(tessellated_vertex_geometry\tessellated_vertex.topological_link);
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(SELF));
END_ENTITY;

ENTITY tessellated_wire
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_edge_or_vertex;
  geometric_model_link : OPTIONAL path_or_composite_curve;
END_ENTITY;

ENTITY tetrahedron
  SUBTYPE OF (faceted_primitive);
WHERE
  WR1: SIZEOF(points) = 4;
  WR2: above_plane(points[1], points[2], points[3], points[4]) <> 0.0;
END_ENTITY;

ENTITY tetrahedron_volume
  SUBTYPE OF (volume);
  point_1 : cartesian_point;
  point_2 : cartesian_point;
  point_3 : cartesian_point;
  point_4 : cartesian_point;
WHERE
  WR1: point_1.dim = 3;
  WR2: above_plane(point_1, point_2, point_3, point_4) <> 0.0;
END_ENTITY;

ENTITY text_font;
  id : identifier;
  name : label;
  description : text;
INVERSE
  glyphs : SET[1:?] OF character_glyph_font_usage FOR font;
END_ENTITY;

ENTITY text_font_family;
  id : identifier;
  name : label;
  description : text;
INVERSE
  fonts : SET[1:?] OF text_font_in_family FOR family;
END_ENTITY;

ENTITY text_font_in_family;
  font : text_font;
  family : text_font_family;
END_ENTITY;

ENTITY text_literal
  SUBTYPE OF (geometric_representation_item);
  literal : presentable_text;
  placement : axis2_placement;
  alignment : text_alignment;
  path : text_path;
  font : font_select;
END_ENTITY;

ENTITY text_literal_with_associated_curves
  SUBTYPE OF (text_literal);
  associated_curves : SET[1:?] OF curve;
END_ENTITY;

ENTITY text_literal_with_blanking_box
  SUBTYPE OF (text_literal);
  blanking : planar_box;
END_ENTITY;

ENTITY text_literal_with_delineation
  SUBTYPE OF (text_literal);
  delineation : text_delineation;
END_ENTITY;

ENTITY text_literal_with_extent
  SUBTYPE OF (text_literal);
  extent : planar_extent;
END_ENTITY;

ENTITY text_string_representation
  SUBTYPE OF (representation);
  SELF\representation.items : SET[1:?] OF text_string_representation_item;
WHERE
  WR1: SIZEOF(QUERY(item <* SELF\representation.items | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_CHARACTER', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFINED_CHARACTER_GLYPH', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT'] * TYPEOF(item)) = 0))) >= 1;
  WR2: SIZEOF(QUERY(a2p <* QUERY(item <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(item)) | NOT ((SIZEOF(QUERY(at <* QUERY(item <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN TYPEOF(item)) | (at\mapped_item.mapping_target :=: a2p))) >= 1) OR (SIZEOF(QUERY(atc <* QUERY(item <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_CHARACTER' IN TYPEOF(item)) | (atc\mapped_item.mapping_target :=: a2p))) >= 1)))) = 0;
END_ENTITY;

ENTITY text_style
  SUBTYPE OF (founded_item);
  name : label;
  character_appearance : character_style_select;
END_ENTITY;

ENTITY text_style_for_defined_font;
  text_colour : colour;
END_ENTITY;

ENTITY text_style_with_box_characteristics
  SUBTYPE OF (text_style);
  characteristics : SET[1:4] OF box_characteristic_select;
WHERE
  WR1: SIZEOF(QUERY(c1 <* characteristics | SIZEOF(QUERY(c2 <* characteristics - c1 | TYPEOF(c1) = TYPEOF(c2))) > 0)) = 0;
END_ENTITY;

ENTITY text_style_with_mirror
  SUBTYPE OF (text_style);
  mirror_placement : axis2_placement;
END_ENTITY;

ENTITY text_style_with_spacing
  SUBTYPE OF (text_style);
  character_spacing : character_spacing_select;
END_ENTITY;

ENTITY texture_style_specification
  ABSTRACT SUPERTYPE
  SUBTYPE OF (founded_item);
END_ENTITY;

ENTITY texture_style_tessellation_specification
  ABSTRACT SUPERTYPE
  SUBTYPE OF (texture_style_specification);
END_ENTITY;

ENTITY thermal_component
  SUBTYPE OF (assembly_component);
END_ENTITY;

ENTITY thermal_resistance_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THERMAL_RESISTANCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;

ENTITY thermal_resistance_unit
  SUBTYPE OF (derived_unit);
WHERE
  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(-1.0, -1.0, -3.0, 0.0, 1.0, 0.0, 0.0);
END_ENTITY;

ENTITY thermodynamic_temperature_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 1.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
END_ENTITY;

ENTITY thickened_face_solid
  SUBTYPE OF (solid_model);
  base_element : generalized_surface_select;
  offset1 : length_measure;
  offset2 : length_measure;
WHERE
  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(base_element)) AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(base_element))));
  WR2: offset1 <> offset2;
END_ENTITY;

ENTITY thickness_laminate_table
  SUBTYPE OF (zone_structural_makeup);
END_ENTITY;

ENTITY thin_slit_in_triangulated_shell_or_solid
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell,tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_representative_triangle];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY thin_thickness_of_triangulated_shell_or_solid
  SUBTYPE OF (a3m_inapt_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_positive_length_measure;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[2:2] OF tsdq_inspected_element_type_name := [tsdqi_tessellated_shell,tsdqi_tessellated_solid];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[1:1] OF tsdq_type_name_for_location_of_extreme_value := [tsdqe_set_of_representative_triangle];
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND (tsdq_get_value_limit_type_name(SELF\a3m_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold) = SELF.measured_data_type);
END_ENTITY;

ENTITY thread
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) AND (8 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) <= 11)))) = 1))) = 1);
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter')))) = 1)))) = 0)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'minor diameter')))) <= 1)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'pitch diameter')))) <= 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of threads')))) = 1)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class')))) = 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'form')))) = 1)))) = 0)))) = 0);
  WR8: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'hand') AND (it.description IN ['left','right'])))) = 1)))) = 0)))) = 0);
  WR9: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'qualifier')))) <= 1)))) = 0)))) = 0);
  WR10: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'thread side') AND ((it.description = 'internal') OR (it.description = 'external'))))) = 1)))) = 0)))) = 0);
  WR11: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'crest')))) <= 1)))) = 0)))) = 0);
  WR12: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
  WR13: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
  WR14: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class 2')))) <= 1)))) = 0)))) = 0);
  WR15: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal size')))) <= 1)))) = 0)))) = 0);
  WR16: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'thread runout') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'thread runout usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THREAD_RUNOUT' IN TYPEOF(sdr.relating_shape_aspect)))) <= 1)))) = 1)))) = 0);
END_ENTITY;

ENTITY thread_runout
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
  WR2: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)))) = 1)))) = 0);
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) = 0)))) = 0);
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | NOT (srwp_i.name IN ['length of runout', 'pitch or dimension', 'included or extra']))) > 0))) = 0))) = 0;
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length of runout')))) = 1)))) = 0)))) <= 1);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'pitch or dimension') AND (it.description IN ['pitch','pitch or dimension'])))) = 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'included or extra') AND (it.description IN ['included','extra'])))) = 1)))) = 0)))) = 0);
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: EXISTS(primary_bound) OR EXISTS(secondary_bound);
  WR2: NOT (EXISTS(primary_bound) AND EXISTS(secondary_bound) AND EXISTS(duration));
  WR3: EXISTS(primary_bound) AND NOT EXISTS(secondary_bound) AND (NOT EXISTS(duration) OR duration_is_positive(duration));
  WR4: EXISTS(secondary_bound) AND NOT EXISTS(primary_bound) AND EXISTS(duration) AND duration_is_negative(duration);
END_ENTITY;

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

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

ENTITY tolerance_value;
  lower_bound : measure_with_unit;
  upper_bound : measure_with_unit;
DERIVE
  ubvc : REAL := upper_bound\measure_with_unit.value_component;
  lbvc : REAL := lower_bound\measure_with_unit.value_component;
WHERE
  WR1: ubvc > lbvc;
  WR2: upper_bound\measure_with_unit.unit_component = lower_bound\measure_with_unit.unit_component;
END_ENTITY;

ENTITY tolerance_zone
  SUBTYPE OF (shape_aspect);
  defining_tolerance : SET[1:?] OF tolerance_zone_target;
  form : tolerance_zone_form;
END_ENTITY;

ENTITY tolerance_zone_definition
  SUPERTYPE OF (ONEOF (projected_zone_definition,
                       non_uniform_zone_definition,
                       runout_zone_definition));
  zone : tolerance_zone;
  boundaries : SET[0:?] OF shape_aspect;
END_ENTITY;

ENTITY tolerance_zone_form;
  name : label;
END_ENTITY;

ENTITY tolerance_zone_with_datum
  SUPERTYPE OF (ONEOF (directed_tolerance_zone,
                       direction_feature_tolerance_zone,
                       oriented_tolerance_zone))
  SUBTYPE OF (tolerance_zone);
  datum_reference : datum_system;
END_ENTITY;

ENTITY topological_representation_item
  SUPERTYPE OF (ONEOF (vertex,
                       edge,
                       face_bound,
                       face,
                       vertex_shell,
                       wire_shell,
                       connected_edge_set,
                       connected_face_set, (
                       loop
               ANDOR path)))
  SUBTYPE OF (representation_item);
DERIVE
  permanent_id : identifier := get_id_value(SELF);
  permanent_aggregate_id : identifier := get_aggregate_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGGREGATE_ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY topology_related_to_multiply_defined_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (multiply_defined_faces,
                                multiply_defined_vertices,
                                multiply_defined_edges))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY topology_related_to_nearly_degenerate_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (short_length_edge,
                                small_area_face,
                                entirely_narrow_face))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY topology_related_to_overlapping_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (partly_overlapping_faces,
                                partly_overlapping_edges))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY topology_related_to_self_intersecting_geometry
  ABSTRACT SUPERTYPE OF (ONEOF (self_intersecting_loop,
                                self_intersecting_shell,
                                intersecting_connected_face_sets))
  SUBTYPE OF (inapt_topology_and_geometry_relationship);
END_ENTITY;

ENTITY topology_to_geometry_item_association
  SUBTYPE OF (item_defined_transformation);
  SELF\item_defined_transformation.transform_item_1 : topology_association_item_select;
  SELF\item_defined_transformation.transform_item_2 : geometry_association_item_select;
END_ENTITY;

ENTITY topology_to_geometry_model_association
  SUBTYPE OF (representation_relationship_with_transformation, shape_representation_relationship);
  SELF\representation_relationship_with_transformation.transformation_operator : set_item_defined_transformation;
DERIVE
  items : SET OF item_defined_transformation := get_item_defined_transformations(transformation_operator);
INVERSE
  product_context : SET[1:?] OF context_dependent_shape_representation FOR representation_relation;
WHERE
  WR1: SIZEOF(QUERY(it <* items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOPOLOGY_TO_GEOMETRY_ITEM_ASSOCIATION' IN TYPEOF(it)))) = 0;
  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFINITIONAL_REPRESENTATION_RELATIONSHIP' IN TYPEOF(SELF));
END_ENTITY;

ENTITY toroidal_surface
  SUBTYPE OF (elementary_surface);
  major_radius : positive_length_measure;
  minor_radius : positive_length_measure;
END_ENTITY;

ENTITY toroidal_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  major_radius : positive_length_measure;
  minor_radius : positive_length_measure;
WHERE
  WR1: minor_radius < major_radius;
END_ENTITY;

ENTITY torus
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  major_radius : positive_length_measure;
  minor_radius : positive_length_measure;
WHERE
  WR1: major_radius > minor_radius;
END_ENTITY;

ENTITY total_runout_tolerance
  SUBTYPE OF (geometric_tolerance_with_datum_reference);
END_ENTITY;

ENTITY track_blended_solid
  ABSTRACT SUPERTYPE
  SUBTYPE OF (edge_blended_solid);
WHERE
  WR1: check_continuous_edges(SELF\edge_blended_solid.blended_edges);
END_ENTITY;

ENTITY track_blended_solid_with_end_conditions
  SUBTYPE OF (track_blended_solid);
  end_conditions : LIST[2:2] OF blend_end_condition_select;
WHERE
  WR1: SIZEOF(TYPEOF(SELF) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_CONSTANT_RADIUS_EDGE_BLEND', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_VARIABLE_RADIUS_EDGE_BLEND', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_CHAMFERED_EDGES']) = 1;
  WR2: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[1])) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[2])));
  WR3: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[1])) AND (NOT ((end_conditions[1] :=: SELF\edge_blended_solid.blended_edges[1].edge_start) XOR (end_conditions[1] :=: SELF\edge_blended_solid.blended_edges[1].edge_end))));
  WR4: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[2])) AND (NOT ((end_conditions[2] :=: SELF\edge_blended_solid.blended_edges[HIINDEX(SELF\edge_blended_solid.blended_edges)].edge_start) XOR (end_conditions[2] :=: SELF\edge_blended_solid.blended_edges[HIINDEX(SELF\edge_blended_solid.blended_edges)].edge_end))));
END_ENTITY;

ENTITY transformation_with_derived_angle
  SUPERTYPE OF (ONEOF (draped_defined_transformation,
                       laid_defined_transformation))
  SUBTYPE OF (item_defined_transformation);
  SELF\item_defined_transformation.transform_item_1 : angle_direction_reference_with_a2p3d_select;
  SELF\item_defined_transformation.transform_item_2 : axis2_placement_3d;
DERIVE
  orientation_angle : plane_angle_measure := derive_angle(SELF\item_defined_transformation.transform_item_1, SELF\item_defined_transformation.transform_item_2);
WHERE
  WR1: (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[1] = SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[1]) AND (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[2] = SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[2]) AND (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[3] = SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[3]);
END_ENTITY;

ENTITY transition_feature
  SUPERTYPE OF (ONEOF (chamfer,
                       edge_round,
                       fillet))
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_FEATURE'] * TYPEOF(SELF.of_shape.definition)) = 1;
  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_ROUND', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILLET'] * TYPEOF(SELF)) = 1;
END_ENTITY;

ENTITY transport_feature
  SUBTYPE OF (shape_aspect);
END_ENTITY;

ENTITY triangle_edge
  SUBTYPE OF (triangulated_face_element);
  start_vertex_id : INTEGER;
WHERE
  WR1: (1 <= start_vertex_id) AND (start_vertex_id <= 3);
END_ENTITY;

ENTITY triangle_edge_in_free_edge_loop
  SUBTYPE OF (a3m_erroneous_triangulated_shape_data);
  SELF\a3m_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
DERIVE
  SELF\a3m_data_quality_criterion.measured_data_type : tsdq_measured_data_type_name := tsdqm_boolean_value;
  SELF\a3m_data_quality_criterion.inspected_elements_types : LIST[1:1] OF tsdq_inspected_element_type_name := [tsdqi_triangle_edge];
  SELF\a3m_data_quality_criterion.location_of_extreme_value_types : LIST[0:0] OF tsdq_type_name_for_location_of_extreme_value := [];
INVERSE
  approximation_tolerance : tsdq_positive_length_measure_for_triangle_edge_in_free_edge_loop FOR criterion_to_assign_the_value;
WHERE
  WR1: (SELF.approximation_tolerance.name = 'approximation_tolerance');
END_ENTITY;

ENTITY triangle_vertex
  SUBTYPE OF (triangulated_face_element);
  vertex_id : INTEGER;
WHERE
  WR1: (1 <= vertex_id) AND (vertex_id <= 3);
END_ENTITY;

ENTITY triangular_matrix
  SUBTYPE OF (linearized_table_function);
  default_entry : maths_value;
  lo_up : lower_upper;
  order : ordering_type;
WHERE
  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
  WR2: member_of(default_entry, SELF\maths_function.range);
END_ENTITY;

ENTITY triangulated_face
  SUBTYPE OF (tessellated_face);
  pnindex : LIST[0:?] OF INTEGER;
  triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> SELF\tessellated_face.coordinates.npoints));
END_ENTITY;

ENTITY triangulated_face_element
  ABSTRACT SUPERTYPE OF (ONEOF (representative_triangle,
                                triangle_edge,
                                triangle_vertex,
                                adjacent_triangle_pair))
  SUBTYPE OF (geometric_representation_item);
  triangle_id : INTEGER;
  base_face : triangulated_face;
WHERE
  WR1: (triangle_id > 0) AND (triangle_id <= SIZEOF(base_face.triangles));
END_ENTITY;

ENTITY triangulated_point_cloud_dataset
  SUBTYPE OF (scanned_data_item);
  points : point_cloud_set_or_superset;
  triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
END_ENTITY;

ENTITY triangulated_surface_set
  SUBTYPE OF (tessellated_surface_set);
  pnindex : LIST[0:?] OF INTEGER;
  triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> SELF\tessellated_surface_set.coordinates.npoints));
END_ENTITY;

ENTITY trimmed_curve
  SUBTYPE OF (bounded_curve);
  basis_curve : curve;
  trim_1 : SET[1:2] OF trimming_select;
  trim_2 : SET[1:2] OF trimming_select;
  sense_agreement : BOOLEAN;
  master_representation : trimming_preference;
WHERE
  WR1: (HIINDEX(trim_1) = 1) OR (TYPEOF(trim_1[1]) <> TYPEOF(trim_1[2]));
  WR2: (HIINDEX(trim_2) = 1) OR (TYPEOF(trim_2[1]) <> TYPEOF(trim_2[2]));
END_ENTITY;

ENTITY tsdq_inspection_element
  SUBTYPE OF (representation_item);
INVERSE
  inspected_element : tsdq_inspection_representation_item_relationship FOR related_representation_item;
END_ENTITY;

ENTITY tsdq_inspection_representation_item_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.related_representation_item : tsdq_inspection_element;
WHERE
  WR1: SIZEOF(TYPEOF(SELF\representation_item_relationship.relating_representation_item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADJACENT_TRIANGLE_PAIR', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADJACENT_TRIANGULATED_FACE_PAIR', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_TRIANGLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CONNECTING_EDGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_EDGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGULATED_FACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_VERTEX']) = 1;
END_ENTITY;

ENTITY tsdq_location_of_extreme_value
  SUBTYPE OF (representation_item);
INVERSE
  location_of_extreme_value : tsdq_location_of_extreme_value_representation_item_relationship FOR related_representation_item;
END_ENTITY;

ENTITY tsdq_location_of_extreme_value_representation_item_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.related_representation_item : tsdq_location_of_extreme_value;
WHERE
  WR1: SIZEOF(TYPEOF(SELF\representation_item_relationship.relating_representation_item) * ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_TRIANGLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_EDGE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGULATED_FACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_VERTEX']) = 1;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_abrupt_normal_change_of_adjacent_faces
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : abrupt_normal_change_of_adjacent_faces;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_gap_in_triangulated_face
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : gap_in_triangulated_face;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_gap_in_triangulated_shell_or_solid
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : gap_in_triangulated_shell_or_solid;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_inconsistent_normals_of_adjacent_faces
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : inconsistent_normals_of_adjacent_faces;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_non_manifold_at_triangle_edge
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : non_manifold_at_triangle_edge;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_non_manifold_at_triangle_vertex
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : non_manifold_at_triangle_vertex;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_self_intersecting_triangulated_shell_or_solid
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : self_intersecting_triangulated_shell_or_solid;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY tsdq_positive_length_measure_for_triangle_edge_in_free_edge_loop
  SUBTYPE OF (a3m_data_quality_criterion_specific_applied_value);
  SELF\a3m_data_quality_criterion_specific_applied_value.criterion_to_assign_the_value : triangle_edge_in_free_edge_loop;
  SELF\a3m_data_quality_criterion_specific_applied_value.applied_value : positive_length_measure;
END_ENTITY;

ENTITY turned_knurl
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['diamond','diagonal','straight']);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({6 <= SIZEOF(pdr.used_representation.items) <= 9}))) = 1)) = 1;
  WR3: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of teeth')))) <= 1)))) = 0)))) = 0);
  WR4: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter')))) = 1)))) = 0)))) = 0);
  WR5: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal diameter')))) = 1)))) = 0)))) = 0);
  WR6: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tooth depth')))) <= 1)))) = 0)))) = 0);
  WR7: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root fillet')))) <= 1)))) = 0)))) = 0);
  WR8: (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diametral pitch')))) = 1)))) = 0)))) = 0);
  WR9: ((NOT (SELF\characterized_object.description IN ['diamond','diagonal'])) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'helix angle')))) = 1)))) = 0)))) = 0));
  WR10: ((NOT (SELF\characterized_object.description = 'diagonal')) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation))) | (NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'helix hand')))) = 1)))) = 0)))) = 0));
  WR11: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
  WR12: (SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | (NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar)))) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)))) = 1)))) = 1)))) = 0);
END_ENTITY;

ENTITY twisted_cross_sectional_group_shape_element
  SUBTYPE OF (cross_sectional_group_shape_element);
END_ENTITY;

ENTITY two_direction_repeat_factor
  SUBTYPE OF (one_direction_repeat_factor);
  second_repeat_factor : vector;
END_ENTITY;

ENTITY type_qualifier;
  name : label;
END_ENTITY;

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

ENTITY unary_function_call
  ABSTRACT SUPERTYPE OF (ONEOF (abs_function,
                                minus_function,
                                sin_function,
                                cos_function,
                                tan_function,
                                asin_function,
                                acos_function,
                                exp_function,
                                log_function,
                                log2_function,
                                log10_function,
                                square_root_function))
  SUBTYPE OF (unary_numeric_expression);
END_ENTITY;

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

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

ENTITY unbound_parameter_environment
  SUBTYPE OF (environment);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER' IN TYPEOF(SELF\environment.syntactic_representation)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER_SEMANTICS' IN TYPEOF(SELF\environment.semantics));
END_ENTITY;

ENTITY unbound_variational_parameter
  SUBTYPE OF (variational_parameter);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_PARAMETER_ENVIRONMENT' IN TYPEOF(SELF\generic_variable.interpretation);
END_ENTITY;

ENTITY unbound_variational_parameter_semantics
  SUBTYPE OF (variable_semantics);
END_ENTITY;

ENTITY uncertainty_assigned_representation
  SUBTYPE OF (representation);
  uncertainty : SET[1:?] OF uncertainty_measure_with_unit;
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 unconstrained_pair
  SUBTYPE OF (low_order_kinematic_pair);
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY unconstrained_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : unconstrained_pair;
  actual_placement : axis2_placement_3d;
END_ENTITY;

ENTITY unequally_disposed_geometric_tolerance
  SUBTYPE OF (geometric_tolerance);
  displacement : length_measure_with_unit;
WHERE
  WR1: 'NUMBER' IN TYPEOF(displacement\measure_with_unit.value_component);
END_ENTITY;

ENTITY uniform_curve
  SUBTYPE OF (b_spline_curve);
END_ENTITY;

ENTITY uniform_product_space
  SUBTYPE OF (maths_space, generic_literal);
  base : maths_space;
  exponent : positive_integer;
WHERE
  WR1: expression_is_constant(base);
  WR2: no_cyclic_space_reference(SELF, []);
  WR3: base <> the_empty_space;
END_ENTITY;

ENTITY uniform_resource_identifier
  SUBTYPE OF (descriptive_representation_item);
END_ENTITY;

ENTITY uniform_surface
  SUBTYPE OF (b_spline_surface);
END_ENTITY;

ENTITY uniform_volume
  SUBTYPE OF (b_spline_volume);
END_ENTITY;

ENTITY universal_pair
  SUBTYPE OF (low_order_kinematic_pair);
  input_skew_angle : OPTIONAL plane_angle_measure;
DERIVE
  SELF\low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
  skew_angle : plane_angle_measure := NVL(input_skew_angle, 0.0);
WHERE
  WR1: COS(plane_angle_for_pair_in_radian(SELF, skew_angle)) > 0.0;
END_ENTITY;

ENTITY universal_pair_value
  SUBTYPE OF (pair_value);
  SELF\pair_value.applies_to_pair : universal_pair;
  first_rotation_angle : plane_angle_measure;
  second_rotation_angle : plane_angle_measure;
END_ENTITY;

ENTITY universal_pair_with_range
  SUBTYPE OF (universal_pair);
  lower_limit_first_rotation : OPTIONAL plane_angle_measure;
  upper_limit_first_rotation : OPTIONAL plane_angle_measure;
  lower_limit_second_rotation : OPTIONAL plane_angle_measure;
  upper_limit_second_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_first_rotation) OR NOT EXISTS(upper_limit_first_rotation)) XOR (lower_limit_first_rotation < upper_limit_first_rotation);
  WR2: (NOT EXISTS(lower_limit_second_rotation) OR NOT EXISTS(upper_limit_second_rotation)) XOR (lower_limit_second_rotation < upper_limit_second_rotation);
END_ENTITY;

ENTITY unused_patches
  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_STRIP']);
  WR5: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY unused_shape_element
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
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 user_defined_11
  SUBTYPE OF (representation_item);
END_ENTITY;

ENTITY user_defined_curve_font
  SUBTYPE OF (curve_style_font, mapped_item);
END_ENTITY;

ENTITY user_defined_llai
  SUBTYPE OF (limited_length_area_indicator);
END_ENTITY;

ENTITY user_defined_marker
  SUBTYPE OF (mapped_item, pre_defined_marker);
END_ENTITY;

ENTITY user_defined_terminator_symbol
  SUBTYPE OF (mapped_item, pre_defined_symbol);
END_ENTITY;

ENTITY user_selected_elements
  SUBTYPE OF (representation_item);
  picked_items : SET[1:?] OF representation_item;
END_ENTITY;

ENTITY user_selected_shape_elements
  SUBTYPE OF (user_selected_elements);
  SELF\user_selected_elements.picked_items : SET[1:?] OF shape_representation_item;
END_ENTITY;

ENTITY uuid_attribute
  ABSTRACT SUPERTYPE OF (ONEOF (v5_uuid_attribute,
                                v4_uuid_attribute)
                        ANDOR uuid_attribute_with_approximate_location);
  identifier : uuid;
  identified_item : uuid_set_or_list_attribute_select;
UNIQUE
  UR1: identifier;
END_ENTITY;

ENTITY uuid_attribute_with_approximate_location
  SUBTYPE OF (uuid_attribute);
  location_representation : shape_representation;
  approximate_location : cartesian_point;
WHERE
  WR1: location_representation IN using_representations(approximate_location);
END_ENTITY;

ENTITY uuid_context;
  identifier : uuid;
  frame_of_reference : STRING;
  target : SET[1:?] OF uuid;
UNIQUE
  UR1: identifier;
  UR2: frame_of_reference, target;
WHERE
  WR1: frame_of_reference <> '';
END_ENTITY;

ENTITY uuid_provenance;
  identifier : uuid;
  content : LIST[1:?] OF UNIQUE uuid_relationship;
UNIQUE
  UR1: identifier;
END_ENTITY;

ENTITY uuid_relationship;
  identifier : uuid;
  uuid_1 : uuid;
  uuid_2 : uuid;
  role : uuid_relationship_role;
UNIQUE
  UR1: identifier;
WHERE
  WR1: uuid_1 <> uuid_2;
  WR2: uuid_1 <> identifier;
  WR3: uuid_2 <> identifier;
  WR4: acyclic_uuid_relationship(SELF, [uuid_2], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UUID_RELATIONSHIP');
END_ENTITY;

ENTITY v4_uuid_attribute
  SUBTYPE OF (uuid_attribute);
WHERE
  WR1: SELF\uuid_attribute.identifier[14] = '4';
END_ENTITY;

ENTITY v5_uuid_attribute
  SUBTYPE OF (uuid_attribute);
WHERE
  WR1: SELF\uuid_attribute.identifier[14] = '5';
END_ENTITY;

ENTITY validation
  SUBTYPE OF (group);
END_ENTITY;

ENTITY validation_software_identification;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  software_name : label;
  additional_name : label;
  validation_criteria_or_results : validation_criteria_or_results_select;
END_ENTITY;

ENTITY value_format_type_qualifier;
  format_type : value_format_type;
END_ENTITY;

ENTITY value_function
  SUPERTYPE OF (int_value_function)
  SUBTYPE OF (numeric_expression, unary_generic_expression);
  SELF\unary_generic_expression.operand : string_expression;
END_ENTITY;

ENTITY value_range
  SUBTYPE OF (compound_representation_item);
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_expression
  SUBTYPE OF (variable_semantics);
  property_associated : property_variable_rep_select;
END_ENTITY;

ENTITY variable_semantics
  ABSTRACT SUPERTYPE ;
END_ENTITY;

ENTITY variational_current_representation_relationship
  SUBTYPE OF (representation_relationship);
  SELF\representation_relationship.rep_1 : variational_representation;
  current_result : representation;
UNIQUE
  UR1: current_result;
WHERE
  WR1: QUERY(q <* SELF\representation_relationship.rep_1.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN TYPEOF(q))) = SELF\representation_relationship.rep_2.items;
  WR2: SELF\representation_relationship.rep_1.context_of_items :=: SELF\representation_relationship.rep_2.context_of_items;
  WR3: SIZEOF(QUERY(q <* SELF\representation_relationship.rep_2.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN TYPEOF(q))) = 0;
  WR4: TYPEOF(SELF\representation_relationship.rep_1) - TYPEOF(SELF\representation_relationship.rep_2) = ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION'];
  WR5: current_result :=: SELF\representation_relationship.rep_2;
END_ENTITY;

ENTITY variational_parameter
  ABSTRACT SUPERTYPE OF (ONEOF (bound_variational_parameter,
                                unbound_variational_parameter))
  SUBTYPE OF (variational_representation_item, maths_variable);
  parameter_description : OPTIONAL text;
  parameter_current_value : maths_value;
WHERE
  WR1: member_of(parameter_current_value, SELF\maths_variable.values_space);
  WR2: SELF\maths_variable.name = SELF\representation_item.name;
END_ENTITY;

ENTITY variational_representation
  SUBTYPE OF (representation);
INVERSE
  cm_link : variational_current_representation_relationship FOR rep_1;
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\representation.items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN TYPEOF(q))) > 0;
  WR2: SIZEOF(QUERY(q <* (SELF\representation.items - cm_link.rep_2.items) | invalidate_vrep_item(q))) = 0;
END_ENTITY;

ENTITY variational_representation_item
  ABSTRACT SUPERTYPE OF (auxiliary_geometric_representation_item)
  SUBTYPE OF (representation_item);
WHERE
  WR1: SIZEOF(QUERY(q <* using_representations(SELF) | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION' IN TYPEOF(q)))) = 0;
  WR2: SIZEOF(QUERY(q <* using_representations(SELF) | NOT (SELF IN q.items))) = 0;
END_ENTITY;

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

ENTITY vector_style
  SUBTYPE OF (curve_style, pre_defined_terminator_symbol);
END_ENTITY;

ENTITY vee_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | (NOT (SIZEOF(impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 6)))) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(QUERY(srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'profile angle') OR (srwp_i.name = 'tilt angle') OR (srwp_i.name = 'profile radius') OR (srwp_i.name = 'first length') OR (srwp_i.name = 'second length'))) = SIZEOF(pdr.used_representation.items)))) = 1)) = 1;
  WR5: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'profile radius'))) <= 1))) = 0))) = 0;
  WR7: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'profile angle'))) = 1))) = 0))) = 0;
  WR8: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tilt angle'))) = 1))) = 0))) = 0;
  WR9: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR10: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'first length'))) <= 1))) = 0))) = 0;
  WR11: SIZEOF(QUERY(pd <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'second length'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY velocity_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0);
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 : OPTIONAL label;
  purpose : text;
  description : OPTIONAL text;
END_ENTITY;

ENTITY versioned_action_request_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_versioned_action_request : versioned_action_request;
  related_versioned_action_request : versioned_action_request;
END_ENTITY;

ENTITY vertex
  SUBTYPE OF (topological_representation_item);
END_ENTITY;

ENTITY vertex_loop
  SUBTYPE OF (loop);
  loop_vertex : vertex;
END_ENTITY;

ENTITY vertex_point
  SUBTYPE OF (vertex, geometric_representation_item);
  vertex_geometry : point;
END_ENTITY;

ENTITY vertex_shell
  SUBTYPE OF (topological_representation_item);
  vertex_shell_extent : vertex_loop;
END_ENTITY;

ENTITY view_volume
  SUBTYPE OF (founded_item);
  projection_type : central_or_parallel;
  projection_point : cartesian_point;
  view_plane_distance : length_measure;
  front_plane_distance : length_measure;
  front_plane_clipping : BOOLEAN;
  back_plane_distance : length_measure;
  back_plane_clipping : BOOLEAN;
  view_volume_sides_clipping : BOOLEAN;
  view_window : planar_box;
INVERSE
  camera_usages : SET[1:?] OF camera_model_d3 FOR perspective_of_volume;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(SELF\view_volume.view_window.placement)) OR (dot_product((representation_item(' ') || geometric_representation_item() || direction([0.0,0.0,1.0])), view_window\planar_box.placement\axis2_placement_3d.p[3]) = 1.0);
  WR2: view_plane_distance = view_window.placement\placement.location.coordinates[3];
END_ENTITY;

ENTITY visual_appearance_representation
  SUBTYPE OF (representation);
WHERE
  WR1: ({3 <= SIZEOF(SELF.items) <= 9}) AND (SIZEOF(QUERY(i <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (i.name IN ['colour id','colour name','lustre','pattern','transparency','orientation']))) + SIZEOF(QUERY(i <* items | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] * TYPEOF(i)) = 1) AND (i.name IN ['refraction index','opacity']))) + SIZEOF(QUERY(i <* items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_FILE' IN TYPEOF(i)) AND (i.name IN ['texture map']))) = SIZEOF(SELF.items));
  WR2: SIZEOF(QUERY(i <* SELF.items | i.name = 'colour id')) = 1;
  WR3: SIZEOF(QUERY(i <* SELF.items | i.name = 'lustre')) = 1;
  WR4: SIZEOF(QUERY(i <* SELF.items | i.name = 'colour name')) <= 1;
  WR5: SIZEOF(QUERY(i <* SELF.items | i.name = 'pattern')) <= 1;
  WR6: SIZEOF(QUERY(i <* SELF.items | i.name = 'transparency')) <= 1;
  WR7: SIZEOF(QUERY(i <* SELF.items | i.name = 'texture map')) <= 1;
  WR8: SIZEOF(QUERY(i <* SELF.items | i.name = 'refraction index')) <= 1;
  WR9: SIZEOF(QUERY(i <* SELF.items | i.name = 'opacity')) <= 1;
  WR10: SIZEOF(QUERY(i <* SELF.items | i.name = 'orientation')) <= 1;
  WR11: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) = 1) AND (SIZEOF(QUERY(pdr <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | SIZEOF(QUERY(gpa <* USEDIN(pdr.definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN TYPEOF(gpa.base_definition)) AND (gpa\general_property_association.base_definition\general_property.name = 'surface_condition'))) = 1)) = 1);
END_ENTITY;

ENTITY volume
  SUPERTYPE OF (ONEOF (block_volume,
                       wedge_volume,
                       spherical_volume,
                       cylindrical_volume,
                       eccentric_conical_volume,
                       toroidal_volume,
                       pyramid_volume,
                       b_spline_volume,
                       ellipsoid_volume,
                       tetrahedron_volume,
                       hexahedron_volume,
                       locally_refined_spline_volume))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SELF\geometric_representation_item.dim = 3;
END_ENTITY;

ENTITY volume_measure_with_unit
  SUBTYPE OF (measure_with_unit);
WHERE
  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
END_ENTITY;

ENTITY wedge_volume
  SUBTYPE OF (volume);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
  ltx : length_measure;
WHERE
  WR1: ((0.0 <= ltx) AND (ltx < x));
END_ENTITY;

ENTITY week_of_year_and_day_date
  SUBTYPE OF (date);
  week_component : week_in_year_number;
  day_component : OPTIONAL day_in_week_number;
WHERE
  WR1: NOT (leap_year(SELF\date.year_component)) OR {1 <= (day_component + (7 * (week_component - 1))) <= 366};
  WR2: leap_year(SELF\date.year_component) OR {1 <= (day_component + (7 * (week_component - 1))) <= 365};
END_ENTITY;

ENTITY wire_shell
  SUBTYPE OF (topological_representation_item);
  wire_shell_extent : SET[1:?] OF loop;
WHERE
  WR1: NOT mixed_loop_type_set(wire_shell_extent);
END_ENTITY;

ENTITY wrong_element_name
  SUBTYPE OF (externally_conditioned_data_quality_criterion);
WHERE
  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
END_ENTITY;

ENTITY wrongly_oriented_void
  SUBTYPE OF (erroneous_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

ENTITY wrongly_placed_loop
  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BOUND']);
  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
END_ENTITY;

ENTITY wrongly_placed_void
  SUBTYPE OF (erroneous_manifold_solid_brep);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
WHERE
  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL']);
  WR4: validate_accuracy_types(SELF, []);
END_ENTITY;

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

ENTITY year_month
  SUBTYPE OF (date);
  month_component : month_in_year_number;
END_ENTITY;

ENTITY zero_surface_normal
  SUBTYPE OF (geometry_with_local_irregularity);
  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
WHERE
  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
  WR4: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
END_ENTITY;

ENTITY zone_breakdown_context
  SUBTYPE OF (breakdown_context);
END_ENTITY;

ENTITY zone_element_usage
  SUBTYPE OF (breakdown_element_usage);
END_ENTITY;

ENTITY zone_structural_makeup
  SUPERTYPE OF (ONEOF ((thickness_laminate_table
               AND smeared_material_definition), (
                  percentage_laminate_table
              AND smeared_material_definition),
                 thickness_laminate_table,
                 percentage_laminate_table,
                 smeared_material_definition))
  SUBTYPE OF (laminate_table);
END_ENTITY;

RULE alternative_solution_requires_solution_definition FOR
(product_definition_formation);
    LOCAL
  solution_versions : SET OF product_definition_formation := [];
    END_LOCAL;
  solution_versions := QUERY(pdf
                             <* product_definition_formation
                             | SIZEOF(QUERY(prpc
                                            <* USEDIN(pdf.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
                                            | prpc.name = 'alternative solution')) =
                               1);
WHERE
  WR1: SIZEOF(QUERY(pdf <* solution_versions | SIZEOF(QUERY(pd <* USEDIN(pdf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION') | pd.frame_of_reference.name = 'alternative definition')) <> 1)) = 0;
END_RULE;

RULE ap242_application_protocol_definition_required FOR
(application_context);
WHERE
  WR1: SIZEOF(QUERY(ac <* application_context | (SIZEOF(QUERY(apd <* USEDIN(ac, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLICATION_PROTOCOL_DEFINITION.APPLICATION') | apd.application_interpreted_model_schema_name = 'ap242_managed_model_based_3d_engineering_mim_lf')) > 0))) > 0;
END_RULE;

RULE ap242_subtype_mandatory_shape_representation FOR
(application_context, shape_representation);
WHERE
  WR1: NOT (SIZEOF(QUERY(ac <* application_context | (SIZEOF(QUERY(apd <* USEDIN(ac, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLICATION_PROTOCOL_DEFINITION.APPLICATION') | apd.application_interpreted_model_schema_name = 'ap242_managed_model_based_3d_engineering_mim_lf')) > 0))) > 0) OR (SIZEOF(QUERY(sr <* shape_representation | NOT ((SIZEOF(ap242_shape_representation_reference_types * TYPEOF(sr)) = 1) OR (SIZEOF(QUERY(it <* sr\representation.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(it)))) = 0) OR (SIZEOF(QUERY(sdr <* QUERY(pdr <* USEDIN(sr, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN TYPEOF(pdr)) | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP'] * TYPEOF(sdr.definition)) = 1))) = 0)))) = 0);
END_RULE;

RULE breakdown_element_requires_product_definition FOR
(product_definition_formation);
WHERE
  WR1: SIZEOF(QUERY(pdf <* product_definition_formation | (SIZEOF(QUERY(prpc <* USEDIN(pdf.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'functionality')) = 1) AND (SIZEOF(QUERY(pd <* USEDIN(pdf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION') | pd.frame_of_reference.name = 'functional definition')) < 1))) = 0;
  WR2: SIZEOF(QUERY(pdf <* product_definition_formation | (SIZEOF(QUERY(prpc <* USEDIN(pdf.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'conceptual design')) = 1) AND (SIZEOF(QUERY(pd <* USEDIN(pdf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION') | pd.frame_of_reference.name = 'conceptual definition')) < 1))) = 0;
END_RULE;

RULE chamfer_offset_requires_faces FOR
(chamfer_offset, property_definition_representation);
WHERE
  WR1: (SIZEOF(QUERY(co <* chamfer_offset | NOT (1 = SIZEOF(QUERY(pdr <* property_definition_representation | ((pdr\property_definition_representation.definition\property_definition.definition = co) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (((pdr\property_definition_representation.definition\property_definition.definition.description = 'first offset') AND (pdr.used_representation.name = 'first face shape')) OR ((pdr\property_definition_representation.definition\property_definition.definition.description = 'second offset') AND (pdr.used_representation.name = 'second face shape'))))))))) = 0);
END_RULE;

RULE chamfer_requires_faces FOR
(chamfer, property_definition_representation);
WHERE
  WR1: (SIZEOF(QUERY(cf <* chamfer | NOT (1 = SIZEOF(QUERY(pdr <* property_definition_representation | ((pdr\property_definition_representation.definition\property_definition.definition = cf) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'chamfer face'))))))) = 0);
END_RULE;

RULE compatible_dimension FOR
(cartesian_point, direction, geometric_representation_context);
WHERE
  WR1: ((SIZEOF(cartesian_point) = 0) AND (SIZEOF(direction) = 0) AND (SIZEOF(geometric_representation_context) = 0)) OR check_geometric_dimension(cartesian_point, direction, geometric_representation_context);
END_RULE;

RULE component_class_for_assembly_select FOR
(composite_assembly_sequence_definition, next_assembly_usage_occurrence, product_related_product_category);
    LOCAL
  i : INTEGER := 0;
  j : INTEGER := 0;
  k : INTEGER := 0;
  dkuhr : LOGICAL := TRUE;
  nnauo : INTEGER := 0;
  nprpc : INTEGER := 0;
  rp : product;
    END_LOCAL;
  REPEAT i := LOINDEX(composite_assembly_sequence_definition) TO HIINDEX(composite_assembly_sequence_definition);
    nnauo := 0;
    REPEAT j := LOINDEX(next_assembly_usage_occurrence) TO HIINDEX(next_assembly_usage_occurrence);
      IF (composite_assembly_sequence_definition[i] = next_assembly_usage_occurrence[j].relating_product_definition)
      THEN
        rp := next_assembly_usage_occurrence[j].related_product_definition.formation.of_product;
        nprpc := 0;
        REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
          IF ((rp IN product_related_product_category[k].products) AND
              (product_related_product_category[k].name IN
               ['ply','ply laminate','filament laminate','processed core','composite assembly']))
          THEN
            nprpc := nprpc + 1;
          END_IF;
        END_REPEAT;
        IF (nprpc = 1)
        THEN
          nnauo := nnauo + 1;
        ELSE
          dkuhr := FALSE;
          ESCAPE;
        END_IF;
      END_IF;
    END_REPEAT;
    IF (dkuhr = FALSE)
    THEN
      ESCAPE;
    END_IF;
    IF (nnauo = 0)
    THEN
      dkuhr := FALSE;
      ESCAPE;
    END_IF;
  END_REPEAT;
WHERE
  WR1: dkuhr;
END_RULE;

RULE consistent_uncertainty FOR
(global_uncertainty_assigned_context, qualified_representation_item, uncertainty_assigned_representation);
WHERE
  WR1: SIZEOF(QUERY(guac <* global_uncertainty_assigned_context | SIZEOF(QUERY(u1 <* guac.uncertainty | SIZEOF(QUERY(u2 <* guac.uncertainty | u2.name = u1.name)) > 1)) > 0)) = 0;
  WR2: SIZEOF(QUERY(uar <* uncertainty_assigned_representation | SIZEOF(QUERY(u1 <* uar.uncertainty | SIZEOF(QUERY(u2 <* uar.uncertainty | u2.name = u1.name)) > 1)) > 0)) = 0;
  WR3: SIZEOF(QUERY(qri <* qualified_representation_item | SIZEOF(QUERY(u1 <* qri.qualifiers | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNCERTAINTY_QUALIFIER' IN TYPEOF(u1)) AND (SIZEOF(QUERY(u2 <* qri.qualifiers | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNCERTAINTY_QUALIFIER' IN TYPEOF(u2)) AND (u2\uncertainty_qualifier.measure_name = u1\uncertainty_qualifier.measure_name))) > 1))) > 0)) = 0;
END_RULE;

RULE constraint_definition_requires_constraint_category FOR
(product_definition);
    LOCAL
  constraint_definitions : SET OF product_definition := [];
    END_LOCAL;
  constraint_definitions := QUERY(pd
                                  <* product_definition
                                  | (pd.frame_of_reference.name = 'design constraint definition'));
WHERE
  WR1: SIZEOF(QUERY(pd <* constraint_definitions | (SIZEOF(QUERY(prpc <* USEDIN(pd.formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'requirement')) = 0))) = 0;
END_RULE;

RULE design_constraint_requires_product_definition FOR
(product_definition_formation);
WHERE
  WR1: SIZEOF(QUERY(pdf <* product_definition_formation | (SIZEOF(QUERY(prpc <* USEDIN(pdf.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'requirement')) > 0) AND (SIZEOF(QUERY(pd <* USEDIN(pdf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION') | pd.frame_of_reference.name = 'design constraint definition')) < 1))) = 0;
END_RULE;

RULE dimensioning_data_requires_document FOR
(applied_document_reference, product_definition_context_association, role_association);
    LOCAL
  adr : SET OF applied_document_reference := (QUERY(adr
                                                    <* applied_document_reference
                                                    | (adr\document_reference.assigned_document\document.kind\document_type.product_data_type =
                                                       'Standards Document') AND
                                                      ((adr\document_reference.assigned_document\document.id =
                                                        'ASME Y14.41-2003') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ASME Y14.41-2019') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ASME Y14.5M-1994') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ASME Y14.5M-2018') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ISO 1101') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ISO 1101: 2004') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ISO 8015') OR
                                                       (adr\document_reference.assigned_document\document.id =
                                                        'ISO 14405-1'))));
  pdca : SET OF product_definition_context_association := (QUERY(pdca
                                                                 <* product_definition_context_association
                                                                 | (pdca\product_definition_context_association.role\product_definition_context_role.name =
                                                                    'additional context') AND
                                                                   (pdca\product_definition_context_association.frame_of_reference\application_context_element.name =
                                                                    'Geometric Dimensioning and Tolerancing Product Specification')));
  ra : SET OF role_association := (QUERY(ra
                                         <* role_association
                                         | ra\role_association.role\object_role.name = 'dimensioning standard'));
  ra1 : SET OF role_association := [];
  pdpdca : SET OF product_definition := [];
  pdadr : SET OF product_definition := [];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT i := 1 TO HIINDEX(pdca);
    pdpdca := pdpdca + pdca[i]\product_definition_context_association.definition;
  END_REPEAT;
  REPEAT i := 1 TO HIINDEX(adr);
    ra1 := bag_to_set(USEDIN(adr[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE'));
    IF (ra1 * ra) <> ra1
    THEN
      pass := FALSE;
    END_IF;
    REPEAT j := 1 TO HIINDEX(adr[i]\applied_document_reference.items);
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
         TYPEOF(adr[i]\applied_document_reference.items[j])
      THEN
        pdadr := pdadr + adr[i]\applied_document_reference.items[j];
      END_IF;
    END_REPEAT;
  END_REPEAT;
WHERE
  WR1: pass;
  WR2: pdpdca = pdadr;
END_RULE;

RULE edge_round_requires_faces FOR
(edge_round, property_definition_representation);
WHERE
  WR1: (0 = SIZEOF(QUERY(er <* edge_round | NOT (1 = SIZEOF(QUERY(pdr <* property_definition_representation | ((pdr\property_definition_representation.definition\property_definition.definition = er) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'edge round face'))))))));
  WR2: (SIZEOF(QUERY(er <* edge_round | NOT (1 = SIZEOF(QUERY(pdr <* property_definition_representation | ((pdr\property_definition_representation.definition\property_definition.definition = er) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape'))))))) = 0);
  WR3: (SIZEOF(QUERY(er <* edge_round | NOT (1 = SIZEOF(QUERY(pdr <* property_definition_representation | ((pdr\property_definition_representation.definition\property_definition.definition = er) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape'))))))) = 0);
END_RULE;

RULE external_version_assignments_are_valid FOR
(applied_external_identification_assignment);
WHERE
  WR1: SIZEOF(QUERY(aia <* applied_external_identification_assignment | NOT external_version_assignment_is_valid(aia))) = 0;
END_RULE;

RULE machining_feature_definition_constraints FOR
(feature_definition);
    LOCAL
  mfds : SET OF feature_definition := [];
    END_LOCAL;
  mfds := QUERY(temp
                <* feature_definition
                | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MACHINING_FEATURE_DEFINITION' IN
                  TYPEOF(temp));
WHERE
  WR1: SIZEOF(QUERY(mfd <* mfds | NOT (SIZEOF(QUERY(pdr <* get_property_definition_representations(mfd) | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))) <= 1))) = 0;
  WR2: SIZEOF(QUERY(mfd <* mfds | NOT (SIZEOF(QUERY(pd <* USEDIN(mfd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0))) = 0;
  WR3: SIZEOF(QUERY(mfd <* mfds | NOT ((NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTSIDE_PROFILE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REMOVAL_VOLUME', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FLAT_FACE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_END', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STEP'] * TYPEOF(mfds)) = 1)) OR ((SIZEOF(QUERY(pdr <* get_property_definition_representations(mfd) | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'maximum feature limit'))) >= 0))))) = 0;
END_RULE;

RULE material_for_coating_layer FOR
(shape_aspect);
    LOCAL
  coating_layers : SET OF shape_aspect := [];
    END_LOCAL;
  coating_layers := QUERY(r <* shape_aspect | (r.name = 'coating layer'));
WHERE
  WR1: SIZEOF(QUERY(r <* coating_layers | SIZEOF(USEDIN(r, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_DESIGNATION.DEFINITIONS')) <> 1)) = 0;
END_RULE;

RULE metadata_requires_document FOR
(applied_document_reference, product_definition_context_association, role_association);
    LOCAL
  adr : SET OF applied_document_reference := (QUERY(adr
                                                    <* applied_document_reference
                                                    | (adr\document_reference.assigned_document\document.kind\document_type.product_data_type =
                                                       'Standards Document') AND
                                                      ((adr\document_reference.assigned_document\document.id =
                                                        'ASME Y14.47-2023'))));
  pdca : SET OF product_definition_context_association := (QUERY(pdca
                                                                 <* product_definition_context_association
                                                                 | (pdca\product_definition_context_association.role\product_definition_context_role.name =
                                                                    'additional context') AND
                                                                   (pdca\product_definition_context_association.frame_of_reference\application_context_element.name =
                                                                    'Model Organization Practices')));
  ra : SET OF role_association := (QUERY(ra
                                         <* role_association
                                         | ra\role_association.role\object_role.name =
                                           'Model Organization Practices standard'));
  ra1 : SET OF role_association := [];
  pdpdca : SET OF product_definition := [];
  pdadr : SET OF product_definition := [];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT i := 1 TO HIINDEX(pdca);
    pdpdca := pdpdca + pdca[i]\product_definition_context_association.definition;
  END_REPEAT;
  REPEAT i := 1 TO HIINDEX(adr);
    ra1 := bag_to_set(USEDIN(adr[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE'));
    IF (ra1 * ra) <> ra1
    THEN
      pass := FALSE;
    END_IF;
    REPEAT j := 1 TO HIINDEX(adr[i]\applied_document_reference.items);
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
         TYPEOF(adr[i]\applied_document_reference.items[j])
      THEN
        pdadr := pdadr + adr[i]\applied_document_reference.items[j];
      END_IF;
    END_REPEAT;
  END_REPEAT;
WHERE
  WR1: pass;
  WR2: pdpdca = pdadr;
END_RULE;

RULE non_uniform_zone_definition_constraint FOR
(tolerance_zone_definition, tolerance_zone, tolerance_zone_form);
    LOCAL
  tzf_set : SET OF tolerance_zone_form := QUERY(tzf
                                                <* tolerance_zone_form
                                                | tzf\tolerance_zone_form.name = 'non uniform');
  nuzd_set : SET OF tolerance_zone_definition := QUERY(tzd
                                                       <* tolerance_zone_definition
                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_UNIFORM_ZONE_DEFINITION' IN
                                                         TYPEOF(tzd));
    END_LOCAL;
WHERE
  WR1: QUERY(tzd <* nuzd_set | (tzd\tolerance_zone_definition.zone\tolerance_zone.form IN tzf_set)) = nuzd_set;
END_RULE;

RULE plib_property_reference_requires_name_scope FOR
(externally_defined_general_property);
    LOCAL
  known_sourced_properties : SET OF externally_defined_general_property;
    END_LOCAL;
  known_sourced_properties := QUERY(edc
                                    <* externally_defined_general_property
                                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN
                                      TYPEOF(edc.source));
WHERE
  WR1: SIZEOF(QUERY(edgp <* known_sourced_properties | (SIZEOF(QUERY(edir <* USEDIN(edgp, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_ITEM_RELATIONSHIP.RELATING_ITEM') | (edir.name = 'name scope') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_CLASS' IN TYPEOF(edir.related_item)) AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN TYPEOF(edir.related_item.source)))) <> 1))) = 0;
END_RULE;

RULE plib_property_reference_requires_version FOR
(externally_defined_general_property);
    LOCAL
  plib_properties : SET OF externally_defined_general_property := [];
    END_LOCAL;
  plib_properties := QUERY(edgp
                           <* externally_defined_general_property
                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN
                              TYPEOF(edgp.source)) AND
                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE.NAME' =
                              'ISO 13584 library'));
WHERE
  WR1: SIZEOF(QUERY(edgp <* plib_properties | (SIZEOF(QUERY(edir <* USEDIN(edgp, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT.ITEMS') | (edir.role.name = 'version'))) <> 1))) = 0;
END_RULE;

RULE ply_reference FOR
(ply_laminate_sequence_definition, next_assembly_usage_occurrence, product_related_product_category);
    LOCAL
  i : INTEGER;
  j : INTEGER;
  k : INTEGER;
  dkuhr : LOGICAL := TRUE;
  nnauo : INTEGER;
  nprpc : INTEGER := 0;
  rp : product;
    END_LOCAL;
  REPEAT i := LOINDEX(ply_laminate_sequence_definition) TO HIINDEX(ply_laminate_sequence_definition);
    nnauo := 0;
    REPEAT j := LOINDEX(next_assembly_usage_occurrence) TO HIINDEX(next_assembly_usage_occurrence);
      IF (ply_laminate_sequence_definition[i] = next_assembly_usage_occurrence[j].relating_product_definition)
      THEN
        rp := next_assembly_usage_occurrence[j].related_product_definition.formation.of_product;
        nprpc := 0;
        REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
          IF ((product_related_product_category[k].name = 'ply') AND
              (rp IN product_related_product_category[k].products))
          THEN
            nprpc := nprpc + 1;
          END_IF;
        END_REPEAT;
        IF (nprpc = 1)
        THEN
          nnauo := nnauo + 1;
        ELSE
          dkuhr := FALSE;
          ESCAPE;
        END_IF;
      END_IF;
    END_REPEAT;
    IF (dkuhr = FALSE)
    THEN
      ESCAPE;
    END_IF;
    IF (nnauo = 0)
    THEN
      dkuhr := FALSE;
      ESCAPE;
    END_IF;
  END_REPEAT;
WHERE
  WR1: dkuhr;
END_RULE;

RULE ply_stock_material_select FOR
(product_related_product_category, make_from_usage_option);
    LOCAL
  i : INTEGER;
  j : INTEGER;
  k : INTEGER;
  kp : INTEGER;
  dkuhr : LOGICAL;
  nmfuo : INTEGER;
  nprpc : INTEGER := 0;
  rp : product;
    END_LOCAL;
  dkuhr := TRUE;
  REPEAT kp := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
    IF (product_related_product_category[kp].name = 'ply')
    THEN
      REPEAT i := LOINDEX(product_related_product_category[kp].products) TO HIINDEX(product_related_product_category[kp].products);
        nmfuo := 0;
        REPEAT j := LOINDEX(make_from_usage_option) TO HIINDEX(make_from_usage_option);
          rp := make_from_usage_option[j].related_product_definition.formation.of_product;
          IF (product_related_product_category[kp].products[i] = rp)
          THEN
            REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
              IF ((rp IN product_related_product_category[k].products) AND
                  (product_related_product_category[k].name IN
                   ['isotropic material','filament assembly','discontinuous fiber assembly']))
              THEN
                nprpc := nprpc + 1;
              END_IF;
            END_REPEAT;
            IF (nprpc = 1)
            THEN
              nmfuo := nmfuo + 1;
            ELSE
              dkuhr := FALSE;
              ESCAPE;
            END_IF;
          END_IF;
        END_REPEAT;
        IF (dkuhr = FALSE)
        THEN
          ESCAPE;
        END_IF;
        IF (nmfuo <> 1)
        THEN
          dkuhr := FALSE;
          ESCAPE;
        END_IF;
      END_REPEAT;
    END_IF;
  END_REPEAT;
WHERE
  WR1: dkuhr;
END_RULE;

RULE product_concept_feature_requires_category FOR
(product_concept_feature);
WHERE
  WR1: SIZEOF(QUERY(pcf <* product_concept_feature | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE'] * TYPEOF(pcf)) = 0) AND (SIZEOF(QUERY(aga <* USEDIN(pcf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_GROUP_ASSIGNMENT.ITEMS') | (aga\group_assignment.role\object_role.name = 'specification category member') AND ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN TYPEOF(aga.assigned_group)))) <> 1))) = 0;
END_RULE;

RULE product_definition_replacement_requires_effectivity_assignment FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name = 'definition replacement') AND (SIZEOF(USEDIN(pdr, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EFFECTIVITY_ASSIGNMENT.ITEMS')) = 0))) = 0;
END_RULE;

RULE restrict_alternative_definition FOR
(product_definition);
    LOCAL
  solution_definitions : SET OF product_definition := [];
    END_LOCAL;
  solution_definitions := QUERY(pd
                                <* product_definition
                                | (pd.frame_of_reference.name = 'alternative definition'));
WHERE
  WR1: SIZEOF(QUERY(pd <* solution_definitions | (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | pdr.name = 'solution alternative definition')) <> 1))) = 0;
  WR2: SIZEOF(QUERY(pd <* solution_definitions | NOT (pd.name IN ['technical','supplier','technical supplier','']))) = 0;
  WR3: SIZEOF(QUERY(pd <* solution_definitions | (pd.name IN ['supplier','technical supplier']) AND (SIZEOF(QUERY(aoa <* USEDIN(pd.formation, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ORGANIZATION_ASSIGNMENT.ITEMS') | aoa.role.name = 'supplier')) <> 1))) = 0;
END_RULE;

RULE restrict_assembly_category FOR
(product_definition);
    LOCAL
  assembly_definitions : SET OF product_definition := [];
    END_LOCAL;
  assembly_definitions := QUERY(pd
                                <* product_definition
                                | SIZEOF(QUERY(pdca
                                               <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION')
                                               | pdca.frame_of_reference.name = 'assembly definition')) >
                                  0);
WHERE
  WR1: SIZEOF(QUERY(pd <* assembly_definitions | NOT ('assembly' IN categories_of_product(pd.formation.of_product)))) = 0;
END_RULE;

RULE restrict_centre_of_mass_representation FOR
(representation);
WHERE
  WR1: SIZEOF(QUERY(r <* representation | (r.name = 'centre of mass') AND ((SIZEOF(r.items) <> 1) OR (SIZEOF(QUERY(i <* r.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(i)) AND (i.name = 'centre point'))) <> 1)))) = 0;
END_RULE;

RULE restrict_classification_assignments FOR
(applied_classification_assignment);
WHERE
  WR1: SIZEOF(QUERY(aia <* applied_classification_assignment | NOT class_assignment_is_valid(aia))) = 0;
END_RULE;

RULE restrict_collection_category FOR
(product_definition);
    LOCAL
  collection_definitions : SET OF product_definition := [];
    END_LOCAL;
  collection_definitions := QUERY(pd
                                  <* product_definition
                                  | SIZEOF(QUERY(pdca
                                                 <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION')
                                                 | pdca.frame_of_reference.name = 'collection definition')) >
                                    0);
WHERE
  WR1: SIZEOF(QUERY(pd <* collection_definitions | NOT ('collection' IN categories_of_product(pd.formation.of_product)))) = 0;
END_RULE;

RULE restrict_concept_feature_operator FOR
(concept_feature_operator);
WHERE
  WR1: SIZEOF(QUERY(cfo <* concept_feature_operator | NOT (cfo.name IN ['and','or','oneof','not','implication']))) = 0;
  WR2: SIZEOF(QUERY(cfo <* concept_feature_operator | (cfo.name = 'implication') AND (SIZEOF(QUERY(cfrwc <* USEDIN(cfo, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.CONDITIONAL_OPERATOR') | SIZEOF(QUERY(ccf <* USEDIN(cfrwc, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE.CONDITION') | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE' IN TYPEOF(ccf)))) > 0)) > 0))) = 0;
  WR3: SIZEOF(QUERY(cfo <* concept_feature_operator | (cfo.name = 'not') AND (SIZEOF(QUERY(cfrwc <* USEDIN(cfo, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.CONDITIONAL_OPERATOR') | cfrwc.related_product_concept_feature :<>: cfrwc.relating_product_concept_feature)) > 0))) = 0;
END_RULE;

RULE restrict_configuration_design_for_class_breakdown_association FOR
(configuration_design);
WHERE
  WR1: SIZEOF(QUERY(cd <* configuration_design | (cd.name = 'functionality') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(cd.design)) OR (cd.design\product_definition.frame_of_reference.name <> 'functional definition')))) = 0;
  WR2: SIZEOF(QUERY(cd <* configuration_design | (cd.name = 'realization') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(cd.design)) OR (cd.design\product_definition.frame_of_reference.name <> 'conceptual definition')))) = 0;
  WR3: SIZEOF(QUERY(cd <* configuration_design | (cd.name IN ['functionality','realization']) AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CLASS' IN TYPEOF(cd.configuration.item_concept))))) = 0;
END_RULE;

RULE restrict_configuration_design_for_design_constraint FOR
(configuration_design);
WHERE
  WR1: SIZEOF(QUERY(cd <* configuration_design | (cd.name = 'design constraint usage') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(cd.design)) OR (cd.design\product_definition.frame_of_reference.name <> 'design constraint definition')))) = 0;
END_RULE;

RULE restrict_group_relationship_for_classification_hierarchy FOR
(group_relationship);
WHERE
  WR1: SIZEOF(QUERY(gr <* group_relationship | (gr\group_relationship.name = 'class hierarchy') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS' IN TYPEOF(gr\group_relationship.related_group)) OR NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS' IN TYPEOF(gr\group_relationship.relating_group))))) = 0;
END_RULE;

RULE restrict_group_relationship_for_specification_category FOR
(group_relationship);
WHERE
  WR1: SIZEOF(QUERY(gr <* group_relationship | (gr.name = 'specification category hierarchy') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN TYPEOF(gr.related_group)) OR NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN TYPEOF(gr.relating_group))))) = 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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 restrict_part_occurrence FOR
(product_definition);
    LOCAL
  part_occurrences : SET OF product_definition := QUERY(pd
                                                        <* product_definition
                                                        | (pd.frame_of_reference.name = 'part occurrence'));
    END_LOCAL;
WHERE
  WR1: SIZEOF(QUERY(pd <* part_occurrences | (NOT (pd.name IN ['single instance','selected instance','quantified instance','specified instance'])))) = 0;
  WR2: SIZEOF(QUERY(pd <* part_occurrences | (SIZEOF(QUERY(pdr <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | pdr.name = 'definition usage')) <> 1) AND (SIZEOF(QUERY(cd <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.DESIGN') | (cd.name = 'occurrence usage definition') AND (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_IDENTIFICATION' IN TYPEOF(cd.configuration))))) <> 1))) = 0;
  WR3: SIZEOF(QUERY(pd <* part_occurrences | (SIZEOF(QUERY(cd <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN TYPEOF(cd)))) = 0) AND (SIZEOF(USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.OCCURRENCE')) = 0))) = 0;
  WR4: SIZEOF(QUERY(pd <* part_occurrences | (pd.name = 'selected instance') AND NOT valid_selected_instance_representation(pd))) = 0;
  WR5: SIZEOF(QUERY(pd <* part_occurrences | (pd.name = 'quantified instance') AND (SIZEOF(QUERY(ppd <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION') | (ppd.name = 'occurrence quantity') AND (SIZEOF(QUERY(pdr <* USEDIN(ppd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (pdr.used_representation.name = 'quantity') AND (SIZEOF(pdr.used_representation.items) = 1) AND (SIZEOF(QUERY(i <* pdr.used_representation.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (i.name = 'quantity measure'))) = 1))) = 1))) = 0))) = 0;
  WR6: SIZEOF(QUERY(pd <* part_occurrences | (pd.name = 'specified instance') AND (SIZEOF(QUERY(pdor <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.OCCURRENCE') | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPECIFIED_HIGHER_USAGE_OCCURRENCE' IN TYPEOF(pdor.occurrence_usage))) = 0))) = 0;
END_RULE;

RULE restrict_part_occurrence_category FOR
(product_definition);
    LOCAL
  part_occurrences : SET OF product_definition := QUERY(pd
                                                        <* product_definition
                                                        | (pd.frame_of_reference.name = 'part occurrence'));
    END_LOCAL;
WHERE
  WR1: SIZEOF(QUERY(pd <* part_occurrences | (SIZEOF(QUERY(prpc <* USEDIN(pd.formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name IN ['part','raw material','tool'])) = 0))) = 0;
END_RULE;

RULE restrict_product_definitions_for_base_element FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name = 'solution alternative definition') AND (NOT (pdr.relating_product_definition.frame_of_reference.name IN ['alternative definition','functional definition','conceptual definition']) OR (pdr.related_product_definition.frame_of_reference.name <> 'alternative definition')))) = 0;
END_RULE;

RULE restrict_product_definitions_for_collection FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name = 'collection membership') AND ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR (pdr.related_product_definition.frame_of_reference.name <> 'part occurrence') OR (SIZEOF(QUERY(pdca <* USEDIN(pdr.relating_product_definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION') | (pdca.role.name = 'part definition type') AND (pdca.frame_of_reference.name = 'collection definition'))) = 0)))) = 0;
END_RULE;

RULE restrict_product_definitions_for_definition_usage FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name = 'definition usage') AND ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR (pdr.related_product_definition.frame_of_reference.name <> 'part occurrence')))) = 0;
END_RULE;

RULE restrict_product_definitions_for_design_constraint_association FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name = 'design constraint association') AND ((pdr.relating_product_definition.frame_of_reference.name <> 'design constraint definition') OR NOT (pdr.related_product_definition.frame_of_reference.name IN ['alternative definition','functional definition','conceptual definition'])))) = 0;
END_RULE;

RULE restrict_product_definitions_for_part_definition_relationship FOR
(product_definition_relationship);
WHERE
  WR1: SIZEOF(QUERY(pdr <* product_definition_relationship | (pdr.name IN ['geometrical relationship','definition replacement']) AND ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR (pdr.related_product_definition.frame_of_reference.name <> 'part definition')))) = 0;
END_RULE;

RULE restrict_representation_for_surface_condition FOR
(property_definition_representation);
WHERE
  WR1: SIZEOF(QUERY(pdr <* property_definition_representation | NOT surface_condition_correlation(pdr.definition, pdr.used_representation))) = 0;
END_RULE;

RULE restrict_support_structure_category FOR
(product_definition);
    LOCAL
  support_structures : SET OF product_definition := [];
    END_LOCAL;
  support_structures := QUERY(pd
                              <* product_definition
                              | (SIZEOF(QUERY(prpc
                                              <* USEDIN(pd.formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
                                              | prpc.name = 'additive manufacturing support structure')) <>
                                 0));
WHERE
  WR1: SIZEOF(QUERY(pd <* support_structures | (SIZEOF(QUERY(prpc <* USEDIN(pd.formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'part')) <> 0))) = 0;
END_RULE;

RULE restrict_treatment_result FOR
(representation);
    LOCAL
  treatment_results : SET OF representation := [];
    END_LOCAL;
  treatment_results := QUERY(r <* representation | (r.name = 'treatment result'));
WHERE
  WR1: (SIZEOF(QUERY(r <* treatment_results | (SIZEOF(r.items) > 2))) = 0) AND (SIZEOF(QUERY(r <* treatment_results | (SIZEOF(QUERY(i <* r.items | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)))) > 0))) = 0);
  WR2: SIZEOF(QUERY(r <* treatment_results | (SIZEOF(QUERY(i <* r.items | i.name = 'result')) = 0))) = 0;
  WR3: SIZEOF(QUERY(r <* treatment_results | (SIZEOF(QUERY(i <* r.items | i.name = 'purpose')) > 1))) = 0;
END_RULE;

RULE selected_instance_usage_requires_representation FOR
(assembly_component_usage);
    LOCAL
  selected_instance_usages : SET OF assembly_component_usage := QUERY(acr
                                                                      <* assembly_component_usage
                                                                      | (acr.name = 'selected instance usage'));
    END_LOCAL;
WHERE
  WR1: SIZEOF(QUERY(acr <* selected_instance_usages | NOT valid_selected_instance_representation(acr))) = 0;
END_RULE;

RULE solution_definition_requires_solution_category FOR
(product_definition);
    LOCAL
  solution_definitions : SET OF product_definition := [];
    END_LOCAL;
  solution_definitions := QUERY(pd
                                <* product_definition
                                | (pd.frame_of_reference.name = 'alternative definition'));
WHERE
  WR1: SIZEOF(QUERY(pd <* solution_definitions | (SIZEOF(QUERY(prpc <* USEDIN(pd.formation.of_product, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'alternative solution')) = 0))) = 0;
END_RULE;

RULE styled_curve FOR
(styled_item);
WHERE
  WR1: SIZEOF(QUERY(si <* styled_item | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(si.item)) AND (SIZEOF(QUERY(psa <* si.styles | (SIZEOF(QUERY(cs <* psa.styles | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN TYPEOF(cs)))) > 0))) <> 1))) = 0;
END_RULE;

RULE subtype_exclusiveness_geometric_tolerance FOR
(geometric_tolerance);
WHERE
  WR1: SIZEOF(QUERY(gt <* geometric_tolerance | NOT (type_check_function(gt, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULARITY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COAXIALITY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCENTRICITY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CYLINDRICITY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FLATNESS_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARALLELISM_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERPENDICULARITY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRAIGHTNESS_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMMETRY_TOLERANCE', 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE'], 2)))) = 0;
END_RULE;

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

RULE text_font_usage FOR
(externally_defined_text_font, pre_defined_text_font);
WHERE
  WR1: SIZEOF(QUERY(pdtf <* pre_defined_text_font | SIZEOF(USEDIN(pdtf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL.FONT')) = 0)) = 0;
  WR2: SIZEOF(QUERY(edtf <* externally_defined_text_font | SIZEOF(USEDIN(edtf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL.FONT')) = 0)) = 0;
END_RULE;

RULE tolerance_zone_form_name_constraint FOR
(tolerance_zone_form);
    LOCAL
  names : SET OF STRING := ['within a circle',
                            'within a cylinder',
                            'within a cone',
                            'within a single complex surface',
                            'within a sphere',
                            'between two coaxial cylinders',
                            'between two concentric circles',
                            'between two equidistant curves',
                            'between two equidistant complex lines or two parallel straight lines',
                            'between two equidistant complex surfaces or two parallel planes',
                            'between two equidistant surfaces',
                            'between two non-equidistant complex lines or two non-parallel straight lines',
                            'between two non-equidistant complex surfaces or two non-parallel planes',
                            'between two parallel circles on a conical surface',
                            'between two parallel circles of the same diameter',
                            'non uniform',
                            'cylindrical or circular',
                            'spherical',
                            'unknown'];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT i := 1 TO SIZEOF(tolerance_zone_form)
  WHILE pass;
    pass := (tolerance_zone_form[i].name IN names);
  END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

RULE transition_feature_on_part_boundary FOR
(transition_feature);
WHERE
  WR1: SIZEOF(QUERY(tf <* transition_feature | NOT (tf.product_definitional))) = 0;
END_RULE;

RULE tri_identification_within_product_definition FOR
(product_definition, topological_representation_item, representation);
    LOCAL
  associated_representations : SET [1 : ?] OF representation := [];
  items : SET [1 : ?] OF topological_representation_item := [];
  pd_items : SET [1 : ?] OF topological_representation_item := [];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT i := LOINDEX(product_definition) TO HIINDEX(product_definition)
  WHILE pass;
    pd_items := get_tri_for_pd(product_definition[i]);
    associated_representations := get_representations_for_items(pd_items);
    items := get_tri_in_representations(associated_representations) + pd_items;
    IF (SIZEOF(items) > 0)
    THEN
      IF (SIZEOF(QUERY(ai
                       <* items
                       | NOT (EXISTS(ai\topological_representation_item.permanent_id) OR
                              EXISTS(ai\topological_representation_item.permanent_aggregate_id)))) >
          0)
      THEN
        pass := valid_tri_ids(items);
      END_IF;
    END_IF;
  END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

RULE unique_datum_system FOR
(product_definition_shape, datum_system);
    LOCAL
  ds : SET OF datum_system := [];
  sa : SET OF shape_aspect := [];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT ii := 1 TO SIZEOF(product_definition_shape)
  WHILE pass;
    sa := bag_to_set(USEDIN(product_definition_shape[ii], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
    REPEAT iii := 1 TO SIZEOF(sa)
    WHILE pass;
      ds := QUERY(ds <* sa | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN TYPEOF(ds));
      REPEAT i := 1 TO SIZEOF(ds);
        REPEAT j := 1 TO SIZEOF(ds);
          IF (i <> j)
          THEN
            IF ds[i]\datum_system.constituents = ds[j]\datum_system.constituents
            THEN
              pass := FALSE;
            END_IF;
          END_IF;
        END_REPEAT;
      END_REPEAT;
    END_REPEAT;
  END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

RULE unique_gdt_element_id_constraint FOR
(dimensional_location, dimensional_size, geometric_tolerance, product_definition_shape, shape_aspect, shape_aspect_relationship);
    LOCAL
  bss : BAG OF STRING := [];
  cum_bss : BAG OF STRING := [];
  dssa : SET OF dimensional_size := [];
  dssai : SET OF dimensional_size := [];
  gtsi : SET OF geometric_tolerance := QUERY(gtsi <* geometric_tolerance | EXISTS(gtsi\geometric_tolerance.id));
  sarsa : SET OF shape_aspect_relationship := [];
  sarsai : SET OF shape_aspect_relationship := [];
  ssa : SET OF shape_aspect := [];
  ssai : SET OF shape_aspect := [];
  pass : BOOLEAN := TRUE;
    END_LOCAL;
  REPEAT ii := 1 TO SIZEOF(product_definition_shape)
  WHILE pass;
    bss := [];
    ssa := bag_to_set(USEDIN(product_definition_shape[ii], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
    ssai := QUERY(sa <* ssa | EXISTS(sa\shape_aspect.id));
    IF ((SIZEOF(ssai)) > 0) AND ((SIZEOF(ssai)) <> SIZEOF(ssa))
    THEN
      pass := FALSE;
    END_IF;
    REPEAT i := 1 TO SIZEOF(ssai);
      IF (ssai[i] IN ssa)
      THEN
        bss := bss + ssai[i]\shape_aspect.id;
      END_IF;
      dssa := bag_to_set(USEDIN(ssai[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE.APPLIES_TO'));
      dssai := QUERY(ds <* dssa | EXISTS(ds\dimensional_size.id));
      IF ((SIZEOF(dssai)) > 0) AND ((SIZEOF(dssai)) <> SIZEOF(dssa))
      THEN
        pass := FALSE;
      END_IF;
      REPEAT j := 1 TO SIZEOF(dssai);
        IF (dssai[j]\dimensional_size.applies_to IN ssa)
        THEN
          bss := bss + dssai[j]\dimensional_size.id;
        END_IF;
      END_REPEAT;
      sarsa := bag_to_set(USEDIN(ssai[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'));
      sarsai := QUERY(sar <* sarsa | EXISTS(sar\shape_aspect_relationship.id));
      IF ((SIZEOF(sarsai)) > 0) AND ((SIZEOF(sarsai)) <> SIZEOF(sarsa))
      THEN
        pass := FALSE;
      END_IF;
      REPEAT j := 1 TO SIZEOF(sarsai);
        IF (sarsai[j]\shape_aspect_relationship.relating_shape_aspect IN ssa)
        THEN
          bss := bss + sarsai[j]\shape_aspect_relationship.id;
        END_IF;
      END_REPEAT;
    END_REPEAT;
    cum_bss := cum_bss + bss;
  END_REPEAT;
  IF ((SIZEOF(gtsi)) > 0) AND ((SIZEOF(gtsi)) <> SIZEOF(geometric_tolerance))
  THEN
    pass := FALSE;
  END_IF;
  REPEAT j := 1 TO SIZEOF(gtsi);
    IF (gtsi[j] IN geometric_tolerance)
    THEN
      cum_bss := cum_bss + gtsi[j]\geometric_tolerance.id;
    END_IF;
    IF (SIZEOF(bag_to_set(cum_bss)) <> SIZEOF(cum_bss))
    THEN
      pass := FALSE;
    END_IF;
  END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

RULE valid_datum_geometry_correlation FOR
(datum, geometric_item_specific_usage, geometric_representation_item);
    LOCAL
  pass : BOOLEAN := TRUE;
  gisu_cgr_set : SET OF geometric_item_specific_usage := [];
  gisu_set : SET OF geometric_item_specific_usage := [];
  gisu_tcgr_set : SET OF geometric_item_specific_usage := [];
    END_LOCAL;
  REPEAT i := 1 TO HIINDEX(datum);
    gisu_cgr_set := bag_to_set(QUERY(gcs
                                     <* (USEDIN(datum[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_ITEM_SPECIFIC_USAGE.DEFINITION'))
                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONSTRUCTIVE_GEOMETRY_REPRESENTATION' IN
                                       TYPEOF(gcs\geometric_item_specific_usage.used_representation)));
    IF (SIZEOF(gisu_cgr_set) > 1)
    THEN
      pass := FALSE;
    END_IF;
    gisu_tcgr_set := bag_to_set(QUERY(tgcs
                                      <* (USEDIN(datum[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_ITEM_SPECIFIC_USAGE.DEFINITION'))
                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CONSTRUCTIVE_GEOMETRY_REPRESENTATION' IN
                                        TYPEOF(tgcs\geometric_item_specific_usage.used_representation)));
    IF (SIZEOF(gisu_tcgr_set) > 1)
    THEN
      pass := FALSE;
    END_IF;
    gisu_set := bag_to_set(USEDIN(datum[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_ITEM_SPECIFIC_USAGE.DEFINITION'));
    REPEAT j := 1 TO HIINDEX(gisu_set);
      CASE TRUE OF
        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONSTRUCTIVE_GEOMETRY_REPRESENTATION' IN
         TYPEOF(gisu_set[i]\geometric_item_specific_usage.used_representation)) : BEGIN  
                                                                                         IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_AND_POINT_ON_PLANE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_ON_PLANE_PCURVE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_LINE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_PLANE'] *
                                                                                                    TYPEOF(gisu_set[i]\geometric_item_specific_usage.identified_item)) =
                                                                                             1)
                                                                                         THEN
                                                                                           pass := TRUE;
                                                                                         END_IF;
        END;
        OTHERWISE: pass := FALSE;
      END_CASE;
      CASE TRUE OF
        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CONSTRUCTIVE_GEOMETRY_REPRESENTATION' IN
         TYPEOF(gisu_set[i]\geometric_item_specific_usage.used_representation)) : BEGIN  
                                                                                         IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CURVE_SET',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SURFACE_SET',
                                                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX'] *
                                                                                                    TYPEOF(gisu_set[i]\geometric_item_specific_usage.identified_item)) =
                                                                                             1)
                                                                                         THEN
                                                                                           pass := TRUE;
                                                                                         END_IF;
        END;
        OTHERWISE: pass := FALSE;
      END_CASE;
    END_REPEAT;
  END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

RULE valid_product_and_manufacturing_information_view_contexts FOR
(product_definition_context);
    LOCAL
  design_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                    <* product_definition_context
                                                                    | pdc.life_cycle_stage = 'design');
  gdt_representation_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                                <* product_definition_context
                                                                                | pdc.frame_of_reference.application =
                                                                                  'geometrical dimensioning and tolerancing representation');
  machining_feature_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                               <* product_definition_context
                                                                               | pdc.frame_of_reference.application =
                                                                                 'machining feature');
  material_specification_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                                    <* product_definition_context
                                                                                    | pdc.frame_of_reference.application =
                                                                                      'material specification');
  model_based_3d_annotation_presentation_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                                                    <* product_definition_context
                                                                                                    | pdc.frame_of_reference.application =
                                                                                                      'model based 3D annotation presentation');
  model_based_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                         <* product_definition_context
                                                                         | pdc.frame_of_reference.application =
                                                                           'model based product geometry');
  process_state_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                           <* product_definition_context
                                                                           | pdc.frame_of_reference.application =
                                                                             'process state');
  surface_finish_view_contexts : SET OF product_definition_context := QUERY(pdc
                                                                            <* product_definition_context
                                                                            | pdc.frame_of_reference.application =
                                                                              'surface finish');
  additional_view_contexts : SET OF product_definition_context := gdt_representation_view_contexts +
                                                                  machining_feature_view_contexts +
                                                                  material_specification_view_contexts +
                                                                  model_based_3d_annotation_presentation_view_contexts +
                                                                  process_state_view_contexts +
                                                                  surface_finish_view_contexts;
  need_initial_model_based_view_contexts : SET OF product_definition_context := gdt_representation_view_contexts +
                                                                                model_based_3d_annotation_presentation_view_contexts;
    END_LOCAL;
WHERE
  WR1: SIZEOF(gdt_representation_view_contexts * design_view_contexts) = SIZEOF(gdt_representation_view_contexts);
  WR2: SIZEOF(machining_feature_view_contexts * design_view_contexts) = SIZEOF(machining_feature_view_contexts);
  WR3: SIZEOF(material_specification_view_contexts * design_view_contexts) = SIZEOF(material_specification_view_contexts);
  WR4: SIZEOF(model_based_3d_annotation_presentation_view_contexts * design_view_contexts) = SIZEOF(model_based_3d_annotation_presentation_view_contexts);
  WR5: SIZEOF(model_based_view_contexts * design_view_contexts) = SIZEOF(model_based_view_contexts);
  WR6: SIZEOF(process_state_view_contexts * design_view_contexts) = SIZEOF(process_state_view_contexts);
  WR7: SIZEOF(surface_finish_view_contexts * design_view_contexts) = SIZEOF(surface_finish_view_contexts);
  WR8: SIZEOF(QUERY(mbvc <* model_based_view_contexts | (SIZEOF(USEDIN(mbvc, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.FRAME_OF_REFERENCE')) = 0))) = SIZEOF(model_based_view_contexts);
  WR9: SIZEOF(QUERY(avc <* additional_view_contexts | (SIZEOF(USEDIN(avc, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FRAME_OF_REFERENCE')) = 0))) = SIZEOF(additional_view_contexts);
  WR10: SIZEOF(QUERY(nimbvc <* need_initial_model_based_view_contexts | NOT (SIZEOF(QUERY(pdca <* USEDIN(nimbvc, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.FRAME_OF_REFERENCE') | (pdca\product_definition_context_association.definition\product_definition.frame_of_reference IN model_based_view_contexts))) = SIZEOF(need_initial_model_based_view_contexts)))) = 0;
  WR11: SIZEOF(QUERY(gdt_pdc <* gdt_representation_view_contexts | SIZEOF(['ISO 1101','ASME Y14.5'] * get_associated_mandatory_document_ids(gdt_pdc)) = 0)) = 0;
  WR12: SIZEOF(QUERY(mb3d_pdc <* model_based_3d_annotation_presentation_view_contexts | SIZEOF(['ISO 1101','ISO 16792','ASME Y14.41','ASME Y14.5'] * get_associated_mandatory_document_ids(mb3d_pdc)) = 0)) = 0;
END_RULE;

FUNCTION a3ma_get_accuracy_types
 (ei : SET[0:?] OF a3m_equivalence_accuracy_association) : SET[0:?] OF a3ma_accuracy_type_name;
  LOCAL
  type_out : a3ma_measured_data_type_name;
  retval : SET OF a3ma_accuracy_type_name := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(ei);
    type_out := a3ma_get_value_limit_type(ei[i].specific_accuracy.range);
    retval := retval + [atna_others];
  END_REPEAT;
      RETURN(retval);
END_FUNCTION;

FUNCTION a3ma_get_detected_difference_type
 (ei : LIST[0:?] OF equivalence_detected_difference_select) : a3ma_detected_difference_type_name;
  LOCAL
  type_out : SET OF STRING;
  sizeei : INTEGER;
    END_LOCAL;
      sizeei := SIZEOF(ei);
      IF (sizeei = 0)
  THEN
    RETURN(ddna_no_element);
  END_IF;
      type_out := TYPEOF(ei[1]);
      IF (SIZEOF(ei) > 1)
  THEN
    RETURN(ddna_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN type_out)
  THEN
    RETURN(ddna_assembly_component_usage);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BINARY_ASSEMBLY_CONSTRAINT' IN type_out)
  THEN
    RETURN(ddna_binary_assembly_constraint);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN type_out)
  THEN
    RETURN(ddna_cartesian_point);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN type_out)
  THEN
    RETURN(ddna_context_dependent_shape_representation);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
  THEN
    RETURN(ddna_count_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTI_LEVEL_REFERENCE_DESIGNATOR' IN type_out)
  THEN
    RETURN(ddna_multi_level_reference_designator);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
  THEN
    RETURN(ddna_volume_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MS_INSPECTED_EQUIVALENCE_ELEMENT_SELECT' IN type_out)
  THEN
    RETURN(ddna_a3ms_inspected_equivalence_element_select);
  END_IF;
      RETURN(ddna_others);
END_FUNCTION;

FUNCTION a3ma_get_element_type
 (ei : SET[1:?] OF inspected_equivalence_element_select) : a3ma_element_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := TYPEOF(ei[1]);
      IF (SIZEOF(ei) > 1)
  THEN
    RETURN(etna_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OR_REFERENCE' IN type_out)
  THEN
    RETURN(etna_product_definition_or_reference);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN type_out)
  THEN
    RETURN(etna_shape_representation);
  END_IF;
      RETURN(etna_others);
END_FUNCTION;

FUNCTION a3ma_get_measured_type
 (ei : equivalence_measured_value_select) : a3ma_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := TYPEOF(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
  THEN
    RETURN(mdna_boolean_value);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN type_out)
  THEN
    RETURN(mdna_context_dependent_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(mdna_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MA_LENGTH_MEASURE_AND_CONTEXT_DEPENDENT_MEASURE_PAIR' IN
          type_out)
  THEN
    RETURN(mdna_length_measure_and_context_dependent_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(mdna_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
  THEN
    RETURN(mdna_volume_measure);
  END_IF;
      RETURN(mdna_others);
END_FUNCTION;

FUNCTION a3ma_get_value_limit_type
 (ei : shape_data_quality_value_limit_type_select) : a3ma_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := value_limit_type(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN type_out)
  THEN
    RETURN(mdna_context_dependent_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(mdna_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(mdna_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
  THEN
    RETURN(mdna_volume_measure);
  END_IF;
      RETURN(mdna_others);
END_FUNCTION;

FUNCTION a3ma_validate_accuracy_types
 (ei : accuracy_associated_target_select; cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
  LOCAL
  aeaa : SET OF a3m_equivalence_accuracy_association;
  rp : SET OF representation;
  tp : SET OF a3ma_accuracy_type_name := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(cr.accuracy_types);
    tp := tp + [cr.accuracy_types[i]];
  END_REPEAT;
      -- aats is rep_item
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(ei))
  THEN
    aeaa := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
    IF (SIZEOF(cr.accuracy_types) = 0)
    THEN
      IF (SIZEOF(aeaa) = 0)
      THEN
        RETURN(TRUE);
      ELSE
        RETURN(FALSE);
      END_IF;
    END_IF;
    IF (a3ma_get_accuracy_types(aeaa) = tp)
    THEN
      RETURN(TRUE);
    END_IF;
    rp := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'));
  ELSE
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION' IN TYPEOF(ei))
    THEN
      rp := [ei];
    ELSE
      rp := [];
    END_IF;
  END_IF;
      -- global accuracy check
      aeaa := [];
      REPEAT i := 1 TO SIZEOF(rp);
    aeaa := aeaa +
            bag_to_set(USEDIN(rp[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
  END_REPEAT;
      IF (a3ma_get_accuracy_types(aeaa) >= tp)
  THEN
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION a3ma_validate_detected_difference_types
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
  LOCAL
  deiir : data_equivalence_inspection_instance_report;
  eiriwei : equivalence_instance_report_item_with_notable_instances;
    END_LOCAL;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        eiriwei := deiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
          IF (NOT (a3ma_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements) IN
                   cr.detected_difference_types))
          THEN
            RETURN(FALSE);
          END_IF;
          IF (NOT (a3ma_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
                   cr.detected_difference_types))
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION a3ma_validate_element_types
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
  LOCAL
  compared_et : a3ma_element_type_name;
  comparing_et : a3ma_element_type_name;
  deiir : data_equivalence_inspection_instance_report;
  aeiiri : a3m_equivalence_inspection_instance_report_item;
  deiep : data_equivalence_inspected_element_pair;
    END_LOCAL;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        aeiiri := deiir.inspected_instances[i];
        deiep := aeiiri.inspected_element;
        compared_et := a3ma_get_element_type(deiep.compared_elements);
        comparing_et := a3ma_get_element_type(deiep.comparing_elements);
        IF (NOT (compared_et IN cr.compared_element_types) OR NOT (comparing_et IN cr.comparing_element_types))
        THEN
          RETURN(FALSE);
        END_IF;
        IF (compared_et <> comparing_et)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION a3ma_validate_measured_type
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
  LOCAL
  amdtn : a3ma_measured_data_type_name;
  deicr : data_equivalence_inspection_criterion_report;
  acriwmv : a3m_equivalence_criterion_report_item_with_measured_value;
  deiir : data_equivalence_inspection_instance_report;
  aeiiri : a3m_equivalence_inspection_instance_report_item;
  eiriwei : equivalence_instance_report_item_with_notable_instances;
    END_LOCAL;
      amdtn := cr.measured_data_type;
      -- data_equivalence_inspection_criterion_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_CRITERION_REPORT' IN TYPEOF(ei))
  THEN
    deicr := ei;
    REPEAT i := 1 TO SIZEOF(deicr.statistical_values);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION_REPORT_ITEM_WITH_MEASURED_VALUE' IN
          TYPEOF(deicr.statistical_values[i]))
      THEN
        acriwmv := deicr.statistical_values[i];
        IF (a3ma_get_measured_type(acriwmv.representative_measured_value) <> amdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        aeiiri := deiir.inspected_instances[i];
        IF (a3ma_get_measured_type(aeiiri.measured_value_for_inspected_element) <> amdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        eiriwei := deiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
          IF (a3ma_get_measured_type(eiriwei.notable_instances[j].measured_value) <> amdtn)
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION a3ms_get_accuracy_types
 (ei : SET[0:?] OF a3m_equivalence_accuracy_association) : SET[0:?] OF a3ms_accuracy_type_name;
  LOCAL
  type_out : a3ms_measured_data_type_name;
  retval : SET OF a3ms_accuracy_type_name := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(ei);
    type_out := a3ms_get_value_limit_type(ei[i].specific_accuracy.range);
    IF (type_out = mdns_area_measure)
    THEN
      retval := retval + [atns_area_measure];
    ELSE
      IF (type_out = mdns_length_measure)
      THEN
        retval := retval + [atns_length_measure];
      ELSE
        IF (type_out = mdns_plane_angle_measure)
        THEN
          retval := retval + [atns_plane_angle_measure];
        ELSE
          IF (type_out = mdns_volume_measure)
          THEN
            retval := retval + [atns_volume_measure];
          ELSE
            retval := retval + [atns_others];
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_REPEAT;
      RETURN(retval);
END_FUNCTION;

FUNCTION a3ms_get_detected_difference_type
 (ei : LIST[0:?] OF equivalence_detected_difference_select) : a3ms_detected_difference_type_name;
  LOCAL
  type_out : SET OF STRING;
  sizeei : INTEGER;
    END_LOCAL;
      sizeei := SIZEOF(ei);
      IF (sizeei = 0)
  THEN
    RETURN(ddns_no_element);
  ELSE
    type_out := TYPEOF(ei[1]);
    REPEAT i := 2 TO sizeei;
      IF (TYPEOF(ei[i]) <> type_out)
      THEN
        RETURN(ddns_others);
      END_IF;
    END_REPEAT;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_area_measure);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_cartesian_point);
      ELSE
        IF (sizeei = 2)
        THEN
          RETURN(ddns_two_cartesian_points);
        ELSE
          RETURN(ddns_others);
        END_IF;
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_connected_face_set);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_count_measure);
      ELSE
        IF (sizeei = 2)
        THEN
          RETURN(ddns_two_count_measure);
        ELSE
          IF (sizeei = 3)
          THEN
            RETURN(ddns_three_count_measure);
          ELSE
            IF (sizeei = 4)
            THEN
              RETURN(ddns_four_count_measure);
            ELSE
              IF (sizeei = 5)
              THEN
                RETURN(ddns_five_count_measure);
              ELSE
                RETURN(ddns_others);
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_edge);
      ELSE
        RETURN(ddns_several_edges);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_face);
      ELSE
        RETURN(ddns_several_faces);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_length_measure);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_point_on_curve);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_point_on_surface);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
    THEN
      IF (sizeei = 1)
      THEN
        RETURN(ddns_volume_measure);
      ELSE
        RETURN(ddns_others);
      END_IF;
    END_IF;
  END_IF;
      RETURN(ddns_others);
END_FUNCTION;

FUNCTION a3ms_get_element_type
 (ei : SET[1:?] OF inspected_equivalence_element_select) : a3ms_element_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := TYPEOF(ei[1]);
      IF (SIZEOF(ei) > 1)
  THEN
    RETURN(etns_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN type_out)
  THEN
    RETURN(etns_connected_edge_set);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN type_out)
  THEN
    RETURN(etns_connected_face_set);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN type_out)
  THEN
    RETURN(etns_manifold_solid_brep);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_CLOUD_DATASET' IN type_out)
  THEN
    RETURN(etns_point_cloud_dataset);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN type_out)
  THEN
    RETURN(etns_shell_based_surface_model);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN type_out)
  THEN
    RETURN(etns_shell_based_wireframe_model);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN type_out)
  THEN
    RETURN(etns_vertex_point);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_REPRESENTATION_ITEM' IN type_out)
  THEN
    RETURN(etns_external_representation_item);
  END_IF;
      RETURN(etns_others);
END_FUNCTION;

FUNCTION a3ms_get_measured_type
 (ei : equivalence_measured_value_select) : a3ms_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := TYPEOF(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
  THEN
    RETURN(mdns_area_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
  THEN
    RETURN(mdns_boolean_value);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(mdns_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(mdns_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
  THEN
    RETURN(mdns_volume_measure);
  END_IF;
      RETURN(mdns_others);
END_FUNCTION;

FUNCTION a3ms_get_value_limit_type
 (ei : shape_data_quality_value_limit_type_select) : a3ms_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := value_limit_type(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
  THEN
    RETURN(mdns_area_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
  THEN
    RETURN(mdns_boolean_value);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(mdns_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(mdns_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
  THEN
    RETURN(mdns_volume_measure);
  END_IF;
      RETURN(mdns_others);
END_FUNCTION;

FUNCTION a3ms_validate_accuracy_types
 (ei : accuracy_associated_target_select; cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
  LOCAL
  aeaa : SET OF a3m_equivalence_accuracy_association;
  rp : SET OF representation;
  tp : SET OF a3ms_accuracy_type_name := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(cr.accuracy_types);
    tp := tp + [cr.accuracy_types[i]];
  END_REPEAT;
      -- aats is rep_item
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(ei))
  THEN
    aeaa := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
    IF (SIZEOF(cr.accuracy_types) = 0)
    THEN
      IF (SIZEOF(aeaa) = 0)
      THEN
        RETURN(TRUE);
      ELSE
        RETURN(FALSE);
      END_IF;
    END_IF;
    IF (a3ms_get_accuracy_types(aeaa) = tp)
    THEN
      RETURN(TRUE);
    END_IF;
    rp := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'));
  ELSE
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION' IN TYPEOF(ei))
    THEN
      rp := [ei];
    ELSE
      rp := [];
    END_IF;
  END_IF;
      -- global accuracy check
      aeaa := [];
      REPEAT i := 1 TO SIZEOF(rp);
    aeaa := aeaa +
            bag_to_set(USEDIN(rp[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
  END_REPEAT;
      IF (a3ms_get_accuracy_types(aeaa) >= tp)
  THEN
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION a3ms_validate_detected_difference_types
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
  LOCAL
  deiir : data_equivalence_inspection_instance_report;
  eiriwei : equivalence_instance_report_item_with_notable_instances;
  addtn : a3ms_detected_difference_type_name;
    END_LOCAL;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        eiriwei := deiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
          IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MISMATCH_OF_POINT_CLOUD_AND_RELATED_GEOMETRY' IN
              TYPEOF(cr))
          THEN
            addtn := a3ms_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements);
            IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) = etns_connected_edge_set)
            THEN
              IF (addtn <> ddns_point_on_curve)
              THEN
                RETURN(FALSE);
              END_IF;
            ELSE
              IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) = etns_connected_face_set)
              THEN
                IF (addtn <> ddns_point_on_surface)
                THEN
                  RETURN(FALSE);
                END_IF;
              ELSE
                IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) <>
                    etns_external_representation_item)
                THEN
                  RETURN(FALSE);
                END_IF;
              END_IF;
            END_IF;
            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
                     cr.detected_difference_types))
            THEN
              RETURN(FALSE);
            END_IF;
          ELSE
            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements) IN
                     cr.detected_difference_types))
            THEN
              RETURN(FALSE);
            END_IF;
            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
                     cr.detected_difference_types))
            THEN
              RETURN(FALSE);
            END_IF;
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION a3ms_validate_element_types
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
  LOCAL
  compared_et : a3ms_element_type_name;
  comparing_et : a3ms_element_type_name;
  deiir : data_equivalence_inspection_instance_report;
  aeiiri : a3m_equivalence_inspection_instance_report_item;
  deiep : data_equivalence_inspected_element_pair;
    END_LOCAL;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        aeiiri := deiir.inspected_instances[i];
        deiep := aeiiri.inspected_element;
        compared_et := a3ms_get_element_type(deiep.compared_elements);
        comparing_et := a3ms_get_element_type(deiep.comparing_elements);
        IF ((NOT (compared_et IN cr.compared_element_types) AND
                 (compared_et <> etns_external_representation_item)) OR
            (NOT (comparing_et IN cr.comparing_element_types) AND
                 (comparing_et <> etns_external_representation_item)))
        THEN
          RETURN(FALSE);
        END_IF;
        IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MISMATCH_OF_POINT_CLOUD_AND_RELATED_GEOMETRY' IN
            TYPEOF(cr))
        THEN
          IF (((comparing_et <> etns_external_representation_item) AND
               (compared_et <> etns_external_representation_item)) AND
              (compared_et = comparing_et))
          THEN
            RETURN(FALSE);
          END_IF;
        ELSE
          IF (((comparing_et <> etns_external_representation_item) AND
               (compared_et <> etns_external_representation_item)) AND
              (compared_et <> comparing_et))
          THEN
            RETURN(FALSE);
          END_IF;
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION a3ms_validate_measured_type
 (ei : data_equivalence_inspection_report; cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
  LOCAL
  amdtn : a3ms_measured_data_type_name;
  deicr : data_equivalence_inspection_criterion_report;
  acriwmv : a3m_equivalence_criterion_report_item_with_measured_value;
  deiir : data_equivalence_inspection_instance_report;
  aeiiri : a3m_equivalence_inspection_instance_report_item;
  eiriwei : equivalence_instance_report_item_with_notable_instances;
    END_LOCAL;
      amdtn := cr.measured_data_type;
      -- data_equivalence_inspection_criterion_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_CRITERION_REPORT' IN TYPEOF(ei))
  THEN
    deicr := ei;
    REPEAT i := 1 TO SIZEOF(deicr.statistical_values);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION_REPORT_ITEM_WITH_MEASURED_VALUE' IN
          TYPEOF(deicr.statistical_values[i]))
      THEN
        acriwmv := deicr.statistical_values[i];
        IF (a3ms_get_measured_type(acriwmv.representative_measured_value) <> amdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      -- data_equivalence_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
  THEN
    deiir := ei;
    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        aeiiri := deiir.inspected_instances[i];
        IF (a3ms_get_measured_type(aeiiri.measured_value_for_inspected_element) <> amdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
          TYPEOF(deiir.inspected_instances[i]))
      THEN
        eiriwei := deiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
          IF (a3ms_get_measured_type(eiriwei.notable_instances[j].measured_value) <> amdtn)
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION above_plane
 (p1 : cartesian_point; p2 : cartesian_point; p3 : cartesian_point; p4 : cartesian_point) : REAL;
  LOCAL
  dir2 : direction := dummy_gri || direction([1.0,0.0,0.0]);
  dir3 : direction := dummy_gri || direction([1.0,0.0,0.0]);
  dir4 : direction := dummy_gri || direction([1.0,0.0,0.0]);
  val : REAL;
  mag : REAL;
    END_LOCAL;
      IF (p1.dim <> 3)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := 1 TO 3;
    dir2.direction_ratios[i] := p2.coordinates[i] - p1.coordinates[i];
    dir3.direction_ratios[i] := p3.coordinates[i] - p1.coordinates[i];
    dir4.direction_ratios[i] := p4.coordinates[i] - p1.coordinates[i];
    mag := dir4.direction_ratios[i] * dir4.direction_ratios[i];
  END_REPEAT;
      mag := SQRT(mag);
      val := mag * dot_product(dir4, cross_product(dir2, dir3).orientation);
      RETURN(val);
END_FUNCTION;

FUNCTION acyclic
 (arg1 : generic_expression; arg2 : SET OF generic_expression) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_GENERIC_EXPRESSION' IN TYPEOF(arg1))
  THEN
    RETURN(TRUE);
  END_IF;
      IF arg1 IN arg2
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNARY_GENERIC_EXPRESSION' IN TYPEOF(arg1)
  THEN
    RETURN(acyclic(arg1\unary_generic_expression.operand, arg2 + [arg1]));
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_action_directive_relationship
 (relation : action_directive_relationship; relatives : SET[1:?] OF action_directive; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF action_directive_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(adr
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(adr));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_action_directive_relationship(x[i], relatives + relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_alternative_solution_relationship
 (relation : alternative_solution_relationship; relatives : SET[1:?] OF product_definition_formation; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF alternative_solution_relationship;
    END_LOCAL;
      IF relation.relating_product_definition_formation IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(asr
                 <* bag_to_set(USEDIN(relation.relating_product_definition_formation, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION_FORMATION'))
                 | specific_relation IN TYPEOF(asr));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_alternative_solution_relationship(x[i], relatives +
                                                           relation.relating_product_definition_formation, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_assignment_object_relationship
 (relation : assignment_object_relationship; relatives : SET[1:?] OF assignment_object_select; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF assignment_object_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(aor
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSIGNMENT_OBJECT_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(aor));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_assignment_object_relationship(x[i], relatives + relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_classification_assignment_relationship
 (relation : classification_assignment_relationship; relatives : SET[1:?] OF classification_assignment; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF classification_assignment_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(car
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFICATION_ASSIGNMENT_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(car));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_classification_assignment_relationship(x[i], relatives + relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_composite_text
 (start_composite : composite_text; child_text : SET[1:?] OF text_or_character) : LOGICAL;
  LOCAL
  i : INTEGER;
  local_composite_text : SET [0 : ?] OF composite_text;
  local_annotation_text : SET [0 : ?] OF annotation_text;
  local_children : SET [0 : ?] OF text_or_character;
    END_LOCAL;
      local_composite_text := QUERY(child
                                    <* child_text
                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN
                                       TYPEOF(child)));
      IF (SIZEOF(local_composite_text) > 0)
  THEN
    REPEAT i := 1 TO HIINDEX(local_composite_text);
      IF (start_composite :=: local_composite_text[i])
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      local_children := child_text;
      IF (SIZEOF(local_composite_text)) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(local_composite_text);
      local_children := local_children + local_composite_text[i].collected_text;
    END_REPEAT;
  END_IF;
      local_annotation_text := QUERY(child
                                     <* child_text
                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN
                                        TYPEOF(child)));
      IF (SIZEOF(local_annotation_text) > 0)
  THEN
    REPEAT i := 1 TO HIINDEX(local_annotation_text);
      local_children := local_children +
                        QUERY(item
                              <* local_annotation_text[i]\mapped_item.mapping_source.mapped_representation.items
                              | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT',
                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT'] *
                                       TYPEOF(item)) >
                                0);
    END_REPEAT;
  END_IF;
      IF (local_children :<>: child_text)
  THEN
    RETURN(acyclic_composite_text(start_composite, local_children));
  ELSE
    RETURN(TRUE);
  END_IF;
END_FUNCTION;

FUNCTION acyclic_curve_replica
 (rep : curve_replica; parent : curve) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA') IN TYPEOF(parent))
  THEN
    RETURN(TRUE);
  END_IF;
      (*Return TRUE if the parent is not of type curve_replica*)
  
      IF (parent :=: rep)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_curve_replica(rep, parent\curve_replica.parent_curve));
  END_IF;
END_FUNCTION;

FUNCTION acyclic_description_text_assignment_relationship
 (relation : description_text_assignment_relationship; relatives : SET[1:?] OF description_text_assignment; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF description_text_assignment_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(dtar
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_TEXT_ASSIGNMENT_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(dtar));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_description_text_assignment_relationship(x[i], relatives + relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_external_identification_assignment_relationship
 (relation : external_identification_assignment_relationship; relatives : SET[1:?] OF external_identification_assignment; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF external_identification_assignment_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(eiar
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(eiar));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_external_identification_assignment_relationship(x[i], relatives +
                                                                         relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_generic_property_relationship
 (relation : generic_property_relationship; relatives : SET[1:?] OF generic_property_definition_select; specific_relation : STRING) : LOGICAL;
  LOCAL
  x : SET OF generic_property_relationship;
    END_LOCAL;
      IF relation.relating IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      -- IN is based in instance equality
      x := QUERY(gpr
                 <* bag_to_set(USEDIN(relation.relating, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_PROPERTY_RELATIONSHIP.RELATED'))
                 | specific_relation IN TYPEOF(gpr));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_generic_property_relationship(x[i], relatives + relation.relating, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_geometric_tolerance_relationship
 (relation : geometric_tolerance_relationship; relatives : SET[1:?] OF geometric_tolerance; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF geometric_tolerance_relationship;
    END_LOCAL;
      IF relation.relating_geometric_tolerance IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(geotol
                 <* bag_to_set(USEDIN(relation.relating_geometric_tolerance, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_RELATIONSHIP.RELATED_GEOMETRIC_TOLERANCE'))
                 | specific_relation IN TYPEOF(geotol));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_geometric_tolerance_relationship(x[i], relatives +
                                                          relation.relating_geometric_tolerance, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
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 := [];
      -- loop as long as there are elements in rs1
      REPEAT WHILE SIZEOF(rs1) > 0;
    REPEAT i := 1 TO HIINDEX(rs1);
      rms := bag_to_set(USEDIN(rs1[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
      IF SIZEOF(rms) > 0
      THEN
        REPEAT j := 1 TO HIINDEX(rms);
          mis := bag_to_set(USEDIN(rms[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_point_replica
 (rep : point_replica; parent : point) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA') IN TYPEOF(parent))
  THEN
    RETURN(TRUE);
  END_IF;
      (*Return TRUE if the parent is not of type point_replica*)
  
      IF (parent :=: rep)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_point_replica(rep, parent\point_replica.parent_pt));
  END_IF;
END_FUNCTION;

FUNCTION acyclic_product_category_relationship
 (relation : product_category_relationship; children : SET OF product_category) : BOOLEAN;
  LOCAL
  x : SET OF product_category_relationship;
  local_children : SET OF product_category;
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(children);
    IF relation.category :=: children[i]
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      x := bag_to_set(USEDIN(relation.category, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY'));
      local_children := children + relation.category;
      IF SIZEOF(x) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_product_category_relationship(x[i], local_children)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_product_definition_relationship
 (relation : product_definition_relationship; relatives : SET[1:?] OF product_definition_or_reference; 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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_product_definition_specified_occurrence
 (pdso : product_definition_specified_occurrence; definition : product_definition_occurrence) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE') IN
                             TYPEOF(definition))
  THEN
    RETURN(TRUE);
  END_IF;
      IF (definition :=: pdso)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_product_definition_specified_occurrence(pdso, definition\product_definition_occurrence.definition));
  END_IF;
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, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 acyclic_shape_aspect_occurrence
 (sao : shape_aspect_occurrence; definition : shape_aspect_or_characterized_object) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_OCCURRENCE') IN
                             TYPEOF(definition))
  THEN
    RETURN(TRUE);
  END_IF;
      IF (definition :=: sao)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_shape_aspect_occurrence(sao, definition\shape_aspect_occurrence.definition));
  END_IF;
END_FUNCTION;

FUNCTION acyclic_shape_aspect_relationship
 (relation : shape_aspect_relationship; relatives : SET[1:?] OF shape_aspect; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF shape_aspect_relationship;
    END_LOCAL;
      IF relation.relating_shape_aspect IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(sa
                 <* bag_to_set(USEDIN(relation.relating_shape_aspect, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'))
                 | specific_relation IN TYPEOF(sa));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_shape_aspect_relationship(x[i], relatives + relation.relating_shape_aspect, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_solid_replica
 (rep : solid_replica; parent : solid_model) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA') IN TYPEOF(parent))
  THEN
    RETURN(TRUE);
  END_IF;
      (*Return TRUE if the parent is not of type solid_replica.*)
  
      IF (parent :=: rep)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_solid_replica(rep, parent\solid_replica.parent_solid));
  END_IF;
END_FUNCTION;

FUNCTION acyclic_state_definition_to_state_assignment_relationship
 (relation : state_definition_to_state_assignment_relationship; relatives : SET[1:?] OF ascribable_state; specific_relation : STRING) : LOGICAL;
  LOCAL
  x : SET OF ascribable_state_relationship;
    END_LOCAL;
      IF relation.relating_ascribable_state IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      -- IN is based in instance equality
      x := QUERY(sdtsar
                 <* bag_to_set(USEDIN(relation.relating_ascribable_state, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASCRIBABLE_STATE_RELATIONSHIP.RELATED_ASCRIBABLE_STATE'))
                 | specific_relation IN TYPEOF(sdtsar));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_state_definition_to_state_assignment_relationship(x[i], relatives +
                                                                           relation.relating_ascribable_state, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_surface_replica
 (rep : surface_replica; parent : surface) : BOOLEAN;
    IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA') IN TYPEOF(parent))
  THEN
    RETURN(TRUE);
  END_IF;
      (*Return TRUE if the parent is not of type surface_replica*)
  
      IF (parent :=: rep)
  THEN
    RETURN(FALSE);
  ELSE
    RETURN(acyclic_surface_replica(rep, parent\surface_replica.parent_surface));
  END_IF;
END_FUNCTION;

FUNCTION acyclic_uuid_relationship
 (relation : uuid_relationship; relatives : SET[1:?] OF uuid; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF uuid_relationship;
    END_LOCAL;
      IF relation.uuid_1 IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(am
                 <* bag_to_set(USEDIN(relation.uuid_1, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UUID_RELATIONSHIP.UUID_2'))
                 | specific_relation IN TYPEOF(am));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_uuid_relationship(x[i], relatives + relation.uuid_1, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION advanced_face_properties
 (testface : face) : BOOLEAN;
    (*return TRUE if testface is of type advanced_face*)
  
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(testface)
  THEN
    RETURN(TRUE);
  END_IF;
      (*if testface is a subface recursively test the parent_face,
        return FALSE for all other types of face*)
  
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(testface))
  THEN
    RETURN(advanced_face_properties(testface\subface.parent_face));
  ELSE
    RETURN(FALSE);
  END_IF;
END_FUNCTION;

FUNCTION all_members_of_es
 (sv : SET OF maths_value; es : elementary_space_enumerators) : LOGICAL;
  CONSTANT
  base_types : SET OF STRING :=
               ['NUMBER',
                'COMPLEX_NUMBER_LITERAL',
                'REAL',
                'INTEGER',
                'LOGICAL',
                'BOOLEAN',
                'STRING',
                'BINARY',
                'MATHS_SPACE',
                'MATHS_FUNCTION',
                'LIST',
                'ELEMENTARY_SPACE_ENUMERATORS',
                'ORDERING_TYPE',
                'LOWER_UPPER',
                'SYMMETRY_TYPE',
                'ELEMENTARY_FUNCTION_ENUMERATORS',
                'OPEN_CLOSED',
                'SPACE_CONSTRAINT_TYPE',
                'REPACKAGE_OPTIONS',
                'EXTENSION_OPTIONS'];
    END_CONSTANT;
    LOCAL
  v : maths_value;
  key_type : STRING := '';
  types : SET OF STRING;
  ge : generic_expression;
  cum : LOGICAL := TRUE;
  vspc : maths_space;
    END_LOCAL;
      IF NOT EXISTS(sv) OR NOT EXISTS(es)
  THEN
    RETURN(FALSE);
  END_IF;
      CASE es OF
    es_numbers : key_type := 'NUMBER';
    es_complex_numbers : key_type := 'COMPLEX_NUMBER_LITERAL';
    es_reals : key_type := 'REAL';
    es_integers : key_type := 'INTEGER';
    es_logicals : key_type := 'LOGICAL';
    es_booleans : key_type := 'BOOLEAN';
    es_strings : key_type := 'STRING';
    es_binarys : key_type := 'BINARY';
    es_maths_spaces : key_type := 'MATHS_SPACE';
    es_maths_functions : key_type := 'MATHS_FUNCTION';
    es_generics : RETURN(TRUE);
  END_CASE;
      REPEAT i := 1 TO SIZEOF(sv);
    IF NOT EXISTS(sv[i])
    THEN
      RETURN(FALSE);
    END_IF;
    v := simplify_maths_value(sv[i]);
    types := stripped_typeof(v);
    IF key_type IN types
    THEN
      SKIP;
    END_IF;
    IF (es = es_numbers) AND ('COMPLEX_NUMBER_LITERAL' IN types)
    THEN
      SKIP;
    END_IF;
    IF SIZEOF(base_types * types) > 0
    THEN
      RETURN(FALSE);
    END_IF;
    ge := v;
    IF has_values_space(ge)
    THEN
      vspc := values_space_of(ge);
      IF NOT subspace_of_es(vspc, es)
      THEN
        IF NOT compatible_spaces(vspc, make_elementary_space(es))
        THEN
          RETURN(FALSE);
        END_IF;
        cum := UNKNOWN;
      END_IF;
    ELSE
      cum := UNKNOWN;
    END_IF;
    IF cum = FALSE
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(cum);
END_FUNCTION;

FUNCTION any_space_satisfies
 (sc : space_constraint_type; spc : maths_space) : BOOLEAN;
  LOCAL
  spc_id : elementary_space_enumerators;
    END_LOCAL;
      IF (sc = sc_equal) OR NOT ('ELEMENTARY_SPACE' IN stripped_typeof(spc))
  THEN
    RETURN(FALSE);
  END_IF;
      spc_id := spc\elementary_space.space_id;
      IF sc = sc_subspace
  THEN
    RETURN(bool(spc_id = es_generics));
  END_IF;
      IF sc = sc_member
  THEN
    RETURN(bool((spc_id = es_generics) OR (spc_id = es_maths_spaces)));
  END_IF;
      -- Should be unreachable.
      RETURN(?);
END_FUNCTION;

FUNCTION aspect_ratio
 (p : planar_box) : positive_ratio_measure;
    IF (p.size_in_x > 0.0) AND (p.size_in_y > 0.0)
  THEN
    RETURN(p.size_in_x / p.size_in_y);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION assembly_leaf
 (item : product_definition) : BOOLEAN;
  LOCAL
  local_relation : SET OF assembly_component_usage := [];
  local_relation2 : BAG OF assembly_component_usage := [];
    END_LOCAL;
      -- extraction of related assembly_component_relationships --
      local_relation2 := local_relation2 +
                         QUERY(pdr
                               <* USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION')
                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN
                                 TYPEOF(pdr));
      local_relation := bag_to_set(local_relation2);
      IF (SIZEOF(local_relation) = 0)
  THEN
    RETURN(TRUE);
  ELSE
    RETURN(FALSE);
  END_IF;
END_FUNCTION;

FUNCTION assembly_root
 (item : product_definition) : BOOLEAN;
    -- extraction of related assembly_component_relationships --
      IF (SIZEOF(QUERY(pdr
                       <* USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(pdr))) =
          0)
  THEN
    RETURN(TRUE);
  ELSE
    RETURN(FALSE);
  END_IF;
END_FUNCTION;

FUNCTION assoc_product_space
 (ts1 : tuple_space; ts2 : tuple_space) : tuple_space;
  LOCAL
  types1 : SET OF STRING := stripped_typeof(ts1);
  types2 : SET OF STRING := stripped_typeof(ts2);
  up1 : uniform_product_space := make_uniform_product_space(the_reals, 1);
  up2 : uniform_product_space := make_uniform_product_space(the_reals, 1);
  lp1 : listed_product_space := the_zero_tuple_space;
  lp2 : listed_product_space := the_zero_tuple_space;
  lps : listed_product_space := the_zero_tuple_space;
  et1 : extended_tuple_space := the_tuples;
  et2 : extended_tuple_space := the_tuples;
  ets : extended_tuple_space := the_tuples;
  use_up1 : BOOLEAN;
  use_up2 : BOOLEAN;
  use_lp1 : BOOLEAN;
  use_lp2 : BOOLEAN;
  factors : LIST OF maths_space := [];
  tspace : tuple_space;
    END_LOCAL;
      -- Identify type of first operand
      IF 'UNIFORM_PRODUCT_SPACE' IN types1
  THEN
    up1 := ts1;
    use_up1 := TRUE;
    use_lp1 := FALSE;
  ELSE
    IF 'LISTED_PRODUCT_SPACE' IN types1
    THEN
      lp1 := ts1;
      use_up1 := FALSE;
      use_lp1 := TRUE;
    ELSE
      IF NOT ('EXTENDED_TUPLE_SPACE' IN types1)
      THEN
        RETURN(?);
      END_IF;
      et1 := ts1;
      use_up1 := FALSE;
      use_lp1 := FALSE;
    END_IF;
  END_IF;
      -- Identify type of second operand
      IF 'UNIFORM_PRODUCT_SPACE' IN types2
  THEN
    up2 := ts2;
    use_up2 := TRUE;
    use_lp2 := FALSE;
  ELSE
    IF 'LISTED_PRODUCT_SPACE' IN types2
    THEN
      lp2 := ts2;
      use_up2 := FALSE;
      use_lp2 := TRUE;
    ELSE
      IF NOT ('EXTENDED_TUPLE_SPACE' IN types2)
      THEN
        RETURN(?);
      END_IF;
      et2 := ts2;
      use_up2 := FALSE;
      use_lp2 := FALSE;
    END_IF;
  END_IF;
      -- Construction for each combination of cases
      IF use_up1
  THEN
    IF use_up2
    THEN
      IF up1.base = up2.base
      THEN
        tspace := make_uniform_product_space(up1.base, up1.exponent + up2.exponent);
      ELSE
        factors := [up1.base:up1.exponent,up2.base:up2.exponent];
        tspace := make_listed_product_space(factors);
      END_IF;
    ELSE
      IF use_lp2
      THEN
        factors := [up1.base:up1.exponent];
        factors := factors + lp2.factors;
        tspace := make_listed_product_space(factors);
      ELSE
        tspace := assoc_product_space(up1, et2.base);
        tspace := make_extended_tuple_space(tspace, et2.extender);
      END_IF;
    END_IF;
  ELSE
    IF use_lp1
    THEN
      IF use_up2
      THEN
        factors := [up2.base:up2.exponent];
        factors := lp1.factors + factors;
        tspace := make_listed_product_space(factors);
      ELSE
        IF use_lp2
        THEN
          tspace := make_listed_product_space(lp1.factors + lp2.factors);
        ELSE
          tspace := assoc_product_space(lp1, et2.base);
          tspace := make_extended_tuple_space(tspace, et2.extender);
        END_IF;
      END_IF;
    ELSE
      IF use_up2
      THEN
        IF et1.extender = up2.base
        THEN
          tspace := assoc_product_space(et1.base, up2);
          tspace := make_extended_tuple_space(tspace, et1.extender);
        ELSE
          RETURN(?);
        END_IF;
      ELSE
        IF use_lp2
        THEN
          factors := lp2.factors;
          REPEAT i := 1 TO SIZEOF(factors);
            IF et1.extender <> factors[i]
            THEN
              RETURN(?);
            END_IF;
          END_REPEAT;
          tspace := assoc_product_space(et1.base, lp2);
          tspace := make_extended_tuple_space(tspace, et1.extender);
        ELSE
          IF et1.extender = et2.extender
          THEN
            tspace := assoc_product_space(et1, et2.base);
          ELSE
            RETURN(?);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(tspace);
END_FUNCTION;

FUNCTION associated_surface
 (arg : pcurve_or_surface) : surface;
  LOCAL
  surf : surface;
    END_LOCAL;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(arg)
  THEN
    surf := arg\pcurve.basis_surface;
  ELSE
    surf := arg;
  END_IF;
      RETURN(surf);
END_FUNCTION;

FUNCTION atan2
 (y : REAL; x : REAL) : REAL;
  LOCAL
  r : REAL;
    END_LOCAL;
      IF (y = 0.0) AND (x = 0.0)
  THEN
    RETURN(?);
  END_IF;
      r := ATAN(y, x);
      IF x < 0.0
  THEN
    IF y < 0.0
    THEN
      r := r - PI;
    ELSE
      r := r + PI;
    END_IF;
  END_IF;
      RETURN(r);
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.0,0.0,1.0]));
    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.0)
        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.0,0.0]),dummy_gri || direction([0.0,1.0])];
      END_IF;
    END_IF;
  END_IF;
      RETURN(u);
END_FUNCTION;

FUNCTION bool
 (lgcl : LOGICAL) : BOOLEAN;
    IF NOT EXISTS(lgcl)
  THEN
    RETURN(FALSE);
  END_IF;
      IF lgcl <> TRUE
  THEN
    RETURN(FALSE);
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION boolean_choose
 (b : BOOLEAN; choice1 : GENERIC : ITEM; choice2 : GENERIC : ITEM) : GENERIC : ITEM;
    IF b
  THEN
    RETURN(choice1);
  ELSE
    RETURN(choice2);
  END_IF;
END_FUNCTION;

FUNCTION build_2axes
 (ref_direction : direction) : LIST[2:2] OF direction;
  LOCAL
  d : direction := NVL(normalise(ref_direction), dummy_gri || direction([1.0,0.0]));
    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.0,0.0,1.0]));
      d2 := first_proj_axis(d1, ref_direction);
      RETURN([d2,normalise(cross_product(d1, d2))\vector.orientation,d1]);
END_FUNCTION;

FUNCTION categories_of_product
 (obj : product) : SET OF STRING;
  LOCAL
  category_assignments : BAG OF product_category;
  categories : SET OF STRING := [];
    END_LOCAL;
      category_assignments := USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS');
      REPEAT i := LOINDEX(category_assignments) TO HIINDEX(category_assignments) BY 1;
    categories := categories + category_assignments[i].name;
  END_REPEAT;
      RETURN(categories);
END_FUNCTION;

FUNCTION cc_design_person_and_organization_correlation
 (e : cc_design_person_and_organization_assignment) : BOOLEAN;
  LOCAL
  po_role : STRING;
    END_LOCAL;
      po_role := e\person_and_organization_assignment.role.name;
      CASE po_role OF
    'request_recipient' : IF SIZEOF(e.items) <>
                             SIZEOF(QUERY(x
                                          <* e.items
                                          | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_REQUEST',
                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_REQUEST'] *
                                                   TYPEOF(x)) =
                                            1))
    THEN
      RETURN(FALSE);
    END_IF;
    'initiator' : IF SIZEOF(e.items) <>
                     SIZEOF(QUERY(x
                                  <* e.items
                                  | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_REQUEST',
                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_REQUEST',
                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_WORK',
                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE'] *
                                           TYPEOF(x)) =
                                    1))
    THEN
      RETURN(FALSE);
    END_IF;
    'creator' : IF SIZEOF(e.items) <>
                   SIZEOF(QUERY(x
                                <* e.items
                                | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION',
                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION'] *
                                         TYPEOF(x)) =
                                  1))
    THEN
      RETURN(FALSE);
    END_IF;
    'part_supplier' : IF SIZEOF(e.items) <>
                         SIZEOF(QUERY(x
                                      <* e.items
                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
                                        TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    'design_supplier' : IF SIZEOF(e.items) <>
                           SIZEOF(QUERY(x
                                        <* e.items
                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
                                          TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    'design_owner' : IF SIZEOF(e.items) <>
                        SIZEOF(QUERY(x
                                     <* e.items
                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    'configuration_manager' : IF SIZEOF(e.items) <>
                                 SIZEOF(QUERY(x
                                              <* e.items
                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_ITEM' IN
                                                TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    'contractor' : IF SIZEOF(e.items) <>
                      SIZEOF(QUERY(x
                                   <* e.items
                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTRACT' IN TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    'classification_officer' : IF SIZEOF(e.items) <>
                                  SIZEOF(QUERY(x
                                               <* e.items
                                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SECURITY_CLASSIFICATION' IN
                                                 TYPEOF(x)))
    THEN
      RETURN(FALSE);
    END_IF;
    OTHERWISE: RETURN(TRUE);
  END_CASE;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION check_continuous_edges
 (edges : LIST OF UNIQUE edge_curve) : BOOLEAN;
  LOCAL
  i : INTEGER;
  next_vertex : vertex;
    END_LOCAL;
      -- first check whether there is only one edge in the list: in this
      -- case there is no connectivity to be checked.
      IF (SIZEOF(edges) = 1)
  THEN
    RETURN(TRUE);
  END_IF;
      -- otherwise, establish the matching vertices of edges 1 and 2 in 
      -- the list, and determine the vertex of edge 2 to which edge 3, 
      -- must be connected, if there are more than two edges in the list.
      IF ((edges[2].edge_start :=: edges[1].edge_end) XOR (edges[2].edge_start :=: edges[1].edge_start))
  THEN
    next_vertex := edges[2].edge_end;
  ELSE
    IF ((edges[2].edge_end :=: edges[1].edge_end) XOR (edges[2].edge_end :=: edges[1].edge_start))
    THEN
      next_vertex := edges[2].edge_start;
    ELSE
      RETURN(FALSE);
    END_IF;
  END_IF;
      -- exit if there are only two edges and they are connected
      IF (SIZEOF(edges) = 2)
  THEN
    RETURN(TRUE);
  END_IF;
      -- otherwise, check that any remaining edges are connected in list order.
      REPEAT i := 3 TO HIINDEX(edges);
    IF (edges[i].edge_start :=: next_vertex)
    THEN
      next_vertex := edges[i].edge_end;
    ELSE
      IF (edges[i].edge_end :=: next_vertex)
      THEN
        next_vertex := edges[i].edge_start;
      ELSE
        RETURN(FALSE);
      END_IF;
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION check_curve_planarity
 (checked_curve : curve) : BOOLEAN;
  LOCAL
  crv : curve := checked_curve;
  i : INTEGER;
  j : INTEGER;
  result : BOOLEAN := FALSE;
    END_LOCAL;
      -- Determine whether the curve lies on a plane, according to its type
      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
                 TYPEOF(crv)) >
          0)
  THEN
    result := TRUE;
  ELSE
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(crv)) AND
        check_curve_planarity(crv\trimmed_curve.basis_curve))
    THEN
      result := TRUE;
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(crv)) AND
          ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(crv\pcurve.basis_surface)))
      THEN
        result := TRUE;
      ELSE
        IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(crv))
        THEN
          BEGIN  
                 REPEAT j := 1 TO HIINDEX(crv\surface_curve.basis_surface);
                   IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
                       TYPEOF(crv\surface_curve.basis_surface[j]))
                   THEN
                     result := TRUE;
                   END_IF;
                 END_REPEAT;
          END;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION check_geometric_dimension
 (capt : SET[0:?] OF cartesian_point; dir : SET[0:?] OF direction; grc : SET[1:?] OF geometric_representation_context) : BOOLEAN;
  LOCAL
  globaldim : INTEGER := 0;
  reps : SET [0 : ?] OF representation := [];
  result : BOOLEAN := TRUE;
    END_LOCAL;
      globaldim := geometric_dimensionalities_in_contexts(grc);
      IF (globaldim > 0)
  THEN
    IF (SIZEOF(capt) > 0)
    THEN
      REPEAT i := 1 TO HIINDEX(capt);
        IF (HIINDEX(capt[i].coordinates) <> globaldim)
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
    IF (SIZEOF(dir) > 0)
    THEN
      REPEAT i := 1 TO HIINDEX(dir);
        IF (HIINDEX(dir[i].direction_ratios) <> globaldim)
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
    RETURN(result);
  ELSE
    IF (SIZEOF(capt) > 0)
    THEN
      REPEAT i := 1 TO HIINDEX(capt);
        reps := using_representations(capt[i]);
        IF (SIZEOF(reps) > 0)
        THEN
          REPEAT j := 1 TO HIINDEX(reps);
            IF (HIINDEX(capt[i].coordinates) <>
                reps[j].context_of_items\geometric_representation_context.coordinate_space_dimension)
            THEN
              RETURN(FALSE);
            END_IF;
          END_REPEAT;
        ELSE
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
    IF (SIZEOF(dir) > 0)
    THEN
      REPEAT i := 1 TO HIINDEX(dir);
        reps := using_representations(dir[i]);
        IF (SIZEOF(reps) > 0)
        THEN
          REPEAT j := 1 TO HIINDEX(reps);
            IF (HIINDEX(dir[i].direction_ratios) <>
                reps[j].context_of_items\geometric_representation_context.coordinate_space_dimension)
            THEN
              RETURN(FALSE);
            END_IF;
          END_REPEAT;
        ELSE
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION check_sparse_index_domain
 (idxdom : tuple_space; base : zero_or_one; shape : LIST[1:?] OF positive_integer; order : ordering_type) : BOOLEAN;
  LOCAL
  mthspc : maths_space;
  interval : finite_integer_interval;
  i : INTEGER;
    END_LOCAL;
      mthspc := factor1(idxdom);
      -- A consequence of WR1 of basic_sparse_matrix is that here we need only
      -- consider the case that mthspc is a finite integer interval and is the only
      -- factor space of idxdom.
      interval := mthspc;
      IF order = by_rows
  THEN
    i := 1;
  ELSE
    i := 2;
  END_IF;
      RETURN(bool((interval.min <= base) AND (interval.max >= base + shape[i])));
END_FUNCTION;

FUNCTION check_sparse_index_to_loc
 (index_range : tuple_space; loc_domain : tuple_space) : BOOLEAN;
  LOCAL
  temp : maths_space;
  idx_rng_itvl : finite_integer_interval;
  loc_dmn_itvl : finite_integer_interval;
    END_LOCAL;
      temp := factor1(index_range);
      IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(temp)
  THEN
    temp := factor1(temp);
  END_IF;
      IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      idx_rng_itvl := temp;
      temp := factor1(loc_domain);
      IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(temp)
  THEN
    temp := factor1(temp);
  END_IF;
      IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      loc_dmn_itvl := temp;
      RETURN(bool((loc_dmn_itvl.min <= idx_rng_itvl.min) AND
                  (idx_rng_itvl.max <= loc_dmn_itvl.max + 1)));
END_FUNCTION;

FUNCTION check_sparse_loc_range
 (locrng : tuple_space; base : zero_or_one; shape : LIST[1:?] OF positive_integer; order : ordering_type) : BOOLEAN;
  LOCAL
  mthspc : maths_space;
  interval : finite_integer_interval;
  i : INTEGER;
    END_LOCAL;
      IF space_dimension(locrng) <> 1
  THEN
    RETURN(FALSE);
  END_IF;
      mthspc := factor1(locrng);
      IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(mthspc))
  THEN
    RETURN(FALSE);
  END_IF;
      interval := mthspc;
      IF order = by_rows
  THEN
    i := 2;
  ELSE
    i := 1;
  END_IF;
      RETURN(bool((interval.min >= base) AND (interval.max <= base + shape[i] - 1)));
END_FUNCTION;

FUNCTION check_text_alignment
 (ct : composite_text) : BOOLEAN;
  LOCAL
  a : SET OF text_alignment := [];
    END_LOCAL;
      -- create a set of all the alignments
      REPEAT i := 1 TO HIINDEX(ct.collected_text);
    a := a + [ct.collected_text[i]\text_literal.alignment];
  END_REPEAT;
      -- if there is more than one element in the set
      -- then not all alignments were the same
      RETURN(SIZEOF(a) = 1);
END_FUNCTION;

FUNCTION check_text_font
 (ct : composite_text) : BOOLEAN;
  LOCAL
  f : SET OF font_select := [];
    END_LOCAL;
      -- build a set of all the fonts
      REPEAT i := 1 TO HIINDEX(ct.collected_text);
    f := f + [ct.collected_text[i]\text_literal.font];
  END_REPEAT;
      -- if there is more than one element in the set
      -- then not all fonts were the same
      RETURN(SIZEOF(f) <= 1);
END_FUNCTION;

FUNCTION class_assignment_is_valid
 (aia : applied_classification_assignment) : BOOLEAN;
  LOCAL
  item : classification_item;
  role : classification_role;
    END_LOCAL;
      role := aia\classification_assignment.role;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS_SYSTEM' IN
          TYPEOF(aia\classification_assignment.assigned_class))
  THEN
    IF (role\classification_role.name <> 'class system membership')
    THEN
      RETURN(FALSE);
    END_IF;
    REPEAT i := LOINDEX(aia\applied_classification_assignment.items) TO HIINDEX(aia\applied_classification_assignment.items);
      item := aia\applied_classification_assignment.items[i];
      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_CLASS'] * TYPEOF(item)) = 0)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_CLASS' IN
          TYPEOF(aia\classification_assignment.assigned_class))
  THEN
    IF NOT (role\classification_role.name IN ['definitional','non-definitional',''])
    THEN
      RETURN(FALSE);
    END_IF;
    REPEAT i := LOINDEX(aia\applied_classification_assignment.items) TO HIINDEX(aia\applied_classification_assignment.items);
      item := aia\applied_classification_assignment.items[i];
      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFIED_ITEM'] * TYPEOF(item)) = 0)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      IF (role\classification_role.name = 'definitional')
  THEN
    IF NOT (SIZEOF(QUERY(it
                         <* aia\applied_classification_assignment.items
                         | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT',
                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION',
                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION'] *
                                       TYPEOF(it)) =
                                1))) =
            0)
    THEN
      RETURN(FALSE);
    END_IF;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION closed_shell_reversed
 (a_shell : closed_shell) : oriented_closed_shell;
  LOCAL
  the_reverse : oriented_closed_shell;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(a_shell))
  THEN
    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || closed_shell() ||
                   oriented_closed_shell(a_shell\oriented_closed_shell.closed_shell_element,
                                         NOT (a_shell\oriented_closed_shell.orientation));
  ELSE
    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || closed_shell() ||
                   oriented_closed_shell(a_shell, FALSE);
  END_IF;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION collect_joints
 (items : SET[1:?] OF pair_representation_relationship) : SET OF kinematic_joint;
  LOCAL
  result : SET OF kinematic_joint := [];
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(items);
    result := result + items[i].transformation_operator.joint;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION compare_basis_and_coef
 (basis : LIST[1:?] OF b_spline_basis; coef : maths_function) : BOOLEAN;
  LOCAL
  shape : LIST OF positive_integer;
    END_LOCAL;
      IF NOT EXISTS(basis) OR NOT EXISTS(coef)
  THEN
    RETURN(FALSE);
  END_IF;
      shape := shape_of_array(coef);
      IF NOT EXISTS(shape)
  THEN
    RETURN(FALSE);
  END_IF;
      IF SIZEOF(shape) < SIZEOF(basis)
  THEN
    RETURN(FALSE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(basis);
    IF (basis[i].num_basis = shape[i]) <> TRUE
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION compatible_complex_number_regions
 (sp1 : maths_space; sp2 : maths_space) : BOOLEAN;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(sp1);
  crgn1 : cartesian_complex_number_region;
  crgn2 : cartesian_complex_number_region;
  prgn1 : polar_complex_number_region;
  prgn2 : polar_complex_number_region;
  prgn1c2 : polar_complex_number_region;
  prgn2c1 : polar_complex_number_region;
  sp1_is_crgn : BOOLEAN;
  sp2_is_crgn : BOOLEAN;
    END_LOCAL;
      IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN typenames
  THEN
    sp1_is_crgn := TRUE;
    crgn1 := sp1;
  ELSE
    IF 'POLAR_COMPLEX_NUMBER_REGION' IN typenames
    THEN
      sp1_is_crgn := FALSE;
      prgn1 := sp1;
    ELSE
      RETURN(TRUE);
    END_IF;
  END_IF;
      typenames := stripped_typeof(sp2);
      IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN typenames
  THEN
    sp2_is_crgn := TRUE;
    crgn2 := sp2;
  ELSE
    IF 'POLAR_COMPLEX_NUMBER_REGION' IN typenames
    THEN
      sp2_is_crgn := FALSE;
      prgn2 := sp2;
    ELSE
      RETURN(TRUE);
    END_IF;
  END_IF;
      IF sp1_is_crgn AND sp2_is_crgn
  THEN
    RETURN(compatible_intervals(crgn1.real_constraint, crgn2.real_constraint) AND
           compatible_intervals(crgn1.imag_constraint, crgn2.imag_constraint));
  END_IF;
      IF NOT sp1_is_crgn AND
             NOT sp2_is_crgn AND (prgn1.centre.real_part = prgn2.centre.real_part) AND
                 (prgn1.centre.imag_part = prgn2.centre.imag_part)
  THEN
    IF NOT compatible_intervals(prgn1.distance_constraint, prgn2.distance_constraint)
    THEN
      RETURN(FALSE);
    END_IF;
    IF compatible_intervals(prgn1.direction_constraint, prgn2.direction_constraint)
    THEN
      RETURN(TRUE);
    END_IF;
    IF (prgn1.direction_constraint.max > PI) AND (prgn2.direction_constraint.max < PI)
    THEN
      RETURN(compatible_intervals(prgn2.direction_constraint, make_finite_real_interval(-PI, open, prgn1.direction_constraint.max -
                                                                                                   2.0 *
                                                                                                   PI, prgn1.direction_constraint.max_closure)));
    END_IF;
    IF (prgn2.direction_constraint.max > PI) AND (prgn1.direction_constraint.max < PI)
    THEN
      RETURN(compatible_intervals(prgn1.direction_constraint, make_finite_real_interval(-PI, open, prgn2.direction_constraint.max -
                                                                                                   2.0 *
                                                                                                   PI, prgn2.direction_constraint.max_closure)));
    END_IF;
    RETURN(FALSE);
  END_IF;
      -- Make do with imperfect tests for remaining cases.
      IF sp1_is_crgn AND NOT sp2_is_crgn
  THEN
    crgn2 := enclose_pregion_in_cregion(prgn2);
    prgn1 := enclose_cregion_in_pregion(crgn1, prgn2.centre);
    RETURN(compatible_complex_number_regions(crgn1, crgn2) AND compatible_complex_number_regions(prgn1, prgn2));
  END_IF;
      IF NOT sp1_is_crgn AND sp2_is_crgn
  THEN
    crgn1 := enclose_pregion_in_cregion(prgn1);
    prgn2 := enclose_cregion_in_pregion(crgn2, prgn1.centre);
    RETURN(compatible_complex_number_regions(crgn1, crgn2) AND compatible_complex_number_regions(prgn1, prgn2));
  END_IF;
      -- Two polar regions with different centres
      prgn1c2 := enclose_pregion_in_pregion(prgn1, prgn2.centre);
      prgn2c1 := enclose_pregion_in_pregion(prgn2, prgn1.centre);
      RETURN(compatible_complex_number_regions(prgn1, prgn2c1) AND
             compatible_complex_number_regions(prgn1c2, prgn2));
END_FUNCTION;

FUNCTION compatible_es_values
 (esval1 : elementary_space_enumerators; esval2 : elementary_space_enumerators) : BOOLEAN;
  LOCAL
  esval1_is_numeric : LOGICAL;
  esval2_is_numeric : LOGICAL;
    END_LOCAL;
      IF (esval1 = esval2) OR (esval1 = es_generics) OR (esval2 = es_generics)
  THEN
    RETURN(TRUE);
  END_IF;
      esval1_is_numeric := (esval1 >= es_numbers) AND (esval1 <= es_integers);
      esval2_is_numeric := (esval2 >= es_numbers) AND (esval2 <= es_integers);
      IF (esval1_is_numeric AND (esval2 = es_numbers)) OR (esval2_is_numeric AND (esval1 = es_numbers))
  THEN
    RETURN(TRUE);
  END_IF;
      IF esval1_is_numeric XOR esval2_is_numeric
  THEN
    RETURN(FALSE);
  END_IF;
      IF ((esval1 = es_logicals) AND (esval2 = es_booleans)) OR ((esval1 = es_booleans) AND (esval2 = es_logicals))
  THEN
    RETURN(TRUE);
  END_IF;
      -- All other cases are incompatible
      RETURN(FALSE);
END_FUNCTION;

FUNCTION compatible_intervals
 (sp1 : maths_space; sp2 : maths_space) : BOOLEAN;
  LOCAL
  amin : REAL;
  amax : REAL;
    END_LOCAL;
      IF min_exists(sp1) AND max_exists(sp2)
  THEN
    amin := real_min(sp1);
    amax := real_max(sp2);
    IF amin > amax
    THEN
      RETURN(FALSE);
    END_IF;
    IF amin = amax
    THEN
      RETURN(min_included(sp1) AND max_included(sp2));
    END_IF;
  END_IF;
      IF min_exists(sp2) AND max_exists(sp1)
  THEN
    amin := real_min(sp2);
    amax := real_max(sp1);
    IF amin > amax
    THEN
      RETURN(FALSE);
    END_IF;
    IF amin = amax
    THEN
      RETURN(min_included(sp2) AND max_included(sp1));
    END_IF;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION compatible_spaces
 (sp1 : maths_space; sp2 : maths_space) : BOOLEAN;
  LOCAL
  types1 : SET OF STRING := stripped_typeof(sp1);
  types2 : SET OF STRING := stripped_typeof(sp2);
  lgcl : LOGICAL := UNKNOWN;
  m : INTEGER;
  n : INTEGER;
  s1 : maths_space;
  s2 : maths_space;
    END_LOCAL;
      IF 'FINITE_SPACE' IN types1
  THEN
    REPEAT i := 1 TO SIZEOF(sp1\finite_space.members);
      lgcl := member_of(sp1\finite_space.members[i], sp2);
      IF lgcl <> FALSE
      THEN
        RETURN(TRUE);
      END_IF;
    END_REPEAT;
    RETURN(FALSE);
  END_IF;
      IF 'FINITE_SPACE' IN types2
  THEN
    REPEAT i := 1 TO SIZEOF(sp2\finite_space.members);
      lgcl := member_of(sp2\finite_space.members[i], sp1);
      IF lgcl <> FALSE
      THEN
        RETURN(TRUE);
      END_IF;
    END_REPEAT;
    RETURN(FALSE);
  END_IF;
      IF 'ELEMENTARY_SPACE' IN types1
  THEN
    IF sp1\elementary_space.space_id = es_generics
    THEN
      RETURN(TRUE);
    END_IF;
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      RETURN(compatible_es_values(sp1\elementary_space.space_id, sp2\elementary_space.space_id));
    END_IF;
    IF ('FINITE_INTEGER_INTERVAL' IN types2) OR ('INTEGER_INTERVAL_FROM_MIN' IN types2) OR
       ('INTEGER_INTERVAL_TO_MAX' IN types2)
    THEN
      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_integers));
    END_IF;
    IF ('FINITE_REAL_INTERVAL' IN types2) OR ('REAL_INTERVAL_FROM_MIN' IN types2) OR ('REAL_INTERVAL_TO_MAX' IN types2)
    THEN
      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_reals));
    END_IF;
    IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types2) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types2)
    THEN
      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_complex_numbers));
    END_IF;
    IF 'TUPLE_SPACE' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'FUNCTION_SPACE' IN types2
    THEN
      RETURN(bool(sp1\elementary_space.space_id = es_maths_functions));
    END_IF;
    RETURN(TRUE);
  END_IF;
      IF 'ELEMENTARY_SPACE' IN types2
  THEN
    IF sp2\elementary_space.space_id = es_generics
    THEN
      RETURN(TRUE);
    END_IF;
    IF ('FINITE_INTEGER_INTERVAL' IN types1) OR ('INTEGER_INTERVAL_FROM_MIN' IN types1) OR
       ('INTEGER_INTERVAL_TO_MAX' IN types1)
    THEN
      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_integers));
    END_IF;
    IF ('FINITE_REAL_INTERVAL' IN types1) OR ('REAL_INTERVAL_FROM_MIN' IN types1) OR ('REAL_INTERVAL_TO_MAX' IN types1)
    THEN
      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_reals));
    END_IF;
    IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types1) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types1)
    THEN
      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_complex_numbers));
    END_IF;
    IF 'TUPLE_SPACE' IN types1
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'FUNCTION_SPACE' IN types1
    THEN
      RETURN(bool(sp2\elementary_space.space_id = es_maths_functions));
    END_IF;
    RETURN(TRUE);
  END_IF;
      IF subspace_of_es(sp1, es_integers)
  THEN
    IF subspace_of_es(sp2, es_integers)
    THEN
      RETURN(compatible_intervals(sp1, sp2));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(sp2, es_integers)
  THEN
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(sp1, es_reals)
  THEN
    IF subspace_of_es(sp2, es_reals)
    THEN
      RETURN(compatible_intervals(sp1, sp2));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(sp2, es_reals)
  THEN
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(sp1, es_complex_numbers)
  THEN
    IF subspace_of_es(sp2, es_complex_numbers)
    THEN
      RETURN(compatible_complex_number_regions(sp1, sp2));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(sp2, es_complex_numbers)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'UNIFORM_PRODUCT_SPACE' IN types1
  THEN
    IF 'UNIFORM_PRODUCT_SPACE' IN types2
    THEN
      IF sp1\uniform_product_space.exponent <> sp2\uniform_product_space.exponent
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(compatible_spaces(sp1\uniform_product_space.base, sp2\uniform_product_space.base));
    END_IF;
    IF 'LISTED_PRODUCT_SPACE' IN types2
    THEN
      n := SIZEOF(sp2\listed_product_space.factors);
      IF sp1\uniform_product_space.exponent <> n
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO n;
        IF NOT compatible_spaces(sp1\uniform_product_space.base, sp2\listed_product_space.factors[i])
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(TRUE);
    END_IF;
    IF 'EXTENDED_TUPLE_SPACE' IN types2
    THEN
      m := sp1\uniform_product_space.exponent;
      n := space_dimension(sp2\extended_tuple_space.base);
      IF m < n
      THEN
        RETURN(FALSE);
      END_IF;
      IF m = n
      THEN
        RETURN(compatible_spaces(sp1, sp2\extended_tuple_space.base));
      END_IF;
      RETURN(compatible_spaces(sp1, assoc_product_space(sp2\extended_tuple_space.base, make_uniform_product_space(sp2\extended_tuple_space.extender, m -
                                                                                                                                                     n))));
    END_IF;
    IF 'FUNCTION_SPACE' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    RETURN(TRUE);
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN types1
  THEN
    n := SIZEOF(sp1\listed_product_space.factors);
    IF 'UNIFORM_PRODUCT_SPACE' IN types2
    THEN
      IF n <> sp2\uniform_product_space.exponent
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO n;
        IF NOT compatible_spaces(sp2\uniform_product_space.base, sp1\listed_product_space.factors[i])
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(TRUE);
    END_IF;
    IF 'LISTED_PRODUCT_SPACE' IN types2
    THEN
      IF n <> SIZEOF(sp2\listed_product_space.factors)
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO n;
        IF NOT compatible_spaces(sp1\listed_product_space.factors[i], sp2\listed_product_space.factors[i])
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(TRUE);
    END_IF;
    IF 'EXTENDED_TUPLE_SPACE' IN types2
    THEN
      m := space_dimension(sp2\extended_tuple_space.base);
      IF n < m
      THEN
        RETURN(FALSE);
      END_IF;
      IF n = m
      THEN
        RETURN(compatible_spaces(sp1, sp2\extended_tuple_space.base));
      END_IF;
      RETURN(compatible_spaces(sp1, assoc_product_space(sp2\extended_tuple_space.base, make_uniform_product_space(sp2\extended_tuple_space.extender, n -
                                                                                                                                                     m))));
    END_IF;
    IF (schema_prefix + 'FUNCTION_SPACE') IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    RETURN(TRUE);
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN types1
  THEN
    IF ('UNIFORM_PRODUCT_SPACE' IN types2) OR ('LISTED_PRODUCT_SPACE' IN types2)
    THEN
      RETURN(compatible_spaces(sp2, sp1));
    END_IF;
    IF 'EXTENDED_TUPLE_SPACE' IN types2
    THEN
      IF NOT compatible_spaces(sp1\extended_tuple_space.extender, sp2\extended_tuple_space.extender)
      THEN
        RETURN(FALSE);
      END_IF;
      n := space_dimension(sp1\extended_tuple_space.base);
      m := space_dimension(sp2\extended_tuple_space.base);
      IF n < m
      THEN
        RETURN(compatible_spaces(assoc_product_space(sp1\extended_tuple_space.base, make_uniform_product_space(sp1\extended_tuple_space.extender, m -
                                                                                                                                                  n)), sp2\extended_tuple_space.base));
      END_IF;
      IF n = m
      THEN
        RETURN(compatible_spaces(sp1\extended_tuple_space.base, sp2\extended_tuple_space.base));
      END_IF;
      IF n > m
      THEN
        RETURN(compatible_spaces(sp1\extended_tuple_space.base, assoc_product_space(sp2\extended_tuple_space.base, make_uniform_product_space(sp2\extended_tuple_space.extender, n -
                                                                                                                                                                                 m))));
      END_IF;
    END_IF;
    IF 'FUNCTION_SPACE' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    RETURN(TRUE);
  END_IF;
      IF 'FUNCTION_SPACE' IN types1
  THEN
    IF 'FUNCTION_SPACE' IN types2
    THEN
      s1 := sp1\function_space.domain_argument;
      s2 := sp2\function_space.domain_argument;
      CASE sp1\function_space.domain_constraint OF
        sc_equal : BEGIN  
                          CASE sp2\function_space.domain_constraint OF
                            sc_equal : lgcl := subspace_of(s1, s2) AND subspace_of(s2, s1);
                            sc_subspace : lgcl := subspace_of(s1, s2);
                            sc_member : lgcl := member_of(s1, s2);
                          END_CASE;
        END;
        sc_subspace : BEGIN  
                             CASE sp2\function_space.domain_constraint OF
                               sc_equal : lgcl := subspace_of(s2, s1);
                               sc_subspace : lgcl := compatible_spaces(s1, s2);
                               sc_member : lgcl := UNKNOWN;
                             END_CASE;
        END;
        sc_member : BEGIN  
                           CASE sp2\function_space.domain_constraint OF
                             sc_equal : lgcl := member_of(s2, s1);
                             sc_subspace : lgcl := UNKNOWN;
                             sc_member : lgcl := compatible_spaces(s1, s2);
                           END_CASE;
        END;
      END_CASE;
      IF lgcl = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
      s1 := sp1\function_space.range_argument;
      s2 := sp2\function_space.range_argument;
      CASE sp1\function_space.range_constraint OF
        sc_equal : BEGIN  
                          CASE sp2\function_space.range_constraint OF
                            sc_equal : lgcl := subspace_of(s1, s2) AND subspace_of(s2, s1);
                            sc_subspace : lgcl := subspace_of(s1, s2);
                            sc_member : lgcl := member_of(s1, s2);
                          END_CASE;
        END;
        sc_subspace : BEGIN  
                             CASE sp2\function_space.range_constraint OF
                               sc_equal : lgcl := subspace_of(s2, s1);
                               sc_subspace : lgcl := compatible_spaces(s1, s2);
                               sc_member : lgcl := UNKNOWN;
                             END_CASE;
        END;
        sc_member : BEGIN  
                           CASE sp2\function_space.range_constraint OF
                             sc_equal : lgcl := member_of(s2, s1);
                             sc_subspace : lgcl := UNKNOWN;
                             sc_member : lgcl := compatible_spaces(s1, s2);
                           END_CASE;
        END;
      END_CASE;
      IF lgcl = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(TRUE);
    END_IF;
    RETURN(TRUE);
  END_IF;
      -- Should be unreachable.
      RETURN(TRUE);
END_FUNCTION;

FUNCTION composable_sequence
 (operands : LIST[2:?] OF maths_function) : BOOLEAN;
    REPEAT i := 1 TO SIZEOF(operands) - 1;
    IF NOT compatible_spaces(operands[i].range, operands[i + 1].domain)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION compute_total_depth
 (swsrh : solid_with_stepped_round_hole) : positive_length_measure;
  LOCAL
  i : positive_integer;
  n : positive_integer := swsrh.segments;
  td : positive_length_measure := swsrh.segment_depths[1];
    END_LOCAL;
      IF n = 1
  THEN
    RETURN(td);
  ELSE
    REPEAT i := 2 TO n;
      td := td + swsrh.segment_depths[i];
    END_REPEAT;
  END_IF;
      RETURN(td);
END_FUNCTION;

FUNCTION conditional_reverse
 (p : BOOLEAN; an_item : reversible_topology) : reversible_topology;
    IF p
  THEN
    RETURN(an_item);
  ELSE
    RETURN(topology_reversed(an_item));
  END_IF;
END_FUNCTION;

FUNCTION consistent_sizes
 (max : INTEGER; point_lists : LIST OF point_cloud_dataset) : BOOLEAN;
  LOCAL
  ndatasets : INTEGER := SIZEOF(point_lists);
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 1 TO (ndatasets - 1);
    IF (SIZEOF(point_lists[i].point_coordinates) <> max)
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      IF (SIZEOF(point_lists[ndatasets].point_coordinates) > max)
  THEN
    result := FALSE;
    RETURN(result);
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION constraints_composite_curve_on_surface
 (c : composite_curve_on_surface) : BOOLEAN;
  LOCAL
  n_segments : INTEGER := SIZEOF(c.segments);
    END_LOCAL;
      REPEAT k := 1 TO n_segments;
    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
             TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
       (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN
             TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
       (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_ON_SURFACE' IN
             TYPEOF(c\composite_curve.segments[k].parent_curve)))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION constraints_geometry_shell_based_surface_model
 (m : shell_based_surface_model) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT j := 1 TO SIZEOF(m.sbsm_boundary);
    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(m.sbsm_boundary[j])) AND
            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN TYPEOF(m.sbsm_boundary[j]))))
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION constraints_geometry_shell_based_wireframe_model
 (m : shell_based_wireframe_model) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT j := 1 TO SIZEOF(m.sbwm_boundary);
    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(m.sbwm_boundary[j])) AND
            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN TYPEOF(m.sbwm_boundary[j]))))
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION constraints_param_b_spline
 (degree : INTEGER; up_knots : INTEGER; up_cp : INTEGER; knot_mult : LIST[0:?] OF INTEGER; knots : LIST[0:?] OF parameter_value) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
  k : INTEGER;
  sum : INTEGER;
    END_LOCAL;
      (*Find sum of knot multiplicities.*)
  
      sum := knot_mult[1];
      REPEAT i := 2 TO up_knots;
    sum := sum + knot_mult[i];
  END_REPEAT;
      (*Check limits holding for all B-spline parametrisations*)
  
      IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> (degree + up_cp + 2))
  THEN
    result := FALSE;
    RETURN(result);
  END_IF;
      k := knot_mult[1];
      IF (k < 1) OR (k > degree + 1)
  THEN
    result := FALSE;
    RETURN(result);
  END_IF;
      REPEAT i := 2 TO up_knots;
    IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1])
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
    k := knot_mult[i];
    IF (i < up_knots) AND (k > degree)
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
    IF (i = up_knots) AND (k > degree + 1)
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION constraints_param_local_b_spline
 (degree : INTEGER; knot_mult : LIST OF INTEGER; knots : LIST OF INTEGER) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
  k : INTEGER;
  up_knots : INTEGER;
  sum : INTEGER;
    END_LOCAL;
      (*Find sum of knot multiplicities.*)
  
      up_knots := SIZEOF(knots);
      sum := knot_mult[1];
      REPEAT i := 2 TO up_knots;
    sum := sum + knot_mult[i];
  END_REPEAT;
      (*Check limits holding for all B-spline parametrisations*)
  
      IF (degree < 1) OR (up_knots < 2) OR (sum <> (degree + 2))
  THEN
    result := FALSE;
    RETURN(result);
  END_IF;
      k := knot_mult[1];
      IF (k < 1) OR (k > degree + 1)
  THEN
    result := FALSE;
    RETURN(result);
  END_IF;
      (*first pointer shall be 1 or more*)
  
      IF (knots[1] < 1)
  THEN
    result := FALSE;
  END_IF;
      REPEAT i := 2 TO up_knots;
    IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1])
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
    k := knot_mult[i];
    IF (i < up_knots) AND (k > degree)
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
    IF (i = up_knots) AND (k > degree + 1)
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION constraints_rectangular_composite_surface
 (s : rectangular_composite_surface) : BOOLEAN;
    REPEAT i := 1 TO s.n_u;
    REPEAT j := 1 TO s.n_v;
      IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN
               TYPEOF(s.segments[i][j].parent_surface)) OR
              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_TRIMMED_SURFACE' IN
               TYPEOF(s.segments[i][j].parent_surface)))
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      (*Check the transition codes, omitting the last row or column*)
  
      REPEAT i := 1 TO s.n_u - 1;
    REPEAT j := 1 TO s.n_v;
      IF s.segments[i][j].u_transition = discontinuous
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      REPEAT i := 1 TO s.n_u;
    REPEAT j := 1 TO s.n_v - 1;
      IF s.segments[i][j].v_transition = discontinuous
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION constraints_scaling
 (factors : LIST OF REAL) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(factors);
    IF NOT ({0.0 < factors[i] <= 1.0})
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION control_characters_free
 (s : STRING) : BOOLEAN;
  LOCAL
  ch : STRING;
    END_LOCAL;
      REPEAT i := 1 TO LENGTH(s);
    ch := s[i];
    IF (ch = '\x9') OR (ch = '\xA') OR (ch = '\xD')
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION convert_spatial_to_ypr_rotation
 (pair : kinematic_pair; rotation : spatial_rotation) : ypr_rotation;
  LOCAL
  axis : direction;
  angle : plane_angle_measure;
  conv_angle : plane_angle_measure;
  ya : plane_angle_measure;
  pa : plane_angle_measure;
  ra : plane_angle_measure;
  ucf : REAL;
  dx : REAL;
  dy : REAL;
  dz : REAL;
  s_a : REAL;
  c_a : REAL;
  rotmat : ARRAY [1 : 3] OF ARRAY [1 : 3] OF REAL;
  cm1 : REAL;
  s_y : REAL;
  c_y : REAL;
  s_r : REAL;
  c_r : REAL;
    END_LOCAL;
      -- If rotation is already a ypr_rotation, return it immediately
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.YPR_ROTATION' IN TYPEOF(rotation)
  THEN
    RETURN(rotation);
  END_IF;
      -- rotation is a rotation_about_direction
      axis := normalise(rotation\rotation_about_direction.direction_of_axis);
      angle := rotation\rotation_about_direction.rotation_angle;
      -- a zero rotation is converted trivially
      IF (angle = 0.0)
  THEN
    RETURN([0.0,0.0,0.0]);
  END_IF;
      dx := axis.direction_ratios[1];
      dy := axis.direction_ratios[2];
      dz := axis.direction_ratios[3];
      -- provide angle measured in radian
      conv_angle := plane_angle_for_pair_in_radian(pair, angle);
      IF NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(conv_angle))
  THEN
    RETURN(?);
  END_IF;
      ucf := angle / conv_angle;
      s_a := SIN(conv_angle);
      c_a := COS(conv_angle);
      -- axis parallel either to x-axis or to z-axis?
      IF (dy = 0.0) AND (dx * dz = 0.0)
  THEN
    REPEAT WHILE (conv_angle <= -PI);
      conv_angle := conv_angle + 2.0 * PI;
    END_REPEAT;
    REPEAT WHILE (conv_angle > PI);
      conv_angle := conv_angle - 2.0 * PI;
    END_REPEAT;
    ya := ucf * conv_angle;
    IF (conv_angle <> PI)
    THEN
      ra := -ya;
    ELSE
      ra := ya;
    END_IF;
    IF (dx <> 0.0)
    THEN
      IF (dx > 0.0)
      THEN
        RETURN([0.0,0.0,ya]);
      ELSE
        RETURN([0.0,0.0,ra]);
      END_IF;
    ELSE
      IF (dz > 0.0)
      THEN
        RETURN([ya,0.0,0.0]);
      ELSE
        RETURN([ra,0.0,0.0]);
      END_IF;
    END_IF;
  END_IF;
      -- axis parallel to y-axis - use y-axis as pitch axis
      IF ((dy <> 0.0) AND (dx = 0.0) AND (dz = 0.0))
  THEN
    IF (c_a >= 0.0)
    THEN
      ya := 0.0;
      ra := 0.0;
    ELSE
      ya := ucf * PI;
      ra := ya;
    END_IF;
    pa := ucf * ATAN(s_a, ABS(c_a));
    IF (dy < 0.0)
    THEN
      pa := -pa;
    END_IF;
    RETURN([ya,pa,ra]);
  END_IF;
      -- axis not parallel to any axis of coordinate system
      -- compute rotation matrix
      cm1 := 1.0 - c_a;
      rotmat := [[dx * dx * cm1 + c_a,dx * dy * cm1 - dz * s_a,dx * dz * cm1 + dy * s_a],
                 [dx * dy * cm1 + dz * s_a,dy * dy * cm1 + c_a,dy * dz * cm1 - dx * s_a],
                 [dx * dz * cm1 - dy * s_a,dy * dz * cm1 + dx * s_a,dz * dz * cm1 + c_a]];
      -- rotmat[1][3] equals SIN (pitch_angle)
      IF (ABS(rotmat[1][3]) = 1.0)
  THEN
    BEGIN  
           IF (rotmat[1][3] = 1.0)
           THEN
             pa := 0.5 * PI;
           ELSE
             pa := -0.5 * PI;
           END_IF;
           ra := 0.0;
           ya := ATAN(rotmat[2][1], rotmat[2][2]);
           IF (rotmat[2][2] < 0.0)
           THEN
             IF ya <= 0.0
             THEN
               ya := ya + PI;
             ELSE
               ya := ya - PI;
             END_IF;
           END_IF;
    END;
  ELSE
    BEGIN  
           ya := ATAN(-rotmat[1][2], rotmat[1][1]);
           IF (rotmat[1][1] < 0.0)
           THEN
             IF (ya <= 0.0)
             THEN
               ya := ya + PI;
             ELSE
               ya := ya - PI;
             END_IF;
           END_IF;
           ra := ATAN(-rotmat[2][3], rotmat[3][3]);
           IF (rotmat[3][3] < 0.0)
           THEN
             IF (ra <= 0.0)
             THEN
               ra := ra + PI;
             ELSE
               ra := ra - PI;
             END_IF;
           END_IF;
           s_y := SIN(ya);
           c_y := COS(ya);
           s_r := SIN(ra);
           c_r := COS(ra);
           IF ((ABS(s_y) > ABS(c_y)) AND (ABS(s_y) > ABS(s_r)) AND (ABS(s_y) > ABS(c_r)))
           THEN
             cm1 := -rotmat[1][2] / s_y;
           ELSE
             IF ((ABS(c_y) > ABS(s_r)) AND (ABS(c_y) > ABS(c_r)))
             THEN
               cm1 := rotmat[1][1] / c_y;
             ELSE
               IF (ABS(s_r) > ABS(c_r))
               THEN
                 cm1 := -rotmat[2][3] / s_r;
               ELSE
                 cm1 := rotmat[3][3] / c_r;
               END_IF;
             END_IF;
           END_IF;
           pa := ATAN(rotmat[1][3], cm1);
    END;
  END_IF;
      ya := ya * ucf;
      pa := pa * ucf;
      ra := ra * ucf;
      RETURN([ya,pa,ra]);
END_FUNCTION;

FUNCTION convert_to_literal
 (val : maths_atom) : generic_literal;
  LOCAL
  types : SET OF STRING := TYPEOF(val);
    END_LOCAL;
      IF 'INTEGER' IN types
  THEN
    RETURN(make_int_literal(val));
  END_IF;
      IF 'REAL' IN types
  THEN
    RETURN(make_real_literal(val));
  END_IF;
      IF 'BOOLEAN' IN types
  THEN
    RETURN(make_boolean_literal(val));
  END_IF;
      IF 'STRING' IN types
  THEN
    RETURN(make_string_literal(val));
  END_IF;
      IF 'LOGICAL' IN types
  THEN
    RETURN(make_logical_literal(val));
  END_IF;
      IF 'BINARY' IN types
  THEN
    RETURN(make_binary_literal(val));
  END_IF;
      IF (schema_prefix + 'MATHS_ENUM_ATOM') IN types
  THEN
    RETURN(make_maths_enum_literal(val));
  END_IF;
      -- Should be unreachable
      RETURN(?);
END_FUNCTION;

FUNCTION convert_to_maths_function
 (func : maths_function_select) : maths_function;
  LOCAL
  efenum : elementary_function_enumerators;
  mthfun : maths_function;
    END_LOCAL;
      IF (schema_prefix + 'MATHS_FUNCTION') IN TYPEOF(func)
  THEN
    mthfun := func;
  ELSE
    efenum := func;
    mthfun := make_elementary_function(efenum);
  END_IF;
      RETURN(mthfun);
END_FUNCTION;

FUNCTION convert_to_maths_value
 (val : GENERIC : G) : maths_value;
  LOCAL
  types : SET OF STRING := TYPEOF(val);
  ival : maths_integer;
  rval : maths_real;
  nval : maths_number;
  tfval : maths_boolean;
  lval : maths_logical;
  sval : maths_string;
  bval : maths_binary;
  tval : maths_tuple := the_empty_maths_tuple;
  mval : maths_value;
    END_LOCAL;
      IF (schema_prefix + 'MATHS_VALUE') IN types
  THEN
    RETURN(val);
  END_IF;
      IF 'INTEGER' IN types
  THEN
    ival := val;
    RETURN(ival);
  END_IF;
      IF 'REAL' IN types
  THEN
    rval := val;
    RETURN(rval);
  END_IF;
      IF 'NUMBER' IN types
  THEN
    nval := val;
    RETURN(nval);
  END_IF;
      IF 'BOOLEAN' IN types
  THEN
    tfval := val;
    RETURN(tfval);
  END_IF;
      IF 'LOGICAL' IN types
  THEN
    lval := val;
    RETURN(lval);
  END_IF;
      IF 'STRING' IN types
  THEN
    sval := val;
    RETURN(sval);
  END_IF;
      IF 'BINARY' IN types
  THEN
    bval := val;
    RETURN(bval);
  END_IF;
      IF 'LIST' IN types
  THEN
    REPEAT i := 1 TO SIZEOF(val);
      mval := convert_to_maths_value(val[i]);
      IF NOT EXISTS(mval)
      THEN
        RETURN(?);
      END_IF;
      INSERT(tval, mval, i - 1);
    END_REPEAT;
    RETURN(tval);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION convert_to_operand
 (val : maths_value) : generic_expression;
  LOCAL
  types : SET OF STRING := stripped_typeof(val);
    END_LOCAL;
      -- Use intermediate variables of appropriate declared types to help the compilers.
      IF 'GENERIC_EXPRESSION' IN types
  THEN
    RETURN(val);
  END_IF;
      IF 'MATHS_ATOM' IN types
  THEN
    RETURN(convert_to_literal(val));
  END_IF;
      IF 'ATOM_BASED_VALUE' IN types
  THEN
    RETURN(make_atom_based_literal(val));
  END_IF;
      IF 'MATHS_TUPLE' IN types
  THEN
    RETURN(make_maths_tuple_literal(val));
  END_IF;
      -- Should be unreachable
      RETURN(?);
END_FUNCTION;

FUNCTION convert_to_operands
 (values : AGGREGATE OF maths_value) : LIST OF generic_expression;
  LOCAL
  operands : LIST OF generic_expression := [];
  loc : INTEGER := 0;
    END_LOCAL;
      IF NOT EXISTS(values)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := LOINDEX(values) TO HIINDEX(values);
    INSERT(operands, convert_to_operand(values[i]), loc);
    loc := loc + 1;
  END_REPEAT;
      RETURN(operands);
END_FUNCTION;

FUNCTION convert_to_operands_prcmfn
 (srcdom : maths_space_or_function; prepfun : LIST OF maths_function; finfun : maths_function_select) : LIST[2:?] OF generic_expression;
  LOCAL
  operands : LIST OF generic_expression := [];
    END_LOCAL;
      INSERT(operands, srcdom, 0);
      REPEAT i := 1 TO SIZEOF(prepfun);
    INSERT(operands, prepfun[i], i);
  END_REPEAT;
      INSERT(operands, convert_to_maths_function(finfun), SIZEOF(prepfun) + 1);
      RETURN(operands);
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.0;
           REPEAT i := 1 TO 3;
             mag := mag + res.direction_ratios[i] * res.direction_ratios[i];
           END_REPEAT;
           IF (mag > 0.0)
           THEN
             result := dummy_gri || vector(res, SQRT(mag));
           ELSE
             result := dummy_gri || vector(arg1, 0.0);
           END_IF;
           RETURN(result);
    END;
  END_IF;
END_FUNCTION;

FUNCTION curve_weights_positive
 (b : rational_b_spline_curve) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 0 TO b.upper_index_on_control_points;
    IF b.weights[i] <= 0.0
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION default_tolerance_table_cell_wr2
 (agg : compound_item_definition) : BOOLEAN;
    BEGIN  
                            IF SIZEOF(agg) <= 5
                            THEN
                              RETURN(TRUE);
                            ELSE
                              RETURN(FALSE);
                            END_IF;
  END;
END_FUNCTION;

FUNCTION default_tolerance_table_cell_wr3
 (agg : compound_item_definition) : BOOLEAN;
    BEGIN  
                            IF (SIZEOF(QUERY(i
                                             <* agg
                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                 TYPEOF(i)) AND
                                                (i\representation_item.name = 'significant number of digits')))) =
                                1) OR
                               ((SIZEOF(QUERY(i
                                              <* agg
                                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                  TYPEOF(i)) AND
                                                 (i\representation_item.name = 'lower limit')))) =
                                 1) AND
                                (SIZEOF(QUERY(i
                                              <* agg
                                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                  TYPEOF(i)) AND
                                                 (i\representation_item.name = 'upper limit')))) =
                                 1))
                            THEN
                              RETURN(TRUE);
                            ELSE
                              RETURN(FALSE);
                            END_IF;
  END;
END_FUNCTION;

FUNCTION default_tolerance_table_cell_wr4
 (agg : compound_item_definition) : BOOLEAN;
    BEGIN  
                            IF (SIZEOF(QUERY(i
                                             <* agg
                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                 TYPEOF(i)) AND
                                                (i\representation_item.name = 'plus minus tolerance value')))) =
                                1) OR
                               ((SIZEOF(QUERY(i
                                              <* agg
                                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                  TYPEOF(i)) AND
                                                 (i\representation_item.name = 'lower tolerance value')))) =
                                 1) AND
                                (SIZEOF(QUERY(i
                                              <* agg
                                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                  TYPEOF(i)) AND
                                                 (i\representation_item.name = 'upper tolerance value')))) =
                                 1))
                            THEN
                              RETURN(TRUE);
                            ELSE
                              RETURN(FALSE);
                            END_IF;
  END;
END_FUNCTION;

FUNCTION default_tolerance_table_cell_wr5
 (agg : compound_item_definition) : BOOLEAN;
    BEGIN  
                            IF (SIZEOF(QUERY(i
                                             <* agg
                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
                                                TYPEOF(i)))) <=
                                1) AND
                               (SIZEOF(QUERY(i
                                             <* agg
                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
                                                TYPEOF(i)))) =
                                SIZEOF(QUERY(i
                                             <* agg
                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
                                                 TYPEOF(i)) AND
                                                (i\representation_item.name = 'cell description')))))
                            THEN
                              RETURN(TRUE);
                            ELSE
                              RETURN(FALSE);
                            END_IF;
  END;
END_FUNCTION;

FUNCTION definite_integral_check
 (domain : tuple_space; vrblint : input_selector; lowerinf : BOOLEAN; upperinf : BOOLEAN) : BOOLEAN;
  LOCAL
  domn : tuple_space := domain;
  fspc : maths_space;
  dim : nonnegative_integer;
  k : positive_integer;
    END_LOCAL;
      IF (space_dimension(domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(domain)))
  THEN
    domn := factor1(domain);
  END_IF;
      dim := space_dimension(domn);
      k := vrblint;
      IF k > dim
  THEN
    RETURN(FALSE);
  END_IF;
      fspc := factor_space(domn, k);
      IF NOT ((schema_prefix + 'REAL_INTERVAL') IN TYPEOF(fspc))
  THEN
    RETURN(FALSE);
  END_IF;
      IF lowerinf AND min_exists(fspc)
  THEN
    RETURN(FALSE);
  END_IF;
      IF upperinf AND max_exists(fspc)
  THEN
    RETURN(FALSE);
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION definite_integral_expr_check
 (operands : LIST[2:?] OF generic_expression; lowerinf : BOOLEAN; upperinf : BOOLEAN) : BOOLEAN;
  LOCAL
  nops : INTEGER := 2;
  vspc : maths_space;
  dim : nonnegative_integer;
  k : positive_integer;
  bspc : maths_space;
    END_LOCAL;
      IF NOT lowerinf
  THEN
    nops := nops + 1;
  END_IF;
      IF NOT upperinf
  THEN
    nops := nops + 1;
  END_IF;
      IF SIZEOF(operands) <> nops
  THEN
    RETURN(FALSE);
  END_IF;
      IF NOT ('GENERIC_VARIABLE' IN stripped_typeof(operands[2]))
  THEN
    RETURN(FALSE);
  END_IF;
      IF NOT has_values_space(operands[2])
  THEN
    RETURN(FALSE);
  END_IF;
      vspc := values_space_of(operands[2]);
      IF NOT ('REAL_INTERVAL' IN stripped_typeof(vspc))
  THEN
    RETURN(FALSE);
  END_IF;
      IF lowerinf
  THEN
    IF min_exists(vspc)
    THEN
      RETURN(FALSE);
    END_IF;
    k := 3;
  ELSE
    IF NOT has_values_space(operands[3])
    THEN
      RETURN(FALSE);
    END_IF;
    bspc := values_space_of(operands[3]);
    IF NOT compatible_spaces(bspc, vspc)
    THEN
      RETURN(FALSE);
    END_IF;
    k := 4;
  END_IF;
      IF upperinf
  THEN
    IF max_exists(vspc)
    THEN
      RETURN(FALSE);
    END_IF;
  ELSE
    IF NOT has_values_space(operands[k])
    THEN
      RETURN(FALSE);
    END_IF;
    bspc := values_space_of(operands[k]);
    IF NOT compatible_spaces(bspc, vspc)
    THEN
      RETURN(FALSE);
    END_IF;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION derive_angle
 (placement_1 : axis2_placement_3d; placement_2 : axis2_placement_3d) : plane_angle_measure;
  LOCAL
  v1 : direction;
  v2 : direction;
  mag_v1 : REAL;
  mag_v2 : REAL;
  theta : plane_angle_measure;
    END_LOCAL;
      v1 := placement_1.p[1];
      v2 := placement_2.p[1];
      mag_v1 := SQRT((v1.direction_ratios[1] * v1.direction_ratios[1]) +
                     (v1.direction_ratios[2] * v1.direction_ratios[2]));
      mag_v2 := SQRT((v2.direction_ratios[1] * v2.direction_ratios[1]) +
                     (v2.direction_ratios[2] * v2.direction_ratios[2]));
      IF (mag_v1 = 0) OR (mag_v2 = 0)
  THEN
    theta := 0;
    RETURN(theta);
  END_IF;
      theta := ACOS(((v1.direction_ratios[1] * v2.direction_ratios[1]) +
                     (v1.direction_ratios[2] * v2.direction_ratios[2])) /
                    (mag_v1 * mag_v2));
      RETURN(theta);
END_FUNCTION;

FUNCTION derive_definite_integral_domain
 (igrl : definite_integral_function) : tuple_space;
FUNCTION process_product_space(spc : product_space;
                                                idx : INTEGER;
                                                prefix : INTEGER;
                                                vdomn : maths_space) : product_space;
  LOCAL
    uspc    : uniform_product_space;
    expnt   : INTEGER;
    factors : LIST OF maths_space;
  END_LOCAL;
    IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN TYPEOF(spc)
    THEN
      uspc := spc;
      expnt := uspc.exponent + prefix;
      IF idx <= uspc.exponent
      THEN
        expnt := expnt - 1;
      END_IF;
      IF expnt = 0
      THEN
        RETURN(make_listed_product_space([]));
      ELSE
        RETURN(make_uniform_product_space(uspc.base, expnt));
      END_IF;
    ELSE
      factors := spc\listed_product_space.factors;
      IF idx <= SIZEOF(factors)
      THEN
        REMOVE(factors, idx);
      END_IF;
      IF prefix > 0
      THEN
        INSERT(factors, vdomn, 0);
        IF prefix > 1
        THEN
          INSERT(factors, vdomn, 0);
        END_IF;
      END_IF;
      RETURN(make_listed_product_space(factors));
    END_IF;
  END_FUNCTION;
    LOCAL
  idomn : tuple_space := igrl.integrand.domain;
  types : SET OF STRING := TYPEOF(idomn);
  idx : INTEGER := igrl.variable_of_integration;
  tupled : BOOLEAN := bool(((space_dimension(idomn) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN types)));
  prefix : INTEGER := 0;
  espc : extended_tuple_space;
  vdomn : maths_space;
    END_LOCAL;
      IF tupled
  THEN
    idomn := factor1(idomn);
    types := TYPEOF(idomn);
  END_IF;
      IF igrl.lower_limit_neg_infinity
  THEN
    prefix := prefix + 1;
  END_IF;
      IF igrl.upper_limit_pos_infinity
  THEN
    prefix := prefix + 1;
  END_IF;
      vdomn := factor_space(idomn, idx);
      IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
  THEN
    espc := idomn;
    idomn := make_extended_tuple_space(process_product_space(espc.base, idx, prefix, vdomn), espc.extender);
  ELSE
    idomn := process_product_space(idomn, idx, prefix, vdomn);
  END_IF;
      IF tupled
  THEN
    RETURN(one_tuples_of(idomn));
  ELSE
    RETURN(idomn);
  END_IF;
END_FUNCTION;

FUNCTION derive_dimensional_exponents
 (x : unit) : dimensional_exponents;
  LOCAL
  result : dimensional_exponents := dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    END_LOCAL;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 derive_elementary_function_domain
 (ef_val : elementary_function_enumerators) : tuple_space;
    IF NOT EXISTS(ef_val)
  THEN
    RETURN(?);
  END_IF;
      CASE ef_val OF
    ef_and : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_logicals));
    ef_or : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_logicals));
    ef_not : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_xor : RETURN(make_uniform_product_space(the_logicals, 2));
    ef_negate_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_add_i : RETURN(the_integer_tuples);
    ef_subtract_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_multiply_i : RETURN(the_integer_tuples);
    ef_divide_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_mod_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_exponentiate_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_eq_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_ne_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_gt_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_lt_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_ge_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_le_i : RETURN(make_uniform_product_space(the_integers, 2));
    ef_abs_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_if_i : RETURN(make_listed_product_space([the_logicals,the_integers,the_integers]));
    ef_negate_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_reciprocal_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_add_r : RETURN(the_real_tuples);
    ef_subtract_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_multiply_r : RETURN(the_real_tuples);
    ef_divide_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_mod_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_exponentiate_r : RETURN(make_listed_product_space([the_nonnegative_reals,the_reals]));
    ef_exponentiate_ri : RETURN(make_listed_product_space([the_reals,the_integers]));
    ef_eq_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_ne_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_gt_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_lt_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_ge_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_le_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_abs_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_acos_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
    ef_asin_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
    ef_atan2_r : RETURN(make_uniform_product_space(the_reals, 2));
    ef_cos_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_exp_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_ln_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_log2_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_log10_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_sin_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_sqrt_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_tan_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_if_r : RETURN(make_listed_product_space([the_logicals,the_reals,the_reals]));
    ef_negate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_reciprocal_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_add_c : RETURN(the_complex_tuples);
    ef_subtract_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
    ef_multiply_c : RETURN(the_complex_tuples);
    ef_divide_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
    ef_exponentiate_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
    ef_exponentiate_ci : RETURN(make_listed_product_space([the_complex_numbers,the_integers]));
    ef_eq_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
    ef_ne_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
    ef_conjugate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_abs_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_arg_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_cos_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_exp_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_ln_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_sin_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_sqrt_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_tan_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_if_c : RETURN(make_listed_product_space([the_logicals,the_complex_numbers,the_complex_numbers]));
    ef_subscript_s : RETURN(make_listed_product_space([the_strings,the_integers]));
    ef_eq_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_ne_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_gt_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_lt_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_ge_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_le_s : RETURN(make_uniform_product_space(the_strings, 2));
    ef_subsequence_s : RETURN(make_listed_product_space([the_strings,the_integers,the_integers]));
    ef_concat_s : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_strings));
    ef_size_s : RETURN(make_uniform_product_space(the_strings, 1));
    ef_format : RETURN(make_listed_product_space([the_numbers,the_strings]));
    ef_value : RETURN(make_uniform_product_space(the_strings, 1));
    ef_like : RETURN(make_uniform_product_space(the_strings, 2));
    ef_if_s : RETURN(make_listed_product_space([the_logicals,the_strings,the_strings]));
    ef_subscript_b : RETURN(make_listed_product_space([the_binarys,the_integers]));
    ef_eq_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_ne_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_gt_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_lt_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_ge_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_le_b : RETURN(make_uniform_product_space(the_binarys, 2));
    ef_subsequence_b : RETURN(make_listed_product_space([the_binarys,the_integers,the_integers]));
    ef_concat_b : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_binarys));
    ef_size_b : RETURN(make_uniform_product_space(the_binarys, 1));
    ef_if_b : RETURN(make_listed_product_space([the_logicals,the_binarys,the_binarys]));
    ef_subscript_t : RETURN(make_listed_product_space([the_tuples,the_integers]));
    ef_eq_t : RETURN(make_uniform_product_space(the_tuples, 2));
    ef_ne_t : RETURN(make_uniform_product_space(the_tuples, 2));
    ef_concat_t : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_tuples));
    ef_size_t : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_entuple : RETURN(the_tuples);
    ef_detuple : RETURN(make_uniform_product_space(the_generics, 1));
    ef_insert : RETURN(make_listed_product_space([the_tuples,the_generics,the_integers]));
    ef_remove : RETURN(make_listed_product_space([the_tuples,the_integers]));
    ef_if_t : RETURN(make_listed_product_space([the_logicals,the_tuples,the_tuples]));
    ef_sum_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
    ef_product_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
    ef_add_it : RETURN(make_extended_tuple_space(the_integer_tuples, the_integer_tuples));
    ef_subtract_it : RETURN(make_uniform_product_space(the_integer_tuples, 2));
    ef_scalar_mult_it : RETURN(make_listed_product_space([the_integers,the_integer_tuples]));
    ef_dot_prod_it : RETURN(make_uniform_product_space(the_integer_tuples, 2));
    ef_sum_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_product_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_add_rt : RETURN(make_extended_tuple_space(the_real_tuples, the_real_tuples));
    ef_subtract_rt : RETURN(make_uniform_product_space(the_real_tuples, 2));
    ef_scalar_mult_rt : RETURN(make_listed_product_space([the_reals,the_real_tuples]));
    ef_dot_prod_rt : RETURN(make_uniform_product_space(the_real_tuples, 2));
    ef_norm_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_sum_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_product_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_add_ct : RETURN(make_extended_tuple_space(the_complex_tuples, the_complex_tuples));
    ef_subtract_ct : RETURN(make_uniform_product_space(the_complex_tuples, 2));
    ef_scalar_mult_ct : RETURN(make_listed_product_space([the_complex_numbers,the_complex_tuples]));
    ef_dot_prod_ct : RETURN(make_uniform_product_space(the_complex_tuples, 2));
    ef_norm_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_if : RETURN(make_listed_product_space([the_logicals,the_generics,the_generics]));
    ef_ensemble : RETURN(the_tuples);
    ef_member_of : RETURN(make_listed_product_space([the_generics,the_maths_spaces]));
    OTHERWISE: RETURN(?);
  END_CASE;
END_FUNCTION;

FUNCTION derive_elementary_function_range
 (ef_val : elementary_function_enumerators) : tuple_space;
    IF NOT EXISTS(ef_val)
  THEN
    RETURN(?);
  END_IF;
      CASE ef_val OF
    ef_and : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_or : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_not : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_xor : RETURN(make_uniform_product_space(the_logicals, 2));
    ef_negate_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_add_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_subtract_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_multiply_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_divide_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_mod_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_exponentiate_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_eq_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_gt_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_lt_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ge_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_le_i : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_abs_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_if_i : RETURN(make_uniform_product_space(the_integers, 1));
    ef_negate_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_reciprocal_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_add_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_subtract_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_multiply_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_divide_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_mod_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_exponentiate_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_exponentiate_ri : RETURN(make_uniform_product_space(the_reals, 1));
    ef_eq_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_gt_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_lt_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ge_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_le_r : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_abs_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_acos_r : RETURN(make_uniform_product_space(the_zero_pi_interval, 1));
    ef_asin_r : RETURN(make_uniform_product_space(the_neghalfpi_halfpi_interval, 1));
    ef_atan2_r : RETURN(make_uniform_product_space(the_negpi_pi_interval, 1));
    ef_cos_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
    ef_exp_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_ln_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_log2_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_log10_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_sin_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
    ef_sqrt_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_tan_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_if_r : RETURN(make_uniform_product_space(the_reals, 1));
    ef_negate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_reciprocal_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_add_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_subtract_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_multiply_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_divide_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_exponentiate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_exponentiate_ci : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_eq_c : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_c : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_conjugate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_abs_c : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_arg_c : RETURN(make_uniform_product_space(the_negpi_pi_interval, 1));
    ef_cos_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_exp_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_ln_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_sin_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_sqrt_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_tan_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_if_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_subscript_s : RETURN(make_uniform_product_space(the_strings, 1));
    ef_eq_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_gt_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_lt_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ge_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_le_s : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_subsequence_s : RETURN(make_uniform_product_space(the_strings, 1));
    ef_concat_s : RETURN(make_uniform_product_space(the_strings, 1));
    ef_size_s : RETURN(make_uniform_product_space(the_integers, 1));
    ef_format : RETURN(make_uniform_product_space(the_strings, 1));
    ef_value : RETURN(make_uniform_product_space(the_reals, 1));
    ef_like : RETURN(make_uniform_product_space(the_booleans, 1));
    ef_if_s : RETURN(make_uniform_product_space(the_strings, 1));
    ef_subscript_b : RETURN(make_uniform_product_space(the_binarys, 1));
    ef_eq_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_gt_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_lt_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ge_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_le_b : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_subsequence_b : RETURN(make_uniform_product_space(the_binarys, 1));
    ef_concat_b : RETURN(make_uniform_product_space(the_binarys, 1));
    ef_size_b : RETURN(make_uniform_product_space(the_integers, 1));
    ef_if_b : RETURN(make_uniform_product_space(the_binarys, 1));
    ef_subscript_t : RETURN(make_uniform_product_space(the_generics, 1));
    ef_eq_t : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_ne_t : RETURN(make_uniform_product_space(the_logicals, 1));
    ef_concat_t : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_size_t : RETURN(make_uniform_product_space(the_integers, 1));
    ef_entuple : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_detuple : RETURN(the_tuples);
    ef_insert : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_remove : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_if_t : RETURN(make_uniform_product_space(the_tuples, 1));
    ef_sum_it : RETURN(make_uniform_product_space(the_integers, 1));
    ef_product_it : RETURN(make_uniform_product_space(the_integers, 1));
    ef_add_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
    ef_subtract_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
    ef_scalar_mult_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
    ef_dot_prod_it : RETURN(make_uniform_product_space(the_integers, 1));
    ef_sum_rt : RETURN(make_uniform_product_space(the_reals, 1));
    ef_product_rt : RETURN(make_uniform_product_space(the_reals, 1));
    ef_add_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_subtract_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_scalar_mult_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
    ef_dot_prod_rt : RETURN(make_uniform_product_space(the_reals, 1));
    ef_norm_rt : RETURN(make_uniform_product_space(the_reals, 1));
    ef_sum_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_product_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_add_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_subtract_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_scalar_mult_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
    ef_dot_prod_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
    ef_norm_ct : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
    ef_if : RETURN(make_uniform_product_space(the_generics, 1));
    ef_ensemble : RETURN(make_uniform_product_space(the_maths_spaces, 1));
    ef_member_of : RETURN(make_uniform_product_space(the_logicals, 1));
    OTHERWISE: RETURN(?);
  END_CASE;
END_FUNCTION;

FUNCTION derive_finite_function_domain
 (pairs : SET[1:?] OF LIST[2:2] OF maths_value) : tuple_space;
  LOCAL
  result : SET OF maths_value := [];
    END_LOCAL;
      -- An ambiguity in ISO 10303-11:1994 pages 99-101 leaves the result of the following
      -- three lines ambiguous in those cases where an operand is simultaneously a member
      -- of the base type and the aggregate type.
      -- REPEAT i := 1 TO SIZEOF (pairs);
      -- result := result + pairs[i][1];
      -- END_REPEAT;
      -- The next line unions an empty set and the desired list to get the desired set.
      result := result + list_selected_components(pairs, 1);
      RETURN(one_tuples_of(make_finite_space(result)));
END_FUNCTION;

FUNCTION derive_finite_function_range
 (pairs : SET[1:?] OF LIST[2:2] OF maths_value) : tuple_space;
  LOCAL
  result : SET OF maths_value := [];
    END_LOCAL;
      -- An ambiguity in ISO 10303-11:1994 pages 99-101 leaves the result of the following
      -- three lines ambiguous in those cases where an operand is simultaneously a member
      -- of the base type and the aggregate type.
      -- REPEAT i := 1 TO SIZEOF (pairs);
      -- result := result + pairs[i][2];
      -- END_REPEAT;
      -- The next line unions an empty set and the desired list to get the desired set.
      result := result + list_selected_components(pairs, 2);
      RETURN(one_tuples_of(make_finite_space(result)));
END_FUNCTION;

FUNCTION derive_function_domain
 (func : maths_function) : tuple_space;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(func);
  tspace : tuple_space := make_listed_product_space([]);
  shape : LIST OF positive_integer;
  sidxs : LIST OF INTEGER := [0];
  itvl : finite_integer_interval;
  factors : LIST OF finite_integer_interval := [];
  is_uniform : BOOLEAN := TRUE;
    END_LOCAL;
      IF 'FINITE_FUNCTION' IN typenames
  THEN
    RETURN(derive_finite_function_domain(func\finite_function.pairs));
  END_IF;
      IF 'CONSTANT_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\constant_function.source_of_domain));
  END_IF;
      IF 'SELECTOR_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\selector_function.source_of_domain));
  END_IF;
      IF 'ELEMENTARY_FUNCTION' IN typenames
  THEN
    RETURN(derive_elementary_function_domain(func\elementary_function.func_id));
  END_IF;
      IF 'RESTRICTION_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(func\restriction_function.operand));
  END_IF;
      IF 'REPACKAGING_FUNCTION' IN typenames
  THEN
    IF func\repackaging_function.input_repack = ro_nochange
    THEN
      RETURN(func\repackaging_function.operand.domain);
    END_IF;
    IF func\repackaging_function.input_repack = ro_wrap_as_tuple
    THEN
      RETURN(factor1(func\repackaging_function.operand.domain));
    END_IF;
    IF func\repackaging_function.input_repack = ro_unwrap_tuple
    THEN
      RETURN(one_tuples_of(func\repackaging_function.operand.domain));
    END_IF;
    RETURN(?);
  END_IF;
      IF 'REINDEXED_ARRAY_FUNCTION' IN typenames
  THEN
    shape := shape_of_array(func\unary_generic_expression.operand);
    sidxs := func\reindexed_array_function.starting_indices;
    REPEAT i := 1 TO SIZEOF(shape);
      itvl := make_finite_integer_interval(sidxs[i], sidxs[i] + shape[i] - 1);
      INSERT(factors, itvl, i - 1);
      IF shape[i] <> shape[1]
      THEN
        is_uniform := FALSE;
      END_IF;
    END_REPEAT;
    IF is_uniform
    THEN
      RETURN(make_uniform_product_space(factors[1], SIZEOF(shape)));
    END_IF;
    RETURN(make_listed_product_space(factors));
  END_IF;
      IF 'SERIES_COMPOSED_FUNCTION' IN typenames
  THEN
    RETURN(func\series_composed_function.operands[1].domain);
  END_IF;
      IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\parallel_composed_function.source_of_domain));
  END_IF;
      IF 'EXPLICIT_TABLE_FUNCTION' IN typenames
  THEN
    shape := func\explicit_table_function.shape;
    sidxs[1] := func\explicit_table_function.index_base;
    REPEAT i := 1 TO SIZEOF(shape);
      itvl := make_finite_integer_interval(sidxs[1], sidxs[1] + shape[i] - 1);
      INSERT(factors, itvl, i - 1);
      IF shape[i] <> shape[1]
      THEN
        is_uniform := FALSE;
      END_IF;
    END_REPEAT;
    IF is_uniform
    THEN
      RETURN(make_uniform_product_space(factors[1], SIZEOF(shape)));
    END_IF;
    RETURN(make_listed_product_space(factors));
  END_IF;
      IF 'HOMOGENEOUS_LINEAR_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\homogeneous_linear_function.mat.range), func\homogeneous_linear_function.mat\explicit_table_function.shape[func\homogeneous_linear_function.sum_index])));
  END_IF;
      IF 'GENERAL_LINEAR_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\general_linear_function.mat.range), func\general_linear_function.mat\explicit_table_function.shape[func\general_linear_function.sum_index] -
                                                                                                     1)));
  END_IF;
      IF 'B_SPLINE_BASIS' IN typenames
  THEN
    RETURN(one_tuples_of(make_finite_real_interval(func\b_spline_basis.repeated_knots[func\b_spline_basis.order], closed, func\b_spline_basis.repeated_knots[func\b_spline_basis.num_basis +
                                                                                                                                                             1], closed)));
  END_IF;
      IF 'B_SPLINE_FUNCTION' IN typenames
  THEN
    REPEAT i := 1 TO SIZEOF(func\b_spline_function.basis);
      tspace := assoc_product_space(tspace, func\b_spline_function.basis[i].domain);
    END_REPEAT;
    RETURN(one_tuples_of(tspace));
  END_IF;
      IF 'RATIONALIZE_FUNCTION' IN typenames
  THEN
    RETURN(func\rationalize_function.fun.domain);
  END_IF;
      IF 'PARTIAL_DERIVATIVE_FUNCTION' IN typenames
  THEN
    RETURN(func\partial_derivative_function.derivand.domain);
  END_IF;
      IF 'DEFINITE_INTEGRAL_FUNCTION' IN typenames
  THEN
    RETURN(derive_definite_integral_domain(func));
  END_IF;
      IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN typenames
  THEN
    REPEAT i := 1 TO SIZEOF(func\abstracted_expression_function.variables);
      tspace := assoc_product_space(tspace, one_tuples_of(values_space_of(func\abstracted_expression_function.variables[i])));
    END_REPEAT;
    RETURN(tspace);
  END_IF;
      IF 'EXPRESSION_DENOTED_FUNCTION' IN typenames
  THEN
    RETURN(values_space_of(func\expression_denoted_function.expr)\function_space.domain_argument);
  END_IF;
      IF 'IMPORTED_POINT_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_listed_product_space([])));
  END_IF;
      IF 'IMPORTED_CURVE_FUNCTION' IN typenames
  THEN
    RETURN(func\imported_curve_function.parametric_domain);
  END_IF;
      IF 'IMPORTED_SURFACE_FUNCTION' IN typenames
  THEN
    RETURN(func\imported_surface_function.parametric_domain);
  END_IF;
      IF 'IMPORTED_VOLUME_FUNCTION' IN typenames
  THEN
    RETURN(func\imported_volume_function.parametric_domain);
  END_IF;
      IF 'APPLICATION_DEFINED_FUNCTION' IN typenames
  THEN
    RETURN(func\application_defined_function.explicit_domain);
  END_IF;
      -- Unreachable, as no other subtypes of maths_function are permissible without
      -- first modifying this function to account for them.
      RETURN(?);
END_FUNCTION;

FUNCTION derive_function_range
 (func : maths_function) : tuple_space;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(func);
  tspace : tuple_space := make_listed_product_space([]);
  m : nonnegative_integer := 0;
  n : nonnegative_integer := 0;
  temp : INTEGER := 0;
    END_LOCAL;
      IF 'FINITE_FUNCTION' IN typenames
  THEN
    RETURN(derive_finite_function_range(func\finite_function.pairs));
  END_IF;
      IF 'CONSTANT_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_finite_space([func\constant_function.sole_output])));
  END_IF;
      IF 'SELECTOR_FUNCTION' IN typenames
  THEN
    tspace := func.domain;
    IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(tspace))
    THEN
      tspace := factor1(tspace);
    END_IF;
    RETURN(one_tuples_of(factor_space(tspace, func\selector_function.selector)));
  END_IF;
      IF 'ELEMENTARY_FUNCTION' IN typenames
  THEN
    RETURN(derive_elementary_function_range(func\elementary_function.func_id));
  END_IF;
      IF 'RESTRICTION_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(func\restriction_function.operand));
  END_IF;
      IF 'REPACKAGING_FUNCTION' IN typenames
  THEN
    tspace := func\repackaging_function.operand.range;
    IF func\repackaging_function.output_repack = ro_wrap_as_tuple
    THEN
      tspace := one_tuples_of(tspace);
    END_IF;
    IF func\repackaging_function.output_repack = ro_unwrap_tuple
    THEN
      tspace := factor1(tspace);
    END_IF;
    IF func\repackaging_function.selected_output > 0
    THEN
      tspace := one_tuples_of(factor_space(tspace, func\repackaging_function.selected_output));
    END_IF;
    RETURN(tspace);
  END_IF;
      IF 'REINDEXED_ARRAY_FUNCTION' IN typenames
  THEN
    RETURN(func\unary_generic_expression.operand\maths_function.range);
  END_IF;
      IF 'SERIES_COMPOSED_FUNCTION' IN typenames
  THEN
    RETURN(func\series_composed_function.operands[SIZEOF(func\series_composed_function.operands)].range);
  END_IF;
      IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
  THEN
    RETURN(func\parallel_composed_function.final_function.range);
  END_IF;
      IF 'EXPLICIT_TABLE_FUNCTION' IN typenames
  THEN
    IF 'LISTED_REAL_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(the_reals));
    END_IF;
    IF 'LISTED_INTEGER_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(the_integers));
    END_IF;
    IF 'LISTED_LOGICAL_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(the_logicals));
    END_IF;
    IF 'LISTED_STRING_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(the_strings));
    END_IF;
    IF 'LISTED_COMPLEX_NUMBER_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(the_complex_numbers));
    END_IF;
    IF 'LISTED_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(func\listed_data.value_range));
    END_IF;
    IF 'EXTERNALLY_LISTED_DATA' IN typenames
    THEN
      RETURN(one_tuples_of(func\externally_listed_data.value_range));
    END_IF;
    IF 'LINEARIZED_TABLE_FUNCTION' IN typenames
    THEN
      RETURN(func\linearized_table_function.source.range);
    END_IF;
    IF 'BASIC_SPARSE_MATRIX' IN typenames
    THEN
      RETURN(func\basic_sparse_matrix.val.range);
    END_IF;
    RETURN(?);
  END_IF;
      IF 'HOMOGENEOUS_LINEAR_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\homogeneous_linear_function.mat.range), func\homogeneous_linear_function.mat\explicit_table_function.shape[3 -
                                                                                                                                                                            func\homogeneous_linear_function.sum_index])));
  END_IF;
      IF 'GENERAL_LINEAR_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\general_linear_function.mat.range), func\general_linear_function.mat\explicit_table_function.shape[3 -
                                                                                                                                                                    func\general_linear_function.sum_index])));
  END_IF;
      IF 'B_SPLINE_BASIS' IN typenames
  THEN
    RETURN(one_tuples_of(make_uniform_product_space(the_reals, func\b_spline_basis.num_basis)));
  END_IF;
      IF 'B_SPLINE_FUNCTION' IN typenames
  THEN
    tspace := factor1(func\b_spline_function.coef.domain);
    m := SIZEOF(func\b_spline_function.basis);
    n := space_dimension(tspace);
    IF m = n
    THEN
      RETURN(one_tuples_of(the_reals));
    END_IF;
    IF m = n - 1
    THEN
      RETURN(one_tuples_of(make_uniform_product_space(the_reals, factor_space(tspace, n)\finite_integer_interval.size)));
    END_IF;
    tspace := extract_factors(tspace, m + 1, n);
    RETURN(one_tuples_of(make_function_space(sc_equal, tspace, sc_subspace, number_superspace_of(func\b_spline_function.coef.range))));
  END_IF;
      IF 'RATIONALIZE_FUNCTION' IN typenames
  THEN
    tspace := factor1(func\rationalize_function.fun.range);
    n := space_dimension(tspace);
    RETURN(one_tuples_of(make_uniform_product_space(number_superspace_of(factor1(tspace)), n - 1)));
  END_IF;
      IF 'PARTIAL_DERIVATIVE_FUNCTION' IN typenames
  THEN
    RETURN(drop_numeric_constraints(func\partial_derivative_function.derivand.range));
  END_IF;
      IF 'DEFINITE_INTEGRAL_FUNCTION' IN typenames
  THEN
    RETURN(drop_numeric_constraints(func\definite_integral_function.integrand.range));
  END_IF;
      IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN typenames
  THEN
    RETURN(one_tuples_of(values_space_of(func\abstracted_expression_function.expr)));
  END_IF;
      IF 'EXPRESSION_DENOTED_FUNCTION' IN typenames
  THEN
    RETURN(values_space_of(func\expression_denoted_function.expr)\function_space.range_argument);
  END_IF;
      IF 'IMPORTED_POINT_FUNCTION' IN typenames
  THEN
    temp := dimension_of(func\imported_point_function.geometry);
    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
  END_IF;
      IF 'IMPORTED_CURVE_FUNCTION' IN typenames
  THEN
    temp := dimension_of(func\imported_curve_function.geometry);
    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
  END_IF;
      IF 'IMPORTED_SURFACE_FUNCTION' IN typenames
  THEN
    temp := dimension_of(func\imported_surface_function.geometry);
    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
  END_IF;
      IF 'IMPORTED_VOLUME_FUNCTION' IN typenames
  THEN
    temp := dimension_of(func\imported_volume_function.geometry);
    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
  END_IF;
      IF 'APPLICATION_DEFINED_FUNCTION' IN typenames
  THEN
    RETURN(func\application_defined_function.explicit_range);
  END_IF;
      -- Unreachable, as no other subtypes of maths_function are permissible without
      -- first modifying this function to account for them.
      RETURN(?);
END_FUNCTION;

FUNCTION dimension_of
 (item : geometric_representation_item) : dimension_count;
  LOCAL
  x : SET OF representation;
  y : representation_context;
  dim : dimension_count;
    END_LOCAL;
      -- For cartesian_point, direction, or vector dimension is determined by
      -- counting components.
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(item)
  THEN
    dim := SIZEOF(item\cartesian_point.coordinates);
    RETURN(dim);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(item)
  THEN
    dim := SIZEOF(item\direction.direction_ratios);
    RETURN(dim);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(item)
  THEN
    dim := SIZEOF(item\vector.orientation\direction.direction_ratios);
    RETURN(dim);
  END_IF;
      -- For all other types of geometric_representation_item dim is obtained
      -- via context.
      -- Find the set of representation in which the item is used. 
      x := using_representations(item);
      -- Determines the dimension_count of the 
      -- geometric_representation_context.
      -- The SET x is non-empty for legal instances since this is required by WR1 of
      -- representation_item.
      IF (SIZEOF(x) > 0)
  THEN
    y := x[1].context_of_items;
    dim := y\geometric_representation_context.coordinate_space_dimension;
    RETURN(dim);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION dimensions_for_si_unit
 (n : si_unit_name) : dimensional_exponents;
    CASE n OF
    metre : RETURN(dimensional_exponents(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
    gram : RETURN(dimensional_exponents(0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0));
    second : RETURN(dimensional_exponents(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0));
    ampere : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0));
    kelvin : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0));
    mole : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0));
    candela : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
    radian : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
    steradian : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
    hertz : RETURN(dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0));
    newton : RETURN(dimensional_exponents(1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
    pascal : RETURN(dimensional_exponents(-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
    joule : RETURN(dimensional_exponents(2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
    watt : RETURN(dimensional_exponents(2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0));
    coulomb : RETURN(dimensional_exponents(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0));
    volt : RETURN(dimensional_exponents(2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0));
    farad : RETURN(dimensional_exponents(-2.0, -1.0, 4.0, 2.0, 0.0, 0.0, 0.0));
    ohm : RETURN(dimensional_exponents(2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0));
    siemens : RETURN(dimensional_exponents(-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0));
    weber : RETURN(dimensional_exponents(2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0));
    tesla : RETURN(dimensional_exponents(0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0));
    henry : RETURN(dimensional_exponents(2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0));
    degree_celsius : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0));
    lumen : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
    lux : RETURN(dimensional_exponents(-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
    becquerel : RETURN(dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0));
    gray : RETURN(dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0));
    sievert : RETURN(dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0));
    OTHERWISE: RETURN(?);
  END_CASE;
END_FUNCTION;

FUNCTION domain_from
 (ref : maths_space_or_function) : tuple_space;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(ref);
  func : maths_function;
    END_LOCAL;
      IF NOT EXISTS(ref)
  THEN
    RETURN(?);
  END_IF;
      IF 'TUPLE_SPACE' IN typenames
  THEN
    RETURN(ref);
  END_IF;
      IF 'MATHS_SPACE' IN typenames
  THEN
    RETURN(one_tuples_of(ref));
  END_IF;
      func := ref;
      IF 'CONSTANT_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\constant_function.source_of_domain));
  END_IF;
      IF 'SELECTOR_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\selector_function.source_of_domain));
  END_IF;
      IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
  THEN
    RETURN(domain_from(func\parallel_composed_function.source_of_domain));
  END_IF;
      RETURN(func.domain);
END_FUNCTION;

FUNCTION dot_count
 (str : STRING) : INTEGER;
  LOCAL
  n : INTEGER := 0;
    END_LOCAL;
      REPEAT i := 1 TO LENGTH(str);
    IF str[i] = '.'
    THEN
      n := n + 1;
    END_IF;
  END_REPEAT;
      RETURN(n);
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.0;
             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 dotted_identifiers_syntax
 (str : STRING) : BOOLEAN;
  LOCAL
  k : positive_integer;
  m : positive_integer;
    END_LOCAL;
      IF NOT EXISTS(str)
  THEN
    RETURN(FALSE);
  END_IF;
      k := parse_express_identifier(str, 1);
      IF k = 1
  THEN
    RETURN(FALSE);
  END_IF;
      REPEAT WHILE k <= LENGTH(str);
    IF (str[k] <> '.') OR (k = LENGTH(str))
    THEN
      RETURN(FALSE);
    END_IF;
    m := parse_express_identifier(str, k + 1);
    IF m = k + 1
    THEN
      RETURN(FALSE);
    END_IF;
    k := m;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION drop_numeric_constraints
 (spc : maths_space) : maths_space;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(spc);
  tspc : listed_product_space;
  factors : LIST OF maths_space := [];
  xspc : extended_tuple_space;
    END_LOCAL;
      IF 'UNIFORM_PRODUCT_SPACE' IN typenames
  THEN
    RETURN(make_uniform_product_space(drop_numeric_constraints(spc\uniform_product_space.base), spc\uniform_product_space.exponent));
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN typenames
  THEN
    tspc := spc;
    REPEAT i := 1 TO SIZEOF(tspc.factors);
      INSERT(factors, drop_numeric_constraints(tspc.factors[i]), i - 1);
    END_REPEAT;
    RETURN(make_listed_product_space(factors));
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN typenames
  THEN
    xspc := spc;
    RETURN(make_extended_tuple_space(drop_numeric_constraints(xspc.base), drop_numeric_constraints(xspc.extender)));
  END_IF;
      IF subspace_of_es(spc, es_numbers)
  THEN
    RETURN(number_superspace_of(spc));
  END_IF;
      RETURN(spc);
END_FUNCTION;

FUNCTION duration_is_negative
 (duration : time_measure_with_unit) : BOOLEAN;
    IF (duration\measure_with_unit.value_component < 0.0)
  THEN
    RETURN(TRUE);
  ELSE
    RETURN(FALSE);
  END_IF;
END_FUNCTION;

FUNCTION duration_is_positive
 (duration : time_measure_with_unit) : BOOLEAN;
    IF (duration\measure_with_unit.value_component > 0.0)
  THEN
    RETURN(TRUE);
  ELSE
    RETURN(FALSE);
  END_IF;
END_FUNCTION;

FUNCTION edge_reversed
 (an_edge : edge) : oriented_edge;
  LOCAL
  the_reverse : oriented_edge;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(an_edge))
  THEN
    the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) ||
                   oriented_edge(an_edge\oriented_edge.edge_element, NOT (an_edge\oriented_edge.orientation));
  ELSE
    the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge, FALSE);
  END_IF;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION enclose_cregion_in_pregion
 (crgn : cartesian_complex_number_region; centre : complex_number_literal) : polar_complex_number_region;
FUNCTION angle(a : REAL) : REAL;
    REPEAT WHILE a > PI;
      a := a - 2.0 * PI;
    END_REPEAT;
    REPEAT WHILE a <= -PI;
      a := a + 2.0 * PI;
    END_REPEAT;
    RETURN(a);
  END_FUNCTION;
  FUNCTION strictly_in(z : REAL;
                       zitv : real_interval) : LOGICAL;
    RETURN((NOT min_exists(zitv) OR (z > real_min(zitv))) AND (NOT max_exists(zitv) OR (z < real_max(zitv))));
  END_FUNCTION;
  PROCEDURE angle_minmax(ab : REAL; a : REAL; a_in : BOOLEAN; VAR amin : REAL; VAR amax : REAL; VAR amin_in : BOOLEAN;
                         VAR amax_in : BOOLEAN);
    a := angle(a - ab);
    IF amin = a
    THEN
      amin_in := amin_in OR a_in;
    END_IF;
    IF amin > a
    THEN
      amin := a;
      amin_in := a_in;
    END_IF;
    IF amax = a
    THEN
      amax_in := amax_in OR a_in;
    END_IF;
    IF amax < a
    THEN
      amax := a;
      amax_in := a_in;
    END_IF;
  END_PROCEDURE;
  PROCEDURE range_max(r : REAL; incl : BOOLEAN; VAR rmax : REAL; VAR rmax_in : BOOLEAN);
    IF rmax = r
    THEN
      rmax_in := rmax_in OR incl;
    END_IF;
    IF rmax < r
    THEN
      rmax := r;
      rmax_in := incl;
    END_IF;
  END_PROCEDURE;
  PROCEDURE range_min(r : REAL; incl : BOOLEAN; VAR rmin : REAL; VAR rmin_in : BOOLEAN);
    IF rmin = r
    THEN
      rmin_in := rmin_in OR incl;
    END_IF;
    IF (rmin < 0.0) OR (rmin > r)
    THEN
      rmin := r;
      rmin_in := incl;
    END_IF;
  END_PROCEDURE;
    LOCAL
  xitv : real_interval;
  yitv : real_interval;
  is_xmin : BOOLEAN;
  is_xmax : BOOLEAN;
  is_ymin : BOOLEAN;
  is_ymax : BOOLEAN;
  xmin : REAL := 0.0;
  xmax : REAL := 0.0;
  ymin : REAL := 0.0;
  ymax : REAL := 0.0;
  xc : REAL := 0.0;
  yc : REAL := 0.0;
  xmin_in : BOOLEAN := FALSE;
  xmax_in : BOOLEAN := FALSE;
  ymin_in : BOOLEAN := FALSE;
  ymax_in : BOOLEAN := FALSE;
  rmin : REAL := -1.0;
  rmax : REAL := -1.0;
  amin : REAL := 4.0;
  amax : REAL := -4.0;
  rmax_exists : BOOLEAN := TRUE;
  outside : BOOLEAN := TRUE;
  rmin_in : BOOLEAN := FALSE;
  rmax_in : BOOLEAN := FALSE;
  amin_in : BOOLEAN := FALSE;
  amax_in : BOOLEAN := FALSE;
  ab : REAL := 0.0;
  a : REAL := 0.0;
  r : REAL := 0.0;
  incl : BOOLEAN;
  ritv : real_interval;
  aitv : finite_real_interval;
  minclo : open_closed := open;
  maxclo : open_closed := open;
    END_LOCAL;
      IF NOT EXISTS(crgn) OR NOT EXISTS(centre)
  THEN
    RETURN(?);
  END_IF;
      -- Extract elementary input information
      xitv := crgn.real_constraint;
      yitv := crgn.imag_constraint;
      xc := centre.real_part;
      yc := centre.imag_part;
      is_xmin := min_exists(xitv);
      is_xmax := max_exists(xitv);
      is_ymin := min_exists(yitv);
      is_ymax := max_exists(yitv);
      IF is_xmin
  THEN
    xmin := real_min(xitv);
    xmin_in := min_included(xitv);
  END_IF;
      IF is_xmax
  THEN
    xmax := real_max(xitv);
    xmax_in := max_included(xitv);
  END_IF;
      IF is_ymin
  THEN
    ymin := real_min(yitv);
    ymin_in := min_included(yitv);
  END_IF;
      IF is_ymax
  THEN
    ymax := real_max(yitv);
    ymax_in := max_included(yitv);
  END_IF;
      rmax_exists := is_xmin AND is_xmax AND is_ymin AND is_ymax;
      -- Identify base direction with respect to which all relevant directions lie
      -- within +/- 0.5*PI, or that the centre lies properly inside crgn.
      IF is_xmin AND (xc <= xmin)
  THEN
    ab := 0.0;
  ELSE
    IF is_ymin AND (yc <= ymin)
    THEN
      ab := 0.5 * PI;
    ELSE
      IF is_ymax AND (yc >= ymax)
      THEN
        ab := -0.5 * PI;
      ELSE
        IF is_xmax AND (xc >= xmax)
        THEN
          ab := PI;
        ELSE
          outside := FALSE;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      IF NOT outside AND NOT rmax_exists
  THEN
    RETURN(?);
  END_IF;
      -- Identify any closest point on a side but not a corner.
      IF is_xmin AND (xc <= xmin) AND strictly_in(yc, yitv)
  THEN
    rmin := xmin - xc;
    rmin_in := xmin_in;
  ELSE
    IF is_ymin AND (yc <= ymin) AND strictly_in(xc, xitv)
    THEN
      rmin := ymin - yc;
      rmin_in := ymin_in;
    ELSE
      IF is_ymax AND (yc >= ymax) AND strictly_in(xc, xitv)
      THEN
        rmin := yc - ymax;
        rmin_in := ymax_in;
      ELSE
        IF is_xmax AND (xc >= xmax) AND strictly_in(yc, yitv)
        THEN
          rmin := xc - xmax;
          rmin_in := xmax_in;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      IF is_xmin
  THEN
    IF is_ymin
    THEN
      r := SQRT((xmin - xc) ** 2 + (ymin - yc) ** 2);
      incl := xmin_in AND ymin_in;
      IF rmax_exists
      THEN
        range_max(r, incl, rmax, rmax_in);
      END_IF;
      IF outside
      THEN
        IF r > 0.0
        THEN
          range_min(r, incl, rmin, rmin_in);
          a := angle(atan2(ymin - yc, xmin - xc) - ab);
          IF xc = xmin
          THEN
            incl := xmin_in;
          END_IF;
          IF yc = ymin
          THEN
            incl := ymin_in;
          END_IF;
          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
        ELSE
          rmin := 0.0;
          rmin_in := xmin_in AND ymin_in;
          amin := angle(0.0 - ab);
          amin_in := ymin_in;
          amax := angle(0.5 * PI - ab);
          amax_in := xmin_in;
        END_IF;
      END_IF;
    ELSE
      IF xc <= xmin
      THEN
        angle_minmax(ab, -0.5 * PI, (xc = xmin) AND xmin_in, amin, amax, amin_in, amax_in);
      END_IF;
    END_IF;
    IF NOT is_ymax AND (xc <= xmin)
    THEN
      angle_minmax(ab, 0.5 * PI, (xc = xmin) AND xmin_in, amin, amax, amin_in, amax_in);
    END_IF;
  END_IF;
      IF is_ymin
  THEN
    IF is_xmax
    THEN
      r := SQRT((xmax - xc) ** 2 + (ymin - yc) ** 2);
      incl := xmax_in AND ymin_in;
      IF rmax_exists
      THEN
        range_max(r, incl, rmax, rmax_in);
      END_IF;
      IF outside
      THEN
        IF r > 0.0
        THEN
          range_min(r, incl, rmin, rmin_in);
          a := angle(atan2(ymin - yc, xmax - xc) - ab);
          IF xc = xmax
          THEN
            incl := xmax_in;
          END_IF;
          IF yc = ymin
          THEN
            incl := ymin_in;
          END_IF;
          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
        ELSE
          rmin := 0.0;
          rmin_in := xmax_in AND ymin_in;
          amin := angle(0.5 * PI - ab);
          amin_in := ymin_in;
          amax := angle(PI - ab);
          amax_in := xmax_in;
        END_IF;
      END_IF;
    ELSE
      IF yc <= ymin
      THEN
        angle_minmax(ab, 0.0, (yc = ymin) AND ymin_in, amin, amax, amin_in, amax_in);
      END_IF;
    END_IF;
    IF NOT is_xmin AND (yc <= ymin)
    THEN
      angle_minmax(ab, PI, (yc = ymin) AND ymin_in, amin, amax, amin_in, amax_in);
    END_IF;
  END_IF;
      IF is_xmax
  THEN
    IF is_ymax
    THEN
      r := SQRT((xmax - xc) ** 2 + (ymax - yc) ** 2);
      incl := xmax_in AND ymax_in;
      IF rmax_exists
      THEN
        range_max(r, incl, rmax, rmax_in);
      END_IF;
      IF outside
      THEN
        IF r > 0.0
        THEN
          range_min(r, incl, rmin, rmin_in);
          a := angle(atan2(ymax - yc, xmax - xc) - ab);
          IF xc = xmax
          THEN
            incl := xmax_in;
          END_IF;
          IF yc = ymax
          THEN
            incl := ymax_in;
          END_IF;
          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
        ELSE
          rmin := 0.0;
          rmin_in := xmax_in AND ymax_in;
          amin := angle(-PI - ab);
          amin_in := ymax_in;
          amax := angle(-0.5 * PI - ab);
          amax_in := xmax_in;
        END_IF;
      END_IF;
    ELSE
      IF xc >= xmax
      THEN
        angle_minmax(ab, 0.5 * PI, (xc = xmax) AND xmax_in, amin, amax, amin_in, amax_in);
      END_IF;
    END_IF;
    IF NOT is_ymin AND (xc >= xmax)
    THEN
      angle_minmax(ab, -0.5 * PI, (xc = xmax) AND xmax_in, amin, amax, amin_in, amax_in);
    END_IF;
  END_IF;
      IF is_ymax
  THEN
    IF is_xmin
    THEN
      r := SQRT((xmin - xc) ** 2 + (ymax - yc) ** 2);
      incl := xmin_in AND ymax_in;
      IF rmax_exists
      THEN
        range_max(r, incl, rmax, rmax_in);
      END_IF;
      IF outside
      THEN
        IF r > 0.0
        THEN
          range_min(r, incl, rmin, rmin_in);
          a := angle(atan2(ymax - yc, xmin - xc) - ab);
          IF xc = xmin
          THEN
            incl := xmin_in;
          END_IF;
          IF yc = ymax
          THEN
            incl := ymax_in;
          END_IF;
          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
        ELSE
          rmin := 0.0;
          rmin_in := xmin_in AND ymax_in;
          amin := angle(0.5 * PI - ab);
          amin_in := ymax_in;
          amax := angle(PI - ab);
          amax_in := xmin_in;
        END_IF;
      END_IF;
    ELSE
      IF yc >= ymax
      THEN
        angle_minmax(ab, PI, (yc = ymax) AND ymax_in, amin, amax, amin_in, amax_in);
      END_IF;
    END_IF;
    IF NOT is_xmax AND (yc >= ymax)
    THEN
      angle_minmax(ab, 0.0, (yc = ymax) AND ymax_in, amin, amax, amin_in, amax_in);
    END_IF;
  END_IF;
      IF outside
  THEN
    amin := angle(amin + ab);
    IF amin = PI
    THEN
      amin := -PI;
    END_IF;
    amax := angle(amax + ab);
    IF amax <= amin
    THEN
      amax := amax + 2.0 * PI;
    END_IF;
  ELSE
    amin := -PI;
    amin_in := FALSE;
    amax := PI;
    amax_in := FALSE;
  END_IF;
      IF amin_in
  THEN
    minclo := closed;
  END_IF;
      IF amax_in
  THEN
    maxclo := closed;
  END_IF;
      aitv := make_finite_real_interval(amin, minclo, amax, maxclo);
      minclo := open;
      IF rmin_in
  THEN
    minclo := closed;
  END_IF;
      IF rmax_exists
  THEN
    maxclo := open;
    IF rmax_in
    THEN
      maxclo := closed;
    END_IF;
    ritv := make_finite_real_interval(rmin, minclo, rmax, maxclo);
  ELSE
    ritv := make_real_interval_from_min(rmin, minclo);
  END_IF;
      RETURN(make_polar_complex_number_region(centre, ritv, aitv));
END_FUNCTION;

FUNCTION enclose_pregion_in_cregion
 (prgn : polar_complex_number_region) : cartesian_complex_number_region;
PROCEDURE nearest_good_direction(acart : REAL; aitv : finite_real_interval; VAR a : REAL;
                                                  VAR a_in : BOOLEAN);
    a := acart;
    a_in := TRUE;
    IF a < aitv.min
    THEN
      IF a + 2.0 * PI < aitv.max
      THEN
        RETURN;
      END_IF;
      IF a + 2.0 * PI = aitv.max
      THEN
        a_in := max_included(aitv);
        RETURN;
      END_IF;
    ELSE
      IF a = aitv.min
      THEN
        a_in := min_included(aitv);
        RETURN;
      ELSE
        IF a < aitv.max
        THEN
          RETURN;
        ELSE
          IF a = aitv.max
          THEN
            a_in := max_included(aitv);
            RETURN;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
    IF COS(acart - aitv.max) >= COS(acart - aitv.min)
    THEN
      a := aitv.max;
      a_in := max_included(aitv);
    ELSE
      a := aitv.min;
      a_in := min_included(aitv);
    END_IF;
  END_PROCEDURE;
    LOCAL
  xc : REAL := 0.0;
  yc : REAL := 0.0;
  xmin : REAL := 0.0;
  xmax : REAL := 0.0;
  ymin : REAL := 0.0;
  ymax : REAL := 0.0;
  ritv : real_interval;
  xitv : real_interval;
  yitv : real_interval;
  aitv : finite_real_interval;
  xmin_exists : BOOLEAN;
  xmax_exists : BOOLEAN;
  ymin_exists : BOOLEAN;
  ymax_exists : BOOLEAN;
  xmin_in : BOOLEAN := FALSE;
  xmax_in : BOOLEAN := FALSE;
  ymin_in : BOOLEAN := FALSE;
  ymax_in : BOOLEAN := FALSE;
  a : REAL := 0.0;
  r : REAL := 0.0;
  a_in : BOOLEAN := FALSE;
  min_clo : open_closed := open;
  max_clo : open_closed := open;
    END_LOCAL;
      IF NOT EXISTS(prgn)
  THEN
    RETURN(?);
  END_IF;
      -- Extract elementary input data
      xc := prgn.centre.real_part;
      yc := prgn.centre.imag_part;
      ritv := prgn.distance_constraint;
      aitv := prgn.direction_constraint;
      -- Determine xmin data
      nearest_good_direction(PI, aitv, a, a_in);
      IF COS(a) >= 0.0
  THEN
    xmin_exists := TRUE;
    xmin := xc + real_min(ritv) * COS(a);
    xmin_in := a_in AND (min_included(ritv) OR (COS(a) = 0.0));
  ELSE
    IF max_exists(ritv)
    THEN
      xmin_exists := TRUE;
      xmin := xc + real_max(ritv) * COS(a);
      xmin_in := a_in AND max_included(ritv);
    ELSE
      xmin_exists := FALSE;
    END_IF;
  END_IF;
      -- Determine xmax data
      nearest_good_direction(0.0, aitv, a, a_in);
      IF COS(a) <= 0.0
  THEN
    xmax_exists := TRUE;
    xmax := xc + real_min(ritv) * COS(a);
    xmax_in := a_in AND (min_included(ritv) OR (COS(a) = 0.0));
  ELSE
    IF max_exists(ritv)
    THEN
      xmax_exists := TRUE;
      xmax := xc + real_max(ritv) * COS(a);
      xmax_in := a_in AND max_included(ritv);
    ELSE
      xmax_exists := FALSE;
    END_IF;
  END_IF;
      -- Determine ymin data
      nearest_good_direction(-0.5 * PI, aitv, a, a_in);
      IF SIN(a) >= 0.0
  THEN
    ymin_exists := TRUE;
    ymin := yc + real_min(ritv) * SIN(a);
    ymin_in := a_in AND (min_included(ritv) OR (SIN(a) = 0.0));
  ELSE
    IF max_exists(ritv)
    THEN
      ymin_exists := TRUE;
      ymin := yc + real_max(ritv) * SIN(a);
      ymin_in := a_in AND max_included(ritv);
    ELSE
      ymin_exists := FALSE;
    END_IF;
  END_IF;
      -- Determine ymax data
      nearest_good_direction(0.5 * PI, aitv, a, a_in);
      IF SIN(a) <= 0.0
  THEN
    ymax_exists := TRUE;
    ymax := yc + real_min(ritv) * SIN(a);
    ymax_in := a_in AND (min_included(ritv) OR (SIN(a) = 0.0));
  ELSE
    IF max_exists(ritv)
    THEN
      ymax_exists := TRUE;
      ymax := yc + real_max(ritv) * SIN(a);
      ymax_in := a_in AND max_included(ritv);
    ELSE
      ymax_exists := FALSE;
    END_IF;
  END_IF;
      -- Construct result
      IF NOT (xmin_exists OR xmax_exists OR ymin_exists OR ymax_exists)
  THEN
    RETURN(?);
  END_IF;
      -- Construct real_constraint
      IF xmin_exists
  THEN
    IF xmin_in
    THEN
      min_clo := closed;
    ELSE
      min_clo := open;
    END_IF;
    IF xmax_exists
    THEN
      IF xmax_in
      THEN
        max_clo := closed;
      ELSE
        max_clo := open;
      END_IF;
      xitv := make_finite_real_interval(xmin, min_clo, xmax, max_clo);
    ELSE
      xitv := make_real_interval_from_min(xmin, min_clo);
    END_IF;
  ELSE
    IF xmax_exists
    THEN
      IF xmax_in
      THEN
        max_clo := closed;
      ELSE
        max_clo := open;
      END_IF;
      xitv := make_real_interval_to_max(xmax, max_clo);
    ELSE
      xitv := the_reals;
    END_IF;
  END_IF;
      -- Construct imag_constraint
      IF ymin_exists
  THEN
    IF ymin_in
    THEN
      min_clo := closed;
    ELSE
      min_clo := open;
    END_IF;
    IF ymax_exists
    THEN
      IF ymax_in
      THEN
        max_clo := closed;
      ELSE
        max_clo := open;
      END_IF;
      yitv := make_finite_real_interval(ymin, min_clo, ymax, max_clo);
    ELSE
      yitv := make_real_interval_from_min(ymin, min_clo);
    END_IF;
  ELSE
    IF ymax_exists
    THEN
      IF ymax_in
      THEN
        max_clo := closed;
      ELSE
        max_clo := open;
      END_IF;
      yitv := make_real_interval_to_max(ymax, max_clo);
    ELSE
      yitv := the_reals;
    END_IF;
  END_IF;
      -- Construct cartesian region
      RETURN(make_cartesian_complex_number_region(xitv, yitv));
END_FUNCTION;

FUNCTION enclose_pregion_in_pregion
 (prgn : polar_complex_number_region; centre : complex_number_literal) : polar_complex_number_region;
FUNCTION angle(a : REAL) : REAL;
    REPEAT WHILE a > PI;
      a := a - 2.0 * PI;
    END_REPEAT;
    REPEAT WHILE a <= -PI;
      a := a + 2.0 * PI;
    END_REPEAT;
    RETURN(a);
  END_FUNCTION;
  PROCEDURE angle_range(VAR amin : REAL; VAR amax : REAL);
    amin := angle(amin);
    IF amin = PI
    THEN
      amin := -PI;
    END_IF;
    amax := angle(amax);
    IF amax <= amin
    THEN
      amax := amax + 2.0 * PI;
    END_IF;
  END_PROCEDURE;
  FUNCTION strictly_in(a : REAL;
                       aitv : finite_real_interval) : LOGICAL;
    a := angle(a);
    RETURN({aitv.min < a < aitv.max} OR {aitv.min < a + 2.0 * PI < aitv.max});
  END_FUNCTION;
  PROCEDURE find_aminmax(ab : REAL; a0 : REAL; a1 : REAL; a2 : REAL; a3 : REAL; in0 : BOOLEAN; in1 : BOOLEAN;
                         in2 : BOOLEAN; in3 : BOOLEAN; VAR amin : REAL; VAR amax : REAL; VAR amin_in : BOOLEAN;
                         VAR amax_in : BOOLEAN);
   LOCAL  
          a : REAL;
   END_LOCAL;
    amin := angle(a0 - ab);
    amin_in := in0;
    amax := amin;
    amax_in := in0;
    a := angle(a1 - ab);
    IF a = amin
    THEN
      amin_in := amin_in OR in1;
    END_IF;
    IF a < amin
    THEN
      amin := a;
      amin_in := in1;
    END_IF;
    IF a = amax
    THEN
      amax_in := amax_in OR in1;
    END_IF;
    IF a > amax
    THEN
      amax := a;
      amax_in := in1;
    END_IF;
    a := angle(a2 - ab);
    IF a = amin
    THEN
      amin_in := amin_in OR in2;
    END_IF;
    IF a < amin
    THEN
      amin := a;
      amin_in := in2;
    END_IF;
    IF a = amax
    THEN
      amax_in := amax_in OR in2;
    END_IF;
    IF a > amax
    THEN
      amax := a;
      amax_in := in2;
    END_IF;
    a := angle(a3 - ab);
    IF a = amin
    THEN
      amin_in := amin_in OR in3;
    END_IF;
    IF a < amin
    THEN
      amin := a;
      amin_in := in3;
    END_IF;
    IF a = amax
    THEN
      amax_in := amax_in OR in3;
    END_IF;
    IF a > amax
    THEN
      amax := a;
      amax_in := in3;
    END_IF;
    amin := amin + ab;
    amax := amax + ab;
    angle_range(amin, amax);
  END_PROCEDURE;
    LOCAL
  ritp : real_interval;
  ritv : real_interval;
  aitp : finite_real_interval;
  aitv : finite_real_interval;
  xp : REAL := 0.0;
  yp : REAL := 0.0;
  xc : REAL := 0.0;
  yc : REAL := 0.0;
  rmax : REAL := 0.0;
  rmin : REAL := 0.0;
  amin : REAL := 0.0;
  amax : REAL := 0.0;
  rc : REAL := 0.0;
  acp : REAL := 0.0;
  apc : REAL := 0.0;
  rmax_in : BOOLEAN := FALSE;
  rmin_in : BOOLEAN := FALSE;
  amin_in : BOOLEAN := FALSE;
  amax_in : BOOLEAN := FALSE;
  rmxp : REAL := 0.0;
  rmnp : REAL := 0.0;
  x : REAL := 0.0;
  y : REAL := 0.0;
  r : REAL := 0.0;
  a : REAL := 0.0;
  ab : REAL := 0.0;
  r0 : REAL := 0.0;
  a0 : REAL := 0.0;
  r1 : REAL := 0.0;
  a1 : REAL := 0.0;
  r2 : REAL := 0.0;
  a2 : REAL := 0.0;
  r3 : REAL := 0.0;
  a3 : REAL := 0.0;
  in0 : BOOLEAN := FALSE;
  in1 : BOOLEAN := FALSE;
  in2 : BOOLEAN := FALSE;
  in3 : BOOLEAN := FALSE;
  inn : BOOLEAN := FALSE;
  minclo : open_closed := open;
  maxclo : open_closed := open;
    END_LOCAL;
      -- Extract elementary input information
      IF NOT EXISTS(prgn) OR NOT EXISTS(centre)
  THEN
    RETURN(?);
  END_IF;
      xp := prgn.centre.real_part;
      yp := prgn.centre.imag_part;
      ritp := prgn.distance_constraint;
      aitp := prgn.direction_constraint;
      xc := centre.real_part;
      yc := centre.imag_part;
      IF (xc = xp) AND (yc = yp)
  THEN
    RETURN(prgn);
  END_IF;
      rc := SQRT((xp - xc) ** 2 + (yp - yc) ** 2);
      acp := atan2(yp - yc, xp - xc);
      apc := atan2(yc - yp, xc - xp);
      rmnp := real_min(ritp);
      -- Analyse cases by existence of max distance and direction limits
      IF max_exists(ritp)
  THEN
    rmxp := real_max(ritp);
    IF aitp.max - aitp.min = 2.0 * PI
    THEN
      inn := NOT max_included(aitp);
      a := angle(aitp.min);
      rmax := rc + rmxp;
      rmax_in := max_included(ritp);
      IF inn AND (acp = a)
      THEN
        rmax_in := FALSE;
      END_IF;
      IF rc > rmxp
      THEN
        a0 := ASIN(rmxp / rc);
        amin := angle(acp - a0);
        amin_in := max_included(ritp);
        IF amin = PI
        THEN
          amin := -PI;
        END_IF;
        amax := angle(acp + a0);
        amax_in := amin_in;
        IF amax < amin
        THEN
          amax := amax + 2.0 * PI;
        END_IF;
        rmin := rc - rmxp;
        rmin_in := amin_in;
        IF inn
        THEN
          IF apc = a
          THEN
            rmin_in := FALSE;
          END_IF;
          IF angle(amin + 0.5 * PI) = a
          THEN
            amin_in := FALSE;
          END_IF;
          IF angle(amax - 0.5 * PI) = a
          THEN
            amax_in := FALSE;
          END_IF;
        END_IF;
      ELSE
        IF rc = rmxp
        THEN
          amin := angle(acp - 0.5 * PI);
          amin_in := FALSE;
          IF amin = PI
          THEN
            amin := -PI;
          END_IF;
          amax := angle(acp + 0.5 * PI);
          amax_in := FALSE;
          IF amax < amin
          THEN
            amax := amax + 2.0 * PI;
          END_IF;
          rmin := 0.0;
          rmin_in := max_included(ritp);
          IF inn AND (apc = a)
          THEN
            rmin_in := FALSE;
          END_IF;
        ELSE
          IF rc > rmnp
          THEN
            IF inn AND (apc = a)
            THEN
              rmin := 0.0;
              rmin_in := FALSE;
              amin := aitp.min;
              amin_in := FALSE;
              amax := aitp.max;
              amax_in := FALSE;
            ELSE
              rmin := 0.0;
              rmin_in := TRUE;
              amin := -PI;
              amin_in := FALSE;
              amax := PI;
              amax_in := TRUE;
            END_IF;
          ELSE
            rmin := rmnp - rc;
            rmin_in := min_included(ritp);
            amin := -PI;
            amin_in := FALSE;
            amax := PI;
            amax_in := TRUE;
            IF inn
            THEN
              IF apc = a
              THEN
                rmin_in := FALSE;
                amin := aitp.min;
                amin_in := FALSE;
                amax := aitp.max;
                amax_in := FALSE;
              ELSE
                IF acp = a
                THEN
                  amin := aitp.min;
                  amin_in := FALSE;
                  amax := aitp.max;
                  amax_in := FALSE;
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    ELSE
      x := xp + rmxp * COS(aitp.min) - xc;
      y := yp + rmxp * SIN(aitp.min) - yc;
      r0 := SQRT(x ** 2 + y ** 2);
      in0 := max_included(ritp) AND min_included(aitp);
      IF r0 <> 0.0
      THEN
        a0 := atan2(y, x);
      END_IF;
      x := xp + rmxp * COS(aitp.max) - xc;
      y := yp + rmxp * SIN(aitp.max) - yc;
      r1 := SQRT(x ** 2 + y ** 2);
      in1 := max_included(ritp) AND max_included(aitp);
      IF r1 <> 0.0
      THEN
        a1 := atan2(y, x);
      END_IF;
      x := xp + rmnp * COS(aitp.max) - xc;
      y := yp + rmnp * SIN(aitp.max) - yc;
      r2 := SQRT(x ** 2 + y ** 2);
      in2 := min_included(ritp) AND max_included(aitp);
      IF r2 <> 0.0
      THEN
        a2 := atan2(y, x);
      ELSE
        a2 := a1;
        in2 := in1;
      END_IF;
      IF r1 = 0.0
      THEN
        a1 := a2;
        in1 := in2;
      END_IF;
      x := xp + rmnp * COS(aitp.min) - xc;
      y := yp + rmnp * SIN(aitp.min) - yc;
      r3 := SQRT(x ** 2 + y ** 2);
      in3 := min_included(ritp) AND min_included(aitp);
      IF r3 <> 0.0
      THEN
        a3 := atan2(y, x);
      ELSE
        a3 := a0;
        in3 := in0;
      END_IF;
      IF r0 = 0.0
      THEN
        a0 := a3;
        in0 := in3;
      END_IF;
      IF rmnp = 0.0
      THEN
        in2 := min_included(ritp);
        in3 := in2;
      END_IF;
      IF (apc = angle(aitp.min)) OR (acp = angle(aitp.min))
      THEN
        in0 := min_included(aitp);
        in3 := in0;
      ELSE
        IF (apc = angle(aitp.max)) OR (acp = angle(aitp.max))
        THEN
          in1 := max_included(aitp);
          in2 := in1;
        END_IF;
      END_IF;
      IF strictly_in(acp, aitp)
      THEN
        rmax := rc + rmxp;
        rmax_in := max_included(ritp);
      ELSE
        rmax := r0;
        rmax_in := in0;
        IF rmax = r1
        THEN
          rmax_in := rmax_in OR in1;
        END_IF;
        IF rmax < r1
        THEN
          rmax := r1;
          rmax_in := in1;
        END_IF;
        IF rmax = r2
        THEN
          rmax_in := rmax_in OR in2;
        END_IF;
        IF rmax < r2
        THEN
          rmax := r2;
          rmax_in := in2;
        END_IF;
        IF rmax = r3
        THEN
          rmax_in := rmax_in OR in3;
        END_IF;
        IF rmax < r3
        THEN
          rmax := r3;
          rmax_in := in3;
        END_IF;
      END_IF;
      IF strictly_in(apc, aitp)
      THEN
        IF rc >= rmxp
        THEN
          rmin := rc - rmxp;
          rmin_in := max_included(ritp);
        ELSE
          IF rc <= rmnp
          THEN
            rmin := rmnp - rc;
            rmin_in := min_included(ritp);
          ELSE
            rmin := 0.0;
            rmin_in := TRUE;
          END_IF;
        END_IF;
      ELSE
        rmin := r0;
        rmin_in := in0;
        a := apc - aitp.min;
        r := rc * COS(a);
        IF {rmnp < r < rmxp}
        THEN
          rmin := rc * SIN(ABS(a));
          rmin_in := min_included(aitp);
        END_IF;
        a := apc - aitp.max;
        r := rc * COS(a);
        IF {rmnp < r < rmxp}
        THEN
          r := rc * SIN(ABS(a));
          inn := max_included(aitp);
          IF r = rmin
          THEN
            rmin_in := rmin_in OR inn;
          END_IF;
          IF r < rmin
          THEN
            rmin := r;
            rmin_in := inn;
          END_IF;
        END_IF;
        IF r1 = rmin
        THEN
          rmin_in := rmin_in OR in1;
        END_IF;
        IF r1 < rmin
        THEN
          rmin := r1;
          rmin_in := in1;
        END_IF;
        IF r2 = rmin
        THEN
          rmin_in := rmin_in OR in2;
        END_IF;
        IF r2 < rmin
        THEN
          rmin := r2;
          rmin_in := in2;
        END_IF;
        IF r3 = rmin
        THEN
          rmin_in := rmin_in OR in3;
        END_IF;
        IF r3 < rmin
        THEN
          rmin := r3;
          rmin_in := in3;
        END_IF;
      END_IF;
      IF rc >= rmxp
      THEN
        ab := acp;
        find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
        a := ACOS(rmxp / rc);
        IF strictly_in(apc - a, aitp)
        THEN
          amin := ab - ASIN(rmxp / rc);
          amin_in := max_included(ritp);
        END_IF;
        IF strictly_in(apc + a, aitp)
        THEN
          amax := ab + ASIN(rmxp / rc);
          amax_in := max_included(ritp);
        END_IF;
        angle_range(amin, amax);
      ELSE
        IF rc > rmnp
        THEN
          ab := angle(0.5 * (aitp.min + aitp.max));
          find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
        ELSE
          ab := angle(0.5 * (aitp.min + aitp.max));
          a0 := angle(a0 - ab);
          a1 := angle(a1 - ab);
          a2 := angle(a2 - ab);
          a3 := angle(a3 - ab);
          IF a3 > a2
          THEN
            a2 := a2 + 2.0 * PI;
          END_IF;
          IF a0 > a1
          THEN
            a0 := a0 + 2.0 * PI;
          END_IF;
          IF a3 < a0
          THEN
            amin := a3;
            amin_in := in3;
          ELSE
            amin := a0;
            amin_in := in0;
          END_IF;
          IF a2 > a1
          THEN
            amax := a2;
            amax_in := in2;
          ELSE
            amax := a1;
            amax_in := in1;
          END_IF;
          IF (amax - amin > 2.0 * PI) OR ((amax - amin = 2.0 * PI) AND (amin_in OR amax_in))
          THEN
            amin := -PI;
            amin_in := FALSE;
            amax := PI;
            amax_in := TRUE;
          ELSE
            amin := amin + ab;
            amax := amax + ab;
            angle_range(amin, amax);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
    IF rmin_in
    THEN
      minclo := closed;
    END_IF;
    IF rmax_in
    THEN
      maxclo := closed;
    END_IF;
    ritv := make_finite_real_interval(rmin, minclo, rmax, maxclo);
  ELSE
    IF (rc > rmnp) AND strictly_in(apc, aitp)
    THEN
      RETURN(?);
    END_IF;
    IF aitp.max - aitp.min = 2.0 * PI
    THEN
      a := angle(aitp.min);
      IF rc > rmnp
      THEN
        IF max_included(aitp)
        THEN
          RETURN(?);
        END_IF;
        rmin := 0.0;
        rmin_in := FALSE;
        amin := aitp.min;
        amin_in := FALSE;
        amax := aitp.max;
        amax_in := FALSE;
      ELSE
        rmin := rmnp - rc;
        rmin_in := min_included(ritp);
        amin := -PI;
        amin_in := FALSE;
        amax := PI;
        amax_in := TRUE;
        IF NOT max_included(aitp)
        THEN
          IF apc = a
          THEN
            rmin_in := FALSE;
            amin := aitp.min;
            amin_in := FALSE;
            amax := aitp.max;
            amax_in := FALSE;
          ELSE
            IF acp = a
            THEN
              amin := aitp.min;
              amin_in := FALSE;
              amax := aitp.max;
              amax_in := FALSE;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    ELSE
      a0 := angle(aitp.min);
      in0 := FALSE;
      a1 := angle(aitp.max);
      in1 := FALSE;
      x := xp + rmnp * COS(aitp.max) - xc;
      y := yp + rmnp * SIN(aitp.max) - yc;
      r2 := SQRT(x ** 2 + y ** 2);
      in2 := min_included(ritp) AND max_included(aitp);
      IF r2 <> 0.0
      THEN
        a2 := atan2(y, x);
      ELSE
        a2 := a1;
        in2 := in1;
      END_IF;
      x := xp + rmnp * COS(aitp.min) - xc;
      y := yp + rmnp * SIN(aitp.min) - yc;
      r3 := SQRT(x ** 2 + y ** 2);
      in3 := min_included(ritp) AND min_included(aitp);
      IF r3 <> 0.0
      THEN
        a3 := atan2(y, x);
      ELSE
        a3 := a0;
        in3 := in0;
      END_IF;
      IF rmnp = 0.0
      THEN
        in2 := min_included(ritp);
        in3 := in2;
      END_IF;
      IF (apc = angle(aitp.min)) OR (acp = angle(aitp.min))
      THEN
        in0 := min_included(aitp);
        in3 := in0;
      ELSE
        IF (apc = angle(aitp.max)) OR (acp = angle(aitp.max))
        THEN
          in1 := max_included(aitp);
          in2 := in1;
        END_IF;
      END_IF;
      IF strictly_in(apc, aitp)
      THEN
        rmin := rmnp - rc;
        rmin_in := min_included(ritp);
      ELSE
        rmin := r2;
        rmin_in := in2;
        a := apc - aitp.min;
        r := rc * COS(a);
        IF rmnp < r
        THEN
          rmin := rc * SIN(ABS(a));
          rmin_in := min_included(aitp);
        END_IF;
        a := apc - aitp.max;
        r := rc * COS(a);
        IF rmnp < r
        THEN
          r := rc * SIN(ABS(a));
          inn := max_included(aitp);
          IF r = rmin
          THEN
            rmin_in := rmin_in OR inn;
          END_IF;
          IF r < rmin
          THEN
            rmin := r;
            rmin_in := inn;
          END_IF;
        END_IF;
        IF r3 = rmin
        THEN
          rmin_in := rmin_in OR in3;
        END_IF;
        IF r3 < rmin
        THEN
          rmin := r3;
          rmin_in := in3;
        END_IF;
      END_IF;
      ab := angle(0.5 * (aitp.min + aitp.max));
      IF rc > rmnp
      THEN
        find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
      ELSE
        a0 := angle(a0 - ab);
        a1 := angle(a1 - ab);
        a2 := angle(a2 - ab);
        a3 := angle(a3 - ab);
        IF a3 > a2
        THEN
          a2 := a2 + 2.0 * PI;
        END_IF;
        IF a0 > a1
        THEN
          a0 := a0 + 2.0 * PI;
        END_IF;
        IF a3 < a0
        THEN
          amin := a3;
          amin_in := in3;
        ELSE
          amin := a0;
          amin_in := in0;
        END_IF;
        IF a2 > a1
        THEN
          amax := a2;
          amax_in := in2;
        ELSE
          amax := a1;
          amax_in := in1;
        END_IF;
        IF (amax - amin > 2.0 * PI) OR ((amax - amin = 2.0 * PI) AND (amin_in OR amax_in))
        THEN
          amin := -PI;
          amin_in := FALSE;
          amax := PI;
          amax_in := TRUE;
          IF (rmin = 0.0) AND rmin_in
          THEN
            RETURN(?);
          END_IF;
        ELSE
          amin := amin + ab;
          amax := amax + ab;
          angle_range(amin, amax);
        END_IF;
      END_IF;
    END_IF;
    IF rmin_in
    THEN
      minclo := closed;
    END_IF;
    ritv := make_real_interval_from_min(rmin, minclo);
  END_IF;
      minclo := open;
      maxclo := open;
      IF amin_in
  THEN
    minclo := closed;
  END_IF;
      IF amax_in
  THEN
    maxclo := closed;
  END_IF;
      aitv := make_finite_real_interval(amin, minclo, amax, maxclo);
      -- Construct polar region
      RETURN(make_polar_complex_number_region(centre, ritv, aitv));
END_FUNCTION;

FUNCTION equal_cregion_pregion
 (crgn : cartesian_complex_number_region; prgn : polar_complex_number_region) : LOGICAL;
  LOCAL
  arng : REAL;
  amin : REAL;
  xc : REAL;
  yc : REAL;
  aitv : real_interval;
  xitv : real_interval;
  yitv : real_interval;
  c_in : BOOLEAN;
    END_LOCAL;
      IF NOT EXISTS(crgn) OR NOT EXISTS(prgn)
  THEN
    RETURN(FALSE);
  END_IF;
      IF max_exists(prgn.distance_constraint)
  THEN
    RETURN(FALSE);
  END_IF;
      IF real_min(prgn.distance_constraint) <> 0.0
  THEN
    RETURN(FALSE);
  END_IF;
      c_in := min_included(prgn.distance_constraint);
      aitv := prgn.direction_constraint;
      amin := aitv.min;
      arng := aitv.max - amin;
      xc := prgn.centre.real_part;
      yc := prgn.centre.imag_part;
      xitv := crgn.real_constraint;
      yitv := crgn.imag_constraint;
      IF arng = 0.5 * PI
  THEN
    IF amin = 0.0
    THEN
      RETURN(NOT max_exists(xitv) AND
                 NOT max_exists(yitv) AND min_exists(xitv) AND min_exists(yitv) AND (real_min(xitv) = xc) AND
                     (real_min(yitv) = yc) AND
                     ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
                       min_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
                               NOT min_included(yitv)) OR
                      (NOT c_in AND min_included(aitv) AND
                           NOT max_included(aitv) AND NOT min_included(xitv) AND min_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND
                               NOT max_included(aitv) AND NOT min_included(xitv) AND NOT min_included(yitv))));
    END_IF;
    IF amin = 0.5 * PI
    THEN
      RETURN(max_exists(xitv) AND
             NOT max_exists(yitv) AND
                 NOT min_exists(xitv) AND min_exists(yitv) AND (real_max(xitv) = xc) AND (real_min(yitv) = yc) AND
                     ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
                       min_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
                               NOT min_included(yitv)) OR
                      (NOT c_in AND min_included(aitv) AND
                           NOT max_included(aitv) AND NOT max_included(xitv) AND min_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND
                               NOT max_included(aitv) AND NOT max_included(xitv) AND NOT min_included(yitv))));
    END_IF;
    IF amin = -PI
    THEN
      RETURN(max_exists(xitv) AND max_exists(yitv) AND
             NOT min_exists(xitv) AND
                 NOT min_exists(yitv) AND (real_max(xitv) = xc) AND (real_max(yitv) = yc) AND
                     ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
                       max_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
                               NOT max_included(yitv)) OR
                      (NOT c_in AND min_included(aitv) AND
                           NOT max_included(aitv) AND NOT max_included(xitv) AND max_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND
                               NOT max_included(aitv) AND NOT max_included(xitv) AND NOT max_included(yitv))));
    END_IF;
    IF amin = -0.5 * PI
    THEN
      RETURN(NOT max_exists(xitv) AND max_exists(yitv) AND min_exists(xitv) AND
                 NOT min_exists(yitv) AND (real_min(xitv) = xc) AND (real_max(yitv) = yc) AND
                     ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
                       max_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
                               NOT max_included(yitv)) OR
                      (NOT c_in AND min_included(aitv) AND
                           NOT max_included(aitv) AND NOT min_included(xitv) AND max_included(yitv)) OR
                      (NOT c_in AND
                           NOT min_included(aitv) AND
                               NOT max_included(aitv) AND NOT min_included(xitv) AND NOT max_included(yitv))));
    END_IF;
  END_IF;
      IF arng = PI
  THEN
    IF amin = 0.0
    THEN
      RETURN(NOT max_exists(xitv) AND
                 NOT max_exists(yitv) AND
                     NOT min_exists(xitv) AND min_exists(yitv) AND (real_min(yitv) = yc) AND
                         ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(yitv)) OR
                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(yitv))));
    END_IF;
    IF amin = 0.5 * PI
    THEN
      RETURN(max_exists(xitv) AND
             NOT max_exists(yitv) AND
                 NOT min_exists(xitv) AND
                     NOT min_exists(yitv) AND (real_max(xitv) = xc) AND
                         ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv)) OR
                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv))));
    END_IF;
    IF amin = -PI
    THEN
      RETURN(NOT max_exists(xitv) AND max_exists(yitv) AND
                 NOT min_exists(xitv) AND
                     NOT min_exists(yitv) AND (real_max(yitv) = yc) AND
                         ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(yitv)) OR
                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(yitv))));
    END_IF;
    IF amin = -0.5 * PI
    THEN
      RETURN(NOT max_exists(xitv) AND
                 NOT max_exists(yitv) AND min_exists(xitv) AND
                     NOT min_exists(yitv) AND (real_min(xitv) = xc) AND
                         ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv)) OR
                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv))));
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION equal_maths_functions
 (fun1 : maths_function; fun2 : maths_function) : LOGICAL;
  LOCAL
  cum : LOGICAL;
    END_LOCAL;
      IF fun1 = fun2
  THEN
    RETURN(TRUE);
  END_IF;
      cum := equal_maths_spaces(fun1.domain, fun2.domain);
      IF cum = FALSE
  THEN
    RETURN(FALSE);
  END_IF;
      cum := cum AND equal_maths_spaces(fun1.range, fun2.range);
      IF cum = FALSE
  THEN
    RETURN(FALSE);
  END_IF;
      -- A lot of further analysis is possible, but not required.
      RETURN(UNKNOWN);
END_FUNCTION;

FUNCTION equal_maths_spaces
 (spc1 : maths_space; spc2 : maths_space) : LOGICAL;
  LOCAL
  spc1types : SET OF STRING := stripped_typeof(spc1);
  spc2types : SET OF STRING := stripped_typeof(spc2);
  set1 : SET OF maths_value;
  set2 : SET OF maths_value;
  cum : LOGICAL := TRUE;
  base : maths_space;
  expnt : INTEGER;
  factors : LIST OF maths_space;
  factors2 : LIST OF maths_space;
  fs1 : function_space;
  fs2 : function_space;
  cum2 : LOGICAL;
    END_LOCAL;
      IF spc1 = spc2
  THEN
    RETURN(TRUE);
  END_IF;
      -- Consider cases where it is not yet certain that spc1 <> spc2.
      IF 'FINITE_SPACE' IN spc1types
  THEN
    set1 := spc1\finite_space.members;
    IF 'FINITE_SPACE' IN spc2types
    THEN
      set2 := spc2\finite_space.members;
      REPEAT i := 1 TO SIZEOF(set1);
        cum := cum AND member_of(set1[i], spc2);
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      IF cum = TRUE
      THEN
        REPEAT i := 1 TO SIZEOF(set2);
          cum := cum AND member_of(set2[i], spc1);
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
      RETURN(cum);
    END_IF;
    IF 'FINITE_INTEGER_INTERVAL' IN spc2types
    THEN
      set2 := [];
      REPEAT i := spc2\finite_integer_interval.min TO spc2\finite_integer_interval.max;
        set2 := set2 + [i];
      END_REPEAT;
      RETURN(equal_maths_spaces(spc1, make_finite_space(set2)));
    END_IF;
  END_IF;
      IF ('FINITE_INTEGER_INTERVAL' IN spc1types) AND ('FINITE_SPACE' IN spc2types)
  THEN
    set1 := [];
    REPEAT i := spc1\finite_integer_interval.min TO spc1\finite_integer_interval.max;
      set1 := set1 + [i];
    END_REPEAT;
    RETURN(equal_maths_spaces(make_finite_space(set1), spc2));
  END_IF;
      IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN spc1types) AND ('POLAR_COMPLEX_NUMBER_REGION' IN spc2types)
  THEN
    RETURN(equal_cregion_pregion(spc1, spc2));
  END_IF;
      IF ('POLAR_COMPLEX_NUMBER_REGION' IN spc1types) AND ('CARTESIAN_COMPLEX_NUMBER_REGION' IN spc2types)
  THEN
    RETURN(equal_cregion_pregion(spc2, spc1));
  END_IF;
      IF 'UNIFORM_PRODUCT_SPACE' IN spc1types
  THEN
    base := spc1\uniform_product_space.base;
    expnt := spc1\uniform_product_space.exponent;
    IF 'UNIFORM_PRODUCT_SPACE' IN spc2types
    THEN
      IF expnt <> spc2\uniform_product_space.exponent
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(equal_maths_spaces(base, spc2\uniform_product_space.base));
    END_IF;
    IF 'LISTED_PRODUCT_SPACE' IN spc2types
    THEN
      factors := spc2\listed_product_space.factors;
      IF expnt <> SIZEOF(factors)
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO SIZEOF(factors);
        cum := cum AND equal_maths_spaces(base, factors[i]);
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(cum);
    END_IF;
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN spc1types
  THEN
    factors := spc1\listed_product_space.factors;
    IF 'UNIFORM_PRODUCT_SPACE' IN spc2types
    THEN
      IF spc2\uniform_product_space.exponent <> SIZEOF(factors)
      THEN
        RETURN(FALSE);
      END_IF;
      base := spc2\uniform_product_space.base;
      REPEAT i := 1 TO SIZEOF(factors);
        cum := cum AND equal_maths_spaces(base, factors[i]);
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(cum);
    END_IF;
    IF 'LISTED_PRODUCT_SPACE' IN spc2types
    THEN
      factors2 := spc2\listed_product_space.factors;
      IF SIZEOF(factors) <> SIZEOF(factors2)
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO SIZEOF(factors);
        cum := cum AND equal_maths_spaces(factors[i], factors2[i]);
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(cum);
    END_IF;
  END_IF;
      IF ('EXTENDED_TUPLE_SPACE' IN spc1types) AND ('EXTENDED_TUPLE_SPACE' IN spc2types)
  THEN
    RETURN(equal_maths_spaces(spc1\extended_tuple_space.extender, spc2\extended_tuple_space.extender) AND
           equal_maths_spaces(spc1\extended_tuple_space.base, spc2\extended_tuple_space.base));
  END_IF;
      IF ('FUNCTION_SPACE' IN spc1types) AND ('FUNCTION_SPACE' IN spc2types)
  THEN
    fs1 := spc1;
    fs2 := spc2;
    IF fs1.domain_constraint <> fs2.domain_constraint
    THEN
      IF (fs1.domain_constraint = sc_equal) OR (fs2.domain_constraint = sc_equal)
      THEN
        RETURN(FALSE);
      END_IF;
      IF (fs1.domain_constraint <> sc_subspace)
      THEN
        fs1 := spc2;
        fs2 := spc1;
      END_IF;
      IF (fs1.domain_constraint <> sc_subspace) OR (fs2.domain_constraint <> sc_member)
      THEN
        RETURN(UNKNOWN);
      END_IF;
      IF any_space_satisfies(fs1.domain_constraint, fs1.domain_argument) <>
         any_space_satisfies(fs2.domain_constraint, fs2.domain_argument)
      THEN
        RETURN(FALSE);
      END_IF;
      IF NOT ('FINITE_SPACE' IN stripped_typeof(fs2.domain_argument))
      THEN
        RETURN(FALSE);
      END_IF;
      IF SIZEOF(['FINITE_SPACE','FINITE_INTEGER_INTERVAL'] * stripped_typeof(fs1.domain_argument)) = 0
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(UNKNOWN);
    END_IF;
    cum := equal_maths_spaces(fs1.domain_argument, fs2.domain_argument);
    IF cum = FALSE
    THEN
      RETURN(FALSE);
    END_IF;
    IF fs1.range_constraint <> fs2.range_constraint
    THEN
      IF (fs1.range_constraint = sc_equal) OR (fs2.range_constraint = sc_equal)
      THEN
        RETURN(FALSE);
      END_IF;
      IF (fs1.range_constraint <> sc_subspace)
      THEN
        fs1 := spc2;
        fs2 := spc1;
      END_IF;
      IF (fs1.range_constraint <> sc_subspace) OR (fs2.range_constraint <> sc_member)
      THEN
        RETURN(UNKNOWN);
      END_IF;
      IF any_space_satisfies(fs1.range_constraint, fs1.range_argument) <>
         any_space_satisfies(fs2.range_constraint, fs2.range_argument)
      THEN
        RETURN(FALSE);
      END_IF;
      IF NOT ('FINITE_SPACE' IN stripped_typeof(fs2.range_argument))
      THEN
        RETURN(FALSE);
      END_IF;
      IF SIZEOF(['FINITE_SPACE','FINITE_INTEGER_INTERVAL'] * stripped_typeof(fs1.range_argument)) = 0
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(UNKNOWN);
    END_IF;
    cum := cum AND equal_maths_spaces(fs1.range_argument, fs2.range_argument);
    RETURN(cum);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION equal_maths_values
 (val1 : maths_value; val2 : maths_value) : LOGICAL;
FUNCTION mem_of_vs(val1 : maths_value;
                                    val2 : maths_value) : LOGICAL;
    IF NOT has_values_space(val2)
    THEN
      RETURN(UNKNOWN);
    END_IF;
    IF NOT member_of(val1, values_space_of(val2))
    THEN
      RETURN(FALSE);
    END_IF;
    RETURN(UNKNOWN);
  END_FUNCTION;
    LOCAL
  types1 : SET OF STRING;
  types2 : SET OF STRING;
  list1 : LIST OF maths_value;
  list2 : LIST OF maths_value;
  cum : LOGICAL := TRUE;
    END_LOCAL;
      IF NOT EXISTS(val1) OR NOT EXISTS(val2)
  THEN
    RETURN(FALSE);
  END_IF;
      IF val1 = val2
  THEN
    RETURN(TRUE);
  END_IF;
      types1 := stripped_typeof(val1);
      types2 := stripped_typeof(val2);
      IF ('MATHS_ATOM' IN types1) OR ('COMPLEX_NUMBER_LITERAL' IN types1)
  THEN
    IF 'MATHS_ATOM' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'COMPLEX_NUMBER_LITERAL' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'LIST' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'MATHS_SPACE' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'MATHS_FUNCTION' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'GENERIC_EXPRESSION' IN types2
    THEN
      RETURN(mem_of_vs(val1, val2));
    END_IF;
    RETURN(UNKNOWN);
  END_IF;
      IF ('MATHS_ATOM' IN types2) OR ('COMPLEX_NUMBER_LITERAL' IN types2)
  THEN
    RETURN(equal_maths_values(val2, val1));
  END_IF;
      IF 'LIST' IN types1
  THEN
    IF 'LIST' IN types2
    THEN
      list1 := val1;
      list2 := val2;
      IF SIZEOF(list1) <> SIZEOF(list2)
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT i := 1 TO SIZEOF(list1);
        cum := cum AND equal_maths_values(list1[i], list2[i]);
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(cum);
    END_IF;
    IF 'MATHS_SPACE' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'MATHS_FUNCTION' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'GENERIC_EXPRESSION' IN types2
    THEN
      RETURN(mem_of_vs(val1, val2));
    END_IF;
    RETURN(UNKNOWN);
  END_IF;
      IF 'LIST' IN types2
  THEN
    RETURN(equal_maths_values(val2, val1));
  END_IF;
      IF 'MATHS_SPACE' IN types1
  THEN
    IF 'MATHS_SPACE' IN types2
    THEN
      RETURN(equal_maths_spaces(val1, val2));
    END_IF;
    IF 'MATHS_FUNCTION' IN types2
    THEN
      RETURN(FALSE);
    END_IF;
    IF 'GENERIC_EXPRESSION' IN types2
    THEN
      RETURN(mem_of_vs(val1, val2));
    END_IF;
    RETURN(UNKNOWN);
  END_IF;
      IF 'MATHS_SPACE' IN types2
  THEN
    RETURN(equal_maths_values(val2, val1));
  END_IF;
      IF 'MATHS_FUNCTION' IN types1
  THEN
    IF 'MATHS_FUNCTION' IN types2
    THEN
      RETURN(equal_maths_functions(val1, val2));
    END_IF;
    IF 'GENERIC_EXPRESSION' IN types2
    THEN
      RETURN(mem_of_vs(val1, val2));
    END_IF;
    RETURN(UNKNOWN);
  END_IF;
      IF 'MATHS_FUNCTION' IN types2
  THEN
    RETURN(equal_maths_values(val2, val1));
  END_IF;
      IF ('GENERIC_EXPRESSION' IN types1) AND ('GENERIC_EXPRESSION' IN types2)
  THEN
    IF NOT has_values_space(val1) OR NOT has_values_space(val2)
    THEN
      RETURN(UNKNOWN);
    END_IF;
    IF NOT compatible_spaces(values_space_of(val1), values_space_of(val2))
    THEN
      RETURN(FALSE);
    END_IF;
  END_IF;
      RETURN(UNKNOWN);
END_FUNCTION;

FUNCTION es_subspace_of_es
 (es1 : elementary_space_enumerators; es2 : elementary_space_enumerators) : BOOLEAN;
    IF NOT EXISTS(es1) OR NOT EXISTS(es2)
  THEN
    RETURN(FALSE);
  END_IF;
      IF es1 = es2
  THEN
    RETURN(TRUE);
  END_IF;
      IF es2 = es_generics
  THEN
    RETURN(TRUE);
  END_IF;
      IF (es1 = es_booleans) AND (es2 = es_logicals)
  THEN
    RETURN(TRUE);
  END_IF;
      IF (es2 = es_numbers) AND ((es1 = es_complex_numbers) OR (es1 = es_reals) OR (es1 = es_integers))
  THEN
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION expression_is_constant
 (expr : generic_expression) : BOOLEAN;
    RETURN(bool(SIZEOF(free_variables_of(expr)) = 0));
END_FUNCTION;

FUNCTION external_version_assignment_is_valid
 (aia : applied_external_identification_assignment) : BOOLEAN;
  LOCAL
  item : external_identification_item;
  role : identification_role;
    END_LOCAL;
      role := aia.role;
      IF role.name = 'version'
  THEN
    REPEAT i := LOINDEX(aia\applied_external_identification_assignment.items) TO HIINDEX(aia\applied_external_identification_assignment.items);
      item := aia\applied_external_identification_assignment.items[i];
      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_GENERAL_PROPERTY'] *
                 TYPEOF(item)) =
          0)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    RETURN(TRUE);
  ELSE
    RETURN(TRUE);
  END_IF;
END_FUNCTION;

FUNCTION extract_factors
 (tspace : tuple_space; m : INTEGER; n : INTEGER) : tuple_space;
  LOCAL
  tsp : tuple_space := the_zero_tuple_space;
    END_LOCAL;
      REPEAT i := m TO n;
    tsp := assoc_product_space(tsp, factor_space(tspace, i));
  END_REPEAT;
      RETURN(tsp);
END_FUNCTION;

FUNCTION extremal_position_check
 (fun : linearized_table_function) : BOOLEAN;
  LOCAL
  source_domain : maths_space;
  source_interval : finite_integer_interval;
  index : INTEGER := 1;
  base : INTEGER;
  shape : LIST OF positive_integer;
  ndim : positive_integer;
  slo : INTEGER;
  shi : INTEGER;
  sublo : LIST OF INTEGER := [];
  subhi : LIST OF INTEGER := [];
    END_LOCAL;
      IF NOT EXISTS(fun)
  THEN
    RETURN(FALSE);
  END_IF;
      source_domain := factor1(fun.source.domain);
      IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(source_domain)
  THEN
    source_domain := factor1(source_domain);
  END_IF;
      IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(source_domain))
  THEN
    RETURN(FALSE);
  END_IF;
      source_interval := source_domain;
      base := fun\explicit_table_function.index_base;
      shape := fun\explicit_table_function.shape;
      IF (schema_prefix + 'STANDARD_TABLE_FUNCTION') IN TYPEOF(fun)
  THEN
    REPEAT j := 1 TO SIZEOF(shape);
      index := index * shape[j];
    END_REPEAT;
    index := fun.first + index - 1;
    RETURN(bool({source_interval.min <= index <= source_interval.max}));
  END_IF;
      IF (schema_prefix + 'REGULAR_TABLE_FUNCTION') IN TYPEOF(fun)
  THEN
    ndim := SIZEOF(fun\explicit_table_function.shape);
    REPEAT j := 1 TO ndim;
      slo := base;
      shi := base + shape[j] - 1;
      IF fun\regular_table_function.increments[j] >= 0
      THEN
        INSERT(sublo, slo, j - 1);
        INSERT(subhi, shi, j - 1);
      ELSE
        INSERT(sublo, shi, j - 1);
        INSERT(subhi, slo, j - 1);
      END_IF;
    END_REPEAT;
    index := regular_indexing(sublo, base, shape, fun\regular_table_function.increments, fun.first);
    IF NOT ({source_interval.min <= index <= source_interval.max})
    THEN
      RETURN(FALSE);
    END_IF;
    index := regular_indexing(subhi, base, shape, fun\regular_table_function.increments, fun.first);
    IF NOT ({source_interval.min <= index <= source_interval.max})
    THEN
      RETURN(FALSE);
    END_IF;
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION face_bound_reversed
 (a_face_bound : face_bound) : face_bound;
  LOCAL
  the_reverse : face_bound;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF(a_face_bound))
  THEN
    the_reverse := dummy_tri || face_bound(a_face_bound\face_bound.bound, NOT (a_face_bound\face_bound.orientation)) ||
                   face_outer_bound();
  ELSE
    the_reverse := dummy_tri || face_bound(a_face_bound.bound, NOT (a_face_bound.orientation));
  END_IF;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION face_reversed
 (a_face : face) : oriented_face;
  LOCAL
  the_reverse : oriented_face;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(a_face))
  THEN
    the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) ||
                   oriented_face(a_face\oriented_face.face_element, NOT (a_face\oriented_face.orientation));
  ELSE
    the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face, FALSE);
  END_IF;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION factor1
 (tspace : tuple_space) : maths_space;
  LOCAL
  typenames : SET OF STRING := TYPEOF(tspace);
    END_LOCAL;
      IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
  THEN
    RETURN(tspace\uniform_product_space.base);
  END_IF;
      IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
  THEN
    RETURN(tspace\listed_product_space.factors[1]);
  END_IF;
      IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN typenames
  THEN
    RETURN(factor1(tspace\extended_tuple_space.base));
  END_IF;
      -- Should not be reachable.
      RETURN(?);
END_FUNCTION;

FUNCTION factor_space
 (tspace : tuple_space; idx : positive_integer) : maths_space;
  LOCAL
  typenames : SET OF STRING := TYPEOF(tspace);
    END_LOCAL;
      IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
  THEN
    IF idx <= tspace\uniform_product_space.exponent
    THEN
      RETURN(tspace\uniform_product_space.base);
    END_IF;
    RETURN(?);
  END_IF;
      IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
  THEN
    IF idx <= SIZEOF(tspace\listed_product_space.factors)
    THEN
      RETURN(tspace\listed_product_space.factors[idx]);
    END_IF;
    RETURN(?);
  END_IF;
      IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN typenames
  THEN
    IF idx <= space_dimension(tspace\extended_tuple_space.base)
    THEN
      RETURN(factor_space(tspace\extended_tuple_space.base, idx));
    END_IF;
    RETURN(tspace\extended_tuple_space.extender);
  END_IF;
      -- Should not be reachable.
      RETURN(?);
END_FUNCTION;

FUNCTION find_assembly_root
 (constituent : SET OF product_definition) : SET OF product_definition;
  LOCAL
  local_relation : SET OF assembly_component_usage := [];
  local_relation2 : BAG OF assembly_component_usage := [];
  local_parent : SET OF product_definition := [];
  root : SET OF product_definition;
  i : INTEGER := 0;
  j : INTEGER := 0;
    END_LOCAL;
      -- Is constituent root ? --
      IF ((SIZEOF(constituent) = 1) AND assembly_root(constituent[1]))
  THEN
    RETURN([constituent[1]]);
  ELSE
    IF (SIZEOF(constituent) = 0)
    THEN
      RETURN([]);
    ELSE
      REPEAT j := 1 TO HIINDEX(constituent);
        local_relation2 := local_relation2 +
                           QUERY(pdr
                                 <* USEDIN(constituent[j], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN
                                   TYPEOF(pdr));
      END_REPEAT;
      local_relation := bag_to_set(local_relation2);
      IF (SIZEOF(local_relation) = 0)
      THEN
        IF (SIZEOF(constituent) = 1)
        THEN
          RETURN([constituent[1]]);
        ELSE
          RETURN([]);
        END_IF;
      ELSE
        REPEAT i := 1 TO HIINDEX(local_relation);
          REPEAT j := 1 TO HIINDEX(constituent);
            IF (local_relation[i].relating_product_definition <> constituent[j])
            THEN
              local_parent := local_parent + local_relation[i].relating_product_definition;
            END_IF;
          END_REPEAT;
        END_REPEAT;
        IF ((SIZEOF(local_parent) = 1) AND assembly_root(local_parent[1]))
        THEN
          RETURN([local_parent[1]]);
        ELSE
          IF (SIZEOF(local_parent) = 0)
          THEN
            RETURN([]);
          ELSE
            root := find_assembly_root(local_parent);
            IF (SIZEOF(root) = 1)
            THEN
              RETURN(root);
            ELSE
              IF (SIZEOF(root) = 0)
              THEN
                RETURN([]);
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN([]);
END_FUNCTION;

FUNCTION find_representative_shape_representation_of_product_definition
 (item : product_definition) : shape_representation;
  LOCAL
  local_s_r : SET OF shape_representation := [];
    END_LOCAL;
      -- find representative_shape_representation of the product_definition
      local_s_r := QUERY(z
                         <* find_shape_representation_of_product_definition(item)
                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
                           TYPEOF(z));
      IF (SIZEOF(local_s_r) = 1)
  THEN
    RETURN(local_s_r[1]);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION find_representative_shape_representation_of_shape_aspect
 (item : shape_aspect) : shape_representation;
  LOCAL
  local_s_r : SET OF shape_representation := [];
    END_LOCAL;
      -- find representative_shape_representation of the shape_aspect
      local_s_r := QUERY(z
                         <* find_shape_representation_of_shape_aspect(item)
                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
                           TYPEOF(z));
      IF (SIZEOF(local_s_r) = 1)
  THEN
    RETURN(local_s_r[1]);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION find_shape_representation_of_product_definition
 (item : product_definition) : SET OF shape_representation;
  LOCAL
  local_p_d_s : SET OF product_definition_shape := [];
  local_p_d_s2 : BAG OF product_definition_shape := [];
  local_s_d_r : SET OF shape_definition_representation := [];
  local_s_d_r2 : BAG OF shape_definition_representation := [];
  local_s_r : SET OF shape_representation := [];
  i : INTEGER;
    END_LOCAL;
      -- find product_definition_shape representing the product_definiton
      local_p_d_s2 := local_p_d_s2 +
                      QUERY(pd
                            <* USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
                            | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd));
      local_p_d_s := bag_to_set(local_p_d_s2);
      -- find shape_definition_representations refereing to the local_p_d_s
      REPEAT i := 1 TO HIINDEX(local_p_d_s);
    local_s_d_r2 := local_s_d_r2 +
                    QUERY(pdr
                          <* USEDIN(local_p_d_s[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
                            TYPEOF(pdr));
  END_REPEAT;
      local_s_d_r := bag_to_set(local_s_d_r2);
      REPEAT i := 1 TO HIINDEX(local_s_d_r);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
        TYPEOF(local_s_d_r[i].used_representation))
    THEN
      local_s_r := local_s_r + local_s_d_r[i].used_representation;
    END_IF;
  END_REPEAT;
      RETURN(local_s_r);
END_FUNCTION;

FUNCTION find_shape_representation_of_shape_aspect
 (item : shape_aspect) : SET OF shape_representation;
  LOCAL
  local_p_d : SET OF property_definition := [];
  local_s_d_r : SET OF shape_definition_representation := [];
  local_s_d_r2 : BAG OF shape_definition_representation := [];
  local_s_r : SET OF shape_representation := [];
  i : INTEGER;
    END_LOCAL;
      -- find property_definition representing the shape_aspect
      local_p_d := bag_to_set(USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
      -- find shape_definition_representations refereing to the local_p_d
      REPEAT i := 1 TO HIINDEX(local_p_d);
    local_s_d_r2 := local_s_d_r2 +
                    QUERY(pdr
                          <* USEDIN(local_p_d[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
                            TYPEOF(pdr));
  END_REPEAT;
      local_s_d_r := bag_to_set(local_s_d_r2);
      REPEAT i := 1 TO HIINDEX(local_s_d_r);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
        TYPEOF(local_s_d_r[i].used_representation))
    THEN
      local_s_r := local_s_r + local_s_d_r[i].used_representation;
    END_IF;
  END_REPEAT;
      RETURN(local_s_r);
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.0,0.0,0.0]) AND (z.direction_ratios <> [-1.0,0.0,0.0]))
      THEN
        v := dummy_gri || direction([1.0,0.0,0.0]);
      ELSE
        v := dummy_gri || direction([0.0,1.0,0.0]);
      END_IF;
    ELSE
      IF (arg.dim <> 3)
      THEN
        RETURN(?);
      END_IF;
      IF ((cross_product(arg, z).magnitude) = 0.0)
      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 free_variables_of
 (expr : generic_expression) : SET OF generic_variable;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(expr);
  result : SET OF generic_variable := [];
  exprs : LIST OF generic_expression := [];
    END_LOCAL;
      IF 'GENERIC_LITERAL' IN typenames
  THEN
    RETURN(result);
  END_IF;
      IF 'GENERIC_VARIABLE' IN typenames
  THEN
    result := result + expr;
    RETURN(result);
  END_IF;
      IF 'QUANTIFIER_EXPRESSION' IN typenames
  THEN
    exprs := QUERY(ge
                   <* expr\multiple_arity_generic_expression.operands
                   | NOT (ge IN expr\quantifier_expression.variables));
    REPEAT i := 1 TO SIZEOF(exprs);
      result := result + free_variables_of(exprs[i]);
    END_REPEAT;
    REPEAT i := 1 TO SIZEOF(expr\quantifier_expression.variables);
      result := result - expr\quantifier_expression.variables[i];
    END_REPEAT;
    RETURN(result);
  END_IF;
      IF 'UNARY_GENERIC_EXPRESSION' IN typenames
  THEN
    RETURN(free_variables_of(expr\unary_generic_expression.operand));
  END_IF;
      IF 'BINARY_GENERIC_EXPRESSION' IN typenames
  THEN
    result := free_variables_of(expr\binary_generic_expression.operands[1]);
    RETURN(result + free_variables_of(expr\binary_generic_expression.operands[2]));
  END_IF;
      IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN typenames
  THEN
    REPEAT i := 1 TO SIZEOF(expr\multiple_arity_generic_expression.operands);
      result := result + free_variables_of(expr\multiple_arity_generic_expression.operands[i]);
    END_REPEAT;
    RETURN(result);
  END_IF;
      -- In this case the subtype shall not contain any variable (see IP1 in
      -- generic_expression).
      RETURN(result);
END_FUNCTION;

FUNCTION function_applicability
 (func : maths_function_select; arguments : LIST[1:?] OF maths_value) : BOOLEAN;
  LOCAL
  domain : tuple_space := convert_to_maths_function(func).domain;
  domain_types : SET OF STRING := TYPEOF(domain);
  narg : positive_integer := SIZEOF(arguments);
  arg : generic_expression;
    END_LOCAL;
      IF (schema_prefix + 'PRODUCT_SPACE') IN domain_types
  THEN
    IF space_dimension(domain) <> narg
    THEN
      RETURN(FALSE);
    END_IF;
  ELSE
    IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN domain_types
    THEN
      IF space_dimension(domain) > narg
      THEN
        RETURN(FALSE);
      END_IF;
    ELSE
      RETURN(FALSE);
    END_IF;
  END_IF;
      REPEAT i := 1 TO narg;
    arg := convert_to_operand(arguments[i]);
    IF NOT has_values_space(arg)
    THEN
      RETURN(FALSE);
    END_IF;
    IF NOT compatible_spaces(factor_space(domain, i), values_space_of(arg))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION function_is_1d_array
 (func : maths_function) : BOOLEAN;
  LOCAL
  temp : maths_space;
    END_LOCAL;
      IF NOT EXISTS(func)
  THEN
    RETURN(FALSE);
  END_IF;
      IF space_dimension(func.domain) <> 1
  THEN
    RETURN(FALSE);
  END_IF;
      temp := factor1(func.domain);
      IF (schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(temp)
  THEN
    IF space_dimension(temp) <> 1
    THEN
      RETURN(FALSE);
    END_IF;
    temp := factor1(temp);
  END_IF;
      IF (schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp)
  THEN
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION function_is_1d_table
 (func : maths_function) : BOOLEAN;
  LOCAL
  temp : maths_space;
  itvl : finite_integer_interval;
    END_LOCAL;
      IF NOT EXISTS(func)
  THEN
    RETURN(FALSE);
  END_IF;
      IF space_dimension(func.domain) <> 1
  THEN
    RETURN(FALSE);
  END_IF;
      temp := factor1(func.domain);
      IF (schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(temp)
  THEN
    IF space_dimension(temp) <> 1
    THEN
      RETURN(FALSE);
    END_IF;
    temp := factor1(temp);
  END_IF;
      IF (schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp)
  THEN
    itvl := temp;
    RETURN(bool((itvl.min = 0) OR (itvl.min = 1)));
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION function_is_2d_table
 (func : maths_function) : BOOLEAN;
  LOCAL
  temp : maths_space;
  pspace : product_space;
  itvl1 : finite_integer_interval;
  itvl2 : finite_integer_interval;
    END_LOCAL;
      IF NOT EXISTS(func)
  THEN
    RETURN(FALSE);
  END_IF;
      IF space_dimension(func.domain) <> 1
  THEN
    RETURN(FALSE);
  END_IF;
      temp := factor1(func.domain);
      IF NOT ('PRODUCT_SPACE' IN stripped_typeof(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      pspace := temp;
      IF space_dimension(pspace) <> 2
  THEN
    RETURN(FALSE);
  END_IF;
      temp := factor1(pspace);
      IF NOT ('FINITE_INTEGER_INTERVAL' IN stripped_typeof(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      itvl1 := temp;
      temp := factor_space(pspace, 2);
      IF NOT ('FINITE_INTEGER_INTERVAL' IN stripped_typeof(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      itvl2 := temp;
      RETURN(bool((itvl1.min = itvl2.min) AND ((itvl1.min = 0) OR (itvl1.min = 1))));
END_FUNCTION;

FUNCTION function_is_array
 (func : maths_function) : BOOLEAN;
  LOCAL
  tspace : tuple_space;
  temp : maths_space;
    END_LOCAL;
      IF NOT EXISTS(func)
  THEN
    RETURN(FALSE);
  END_IF;
      tspace := func.domain;
      IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
  THEN
    tspace := factor1(tspace);
  END_IF;
      IF NOT ((schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(tspace))
  THEN
    RETURN(FALSE);
  END_IF;
      REPEAT i := 1 TO space_dimension(tspace);
    temp := factor_space(tspace, i);
    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION function_is_table
 (func : maths_function) : BOOLEAN;
  LOCAL
  tspace : tuple_space;
  temp : maths_space;
  base : INTEGER;
    END_LOCAL;
      IF NOT EXISTS(func)
  THEN
    RETURN(FALSE);
  END_IF;
      tspace := func.domain;
      IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
  THEN
    tspace := factor1(tspace);
  END_IF;
      IF NOT ((schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(tspace))
  THEN
    RETURN(FALSE);
  END_IF;
      temp := factor1(tspace);
      IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
  THEN
    RETURN(FALSE);
  END_IF;
      base := temp\finite_integer_interval.min;
      IF (base <> 0) AND (base <> 1)
  THEN
    RETURN(FALSE);
  END_IF;
      REPEAT i := 2 TO space_dimension(tspace);
    temp := factor_space(tspace, i);
    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
    THEN
      RETURN(FALSE);
    END_IF;
    IF temp\finite_integer_interval.min <> base
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION gbsf_check_curve
 (cv : representation_item) : BOOLEAN;
    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
                               TYPEOF(cv)) >
                        1
  THEN
    RETURN(FALSE);
  END_IF;
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE'] *
                TYPEOF(cv)) =
         1
  THEN
    RETURN(TRUE);
  ELSE
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
        (cv\b_spline_curve.self_intersect = FALSE) OR
        (cv\b_spline_curve.self_intersect = UNKNOWN))
    THEN
      RETURN(TRUE);
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(cv)) AND
          (cv\composite_curve.self_intersect = FALSE) OR
          (cv\composite_curve.self_intersect = UNKNOWN))
      THEN
        RETURN(SIZEOF(QUERY(seg <* cv\composite_curve.segments | NOT (gbsf_check_curve(seg.parent_curve)))) = 0);
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
        THEN
          RETURN(gbsf_check_curve(cv\curve_replica.parent_curve));
        ELSE
          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
              ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d.self_intersect = UNKNOWN)) AND
              (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
                    TYPEOF(cv\offset_curve_3d.basis_curve))))
          THEN
            RETURN(gbsf_check_curve(cv\offset_curve_3d.basis_curve));
          ELSE
            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
            THEN
              RETURN((gbsf_check_curve(cv\pcurve.reference_to_curve\representation.items[1])) AND
                     (gbsf_check_surface(cv\pcurve.basis_surface)));
            ELSE
              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
              THEN
                IF (SIZEOF(cv\polyline.points) >= 3)
                THEN
                  RETURN(TRUE);
                END_IF;
              ELSE
                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
                THEN
                  IF gbsf_check_curve(cv\surface_curve.curve_3d)
                  THEN
                    REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
                      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
                         TYPEOF(cv\surface_curve.associated_geometry[i])
                      THEN
                        IF NOT gbsf_check_surface(cv\surface_curve.associated_geometry[i])
                        THEN
                          RETURN(FALSE);
                        END_IF;
                      ELSE
                        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
                           TYPEOF(cv\surface_curve.associated_geometry[i])
                        THEN
                          IF NOT gbsf_check_curve(cv\surface_curve.associated_geometry[i])
                          THEN
                            RETURN(FALSE);
                          END_IF;
                        END_IF;
                      END_IF;
                    END_REPEAT;
                    RETURN(TRUE);
                  END_IF;
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION gbsf_check_point
 (pnt : point) : BOOLEAN;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN TYPEOF(pnt)
    THEN
      RETURN(gbsf_check_curve(pnt\point_on_curve.basis_curve));
    ELSE
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE' IN TYPEOF(pnt)
      THEN
        RETURN(gbsf_check_surface(pnt\point_on_surface.basis_surface));
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE' IN TYPEOF(pnt)
        THEN
          RETURN((gbsf_check_curve(pnt\degenerate_pcurve.reference_to_curve\representation.items[1])) AND
                 (gbsf_check_surface(pnt\degenerate_pcurve.basis_surface)));
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION gbsf_check_surface
 (sf : surface) : BOOLEAN;
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(sf)) AND
                         (sf\b_spline_surface.self_intersect = FALSE) OR
                         (sf\b_spline_surface.self_intersect = UNKNOWN))
  THEN
    RETURN(TRUE);
  ELSE
    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE',
               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOROIDAL_SURFACE',
               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE',
               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_TRIMMED_SURFACE'] *
              TYPEOF(sf)) =
       1
    THEN
      RETURN(TRUE);
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(sf)) AND
          (sf\offset_surface.self_intersect = FALSE) OR
          (sf\offset_surface.self_intersect = UNKNOWN))
      THEN
        RETURN(gbsf_check_surface(sf\offset_surface.basis_surface));
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE' IN TYPEOF(sf)
        THEN
          REPEAT i := 1 TO SIZEOF(sf\rectangular_composite_surface.segments);
            REPEAT j := 1 TO SIZEOF(sf\rectangular_composite_surface.segments[i]);
              IF NOT (gbsf_check_surface(sf\rectangular_composite_surface.segments[i][j].parent_surface))
              THEN
                RETURN(FALSE);
              END_IF;
            END_REPEAT;
          END_REPEAT;
          RETURN(TRUE);
        ELSE
          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(sf)
          THEN
            RETURN(gbsf_check_surface(sf\surface_replica.parent_surface));
          ELSE
            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_REVOLUTION' IN TYPEOF(sf)
            THEN
              RETURN(gbsf_check_curve(sf\swept_surface.swept_curve));
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION geometric_dimensionalities_in_contexts
 (grcs : SET[1:?] OF geometric_representation_context) : INTEGER;
  LOCAL
  grcs_1d : INTEGER := 0;
  grcs_2d : INTEGER := 0;
  grcs_3d : INTEGER := 0;
    END_LOCAL;
      IF (SIZEOF(grcs) = 1)
  THEN
    RETURN(grcs[1]\geometric_representation_context.coordinate_space_dimension);
  ELSE
    REPEAT i := 1 TO HIINDEX(grcs);
      IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 1)
      THEN
        grcs_1d := grcs_1d + 1;
      ELSE
        IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 2)
        THEN
          grcs_2d := grcs_2d + 1;
        ELSE
          IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 3)
          THEN
            grcs_3d := grcs_3d + 1;
          END_IF;
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      IF (grcs_1d + grcs_2d = 0)
  THEN
    RETURN(3);
  ELSE
    IF (grcs_1d + grcs_3d = 0)
    THEN
      RETURN(2);
    ELSE
      IF (grcs_2d + grcs_3d = 0)
      THEN
        RETURN(1);
      ELSE
        RETURN(0);
      END_IF;
    END_IF;
  END_IF;
END_FUNCTION;

FUNCTION get_aggregate_id_value
 (obj : id_attribute_select) : identifier;
  LOCAL
  aggregate_id_bag : BAG OF aggregate_id_attribute := (USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGGREGATE_ID_ATTRIBUTE.IDENTIFIED_ITEM'));
    END_LOCAL;
      IF SIZEOF(aggregate_id_bag) = 1
  THEN
    RETURN(aggregate_id_bag[1].attribute_value);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION get_associated_mandatory_document_ids
 (pdc : product_definition_context) : SET OF STRING;
  LOCAL
  result : SET OF STRING := [];
  adrs_raw : SET OF applied_document_reference := bag_to_set(USEDIN(pdc, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_REFERENCE.ITEMS'));
  adrs_filtered : SET OF applied_document_reference := [];
  ras : SET OF role_association;
  dpas : SET OF document_product_association;
    END_LOCAL;
      -- scan adrs_raw for associated role 'mandatory' and fill adrs_filtered with results
      REPEAT i := 1 TO HIINDEX(adrs_raw);
    IF adrs_raw[i]\document_reference.role\object_role.name = 'mandatory'
    THEN
      adrs_filtered := adrs_filtered + adrs_raw[i];
    END_IF;
  END_REPEAT;
      -- scan through adrs_filtered and access associated product.id s
      REPEAT i := 1 TO HIINDEX(adrs_filtered);
    dpas := bag_to_set(USEDIN(adrs_filtered[i]\document_reference.assigned_document, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_PRODUCT_ASSOCIATION.RELATING_DOCUMENT'));
    REPEAT j := 1 TO HIINDEX(dpas);
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_PRODUCT_EQUIVALENCE' IN TYPEOF(dpas[j])
      THEN
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
           TYPEOF(dpas[j]\document_product_association.related_product)
        THEN
          result := result +
                    dpas[j]\document_product_association.related_product\product_definition_formation.of_product\product.id;
        END_IF;
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN TYPEOF(dpas[j].related_product)
        THEN
          result := result + dpas[j]\document_product_association.related_product\product.id;
        END_IF;
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION get_basis_surface
 (c : curve_on_surface) : SET[0:2] OF surface;
  LOCAL
  surfs : SET [0 : 2] OF surface;
  n : INTEGER;
    END_LOCAL;
      surfs := [];
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(c)
  THEN
    surfs := [c\pcurve.basis_surface];
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(c)
    THEN
      n := SIZEOF(c\surface_curve.associated_geometry);
      REPEAT i := 1 TO n;
        surfs := surfs + associated_surface(c\surface_curve.associated_geometry[i]);
      END_REPEAT;
    END_IF;
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF(c)
  THEN
    n := SIZEOF(c\composite_curve.segments);
    surfs := get_basis_surface(c\composite_curve.segments[1].parent_curve);
    IF n > 1
    THEN
      REPEAT i := 2 TO n;
        surfs := surfs * get_basis_surface(c\composite_curve.segments[i].parent_curve);
      END_REPEAT;
    END_IF;
  END_IF;
      RETURN(surfs);
END_FUNCTION;

FUNCTION get_coordinate_values
 (source : tessellated_surface_item) : coordinates_list;
  LOCAL
  coordinate_values : coordinates_list;
  max : INTEGER;
    END_LOCAL;
      (*If source is of type tessellated_face its single coordinates_list is returned*)
  
      CASE TRUE OF
    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
    TYPEOF(source) : BEGIN  
                            coordinate_values := source\tessellated_face.coordinates;
                            RETURN(coordinate_values);
    END;
    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SURFACE_SET' IN
    TYPEOF(source) : BEGIN  
                            coordinate_values := source\tessellated_surface_set.coordinates;
                            RETURN(coordinate_values);
    END;
    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID' IN
    TYPEOF(source) : BEGIN  
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
                               TYPEOF(source\tessellated_solid.items[1])
                            THEN
                              coordinate_values := source\tessellated_solid.items[1]\tessellated_face.coordinates;
                            END_IF;
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
                               TYPEOF(source\tessellated_solid.items[1])
                            THEN
                              coordinate_values := source\tessellated_solid.items[1]\tessellated_edge.coordinates;
                            END_IF;
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
                               TYPEOF(source\tessellated_solid.items[1])
                            THEN
                              coordinate_values := source\tessellated_solid.items[1]\tessellated_vertex.coordinates;
                            END_IF;
                            max := SIZEOF(source\tessellated_solid.items);
                            IF max = 1
                            THEN
                              RETURN(coordinate_values);
                            ELSE
                              REPEAT i := 2 TO max;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
                                   TYPEOF(source\tessellated_solid.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_solid.items[i]\tessellated_face.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
                                   TYPEOF(source\tessellated_solid.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_solid.items[i]\tessellated_edge.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
                                   TYPEOF(source\tessellated_solid.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_solid.items[i]\tessellated_vertex.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                              END_REPEAT;
                              RETURN(coordinate_values);
                            END_IF;
    END;
    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL' IN
    TYPEOF(source) : BEGIN  
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
                               TYPEOF(source\tessellated_shell.items[1])
                            THEN
                              coordinate_values := source\tessellated_shell.items[1]\tessellated_face.coordinates;
                            END_IF;
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
                               TYPEOF(source\tessellated_shell.items[1])
                            THEN
                              coordinate_values := source\tessellated_shell.items[1]\tessellated_edge.coordinates;
                            END_IF;
                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
                               TYPEOF(source\tessellated_shell.items[1])
                            THEN
                              coordinate_values := source\tessellated_shell.items[1]\tessellated_vertex.coordinates;
                            END_IF;
                            max := SIZEOF(source\tessellated_shell.items);
                            IF max = 1
                            THEN
                              RETURN(coordinate_values);
                            ELSE
                              REPEAT i := 2 TO max;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
                                   TYPEOF(source\tessellated_shell.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_shell.items[i]\tessellated_face.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
                                   TYPEOF(source\tessellated_shell.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_shell.items[i]\tessellated_edge.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
                                   TYPEOF(source\tessellated_shell.items[i])
                                THEN
                                  IF NOT (coordinate_values :=:
                                          source\tessellated_shell.items[i]\tessellated_vertex.coordinates)
                                  THEN
                                    RETURN(?);
                                  END_IF;
                                END_IF;
                              END_REPEAT;
                              RETURN(coordinate_values);
                            END_IF;
    END;
  END_CASE;
END_FUNCTION;

FUNCTION get_descendant_occurrences
 (input : product_definition_occurrence) : SET[0:?] OF product_definition_specified_occurrence;
  LOCAL
  result : SET OF product_definition_specified_occurrence := input.child_occurrences;
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(input.child_occurrences) BY 1;
    result := result + get_descendant_occurrences(input.child_occurrences[i]);
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION get_description_value
 (obj : description_attribute_select) : text;
  LOCAL
  description_bag : BAG OF description_attribute := (USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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;
      IF (SIZEOF(nodes) <> SIZEOF(undirected_link) + 1) OR (VALUE_UNIQUE(nodes) = FALSE)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := 1 TO SIZEOF(undirected_link);
    CASE TRUE OF
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 +
                                                                                                                                                                   1],
                                                                                                                                                             nodes[i]),
                                                                                                                                 (i -
                                                                                                                                  1));
                                                                                                                        ELSE
                                                                                                                          RETURN(?);
                                                                                                                        END_IF;
      END;
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 + 1], nodes[i]),
                                                     (i - 1));
                                            ELSE
                                              RETURN(?);
                                            END_IF;
      END;
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 +
                                                                                                                                                        1],
                                                                                                                                                  nodes[i]),
                                                                                                                      (i -
                                                                                                                       1));
                                                                                                             ELSE
                                                                                                               RETURN(?);
                                                                                                             END_IF;
      END;
      OTHERWISE: RETURN(?);
    END_CASE;
  END_REPEAT;
      IF (VALUE_UNIQUE(directed_link) = FALSE)
  THEN
    RETURN(?);
  END_IF;
      RETURN(directed_link);
END_FUNCTION;

FUNCTION get_id_value
 (obj : id_attribute_select) : identifier;
  LOCAL
  id_bag : BAG OF id_attribute := (USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_item_defined_transformations
 (input : set_item_defined_transformation) : SET OF item_defined_transformation;
  LOCAL
  item_set : SET OF item_defined_transformation := [];
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(input);
    item_set := item_set + input[i];
  END_REPEAT;
      RETURN(item_set);
END_FUNCTION;

FUNCTION get_kinematic_joints_from_kinematic_loops
 (kls : SET OF kinematic_loop) : SET OF kinematic_joint;
  LOCAL
  result : SET OF oriented_joint := [];
    END_LOCAL;
      IF SIZEOF(kls) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(kls);
      result := result + kls[i].edge_list;
    END_REPEAT;
  END_IF;
      RETURN(get_kinematic_joints_from_oriented_joints(result));
END_FUNCTION;

FUNCTION get_kinematic_joints_from_oriented_joints
 (ors : SET OF oriented_joint) : SET OF kinematic_joint;
  LOCAL
  result : SET OF kinematic_joint := [];
    END_LOCAL;
      IF SIZEOF(ors) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(ors);
      result := result + ors[i].edge_element;
    END_REPEAT;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION get_name_value
 (obj : name_attribute_select) : label;
  LOCAL
  name_bag : BAG OF name_attribute := (USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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_plane_of_implicit_geometry
 (ps : positioned_sketch) : plane;
  LOCAL
  sb : sketch_basis_select := ps.sketch_basis;
  result : plane := ?;
    END_LOCAL;
      -- determine plane of implicit geometry from the underlying entity data
      -- type of its owning instance of positioned_sketch_representation.  If
      -- the sketch basis is of type planar_curve_select then the planarity 
      -- of the curve is guaranteed by a WHERE rule on the SELECT type of that 
      -- name.
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(sb))
  THEN
    result := sb\face_surface.face_geometry;
  ELSE
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(sb))
    THEN
      result := sb\curve_bounded_surface.basis_surface;
    ELSE
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_CURVE_SELECT' IN TYPEOF(sb))
      THEN
        BEGIN  
               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC' IN TYPEOF(sb))
               THEN
                 result := dummy_gri || surface() || elementary_surface(sb\conic.position) || plane();
               END_IF;
               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(sb))
               THEN
                 BEGIN  
                        result := get_plane_of_implicit_geometry(dummy_gri ||
                                                                 positioned_sketch(sb\trimmed_curve.basis_curve, []));
                 END;
               END_IF;
               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(sb))
               THEN
                 result := sb\pcurve.basis_surface;
               END_IF;
               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(sb))
               THEN
                 BEGIN  
                        IF ((SIZEOF(sb\surface_curve.basis_surface) = 1) AND
                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
                             TYPEOF(sb\surface_curve.basis_surface[1])))
                        THEN
                          result := sb\surface_curve.basis_surface[1];
                        ELSE
                          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
                               TYPEOF(sb\surface_curve.basis_surface[1])) AND
                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
                               TYPEOF(sb\surface_curve.basis_surface[2])))
                          THEN
                            result := ?;
                          ELSE
                            IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
                                TYPEOF(sb\surface_curve.basis_surface[1]))
                            THEN
                              result := sb\surface_curve.basis_surface[1];
                            ELSE
                              result := sb\surface_curve.basis_surface[2];
                            END_IF;
                          END_IF;
                        END_IF;
                 END;
               END_IF;
        END;
      END_IF;
    END_IF;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION get_product_definition_shape
 (current : constituent_shape_aspect) : product_definition_shape;
    REPEAT WHILE ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONSTITUENT_SHAPE_ASPECT' IN
                                   TYPEOF(current.parent));
    current := current.parent;
  END_REPEAT;
      RETURN(current.parent\shape_aspect.of_shape);
END_FUNCTION;

FUNCTION get_property_definition_representations
 (c_def_instance : characterized_definition) : SET OF property_definition_representation;
  LOCAL
  pd_set : SET OF property_definition := [];
  pdr_set : SET OF property_definition_representation := [];
    END_LOCAL;
      pd_set := bag_to_set(USEDIN(c_def_instance, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
      IF (SIZEOF(pd_set) < 1)
  THEN
    RETURN(pdr_set);
  END_IF;
      REPEAT i := 1 TO HIINDEX(pd_set);
    pdr_set := pdr_set +
               bag_to_set(USEDIN(pd_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'));
  END_REPEAT;
      RETURN(pdr_set);
END_FUNCTION;

FUNCTION get_relative_direction_2points
 (cp1 : cartesian_point; cp2 : cartesian_point) : direction;
  LOCAL
  d1 : REAL;
  d2 : REAL;
  d3 : REAL;
  magnitude : REAL;
  result : direction := ?;
    END_LOCAL;
      -- check that input points are three-dimensional
      IF ((cp1.dim <> 3) OR (cp2.dim <> 3))
  THEN
    RETURN(result);
  ELSE
    BEGIN  
           d1 := cp2.coordinates[1] - cp1.coordinates[1];
           d2 := cp2.coordinates[2] - cp1.coordinates[2];
           d3 := cp2.coordinates[3] - cp1.coordinates[3];
           magnitude := SQRT(d1 * d1 + d2 * d2 + d3 * d3);
           IF (magnitude = 0)
           THEN
             RETURN(result);
           END_IF;
           result := dummy_gri || direction([d1,d2,d3]);
    END;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION get_representations_for_items
 (input : SET OF founded_item_select) : SET OF representation;
  LOCAL
  r_set : SET OF representation := [];
    END_LOCAL;
      REPEAT i := LOINDEX(input) TO HIINDEX(input);
    r_set := r_set + using_representations(input[i]);
  END_REPEAT;
      RETURN(r_set);
END_FUNCTION;

FUNCTION get_role
 (obj : role_select) : object_role;
  LOCAL
  role_bag : BAG OF role_association := (USEDIN(obj, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 get_shape_aspect_property_definition_representations
 (s_a_instance : shape_aspect) : SET OF property_definition_representation;
  LOCAL
  pd_set : SET OF property_definition := [];
  pdr_set : SET OF property_definition_representation := [];
    END_LOCAL;
      pd_set := bag_to_set(USEDIN(s_a_instance, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
      IF (SIZEOF(pd_set) < 1)
  THEN
    RETURN(pdr_set);
  END_IF;
      REPEAT i := 1 TO HIINDEX(pd_set);
    pdr_set := pdr_set +
               (QUERY(pdr
                      <* USEDIN(pd_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
                        TYPEOF(pdr)));
  END_REPEAT;
      RETURN(pdr_set);
END_FUNCTION;

FUNCTION get_shape_aspects
 (c_def_instance : characterized_definition) : SET OF shape_aspect;
  LOCAL
  pd_set : SET OF product_definition_shape := [];
  pdr_set : SET OF shape_aspect := [];
    END_LOCAL;
      pd_set := bag_to_set(QUERY(pd
                                 <* USEDIN(c_def_instance, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
                                   TYPEOF(pd)));
      IF (SIZEOF(pd_set) < 1)
  THEN
    RETURN(pdr_set);
  END_IF;
      REPEAT i := 1 TO HIINDEX(pd_set);
    pdr_set := pdr_set +
               bag_to_set(USEDIN(pd_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
  END_REPEAT;
      RETURN(pdr_set);
END_FUNCTION;

FUNCTION get_tri_for_pd
 (def_instance : product_definition) : SET OF topological_representation_item;
  LOCAL
  pd1_set : SET OF property_definition := bag_to_set(USEDIN(def_instance, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
  pd2_set : SET OF property_definition := [];
  pdr_set : SET OF property_definition_representation := [];
  pds_set : SET OF product_definition_shape := [];
  r_set : SET OF representation := [];
  sa_set : SET OF shape_aspect := [];
  tri_set : SET OF topological_representation_item := [];
    END_LOCAL;
      IF (SIZEOF(pd1_set) < 1)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := LOINDEX(pd1_set) TO HIINDEX(pd1_set);
    pdr_set := pdr_set +
               bag_to_set(USEDIN(pd1_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'));
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd1_set[i])
    THEN
      pds_set := pds_set + pd1_set[i];
    END_IF;
  END_REPEAT;
      REPEAT i := LOINDEX(pds_set) TO HIINDEX(pds_set);
    sa_set := sa_set +
              bag_to_set(USEDIN(pds_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
  END_REPEAT;
      REPEAT i := LOINDEX(sa_set) TO HIINDEX(sa_set);
    pd2_set := pd2_set +
               bag_to_set(USEDIN(sa_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
  END_REPEAT;
      IF (SIZEOF(pd2_set) > 0)
  THEN
    BEGIN  
           REPEAT i := LOINDEX(pd2_set) TO HIINDEX(pd2_set);
             pdr_set := pdr_set +
                        bag_to_set(USEDIN(pd2_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'));
           END_REPEAT;
    END;
  END_IF;
      IF (SIZEOF(pdr_set) < 1)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := LOINDEX(pdr_set) TO HIINDEX(pdr_set);
    r_set := r_set + pdr_set[i]\property_definition_representation.used_representation;
  END_REPEAT;
      IF (SIZEOF(r_set) < 1)
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := LOINDEX(r_set) TO HIINDEX(r_set);
    REPEAT j := LOINDEX(r_set[i]\representation.items) TO HIINDEX(r_set[i]\representation.items);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOPOLOGICAL_REPRESENTATION_ITEM' IN
          TYPEOF(r_set[i]\representation.items[j]))
      THEN
        tri_set := tri_set + r_set[i]\representation.items[j];
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(tri_set);
END_FUNCTION;

FUNCTION get_tri_in_representations
 (members : SET OF representation) : SET OF topological_representation_item;
  LOCAL
  tri_set : SET OF topological_representation_item := [];
    END_LOCAL;
      IF SIZEOF(members) = 0
  THEN
    RETURN(?);
  END_IF;
      REPEAT i := LOINDEX(members) TO HIINDEX(members);
    REPEAT j := LOINDEX(members[i]\representation.items) TO HIINDEX(members[i]\representation.items);
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOPOLOGICAL_REPRESENTATION_ITEM' IN
         TYPEOF(members[i]\representation.items[j])
      THEN
        tri_set := tri_set + members[i]\representation.items[j];
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(tri_set);
END_FUNCTION;

FUNCTION has_values_space
 (expr : generic_expression) : BOOLEAN;
  LOCAL
  typenames : SET OF STRING := stripped_typeof(expr);
    END_LOCAL;
      IF 'EXPRESSION' IN typenames
  THEN
    RETURN(bool(('NUMERIC_EXPRESSION' IN typenames) OR ('STRING_EXPRESSION' IN typenames) OR
                ('BOOLEAN_EXPRESSION' IN typenames)));
  END_IF;
      IF 'MATHS_FUNCTION' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'FUNCTION_APPLICATION' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'MATHS_SPACE' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'MATHS_VARIABLE' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'DEPENDENT_VARIABLE_DEFINITION' IN typenames
  THEN
    RETURN(has_values_space(expr\unary_generic_expression.operand));
  END_IF;
      IF 'COMPLEX_NUMBER_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'LOGICAL_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'BINARY_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'MATHS_ENUM_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'REAL_TUPLE_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'INTEGER_TUPLE_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'ATOM_BASED_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'MATHS_TUPLE_LITERAL' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'PARTIAL_DERIVATIVE_EXPRESSION' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'DEFINITE_INTEGRAL_EXPRESSION' IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION increasing_values_in_list
 (values : LIST[2:?] OF REAL) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
  limit : INTEGER := SIZEOF(values);
    END_LOCAL;
      REPEAT i := 2 TO limit;
    IF values[i] <= values[i - 1]
    THEN
      result := FALSE;
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION inspected_product_definition
 (dqir : data_quality_inspection_result_representation) : BAG OF product_definition;
  LOCAL
  dqdr : BAG OF data_quality_definition_representation_relationship := [];
  pdqdr : BAG OF product_data_and_data_quality_relationship := [];
  pd : BAG OF product_definition := [];
    END_LOCAL;
      dqdr := USEDIN(dqir, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_DEFINITION_REPRESENTATION_RELATIONSHIP.USED_REPRESENTATION');
      REPEAT i := 1 TO SIZEOF(dqdr);
    pdqdr := USEDIN(dqdr[i].definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DATA_AND_DATA_QUALITY_RELATIONSHIP.DATA_QUALITY');
    REPEAT j := 1 TO SIZEOF(pdqdr);
      pd := pd + pdqdr[j].product_data;
    END_REPEAT;
  END_REPEAT;
      RETURN(pd);
END_FUNCTION;

FUNCTION invalidate_vrep_item
 (item : variational_representation_item) : BOOLEAN;
  LOCAL
  reps : SET [1 : ?] OF representation := using_representations(item);
  svri : SET [1 : ?] OF variational_representation_item;
  iar : instance_attribute_reference;
  i : INTEGER;
  n : INTEGER := HIINDEX(reps);
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item))
  THEN
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_ATTRIBUTE_REFERENCE' IN
       TYPEOF(item\generic_variable.interpretation\environment.semantics)
    THEN
      BEGIN  
             iar := item\generic_variable.interpretation\environment.semantics;
             IF (reps <> using_representations(iar\instance_attribute_reference.owning_instance))
             THEN
               RETURN(TRUE);
             END_IF;
      END;
    ELSE
      RETURN(TRUE);
    END_IF;
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item))
  THEN
    BEGIN  
           REPEAT i := 1 TO n;
             svri := QUERY(q
                           <* reps[i]\representation.items
                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FREE_FORM_CONSTRAINT' IN TYPEOF(q));
             IF SIZEOF(QUERY(r
                             <* svri
                             | item IN
                               (r\free_form_constraint.reference_elements +
                                r\free_form_constraint.constrained_elements))) =
                0
             THEN
               RETURN(TRUE);
             END_IF;
           END_REPEAT;
    END;
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FIXED_INSTANCE_ATTRIBUTE_SET' IN TYPEOF(item))
  THEN
    REPEAT i := 1 TO SIZEOF(item\fixed_instance_attribute_set.fixed_attributes);
      IF (reps <>
          using_representations(item\fixed_instance_attribute_set.fixed_attributes[i]\instance_attribute_reference.owning_instance))
      THEN
        RETURN(TRUE);
      END_IF;
    END_REPEAT;
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_CONSTRAINT' IN TYPEOF(item))
  THEN
    IF SIZEOF(QUERY(q
                    <* (item\explicit_constraint.reference_elements + item\explicit_constraint.constrained_elements)
                    | reps <> using_representations(q))) >
       0
    THEN
      RETURN(TRUE);
    END_IF;
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AUXILIARY_GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(item))
  THEN
    BEGIN  
           REPEAT i := 1 TO n;
             svri := QUERY(q
                           <* reps[i]\representation.items
                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_GEOMETRIC_CONSTRAINT' IN
                             TYPEOF(q));
             IF SIZEOF(QUERY(r <* svri | item IN r\explicit_geometric_constraint.reference_elements)) = 0
             THEN
               RETURN(TRUE);
             END_IF;
           END_REPEAT;
    END;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

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

FUNCTION is_int_expr
 (arg : numeric_expression) : BOOLEAN;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_LITERAL' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_LITERAL' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(is_int_expr(arg\unary_numeric_expression.operand));
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(is_int_expr(arg\unary_numeric_expression.operand));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg))
  THEN
    RETURN(FALSE);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg))
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)
  THEN
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_VALUE_FUNCTION' IN TYPEOF(arg)
    THEN
      RETURN(TRUE);
    ELSE
      RETURN(FALSE);
    END_IF;
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTEGER_DEFINED_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_DEFINED_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(FALSE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION is_sql_mappable
 (arg : expression) : BOOLEAN;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_NUMERIC_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQL_MAPPABLE_DEFINED_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg)
  THEN
    RETURN(is_sql_mappable(arg\unary_numeric_expression.operand));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg))
  THEN
    RETURN(FALSE);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POWER_EXPRESSION' IN TYPEOF(arg))
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_BOOLEAN_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NOT_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(is_sql_mappable(arg\unary_generic_expression.operand));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ODD_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.XOR_EXPRESSION' IN TYPEOF(arg))
  THEN
    RETURN(FALSE);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AND_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_EQUAL' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_GREATER' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_GREATER_EQUAL' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_LESS' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_LESS_EQUAL' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_NOT_EQUAL' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_DEFINED_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg))
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_STRING_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(TRUE);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INDEX_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBSTRING_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCAT_EXPRESSION' IN TYPEOF(arg)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 there is one or more representation using both the item
      -- and cntxt return true.
      IF SIZEOF(USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS') *
                cntxt.representations_in_context) >
         0
  THEN
    RETURN(TRUE);
  ELSE
    y := QUERY(z
               <* USEDIN(item, '')
               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 when all possible branches have been checked
      -- with no success.
      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 list_face_loops
 (f : face) : LIST[0:?] OF loop;
  LOCAL
  loops : LIST [0 : ?] OF loop := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(f.bounds);
    loops := loops + (f.bounds[i].bound);
  END_REPEAT;
      RETURN(loops);
END_FUNCTION;

FUNCTION list_of_topology_reversed
 (a_list : list_of_reversible_topology_item) : list_of_reversible_topology_item;
  LOCAL
  the_reverse : list_of_reversible_topology_item;
    END_LOCAL;
      the_reverse := [];
      REPEAT i := 1 TO SIZEOF(a_list);
    the_reverse := topology_reversed(a_list[i]) + the_reverse;
  END_REPEAT;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION list_selected_components
 (aggr : AGGREGATE OF LIST OF maths_value; k : positive_integer) : LIST OF maths_value;
  LOCAL
  result : LIST OF maths_value := [];
  j : INTEGER := 0;
    END_LOCAL;
      REPEAT i := LOINDEX(aggr) TO HIINDEX(aggr);
    IF k <= SIZEOF(aggr[i])
    THEN
      INSERT(result, aggr[i][k], j);
      j := j + 1;
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION list_to_array
 (lis : LIST[0:?] OF GENERIC : T; low : INTEGER; u : INTEGER) : ARRAY[low:u] OF GENERIC : T;
  LOCAL
  n : INTEGER;
  res : ARRAY [low : u] OF GENERIC:T;
    END_LOCAL;
      n := SIZEOF(lis);
      IF (n <> (u - low + 1))
  THEN
    RETURN(?);
  ELSE
    res := [lis[1]:n];
    REPEAT i := 2 TO n;
      res[low + i - 1] := lis[i];
    END_REPEAT;
    RETURN(res);
  END_IF;
END_FUNCTION;

FUNCTION list_to_set
 (l : LIST[0:?] OF GENERIC : T) : SET OF GENERIC : T;
  LOCAL
  s : SET OF GENERIC:T := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(l);
    s := s + l[i];
  END_REPEAT;
      RETURN(s);
END_FUNCTION;

FUNCTION make_array_of_array
 (lis : LIST[1:?] OF LIST[1:?] OF GENERIC : T; low1 : INTEGER; u1 : INTEGER; low2 : INTEGER; u2 : INTEGER) : ARRAY[low1:u1] OF ARRAY[low2:u2] OF GENERIC : T;
  LOCAL
  res : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF GENERIC:T;
    END_LOCAL;
      (*Check input dimensions for consistency*)
  
      IF (u1 - low1 + 1) <> SIZEOF(lis)
  THEN
    RETURN(?);
  END_IF;
      IF (u2 - low2 + 1) <> SIZEOF(lis[1])
  THEN
    RETURN(?);
  END_IF;
      (*Initialise res with values from lis[1]*)
  
      res := [list_to_array(lis[1], low2, u2):(u1 - low1 + 1)];
      REPEAT i := 2 TO HIINDEX(lis);
    IF (u2 - low2 + 1) <> SIZEOF(lis[i])
    THEN
      RETURN(?);
    END_IF;
    res[low1 + i - 1] := list_to_array(lis[i], low2, u2);
  END_REPEAT;
      RETURN(res);
END_FUNCTION;

FUNCTION make_array_of_array_of_array
 (lis : LIST[1:?] OF LIST[1:?] OF LIST[1:?] OF GENERIC : T; low1 : INTEGER; u1 : INTEGER; low2 : INTEGER; u2 : INTEGER; low3 : INTEGER; u3 : INTEGER) : ARRAY[low1:u1] OF ARRAY[low2:u2] OF ARRAY[low3:u3] OF GENERIC : T;
  LOCAL
  res : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF ARRAY [low3 : u3] OF GENERIC:T;
    END_LOCAL;
      (*Check input dimensions for consistency*)
  
      IF (u1 - low1 + 1) <> SIZEOF(lis)
  THEN
    RETURN(?);
  END_IF;
      IF (u2 - low2 + 1) <> SIZEOF(lis[1])
  THEN
    RETURN(?);
  END_IF;
      (*Initialise res with values from lis[1]*)
  
      res := [make_array_of_array(lis[1], low2, u2, low3, u3):(u1 - low1 + 1)];
      REPEAT i := 2 TO HIINDEX(lis);
    IF (u2 - low2 + 1) <> SIZEOF(lis[i])
    THEN
      RETURN(?);
    END_IF;
    res[low1 + i - 1] := make_array_of_array(lis[i], low2, u2, low3, u3);
  END_REPEAT;
      RETURN(res);
END_FUNCTION;

FUNCTION make_atom_based_literal
 (lit_value : atom_based_value) : atom_based_literal;
    RETURN(atom_based_literal(lit_value) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_binary_literal
 (lit_value : BINARY) : binary_literal;
    RETURN(binary_literal(lit_value) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_boolean_literal
 (lit_value : BOOLEAN) : boolean_literal;
    RETURN(boolean_literal(lit_value) || simple_boolean_expression() || boolean_expression() ||
                            expression() || generic_expression() || simple_generic_expression() ||
                            generic_literal());
END_FUNCTION;

FUNCTION make_cartesian_complex_number_region
 (real_constraint : real_interval; imag_constraint : real_interval) : cartesian_complex_number_region;
    RETURN(cartesian_complex_number_region(real_constraint, imag_constraint) || maths_space() ||
                            generic_expression() || generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_complex_number_literal
 (rpart : REAL; ipart : REAL) : complex_number_literal;
    RETURN(complex_number_literal(rpart, ipart) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_elementary_function
 (func_id : elementary_function_enumerators) : elementary_function;
    RETURN(elementary_function(func_id) || maths_function() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_elementary_space
 (space_id : elementary_space_enumerators) : elementary_space;
    RETURN(elementary_space(space_id) || maths_space() || generic_expression() || generic_literal() ||
                            simple_generic_expression());
END_FUNCTION;

FUNCTION make_extended_tuple_space
 (base : tuple_space; extender : maths_space) : extended_tuple_space;
    RETURN(extended_tuple_space(base, extender) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_finite_integer_interval
 (min : INTEGER; max : INTEGER) : finite_integer_interval;
    RETURN(finite_integer_interval(min, max) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_finite_real_interval
 (min : REAL; minclo : open_closed; max : REAL; maxclo : open_closed) : finite_real_interval;
    RETURN(finite_real_interval(min, minclo, max, maxclo) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_finite_space
 (members : SET OF maths_value) : finite_space;
    RETURN(finite_space(members) || maths_space() || generic_expression() || generic_literal() ||
                            simple_generic_expression());
END_FUNCTION;

FUNCTION make_function_application
 (afunction : maths_function_select; arguments : LIST[1:?] OF maths_value) : function_application;
    RETURN(function_application(afunction, arguments) ||
                            multiple_arity_generic_expression(convert_to_maths_function(afunction) +
                                                              convert_to_operands(arguments)) ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_function_space
 (domain_constraint : space_constraint_type; domain_argument : maths_space; range_constraint : space_constraint_type; range_argument : maths_space) : function_space;
    RETURN(function_space(domain_constraint, domain_argument, range_constraint, range_argument) ||
                            maths_space() || generic_expression() || generic_literal() ||
                            simple_generic_expression());
END_FUNCTION;

FUNCTION make_int_literal
 (lit_value : INTEGER) : int_literal;
    RETURN(int_literal() || literal_number(lit_value) || simple_numeric_expression() ||
                            numeric_expression() || expression() || generic_expression() ||
                            simple_generic_expression() || generic_literal());
END_FUNCTION;

FUNCTION make_listed_product_space
 (factors : LIST OF maths_space) : listed_product_space;
    RETURN(listed_product_space(factors) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_logical_literal
 (lit_value : LOGICAL) : logical_literal;
    RETURN(logical_literal(lit_value) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_maths_enum_literal
 (lit_value : maths_enum_atom) : maths_enum_literal;
    RETURN(maths_enum_literal(lit_value) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_maths_tuple_literal
 (lit_value : LIST OF maths_value) : maths_tuple_literal;
    RETURN(maths_tuple_literal(lit_value) || generic_literal() || simple_generic_expression() ||
                            generic_expression());
END_FUNCTION;

FUNCTION make_numeric_set
 (start : maths_number; delta : maths_number; incs : positive_integer) : SET[2:?] OF maths_number;
  LOCAL
  i : INTEGER;
  numeric_set : SET [2 : ?] OF maths_number := [start,(start + delta)];
    END_LOCAL;
      IF incs > 1
  THEN
    REPEAT i := 2 TO incs;
      numeric_set := numeric_set + (start + (i * delta));
    END_REPEAT;
  END_IF;
      RETURN(numeric_set);
END_FUNCTION;

FUNCTION make_parallel_composed_function
 (srcdom : maths_space_or_function; prepfuncs : LIST[2:?] OF maths_function; finfunc : maths_function_select) : parallel_composed_function;
    RETURN(parallel_composed_function(srcdom, prepfuncs, finfunc) || maths_function() ||
                            generic_expression() ||
                            multiple_arity_generic_expression(convert_to_operands_prcmfn(srcdom, prepfuncs, finfunc)));
END_FUNCTION;

FUNCTION make_polar_complex_number_region
 (centre : complex_number_literal; dis_constraint : real_interval; dir_constraint : finite_real_interval) : polar_complex_number_region;
    RETURN(polar_complex_number_region(centre, dis_constraint, dir_constraint) || maths_space() ||
                            generic_expression() || generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_real_interval_from_min
 (min : REAL; minclo : open_closed) : real_interval_from_min;
    RETURN(real_interval_from_min(min, minclo) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_real_interval_to_max
 (max : REAL; maxclo : open_closed) : real_interval_to_max;
    RETURN(real_interval_to_max(max, maxclo) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION make_real_literal
 (lit_value : REAL) : real_literal;
    RETURN(real_literal() || literal_number(lit_value) || simple_numeric_expression() ||
                            numeric_expression() || expression() || generic_expression() ||
                            simple_generic_expression() || generic_literal());
END_FUNCTION;

FUNCTION make_string_literal
 (lit_value : STRING) : string_literal;
    RETURN(string_literal(lit_value) || simple_string_expression() || string_expression() ||
                            expression() || generic_expression() || simple_generic_expression() ||
                            generic_literal());
END_FUNCTION;

FUNCTION make_uniform_product_space
 (base : maths_space; exponent : positive_integer) : uniform_product_space;
    RETURN(uniform_product_space(base, exponent) || maths_space() || generic_expression() ||
                            generic_literal() || simple_generic_expression());
END_FUNCTION;

FUNCTION max_exists
 (spc : maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      RETURN(bool(((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
                  ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types) OR
                  ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types) OR
                  ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)));
END_FUNCTION;

FUNCTION max_included
 (spc : maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
         ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types)
  THEN
    RETURN(TRUE);
  END_IF;
      IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
  THEN
    RETURN(bool(spc\finite_real_interval.max_closure = closed));
  END_IF;
      IF ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)
  THEN
    RETURN(bool(spc\real_interval_to_max.max_closure = closed));
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION md_pmi_name_and_type_correlation
 (input : annotation_placeholder_occurrence) : BOOLEAN;
  LOCAL
  pmi_role : STRING := input\annotation_placeholder_occurrence.item\representation_item.name;
  dmiawps : SET OF draughting_model_item_association_with_placeholder := input\annotation_placeholder_occurrence.the_draughting_model_item_association_with_placeholders;
  v : SET OF STRING := [];
    END_LOCAL;
      IF (SIZEOF(dmiawps) = 1)
  THEN
    v := TYPEOF(dmiawps[1]\draughting_model_item_association.definition);
  ELSE
    RETURN(FALSE);
  END_IF;
      IF NOT (pmi_role IN
              ['angular dimension',
               'angularity',
               'circular runout',
               'circularity',
               'coaxiality',
               'concentricity',
               'curve dimension',
               'cylindricity',
               'datum',
               'datum target',
               'diameter dimension',
               'flatness',
               'general dimension',
               'general note',
               'general tolerance',
               'label',
               'linear dimension',
               'note',
               'ordinate dimension',
               'parallelism',
               'perpendicularity',
               'position',
               'profile of line',
               'profile of surface',
               'radial dimension',
               'roundness',
               'runout',
               'straightness',
               'surface roughness',
               'symmetry',
               'total runout'])
  THEN
    RETURN(?);
  END_IF;
      CASE pmi_role OF
    'angular dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_LOCATION' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'angularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULARITY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'circular runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'circularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'coaxiality' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COAXIALITY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'concentricity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCENTRICITY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'curve dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'cylindricity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CYLINDRICITY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'datum' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'datum target' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'diameter dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'flatness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FLATNESS_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'general dimension' : IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE',
                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION'] *
                                     v) =
                              1)
    THEN
      RETURN(TRUE);
    END_IF;
    'general note' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'general tolerance' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'label' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'linear dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'note' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'ordinate dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'parallelism' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARALLELISM_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'perpendicularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERPENDICULARITY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'position' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'profile of line' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'profile of surface' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'radial dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'roundness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'straightness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRAIGHTNESS_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'surface roughness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'symmetry' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMMETRY_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    'total runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE' IN v
    THEN
      RETURN(TRUE);
    END_IF;
    OTHERWISE: RETURN(FALSE);
  END_CASE;
END_FUNCTION;

FUNCTION md_valid_content_in_geometric_set_for_external_image
 (input : geometric_set) : BOOLEAN;
  LOCAL
  pass : BOOLEAN := TRUE;
  boxes : BAG OF planar_box := [];
  texts : BAG OF annotation_text := [];
  placements : BAG OF placement := [];
  points : BAG OF point := [];
    END_LOCAL;
      -- Iterate over the input, ensuring the points that are in the set are the subtypes we want.
      REPEAT i := LOINDEX(input\geometric_set.elements) TO HIINDEX(input\geometric_set.elements);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(input\geometric_set.elements[i])) AND
       NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
                   TYPEOF(input\geometric_set.elements[i])) =
            1)
    THEN
      pass := FALSE;
    ELSE
      points := points + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      boxes := boxes + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      texts := texts + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      placements := placements + input\geometric_set.elements[i];
    END_IF;
  END_REPEAT;
      IF SIZEOF(boxes) <> 1
  THEN
    pass := FALSE;
  END_IF;
      IF SIZEOF(texts) > 0
  THEN
    pass := FALSE;
  END_IF;
      IF SIZEOF(placements) <> 1
  THEN
    pass := FALSE;
  END_IF;
      RETURN(pass);
END_FUNCTION;

FUNCTION md_valid_content_in_geometric_set_for_placeholder
 (input : geometric_set) : BOOLEAN;
  LOCAL
  pass : BOOLEAN := TRUE;
  boxes : BAG OF planar_box := [];
  texts : BAG OF annotation_text := [];
  placements : BAG OF placement := [];
  points : BAG OF point := [];
    END_LOCAL;
      -- Iterate over the input, ensuring the points that are in the set are the subtypes we want.
      REPEAT i := LOINDEX(input\geometric_set.elements) TO HIINDEX(input\geometric_set.elements);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(input\geometric_set.elements[i])) AND
       NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
                   TYPEOF(input\geometric_set.elements[i])) =
            1)
    THEN
      pass := FALSE;
    ELSE
      points := points + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      boxes := boxes + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      texts := texts + input\geometric_set.elements[i];
    END_IF;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(input\geometric_set.elements[i])
    THEN
      placements := placements + input\geometric_set.elements[i];
    END_IF;
  END_REPEAT;
      IF SIZEOF(boxes) > 1
  THEN
    pass := FALSE;
  END_IF;
      IF SIZEOF(texts) > 1
  THEN
    pass := FALSE;
  END_IF;
      IF SIZEOF(placements) <> 1
  THEN
    pass := FALSE;
  END_IF;
      RETURN(pass);
END_FUNCTION;

FUNCTION member_of
 (val : GENERIC : G; spc : maths_space) : LOGICAL;
FUNCTION fedex(val : AGGREGATE OF GENERIC:X;
                                i : INTEGER) : GENERIC:X;
    RETURN(val[i]);
  END_FUNCTION;
    LOCAL
  v : maths_value := simplify_maths_value(convert_to_maths_value(val));
  vtypes : SET OF STRING := stripped_typeof(v);
  s : maths_space := simplify_maths_space(spc);
  stypes : SET OF STRING := stripped_typeof(s);
  tmp_int : INTEGER;
  tmp_real : REAL;
  tmp_cmplx : complex_number_literal;
  lgcl : LOGICAL;
  cum : LOGICAL;
  vspc : maths_space;
  sspc : maths_space;
  smem : SET OF maths_value;
  factors : LIST OF maths_space;
    END_LOCAL;
      IF NOT EXISTS(s)
  THEN
    RETURN(FALSE);
  END_IF;
      IF NOT EXISTS(v)
  THEN
    RETURN(s = the_generics);
  END_IF;
      IF ('GENERIC_EXPRESSION' IN vtypes) AND
         NOT ('MATHS_SPACE' IN vtypes) AND NOT ('MATHS_FUNCTION' IN vtypes) AND NOT ('COMPLEX_NUMBER_LITERAL' IN vtypes)
  THEN
    IF has_values_space(v)
    THEN
      vspc := values_space_of(v);
      IF subspace_of(vspc, s)
      THEN
        RETURN(TRUE);
      END_IF;
      IF NOT compatible_spaces(vspc, s)
      THEN
        RETURN(FALSE);
      END_IF;
      RETURN(UNKNOWN);
    END_IF;
    RETURN(UNKNOWN);
  END_IF;
      IF 'ELEMENTARY_SPACE' IN stypes
  THEN
    CASE s\elementary_space.space_id OF
      es_numbers : RETURN(('NUMBER' IN vtypes) OR ('COMPLEX_NUMBER_LITERAL' IN vtypes));
      es_complex_numbers : RETURN('COMPLEX_NUMBER_LITERAL' IN vtypes);
      es_reals : RETURN(('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes));
      es_integers : RETURN('INTEGER' IN vtypes);
      es_logicals : RETURN('LOGICAL' IN vtypes);
      es_booleans : RETURN('BOOLEAN' IN vtypes);
      es_strings : RETURN('STRING' IN vtypes);
      es_binarys : RETURN('BINARY' IN vtypes);
      es_maths_spaces : RETURN('MATHS_SPACE' IN vtypes);
      es_maths_functions : RETURN('MATHS_FUNCTION' IN vtypes);
      es_generics : RETURN(TRUE);
    END_CASE;
  END_IF;
      IF 'FINITE_INTEGER_INTERVAL' IN stypes
  THEN
    IF 'INTEGER' IN vtypes
    THEN
      tmp_int := v;
      RETURN({s\finite_integer_interval.min <= tmp_int <= s\finite_integer_interval.max});
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'INTEGER_INTERVAL_FROM_MIN' IN stypes
  THEN
    IF 'INTEGER' IN vtypes
    THEN
      tmp_int := v;
      RETURN(s\integer_interval_from_min.min <= tmp_int);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'INTEGER_INTERVAL_TO_MAX' IN stypes
  THEN
    IF 'INTEGER' IN vtypes
    THEN
      tmp_int := v;
      RETURN(tmp_int <= s\integer_interval_to_max.max);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FINITE_REAL_INTERVAL' IN stypes
  THEN
    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
    THEN
      tmp_real := v;
      IF s\finite_real_interval.min_closure = closed
      THEN
        IF s\finite_real_interval.max_closure = closed
        THEN
          RETURN({s\finite_real_interval.min <= tmp_real <= s\finite_real_interval.max});
        ELSE
          RETURN({s\finite_real_interval.min <= tmp_real < s\finite_real_interval.max});
        END_IF;
      ELSE
        IF s\finite_real_interval.max_closure = closed
        THEN
          RETURN({s\finite_real_interval.min < tmp_real <= s\finite_real_interval.max});
        ELSE
          RETURN({s\finite_real_interval.min < tmp_real < s\finite_real_interval.max});
        END_IF;
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'REAL_INTERVAL_FROM_MIN' IN stypes
  THEN
    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
    THEN
      tmp_real := v;
      IF s\real_interval_from_min.min_closure = closed
      THEN
        RETURN(s\real_interval_from_min.min <= tmp_real);
      ELSE
        RETURN(s\real_interval_from_min.min < tmp_real);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'REAL_INTERVAL_TO_MAX' IN stypes
  THEN
    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
    THEN
      tmp_real := v;
      IF s\real_interval_to_max.max_closure = closed
      THEN
        RETURN(tmp_real <= s\real_interval_to_max.max);
      ELSE
        RETURN(tmp_real < s\real_interval_to_max.max);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN stypes
  THEN
    IF 'COMPLEX_NUMBER_LITERAL' IN vtypes
    THEN
      RETURN(member_of(v\complex_number_literal.real_part, s\cartesian_complex_number_region.real_constraint) AND
             member_of(v\complex_number_literal.imag_part, s\cartesian_complex_number_region.imag_constraint));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'POLAR_COMPLEX_NUMBER_REGION' IN stypes
  THEN
    IF 'COMPLEX_NUMBER_LITERAL' IN vtypes
    THEN
      tmp_cmplx := v;
      tmp_cmplx.real_part := tmp_cmplx.real_part - s\polar_complex_number_region.centre.real_part;
      tmp_cmplx.imag_part := tmp_cmplx.imag_part - s\polar_complex_number_region.centre.imag_part;
      tmp_real := SQRT(tmp_cmplx.real_part ** 2 + tmp_cmplx.imag_part ** 2);
      IF NOT member_of(tmp_real, s\polar_complex_number_region.distance_constraint)
      THEN
        RETURN(FALSE);
      END_IF;
      IF tmp_real = 0.0
      THEN
        RETURN(TRUE);
      END_IF;
      tmp_real := atan2(tmp_cmplx.imag_part, tmp_cmplx.real_part);
      RETURN(member_of(tmp_real, s\polar_complex_number_region.direction_constraint) OR
             member_of(tmp_real + 2.0 * PI, s\polar_complex_number_region.direction_constraint));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FINITE_SPACE' IN stypes
  THEN
    smem := s\finite_space.members;
    cum := FALSE;
    REPEAT i := 1 TO SIZEOF(smem);
      cum := cum OR equal_maths_values(v, smem[i]);
      IF cum = TRUE
      THEN
        RETURN(TRUE);
      END_IF;
    END_REPEAT;
    RETURN(cum);
  END_IF;
      IF 'UNIFORM_PRODUCT_SPACE' IN stypes
  THEN
    IF 'LIST' IN vtypes
    THEN
      IF SIZEOF(v) = s\uniform_product_space.exponent
      THEN
        sspc := s\uniform_product_space.base;
        cum := TRUE;
        REPEAT i := 1 TO SIZEOF(v);
          cum := cum AND member_of(v[i], sspc);
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(cum);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN stypes
  THEN
    IF 'LIST' IN vtypes
    THEN
      factors := s\listed_product_space.factors;
      IF SIZEOF(v) = SIZEOF(factors)
      THEN
        cum := TRUE;
        REPEAT i := 1 TO SIZEOF(v);
          cum := cum AND member_of(v[i], factors[i]);
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(cum);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN stypes
  THEN
    IF 'LIST' IN vtypes
    THEN
      sspc := s\extended_tuple_space.base;
      tmp_int := space_dimension(sspc);
      IF SIZEOF(v) >= tmp_int
      THEN
        cum := TRUE;
        REPEAT i := 1 TO tmp_int;
          cum := cum AND member_of(v[i], factor_space(sspc, i));
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        sspc := s\extended_tuple_space.extender;
        REPEAT i := tmp_int + 1 TO SIZEOF(v);
          cum := cum AND member_of(v[i], sspc);
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(cum);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FUNCTION_SPACE' IN stypes
  THEN
    IF 'MATHS_FUNCTION' IN vtypes
    THEN
      vspc := v\maths_function.domain;
      sspc := s\function_space.domain_argument;
      CASE s\function_space.domain_constraint OF
        sc_equal : cum := equal_maths_spaces(vspc, sspc);
        sc_subspace : cum := subspace_of(vspc, sspc);
        sc_member : cum := member_of(vspc, sspc);
      END_CASE;
      IF cum = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
      vspc := v\maths_function.range;
      sspc := s\function_space.range_argument;
      CASE s\function_space.range_constraint OF
        sc_equal : cum := cum AND equal_maths_spaces(vspc, sspc);
        sc_subspace : cum := cum AND subspace_of(vspc, sspc);
        sc_member : cum := cum AND member_of(vspc, sspc);
      END_CASE;
      RETURN(cum);
    END_IF;
    RETURN(FALSE);
  END_IF;
      -- Should be unreachable
      RETURN(UNKNOWN);
END_FUNCTION;

FUNCTION min_exists
 (spc : maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      RETURN(bool(((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
                  ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types) OR
                  ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types) OR
                  ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)));
END_FUNCTION;

FUNCTION min_included
 (spc : maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
         ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types)
  THEN
    RETURN(TRUE);
  END_IF;
      IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
  THEN
    RETURN(bool(spc\finite_real_interval.min_closure = closed));
  END_IF;
      IF ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)
  THEN
    RETURN(bool(spc\real_interval_from_min.min_closure = closed));
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION mixed_loop_type_set
 (l : SET[0:?] OF loop) : LOGICAL;
  LOCAL
  poly_loop_type : LOGICAL;
    END_LOCAL;
      IF (SIZEOF(l) <= 1)
  THEN
    RETURN(FALSE);
  END_IF;
      poly_loop_type := ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLY_LOOP' IN TYPEOF(l[1]));
      REPEAT i := 2 TO SIZEOF(l);
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLY_LOOP' IN TYPEOF(l[i])) <> poly_loop_type)
    THEN
      RETURN(TRUE);
    END_IF;
  END_REPEAT;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION msb_shells
 (brep : manifold_solid_brep) : SET[1:?] OF closed_shell;
  LOCAL
  return_set : SET [1 : ?] OF closed_shell := [brep.outer];
    END_LOCAL;
      IF SIZEOF(QUERY(msbtype <* TYPEOF(brep) | msbtype LIKE '*BREP_WITH_VOIDS')) >= 1
  THEN
    return_set := return_set + brep\brep_with_voids.voids;
  END_IF;
      RETURN(return_set);
END_FUNCTION;

FUNCTION msf_curve_check
 (cv : representation_item) : BOOLEAN;
    (*This function varifies the validity of a curve in the context of a
                       manifold surface model. Representation_items are
                       valid input, however, they are supposed to be curves; otherwise
                       this function will return false.
                       *)
  
      (*complex subtypes of curve that are both bounded_curve and
        oneof conic, curve_replica, line, or offset_curve_3d are not
        valid
        *)
  
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
                TYPEOF(cv)) >
         1
  THEN
    RETURN(FALSE);
  END_IF;
      (*b_spline_curves shall not self-intersect
        *)
  
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
          (cv\b_spline_curve.self_intersect = FALSE) OR
          (cv\b_spline_curve.self_intersect = UNKNOWN))
  THEN
    RETURN(TRUE);
  ELSE
    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
              TYPEOF(cv)) =
       1
    THEN
      RETURN(TRUE);
    ELSE
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
      THEN
        RETURN(msf_curve_check(cv\curve_replica.parent_curve));
      ELSE
        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
            ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d.self_intersect = UNKNOWN)) AND
            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
                  TYPEOF(cv\offset_curve_3d.basis_curve))))
        THEN
          RETURN(msf_curve_check(cv\offset_curve_3d.basis_curve));
        ELSE
          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
          THEN
            RETURN((msf_curve_check(cv\pcurve.reference_to_curve\representation.items[1])) AND
                   (msf_surface_check(cv\pcurve.basis_surface)));
          ELSE
            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
            THEN
              IF msf_curve_check(cv\surface_curve.curve_3d)
              THEN
                REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
                  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
                     TYPEOF(cv\surface_curve.associated_geometry[i])
                  THEN
                    IF NOT msf_surface_check(cv\surface_curve.associated_geometry[i])
                    THEN
                      RETURN(FALSE);
                    END_IF;
                  ELSE
                    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
                       TYPEOF(cv\surface_curve.associated_geometry[i])
                    THEN
                      IF NOT msf_curve_check(cv\surface_curve.associated_geometry[i])
                      THEN
                        RETURN(FALSE);
                      END_IF;
                    END_IF;
                  END_IF;
                END_REPEAT;
                RETURN(TRUE);
              END_IF;
            ELSE
              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
              THEN
                IF (SIZEOF(cv\polyline.points) >= 3)
                THEN
                  RETURN(TRUE);
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      (*FALSE is returned if the input parameter cv is not a valid curve.
        *)
  
      RETURN(FALSE);
END_FUNCTION;

FUNCTION msf_surface_check
 (surf : surface) : BOOLEAN;
    (*This function varifies the validity of a surface in the
                       context of a manifold surface model.
                       *)
  
      (*elementary_surfaces are valid surface types
        *)
  
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf)
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(surf)
    THEN
      RETURN(msf_curve_check(surf\swept_surface.swept_curve));
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(surf)) AND
          (surf\offset_surface.self_intersect = FALSE) OR
          (surf\offset_surface.self_intersect = UNKNOWN))
      THEN
        RETURN(msf_surface_check(surf\offset_surface.basis_surface));
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf)
        THEN
          RETURN(msf_surface_check(surf\surface_replica.parent_surface));
        ELSE
          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND
              (surf\b_spline_surface.self_intersect = FALSE) OR
              (surf\b_spline_surface.self_intersect = UNKNOWN))
          THEN
            RETURN(TRUE);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION nmsf_curve_check
 (cv : representation_item) : BOOLEAN;
    (*This function varifies the validity of a curve in the context of a
                       non-manifold surface model. Representation_items are
                       valid input, however, they are supposed to be curves; otherwise
                       this function will return false.
                       *)
  
      (*complex subtypes of curve that are both bounded_curve and
        oneof conic, curve_replica, line, or offset_curve_3d are not
        valid
        *)
  
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
                TYPEOF(cv)) >
         1
  THEN
    RETURN(FALSE);
  ELSE
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
        (cv\b_spline_curve.self_intersect = FALSE) OR
        (cv\b_spline_curve.self_intersect = UNKNOWN))
    THEN
      RETURN(TRUE);
    ELSE
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
                TYPEOF(cv)) =
         1
      THEN
        RETURN(TRUE);
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
        THEN
          RETURN(nmsf_curve_check(cv\curve_replica.parent_curve));
        ELSE
          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
              ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d.self_intersect = UNKNOWN)) AND
              (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
                    TYPEOF(cv\offset_curve_3d.basis_curve))))
          THEN
            RETURN(nmsf_curve_check(cv\offset_curve_3d.basis_curve));
          ELSE
            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
            THEN
              RETURN((nmsf_curve_check(cv\pcurve.reference_to_curve\representation.items[1])) AND
                     (nmsf_surface_check(cv\pcurve.basis_surface)));
            ELSE
              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
              THEN
                IF nmsf_curve_check(cv\surface_curve.curve_3d)
                THEN
                  REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
                    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
                       TYPEOF(cv\surface_curve.associated_geometry[i])
                    THEN
                      IF NOT nmsf_surface_check(cv\surface_curve.associated_geometry[i])
                      THEN
                        RETURN(FALSE);
                      END_IF;
                    ELSE
                      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
                         TYPEOF(cv\surface_curve.associated_geometry[i])
                      THEN
                        IF NOT nmsf_curve_check(cv\surface_curve.associated_geometry[i])
                        THEN
                          RETURN(FALSE);
                        END_IF;
                      END_IF;
                    END_IF;
                  END_REPEAT;
                  RETURN(TRUE);
                END_IF;
              ELSE
                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
                THEN
                  IF (SIZEOF(cv\polyline.points) >= 3)
                  THEN
                    RETURN(TRUE);
                  END_IF;
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      (*FALSE is returned if the input parameter cv is not a valid curve.
        *)
  
      RETURN(FALSE);
END_FUNCTION;

FUNCTION nmsf_surface_check
 (surf : surface) : BOOLEAN;
    (*This function varifies the validity of a surface in the
                       context of a non-manifold surface model.
                       *)
  
      (*elementary_surfaces are valid surface types
        *)
  
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf)
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(surf)
    THEN
      RETURN(nmsf_curve_check(surf\swept_surface.swept_curve));
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(surf)) AND
          (surf\offset_surface.self_intersect = FALSE) OR
          (surf\offset_surface.self_intersect = UNKNOWN))
      THEN
        RETURN(nmsf_surface_check(surf\offset_surface.basis_surface));
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf)
        THEN
          RETURN(nmsf_surface_check(surf\surface_replica.parent_surface));
        ELSE
          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND
              (surf\b_spline_surface.self_intersect = FALSE) OR
              (surf\b_spline_surface.self_intersect = UNKNOWN))
          THEN
            RETURN(TRUE);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION no_cyclic_domain_reference
 (ref : maths_space_or_function; used : SET OF maths_function) : BOOLEAN;
  LOCAL
  typenames : SET OF STRING := TYPEOF(ref);
  func : maths_function;
    END_LOCAL;
      IF (NOT EXISTS(ref)) OR (NOT EXISTS(used))
  THEN
    RETURN(FALSE);
  END_IF;
      IF (schema_prefix + 'MATHS_SPACE') IN typenames
  THEN
    RETURN(TRUE);
  END_IF;
      func := ref;
      IF func IN used
  THEN
    RETURN(FALSE);
  END_IF;
      IF (schema_prefix + 'CONSTANT_FUNCTION') IN typenames
  THEN
    RETURN(no_cyclic_domain_reference(func\constant_function.source_of_domain, used + [func]));
  END_IF;
      IF (schema_prefix + 'SELECTOR_FUNCTION') IN typenames
  THEN
    RETURN(no_cyclic_domain_reference(func\selector_function.source_of_domain, used + [func]));
  END_IF;
      IF (schema_prefix + 'PARALLEL_COMPOSED_FUNCTION') IN typenames
  THEN
    RETURN(no_cyclic_domain_reference(func\parallel_composed_function.source_of_domain, used + [func]));
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION no_cyclic_space_reference
 (spc : maths_space; refs : SET OF maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING;
  refs_plus : SET OF maths_space;
    END_LOCAL;
      IF (spc IN refs)
  THEN
    RETURN(FALSE);
  END_IF;
      types := TYPEOF(spc);
      refs_plus := refs + spc;
      IF (schema_prefix + 'FINITE_SPACE') IN types
  THEN
    RETURN(bool(SIZEOF(QUERY(sp
                             <* QUERY(mem
                                         <* spc\finite_space.members
                                         | (schema_prefix + 'MATHS_SPACE') IN TYPEOF(mem))
                             | NOT no_cyclic_space_reference(sp, refs_plus))) =
                0));
  END_IF;
      IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN types
  THEN
    RETURN(no_cyclic_space_reference(spc\uniform_product_space.base, refs_plus));
  END_IF;
      IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN types
  THEN
    RETURN(bool(SIZEOF(QUERY(fac
                             <* spc\listed_product_space.factors
                             | NOT no_cyclic_space_reference(fac, refs_plus))) =
                0));
  END_IF;
      IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
  THEN
    RETURN(no_cyclic_space_reference(spc\extended_tuple_space.base, refs_plus) AND
           no_cyclic_space_reference(spc\extended_tuple_space.extender, refs_plus));
  END_IF;
      -- spc contains no references to other spaces
      RETURN(TRUE);
END_FUNCTION;

FUNCTION nondecreasing
 (lr : LIST OF REAL) : BOOLEAN;
    IF NOT EXISTS(lr)
  THEN
    RETURN(FALSE);
  END_IF;
      REPEAT j := 2 TO SIZEOF(lr);
    IF lr[j] < lr[j - 1]
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION normalise
 (arg : vector_or_direction) : vector_or_direction;
  LOCAL
  ndim : INTEGER;
  v : direction := dummy_gri || direction([1.0,0.0,0.0]);
  result : vector_or_direction;
  vec : vector := dummy_gri || vector(v, 1.0);
  mag : REAL;
    END_LOCAL;
      IF NOT EXISTS(arg)
  THEN
    result := ?;
  ELSE
    ndim := arg.dim;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg)
    THEN
      BEGIN  
             v := dummy_gri || direction(arg\vector.orientation.direction_ratios);
             IF arg\vector.magnitude = 0.0
             THEN
               RETURN(?);
             ELSE
               vec := dummy_gri || vector(v, 1.0);
             END_IF;
      END;
    ELSE
      v := dummy_gri || direction(arg.direction_ratios);
    END_IF;
    mag := 0.0;
    REPEAT i := 1 TO ndim;
      mag := mag + v.direction_ratios[i] * v.direction_ratios[i];
    END_REPEAT;
    IF mag > 0.0
    THEN
      mag := SQRT(mag);
      REPEAT i := 1 TO ndim;
        v.direction_ratios[i] := v.direction_ratios[i] / mag;
      END_REPEAT;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 number_superspace_of
 (spc : maths_space) : elementary_space;
    IF subspace_of_es(spc, es_integers)
  THEN
    RETURN(the_integers);
  END_IF;
      IF subspace_of_es(spc, es_reals)
  THEN
    RETURN(the_reals);
  END_IF;
      IF subspace_of_es(spc, es_complex_numbers)
  THEN
    RETURN(the_complex_numbers);
  END_IF;
      IF subspace_of_es(spc, es_numbers)
  THEN
    RETURN(the_numbers);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION number_tuple_subspace_check
 (spc : maths_space) : LOGICAL;
  LOCAL
  types : SET OF STRING := stripped_typeof(spc);
  factors : LIST OF maths_space;
  cum : LOGICAL := TRUE;
    END_LOCAL;
      IF 'UNIFORM_PRODUCT_SPACE' IN types
  THEN
    RETURN(subspace_of_es(spc\uniform_product_space.base, es_numbers));
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN types
  THEN
    factors := spc\listed_product_space.factors;
    REPEAT i := 1 TO SIZEOF(factors);
      cum := cum AND subspace_of_es(factors[i], es_numbers);
    END_REPEAT;
    RETURN(cum);
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN types
  THEN
    cum := subspace_of_es(spc\extended_tuple_space.extender, es_numbers);
    cum := cum AND number_tuple_subspace_check(spc\extended_tuple_space.base);
    RETURN(cum);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION one_tuples_of
 (spc : maths_space) : tuple_space;
    RETURN(make_uniform_product_space(spc, 1));
END_FUNCTION;

FUNCTION open_path_based_inner_boundary
 (input : SET OF primitive_2d) : BOOLEAN;
  LOCAL
  pass : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(input);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_AREA_WITH_PARAMETERS' IN TYPEOF(input[i])) AND
       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN
         TYPEOF(input[i]\mapped_item.mapping_source\representation_map.mapping_origin)) OR
        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN
          TYPEOF(input[i]\mapped_item.mapping_source\representation_map.mapping_origin)) AND
         (input[i]\mapped_item.mapping_source\representation_map.mapping_origin\composite_curve.closed_curve = TRUE)))
    THEN
      pass := FALSE;
    END_IF;
  END_REPEAT;
      RETURN(pass);
END_FUNCTION;

FUNCTION open_shell_reversed
 (a_shell : open_shell) : oriented_open_shell;
  LOCAL
  the_reverse : oriented_open_shell;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_OPEN_SHELL' IN TYPEOF(a_shell))
  THEN
    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || open_shell() ||
                   oriented_open_shell(a_shell\oriented_open_shell.open_shell_element,
                                       (NOT (a_shell\oriented_open_shell.orientation)));
  ELSE
    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || open_shell() ||
                   oriented_open_shell(a_shell, FALSE);
  END_IF;
      RETURN(the_reverse);
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 parallel_composed_function_composability_check
 (funcs : LIST OF maths_function; final : maths_function_select) : BOOLEAN;
  LOCAL
  tplsp : tuple_space := the_zero_tuple_space;
  finfun : maths_function := convert_to_maths_function(final);
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(funcs);
    tplsp := assoc_product_space(tplsp, funcs[i].range);
  END_REPEAT;
      RETURN(compatible_spaces(tplsp, finfun.domain));
END_FUNCTION;

FUNCTION parallel_composed_function_domain_check
 (comdom : tuple_space; funcs : LIST OF maths_function) : BOOLEAN;
    REPEAT i := 1 TO SIZEOF(funcs);
    IF NOT (compatible_spaces(comdom, funcs[i].domain))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION parse_express_identifier
 (s : STRING; i : positive_integer) : positive_integer;
  LOCAL
  k : positive_integer;
    END_LOCAL;
      k := i;
      IF i <= LENGTH(s)
  THEN
    IF (s[i] LIKE '@')
    THEN
      REPEAT UNTIL (k > LENGTH(s)) OR ((s[k] <> '_') AND NOT (s[k] LIKE '@') AND NOT (s[k] LIKE '#'));
        k := k + 1;
      END_REPEAT;
    END_IF;
  END_IF;
      RETURN(k);
END_FUNCTION;

FUNCTION partial_derivative_check
 (domain : tuple_space; d_vars : LIST[1:?] OF input_selector) : BOOLEAN;
  LOCAL
  domn : tuple_space := domain;
  fspc : maths_space;
  dim : INTEGER;
  k : INTEGER;
    END_LOCAL;
      IF (space_dimension(domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(domain)))
  THEN
    domn := factor1(domain);
  END_IF;
      dim := space_dimension(domn);
      REPEAT i := 1 TO SIZEOF(d_vars);
    k := d_vars[i];
    IF k > dim
    THEN
      RETURN(FALSE);
    END_IF;
    fspc := factor_space(domn, k);
    IF (NOT subspace_of_es(fspc, es_reals)) AND (NOT subspace_of_es(fspc, es_complex_numbers))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION path_head_to_tail
 (a_path : path) : LOGICAL;
  LOCAL
  n : INTEGER;
  p : LOGICAL := TRUE;
    END_LOCAL;
      n := SIZEOF(a_path.edge_list);
      REPEAT i := 2 TO n;
    p := p AND (a_path.edge_list[i - 1].edge_end :=: a_path.edge_list[i].edge_start);
  END_REPEAT;
      RETURN(p);
END_FUNCTION;

FUNCTION path_reversed
 (a_path : path) : oriented_path;
  LOCAL
  the_reverse : oriented_path;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(a_path))
  THEN
    the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) ||
                   oriented_path(a_path\oriented_path.path_element, NOT (a_path\oriented_path.orientation));
  ELSE
    the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) || oriented_path(a_path, FALSE);
  END_IF;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION plane_angle_for_pair_in_radian
 (pair : kinematic_pair; angle : plane_angle_measure) : plane_angle_measure;
  LOCAL
  converted_angle : plane_angle_measure := angle;
  link_rep : kinematic_link_representation := representation_of_link(pair.joint.edge_start);
  link_cntxt : representation_context;
  pa_units : SET OF unit := [];
  pau : unit;
    END_LOCAL;
      link_cntxt := link_rep\representation.context_of_items;
      IF NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(link_cntxt))
  THEN
    RETURN(?);
  END_IF;
      pa_units := QUERY(unit
                        <* link_cntxt\global_unit_assigned_context.units
                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_UNIT' IN TYPEOF(unit));
      IF SIZEOF(pa_units) <> 1
  THEN
    RETURN(?);
  END_IF;
      pau := pa_units[1];
      IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SI_UNIT' IN TYPEOF(pau)) AND
              NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau)))
  THEN
    RETURN(?);
  END_IF;
      REPEAT WHILE ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau));
    converted_angle := converted_angle * pau\conversion_based_unit.conversion_factor.value_component;
    pau := pau\conversion_based_unit.conversion_factor.unit_component;
    IF ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SI_UNIT' IN TYPEOF(pau)) AND
             NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau))) OR
        (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_UNIT' IN TYPEOF(pau))))
    THEN
      RETURN(?);
    END_IF;
  END_REPEAT;
      IF (pau\si_unit.name <> si_unit_name.radian)
  THEN
    RETURN(?);
  END_IF;
      CASE pau\si_unit.prefix OF
    si_prefix.exa : RETURN(1.E18 * converted_angle);
    si_prefix.peta : RETURN(1.E15 * converted_angle);
    si_prefix.tera : RETURN(1.E12 * converted_angle);
    si_prefix.giga : RETURN(1.E9 * converted_angle);
    si_prefix.mega : RETURN(1.E6 * converted_angle);
    si_prefix.kilo : RETURN(1.E3 * converted_angle);
    si_prefix.hecto : RETURN(1.E2 * converted_angle);
    si_prefix.deca : RETURN(1.E1 * converted_angle);
    si_prefix.deci : RETURN(1.E-1 * converted_angle);
    si_prefix.centi : RETURN(1.E-2 * converted_angle);
    si_prefix.milli : RETURN(1.E-3 * converted_angle);
    si_prefix.micro : RETURN(1.E-6 * converted_angle);
    si_prefix.nano : RETURN(1.E-9 * converted_angle);
    si_prefix.pico : RETURN(1.E-12 * converted_angle);
    si_prefix.femto : RETURN(1.E-15 * converted_angle);
    si_prefix.atto : RETURN(1.E-18 * converted_angle);
    OTHERWISE: RETURN(converted_angle);
  END_CASE;
END_FUNCTION;

FUNCTION pmidq_get_inspected_element_type_name
 (ei : SET[1:?] OF inspected_element_select) : pmidq_inspected_element_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      IF (SIZEOF(ei) > 2)
  THEN
    RETURN(pmidqi_others);
  END_IF;
      IF (SIZEOF(ei) = 2)
  THEN
    IF (TYPEOF(ei[1]) = TYPEOF(ei[2]))
    THEN
      type_out := TYPEOF(ei[1]);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN type_out)
      THEN
        RETURN(pmidqi_datum_pair);
      END_IF;
    END_IF;
  ELSE
    IF (SIZEOF(ei) = 1)
    THEN
      type_out := TYPEOF(ei[1]);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN type_out)
      THEN
        RETURN(pmidqi_datum);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN type_out)
      THEN
        RETURN(pmidqi_datum_system);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET' IN type_out)
      THEN
        RETURN(pmidqi_datum_target);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION' IN type_out)
      THEN
        RETURN(pmidqi_dimensional_location);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN type_out)
      THEN
        RETURN(pmidqi_dimensional_size);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN type_out)
      THEN
        RETURN(pmidqi_geometric_tolerance);
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN type_out)
      THEN
        RETURN(pmidqi_shape_aspect);
      END_IF;
    END_IF;
  END_IF;
      RETURN(pmidqi_others);
END_FUNCTION;

FUNCTION pmidq_get_measured_type_name
 (ei : a3m_data_quality_measured_value_select) : pmidq_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING;
    END_LOCAL;
      type_out := TYPEOF(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
  THEN
    RETURN(pmidqm_boolean_value);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(pmidqm_positive_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(pmidqm_positive_plane_angle_measure);
  END_IF;
      RETURN(pmidqm_others);
END_FUNCTION;

FUNCTION pmidq_get_value_limit_type
 (sdqvlts : shape_data_quality_value_limit_type_select) : pmidq_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING := [];
    END_LOCAL;
      type_out := value_limit_type(sdqvlts);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(pmidqm_positive_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(pmidqm_positive_plane_angle_measure);
  END_IF;
      RETURN(pmidqm_others);
END_FUNCTION;

FUNCTION pmidq_validate_element_types
 (ir : data_quality_inspection_report; cr : a3m_pmi_data_quality_criterion) : LOGICAL;
  LOCAL
  aqiiri : a3m_data_quality_inspection_instance_report_item;
  dqiir : data_quality_inspection_instance_report;
  pietn : LIST [1 : ?] OF pmidq_inspected_element_type_name;
    END_LOCAL;
      pietn := cr.inspected_elements_types;
      -- Data_quality_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ir))
  THEN
    dqiir := ir;
    REPEAT i := 1 TO SIZEOF(dqiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqiiri := dqiir.inspected_instances[i];
        IF (NOT (pmidq_get_inspected_element_type_name(aqiiri.inspected_elements) IN pietn))
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION pmidq_validate_measured_type
 (ir : data_quality_inspection_report; cr : a3m_pmi_data_quality_criterion) : LOGICAL;
  LOCAL
  aqicri : a3m_data_quality_inspection_criterion_report_item;
  aqiiri : a3m_data_quality_inspection_instance_report_item;
  aqirie : a3m_instance_report_item_with_extreme_instances;
  dqicr : data_quality_inspection_criterion_report;
  dqiir : data_quality_inspection_instance_report;
  pmdtn : pmidq_measured_data_type_name;
    END_LOCAL;
      pmdtn := cr.measured_data_type;
      -- Data_quality_inspection_criterion_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_CRITERION_REPORT' IN TYPEOF(ir))
  THEN
    dqicr := ir;
    REPEAT i := 1 TO SIZEOF(dqicr.statistical_values);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_CRITERION_REPORT_ITEM' IN
          TYPEOF(dqicr.statistical_values[i]))
      THEN
        aqicri := dqicr.statistical_values[i];
        IF (pmidq_get_measured_type_name(aqicri.representative_measured_value) <> pmdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      -- Data_quality_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ir))
  THEN
    dqiir := ir;
    REPEAT i := 1 TO SIZEOF(dqiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqiiri := dqiir.inspected_instances[i];
        IF (pmidq_get_measured_type_name(aqiiri.representative_measured_value) <> pmdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqirie := dqiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(aqirie.extreme_instances);
          IF (pmidq_get_measured_type_name(aqirie.extreme_instances[j].measured_value) <> pmdtn)
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION real_max
 (spc : maths_space) : REAL;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types)
  THEN
    RETURN(spc\finite_integer_interval.max);
  END_IF;
      IF ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types)
  THEN
    RETURN(spc\integer_interval_to_max.max);
  END_IF;
      IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
  THEN
    RETURN(spc\finite_real_interval.max);
  END_IF;
      IF ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)
  THEN
    RETURN(spc\real_interval_to_max.max);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION real_min
 (spc : maths_space) : REAL;
  LOCAL
  types : SET OF STRING := TYPEOF(spc);
    END_LOCAL;
      IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types)
  THEN
    RETURN(spc\finite_integer_interval.min);
  END_IF;
      IF ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types)
  THEN
    RETURN(spc\integer_interval_from_min.min);
  END_IF;
      IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
  THEN
    RETURN(spc\finite_real_interval.min);
  END_IF;
      IF ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)
  THEN
    RETURN(spc\real_interval_from_min.min);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION regular_indexing
 (sub : LIST OF INTEGER; base : zero_or_one; shape : LIST[1:?] OF positive_integer; inc : LIST[1:?] OF INTEGER; first : INTEGER) : INTEGER;
  LOCAL
  k : INTEGER;
  index : INTEGER;
    END_LOCAL;
      IF NOT EXISTS(sub) OR NOT EXISTS(base) OR NOT EXISTS(shape) OR NOT EXISTS(inc) OR NOT EXISTS(first)
  THEN
    RETURN(?);
  END_IF;
      IF (SIZEOF(sub) <> SIZEOF(inc)) OR (SIZEOF(sub) <> SIZEOF(shape))
  THEN
    RETURN(?);
  END_IF;
      index := first;
      REPEAT j := 1 TO SIZEOF(sub);
    IF NOT EXISTS(sub[j]) OR NOT EXISTS(inc[j])
    THEN
      RETURN(?);
    END_IF;
    k := sub[j] - base;
    IF NOT ({0 <= k < shape[j]})
    THEN
      RETURN(?);
    END_IF;
    index := index + k * inc[j];
  END_REPEAT;
      RETURN(index);
END_FUNCTION;

FUNCTION relating_shape_representations_of_extreme_values
 (item : location_of_extreme_value_select) : SET OF shape_representation;
  LOCAL
  results : SET OF shape_representation := [];
  exti : SET OF extreme_instance := [];
  ii_ei : SET OF instance_report_item_with_extreme_instances := [];
  sdiir : SET OF shape_data_quality_inspection_instance_report := [];
  sdqr : SET OF shape_data_quality_inspection_result_representation := [];
  sdisr : SET OF shape_data_quality_inspected_shape_and_result_relationship := [];
    END_LOCAL;
      -- find extreme_instances 
      exti := exti +
              bag_to_set(USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTREME_INSTANCE.LOCATIONS_OF_EXTREME_VALUE'));
      -- find instance_report_item_with_extreme_instances 
      REPEAT i := 1 TO HIINDEX(exti);
    ii_ei := ii_ei +
             bag_to_set(USEDIN(exti[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES.EXTREME_INSTANCES'));
  END_REPEAT;
      -- find shape_data_quality_inspection_instance_report
      REPEAT i := 1 TO HIINDEX(ii_ei);
    sdiir := sdiir +
             bag_to_set(USEDIN(ii_ei[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT.INSPECTED_INSTANCES'));
  END_REPEAT;
      -- find shape_data_quality_inspection_result_representation
      REPEAT i := 1 TO HIINDEX(sdiir);
    sdqr := sdqr +
            QUERY(i1
                  <* bag_to_set(USEDIN(sdiir[i].inspection_result, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN
                    TYPEOF(i1));
  END_REPEAT;
      -- find shape_data_quality_inspected_shape_and_result_relationship
      REPEAT i := 1 TO HIINDEX(sdqr);
    sdisr := sdisr +
             bag_to_set(USEDIN(sdqr[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTED_SHAPE_AND_RESULT_RELATIONSHIP.REP_2'));
  END_REPEAT;
      -- find shape_representation
      REPEAT i := 1 TO HIINDEX(sdisr);
    results := results + sdisr[i].rep_1;
  END_REPEAT;
      RETURN(results);
END_FUNCTION;

FUNCTION remove_first
 (alist : LIST OF GENERIC : GEN) : LIST OF GENERIC : GEN;
  LOCAL
  blist : LIST OF GENERIC:GEN := alist;
    END_LOCAL;
      IF SIZEOF(blist) > 0
  THEN
    REMOVE(blist, 1);
  END_IF;
      RETURN(blist);
END_FUNCTION;

FUNCTION repackage
 (tspace : tuple_space; repckg : repackage_options) : tuple_space;
    CASE repckg OF
    ro_nochange : RETURN(tspace);
    ro_wrap_as_tuple : RETURN(one_tuples_of(tspace));
    ro_unwrap_tuple : RETURN(factor1(tspace));
    OTHERWISE: RETURN(?);
  END_CASE;
END_FUNCTION;

FUNCTION representation_of_link
 (link : kinematic_link) : kinematic_link_representation;
    (*
                       LOCAL
                       link_rep_rel : BAG OF kinematic_link_representation_relation;
                       END_LOCAL;

                       link_rep_rel := USEDIN (link, 'KINEMATIC_STRUCTURE_SCHEMA.'+
                       'KINEMATIC_LINK_REPRESENTATION_RELATION.'+
                       'TOPOLOGICAL_ASPECTS');
                       IF (SIZEOF (link_rep_rel) = 0) THEN
                       RETURN (?);
                       ELSE
                       RETURN (link_rep_rel[1].geometric_aspects);
                       END_IF;
                       *)
  
      RETURN(?);
END_FUNCTION;

FUNCTION same_side
 (plane_pts : LIST[3:3] OF cartesian_point; test_points : LIST[2:?] OF cartesian_point) : BOOLEAN;
  LOCAL
  val1 : REAL;
  val2 : REAL;
  n : INTEGER;
    END_LOCAL;
      IF (plane_pts[1].dim = 2) OR (test_points[1].dim = 2)
  THEN
    RETURN(?);
  END_IF;
      n := SIZEOF(test_points);
      val1 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[1]);
      REPEAT i := 2 TO n;
    val2 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[i]);
    IF (val1 * val2 <= 0.0)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(vec)
    THEN
      v := dummy_gri || direction(vec\vector.orientation.direction_ratios);
      mag := scalar * vec\vector.magnitude;
    ELSE
      v := dummy_gri || direction(vec.direction_ratios);
      mag := scalar;
    END_IF;
    IF (mag < 0.0)
    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.0,1.0,0.0]);
  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 set_of_topology_reversed
 (a_set : set_of_reversible_topology_item) : set_of_reversible_topology_item;
  LOCAL
  the_reverse : set_of_reversible_topology_item;
    END_LOCAL;
      the_reverse := [];
      REPEAT i := 1 TO SIZEOF(a_set);
    the_reverse := the_reverse + topology_reversed(a_set[i]);
  END_REPEAT;
      RETURN(the_reverse);
END_FUNCTION;

FUNCTION shape_of_array
 (func : maths_function) : LIST OF positive_integer;
  LOCAL
  tspace : tuple_space;
  temp : maths_space;
  result : LIST OF positive_integer := [];
    END_LOCAL;
      IF (schema_prefix + 'EXPLICIT_TABLE_FUNCTION') IN TYPEOF(func)
  THEN
    RETURN(func\explicit_table_function.shape);
  END_IF;
      tspace := func.domain;
      IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
  THEN
    tspace := factor1(tspace);
  END_IF;
      REPEAT i := 1 TO space_dimension(tspace);
    temp := factor_space(tspace, i);
    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
    THEN
      RETURN(?);
    END_IF;
    INSERT(result, temp\finite_integer_interval.size, i - 1);
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION shell_reversed
 (a_shell : shell) : shell;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(a_shell))
  THEN
    RETURN(open_shell_reversed(a_shell));
  ELSE
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN TYPEOF(a_shell))
    THEN
      RETURN(closed_shell_reversed(a_shell));
    ELSE
      RETURN(?);
    END_IF;
  END_IF;
END_FUNCTION;

FUNCTION simplify_function_application
 (expr : function_application) : maths_value;
FUNCTION ctmv(x : GENERIC:G) : maths_value;
    RETURN(convert_to_maths_value(x));
  END_FUNCTION;
  PROCEDURE parts(c : complex_number_literal; VAR x : REAL; VAR y : REAL);
    x := c.real_part;
    y := c.imag_part;
  END_PROCEDURE;
  FUNCTION makec(x : REAL;
                 y : REAL) : complex_number_literal;
    RETURN(make_complex_number_literal(x, y));
  END_FUNCTION;
  FUNCTION good_t(v : maths_value;
                  tn : STRING) : BOOLEAN;
  LOCAL
    tpl : LIST OF maths_value;
  END_LOCAL;
    IF 'LIST' IN TYPEOF(v)
    THEN
      tpl := v;
      REPEAT i := 1 TO SIZEOF(tpl);
        IF NOT (tn IN TYPEOF(tpl[i]))
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(TRUE);
    END_IF;
    RETURN(FALSE);
  END_FUNCTION;
    CONSTANT
  cnlit : STRING := schema_prefix + 'COMPLEX_NUMBER_LITERAL';
    END_CONSTANT;
    LOCAL
  types : SET OF STRING := stripped_typeof(expr.func);
  ef_val : elementary_function_enumerators;
  is_elementary : BOOLEAN := FALSE;
  v : maths_value;
  v1 : maths_value;
  v2 : maths_value;
  v3 : maths_value;
  vlist : LIST OF maths_value := [];
  gexpr : generic_expression;
  pairs : SET [1 : ?] OF LIST [2 : 2] OF maths_value;
  boo : BOOLEAN;
  lgc : LOGICAL;
  cum : LOGICAL;
  j : INTEGER;
  k : INTEGER;
  n : INTEGER;
  p : REAL;
  q : REAL;
  r : REAL;
  s : REAL;
  t : REAL;
  u : REAL;
  str : STRING;
  st2 : STRING;
  bin : BINARY;
  bi2 : BINARY;
  tpl : LIST OF maths_value;
  tp2 : LIST OF maths_value;
  mem : SET OF maths_value := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(expr.arguments);
    v := simplify_maths_value(expr.arguments[i]);
    INSERT(vlist, v, i - 1);
  END_REPEAT;
      IF SIZEOF(vlist) >= 1
  THEN
    v1 := vlist[1];
  END_IF;
      IF SIZEOF(vlist) >= 2
  THEN
    v2 := vlist[2];
  END_IF;
      IF SIZEOF(vlist) >= 3
  THEN
    v3 := vlist[3];
  END_IF;
      IF 'ELEMENTARY_FUNCTION_ENUMERATORS' IN types
  THEN
    ef_val := expr.func;
    is_elementary := TRUE;
  END_IF;
      IF 'ELEMENTARY_FUNCTION' IN types
  THEN
    ef_val := expr.func\elementary_function.func_id;
    is_elementary := TRUE;
  END_IF;
      IF is_elementary
  THEN
    CASE ef_val OF
      ef_and : BEGIN  
                      cum := TRUE;
                      REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                        IF 'LOGICAL' IN TYPEOF(vlist[i])
                        THEN
                          lgc := vlist[i];
                          cum := cum AND lgc;
                          IF lgc = FALSE
                          THEN
                            RETURN(ctmv(FALSE));
                          END_IF;
                          REMOVE(vlist, i);
                        END_IF;
                      END_REPEAT;
                      IF SIZEOF(vlist) = 0
                      THEN
                        RETURN(ctmv(cum));
                      END_IF;
                      IF cum <> TRUE
                      THEN
                        INSERT(vlist, ctmv(cum), 0);
                      END_IF;
                      IF SIZEOF(vlist) = 1
                      THEN
                        RETURN(vlist[1]);
                      END_IF;
      END;
      ef_or : BEGIN  
                     cum := FALSE;
                     REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                       IF 'LOGICAL' IN TYPEOF(vlist[i])
                       THEN
                         lgc := vlist[i];
                         cum := cum OR lgc;
                         IF lgc = TRUE
                         THEN
                           RETURN(ctmv(TRUE));
                         END_IF;
                         REMOVE(vlist, i);
                       END_IF;
                     END_REPEAT;
                     IF SIZEOF(vlist) = 0
                     THEN
                       RETURN(ctmv(cum));
                     END_IF;
                     IF cum <> FALSE
                     THEN
                       INSERT(vlist, ctmv(cum), 0);
                     END_IF;
                     IF SIZEOF(vlist) = 1
                     THEN
                       RETURN(vlist[1]);
                     END_IF;
      END;
      ef_not : IF 'LOGICAL' IN TYPEOF(v1)
      THEN
        lgc := v1;
        RETURN(ctmv(NOT lgc));
      END_IF;
      ef_xor : BEGIN  
                      IF 'LOGICAL' IN TYPEOF(v1)
                      THEN
                        lgc := v1;
                        IF 'LOGICAL' IN TYPEOF(v2)
                        THEN
                          cum := v2;
                          RETURN(ctmv(lgc XOR cum));
                        ELSE
                          IF lgc = FALSE
                          THEN
                            RETURN(ctmv(v2));
                          ELSE
                            IF lgc = UNKNOWN
                            THEN
                              RETURN(ctmv(UNKNOWN));
                            ELSE
                              RETURN(make_function_application(ef_not, [v2]));
                            END_IF;
                          END_IF;
                        END_IF;
                      ELSE
                        IF 'LOGICAL' IN TYPEOF(v2)
                        THEN
                          lgc := v2;
                          IF lgc = FALSE
                          THEN
                            RETURN(ctmv(v1));
                          ELSE
                            IF lgc = UNKNOWN
                            THEN
                              RETURN(ctmv(UNKNOWN));
                            ELSE
                              RETURN(make_function_application(ef_not, [v1]));
                            END_IF;
                          END_IF;
                        END_IF;
                      END_IF;
      END;
      ef_negate_i : IF 'INTEGER' IN TYPEOF(v1)
      THEN
        j := v1;
        RETURN(ctmv(-j));
      END_IF;
      ef_add_i : BEGIN  
                        j := 0;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'INTEGER' IN TYPEOF(vlist[i])
                          THEN
                            k := vlist[i];
                            j := j + k;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(j));
                        END_IF;
                        IF j <> 0
                        THEN
                          INSERT(vlist, ctmv(j), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_subtract_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j - k));
      END_IF;
      ef_multiply_i : BEGIN  
                             j := 1;
                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                               IF 'INTEGER' IN TYPEOF(vlist[i])
                               THEN
                                 k := vlist[i];
                                 j := j * k;
                                 REMOVE(vlist, i);
                               END_IF;
                             END_REPEAT;
                             IF SIZEOF(vlist) = 0
                             THEN
                               RETURN(ctmv(j));
                             END_IF;
                             IF j <> 1
                             THEN
                               INSERT(vlist, ctmv(j), 0);
                             END_IF;
                             IF SIZEOF(vlist) = 1
                             THEN
                               RETURN(vlist[1]);
                             END_IF;
      END;
      ef_divide_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j DIV k));
      END_IF;
      ef_mod_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j MOD k));
      END_IF;
      ef_exponentiate_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        n := 1;
        REPEAT i := 1 TO ABS(k);
          n := n * j;
        END_REPEAT;
        IF k < 0
        THEN
          n := 1 DIV n;
        END_IF;
        RETURN(ctmv(n));
      END_IF;
      ef_eq_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j = k));
      END_IF;
      ef_ne_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j <> k));
      END_IF;
      ef_gt_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j > k));
      END_IF;
      ef_lt_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j < k));
      END_IF;
      ef_ge_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j >= k));
      END_IF;
      ef_le_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        j := v1;
        k := v2;
        RETURN(ctmv(j <= k));
      END_IF;
      ef_abs_i : IF 'INTEGER' IN TYPEOF(v1)
      THEN
        j := v1;
        RETURN(ctmv(ABS(j)));
      END_IF;
      ef_max_i : BEGIN  
                        boo := FALSE;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'INTEGER' IN TYPEOF(vlist[i])
                          THEN
                            IF boo
                            THEN
                              k := vlist[i];
                              IF k > j
                              THEN
                                j := k;
                              END_IF;
                            ELSE
                              j := vlist[i];
                              boo := TRUE;
                            END_IF;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(j));
                        END_IF;
                        IF boo
                        THEN
                          INSERT(vlist, ctmv(j), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_min_i : BEGIN  
                        boo := FALSE;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'INTEGER' IN TYPEOF(vlist[i])
                          THEN
                            IF boo
                            THEN
                              k := vlist[i];
                              IF k < j
                              THEN
                                j := k;
                              END_IF;
                            ELSE
                              j := vlist[i];
                              boo := TRUE;
                            END_IF;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(j));
                        END_IF;
                        IF boo
                        THEN
                          INSERT(vlist, ctmv(j), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_negate_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(-r));
      END_IF;
      ef_reciprocal_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(1.0 / r));
      END_IF;
      ef_add_r : BEGIN  
                        r := 0.0;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'REAL' IN TYPEOF(vlist[i])
                          THEN
                            s := vlist[i];
                            r := r + s;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(r));
                        END_IF;
                        IF r <> 0.0
                        THEN
                          INSERT(vlist, ctmv(r), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_subtract_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r - s));
      END_IF;
      ef_multiply_r : BEGIN  
                             r := 1.0;
                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                               IF 'REAL' IN TYPEOF(vlist[i])
                               THEN
                                 s := vlist[i];
                                 r := r * s;
                                 REMOVE(vlist, i);
                               END_IF;
                             END_REPEAT;
                             IF SIZEOF(vlist) = 0
                             THEN
                               RETURN(ctmv(r));
                             END_IF;
                             IF r <> 1.0
                             THEN
                               INSERT(vlist, ctmv(r), 0);
                             END_IF;
                             IF SIZEOF(vlist) = 1
                             THEN
                               RETURN(vlist[1]);
                             END_IF;
      END;
      ef_divide_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r / s));
      END_IF;
      ef_mod_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        t := r / s;
        j := t DIV 1;
        IF (t < 0.0) AND (j <> t)
        THEN
          j := j - 1;
        END_IF;
        RETURN(ctmv(r - j * s));
      END_IF;
      ef_exponentiate_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r ** s));
      END_IF;
      ef_exponentiate_ri : IF ('REAL' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        r := v1;
        k := v2;
        t := 1.0;
        REPEAT i := 1 TO ABS(k);
          t := t * r;
        END_REPEAT;
        IF k < 0
        THEN
          t := 1.0 / t;
        END_IF;
        RETURN(ctmv(t));
      END_IF;
      ef_eq_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r = s));
      END_IF;
      ef_ne_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r <> s));
      END_IF;
      ef_gt_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r > s));
      END_IF;
      ef_lt_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r < s));
      END_IF;
      ef_ge_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r >= s));
      END_IF;
      ef_le_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(r <= s));
      END_IF;
      ef_abs_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(ABS(r)));
      END_IF;
      ef_max_r : BEGIN  
                        boo := FALSE;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'REAL' IN TYPEOF(vlist[i])
                          THEN
                            IF boo
                            THEN
                              s := vlist[i];
                              IF s > r
                              THEN
                                r := s;
                              END_IF;
                            ELSE
                              r := vlist[i];
                              boo := TRUE;
                            END_IF;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(r));
                        END_IF;
                        IF boo
                        THEN
                          INSERT(vlist, ctmv(r), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_min_r : BEGIN  
                        boo := FALSE;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF 'REAL' IN TYPEOF(vlist[i])
                          THEN
                            IF boo
                            THEN
                              s := vlist[i];
                              IF s < r
                              THEN
                                r := s;
                              END_IF;
                            ELSE
                              r := vlist[i];
                              boo := TRUE;
                            END_IF;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(ctmv(r));
                        END_IF;
                        IF boo
                        THEN
                          INSERT(vlist, ctmv(r), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_acos_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(ACOS(r)));
      END_IF;
      ef_asin_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(ASIN(r)));
      END_IF;
      ef_atan2_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(ctmv(atan2(r, s)));
      END_IF;
      ef_cos_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(COS(r)));
      END_IF;
      ef_exp_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(EXP(r)));
      END_IF;
      ef_ln_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(LOG(r)));
      END_IF;
      ef_log2_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(LOG2(r)));
      END_IF;
      ef_log10_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(LOG10(r)));
      END_IF;
      ef_sin_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(SIN(r)));
      END_IF;
      ef_sqrt_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(SQRT(r)));
      END_IF;
      ef_tan_r : IF 'REAL' IN TYPEOF(v1)
      THEN
        r := v1;
        RETURN(ctmv(TAN(r)));
      END_IF;
      ef_form_c : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
      THEN
        r := v1;
        s := v2;
        RETURN(makec(r, s));
      END_IF;
      ef_rpart_c : IF cnlit IN TYPEOF(v1)
      THEN
        RETURN(ctmv(v1\complex_number_literal.real_part));
      END_IF;
      ef_ipart_c : IF cnlit IN TYPEOF(v1)
      THEN
        RETURN(ctmv(v1\complex_number_literal.imag_part));
      END_IF;
      ef_negate_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(makec(-p, -q));
      END_IF;
      ef_reciprocal_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        t := p * p + q * q;
        RETURN(makec(p / t, -q / t));
      END_IF;
      ef_add_c : BEGIN  
                        p := 0.0;
                        q := 0.0;
                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                          IF cnlit IN TYPEOF(vlist[i])
                          THEN
                            parts(vlist[i], r, s);
                            p := p + r;
                            q := q + s;
                            REMOVE(vlist, i);
                          END_IF;
                        END_REPEAT;
                        IF SIZEOF(vlist) = 0
                        THEN
                          RETURN(makec(p, q));
                        END_IF;
                        IF p * p + q * q <> 0.0
                        THEN
                          INSERT(vlist, makec(p, q), 0);
                        END_IF;
                        IF SIZEOF(vlist) = 1
                        THEN
                          RETURN(vlist[1]);
                        END_IF;
      END;
      ef_subtract_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        parts(v2, r, s);
        RETURN(makec(p - r, q - s));
      END_IF;
      ef_multiply_c : BEGIN  
                             p := 1.0;
                             q := 0.0;
                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                               IF cnlit IN TYPEOF(vlist[i])
                               THEN
                                 parts(vlist[i], r, s);
                                 p := p * r - q * s;
                                 q := p * s + q * r;
                                 REMOVE(vlist, i);
                               END_IF;
                             END_REPEAT;
                             IF SIZEOF(vlist) = 0
                             THEN
                               RETURN(makec(p, q));
                             END_IF;
                             IF (p <> 1.0) OR (q <> 0.0)
                             THEN
                               INSERT(vlist, makec(p, q), 0);
                             END_IF;
                             IF SIZEOF(vlist) = 1
                             THEN
                               RETURN(vlist[1]);
                             END_IF;
      END;
      ef_divide_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        parts(v2, r, s);
        t := r * r + s * s;
        RETURN(makec((p * r + q * s) / t, (q * r - p * s) / t));
      END_IF;
      ef_exponentiate_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        parts(v2, r, s);
        t := 0.5 * LOG(p * p + q * q);
        u := atan2(q, p);
        p := r * t - s * u;
        q := r * u + s * t;
        r := EXP(p);
        RETURN(makec(r * COS(q), r * SIN(q)));
      END_IF;
      ef_exponentiate_ci : IF (cnlit IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        k := v2;
        r := 1.0;
        s := 0.0;
        REPEAT i := 1 TO ABS(k);
          r := p * r - q * s;
          s := p * s + q * r;
        END_REPEAT;
        IF k < 0
        THEN
          t := r * r + s * s;
          r := r / t;
          s := -s / t;
        END_IF;
        RETURN(makec(r, s));
      END_IF;
      ef_eq_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        parts(v2, r, s);
        RETURN(ctmv((p = r) AND (q = s)));
      END_IF;
      ef_ne_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
      THEN
        parts(v1, p, q);
        parts(v2, r, s);
        RETURN(ctmv((p <> r) OR (q <> s)));
      END_IF;
      ef_conjugate_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(makec(p, -q));
      END_IF;
      ef_abs_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(ctmv(SQRT(p * p + q * q)));
      END_IF;
      ef_arg_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(ctmv(atan2(q, p)));
      END_IF;
      ef_cos_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        t := 0.5 * EXP(-q);
        u := 0.5 * EXP(q);
        RETURN(makec((t + u) * COS(p), (t - u) * SIN(p)));
      END_IF;
      ef_exp_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(makec(EXP(p) * COS(q), EXP(p) * SIN(q)));
      END_IF;
      ef_ln_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        RETURN(makec(0.5 * LOG(p * p + q * q), atan2(q, p)));
      END_IF;
      ef_sin_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        t := 0.5 * EXP(-q);
        u := 0.5 * EXP(q);
        RETURN(makec((t + u) * SIN(p), (u - t) * COS(p)));
      END_IF;
      ef_sqrt_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        t := SQRT(SQRT(p * p + q * q));
        u := 0.5 * atan2(q, p);
        RETURN(makec(t * COS(u), t * SIN(u)));
      END_IF;
      ef_tan_c : IF cnlit IN TYPEOF(v1)
      THEN
        parts(v1, p, q);
        t := EXP(2.0 * q) + EXP(-2.0 * q) + 2.0 * COS(2.0 * p);
        RETURN(makec(2.0 * SIN(2.0 * p) / t, (EXP(-2.0 * q) - EXP(2.0 * q)) / t));
      END_IF;
      ef_subscript_s : IF ('STRING' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        str := v1;
        k := v2;
        RETURN(ctmv(str[k]));
      END_IF;
      ef_eq_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str = st2));
      END_IF;
      ef_ne_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str <> st2));
      END_IF;
      ef_gt_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str > st2));
      END_IF;
      ef_lt_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str < st2));
      END_IF;
      ef_ge_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str >= st2));
      END_IF;
      ef_le_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        str := v1;
        st2 := v2;
        RETURN(ctmv(str <= st2));
      END_IF;
      ef_subsequence_s : IF ('STRING' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2)) AND ('INTEGER' IN TYPEOF(v3))
      THEN
        str := v1;
        j := v2;
        k := v3;
        RETURN(ctmv(str[j:k]));
      END_IF;
      ef_concat_s : BEGIN  
                           str := '';
                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                             IF 'STRING' IN TYPEOF(vlist[i])
                             THEN
                               st2 := vlist[i];
                               str := str + st2;
                               REMOVE(vlist, i);
                             ELSE
                               IF str <> ''
                               THEN
                                 INSERT(vlist, ctmv(str), i);
                                 str := '';
                               END_IF;
                             END_IF;
                           END_REPEAT;
                           IF SIZEOF(vlist) = 0
                           THEN
                             RETURN(ctmv(str));
                           END_IF;
                           IF str <> ''
                           THEN
                             INSERT(vlist, ctmv(str), 0);
                           END_IF;
                           IF SIZEOF(vlist) = 1
                           THEN
                             RETURN(vlist[1]);
                           END_IF;
      END;
      ef_size_s : IF 'STRING' IN TYPEOF(v1)
      THEN
        str := v1;
        RETURN(ctmv(LENGTH(str)));
      END_IF;
      ef_format : IF ('NUMBER' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        RETURN(ctmv(FORMAT(v1, v2)));
      END_IF;
      ef_value : IF 'STRING' IN TYPEOF(v1)
      THEN
        str := v1;
        RETURN(ctmv(VALUE(str)));
      END_IF;
      ef_like : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
      THEN
        RETURN(ctmv(v1 LIKE v2));
      END_IF;
      ef_subscript_b : IF ('BINARY' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        bin := v1;
        k := v2;
        RETURN(ctmv(bin[k]));
      END_IF;
      ef_eq_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin = bi2));
      END_IF;
      ef_ne_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin <> bi2));
      END_IF;
      ef_gt_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin > bi2));
      END_IF;
      ef_lt_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin < bi2));
      END_IF;
      ef_ge_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin >= bi2));
      END_IF;
      ef_le_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
      THEN
        bin := v1;
        bi2 := v2;
        RETURN(ctmv(bin <= bi2));
      END_IF;
      ef_subsequence_b : IF ('BINARY' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2)) AND ('INTEGER' IN TYPEOF(v3))
      THEN
        bin := v1;
        j := v2;
        k := v3;
        RETURN(ctmv(bin[j:k]));
      END_IF;
      ef_concat_b : BEGIN  
                           boo := FALSE;
                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                             IF 'BINARY' IN TYPEOF(vlist[i])
                             THEN
                               IF boo
                               THEN
                                 bi2 := vlist[i];
                                 bin := bin + bi2;
                               ELSE
                                 bin := vlist[i];
                                 boo := TRUE;
                               END_IF;
                               REMOVE(vlist, i);
                             ELSE
                               IF boo
                               THEN
                                 INSERT(vlist, ctmv(bin), i);
                                 boo := FALSE;
                               END_IF;
                             END_IF;
                           END_REPEAT;
                           IF SIZEOF(vlist) = 0
                           THEN
                             RETURN(ctmv(bin));
                           END_IF;
                           IF boo
                           THEN
                             INSERT(vlist, ctmv(bin), 0);
                           END_IF;
                           IF SIZEOF(vlist) = 1
                           THEN
                             RETURN(vlist[1]);
                           END_IF;
      END;
      ef_size_b : IF 'BINARY' IN TYPEOF(v1)
      THEN
        bin := v1;
        RETURN(ctmv(BLENGTH(bin)));
      END_IF;
      ef_subscript_t : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        tpl := v1;
        k := v2;
        RETURN(ctmv(tpl[k]));
      END_IF;
      ef_eq_t : IF ('LIST' IN TYPEOF(v1)) AND ('LIST' IN TYPEOF(v2))
      THEN
        lgc := equal_maths_values(v1, v2);
        IF lgc <> UNKNOWN
        THEN
          RETURN(ctmv(lgc));
        END_IF;
      END_IF;
      ef_ne_t : IF ('LIST' IN TYPEOF(v1)) AND ('LIST' IN TYPEOF(v2))
      THEN
        lgc := equal_maths_values(v1, v2);
        IF lgc <> UNKNOWN
        THEN
          RETURN(ctmv(NOT lgc));
        END_IF;
      END_IF;
      ef_concat_t : BEGIN  
                           tpl := [];
                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                             IF 'STRING' IN TYPEOF(vlist[i])
                             THEN
                               tp2 := vlist[i];
                               tpl := tpl + tp2;
                               REMOVE(vlist, i);
                             ELSE
                               IF SIZEOF(tpl) <> 0
                               THEN
                                 INSERT(vlist, ctmv(tpl), i);
                                 tpl := [];
                               END_IF;
                             END_IF;
                           END_REPEAT;
                           IF SIZEOF(vlist) = 0
                           THEN
                             RETURN(ctmv(tpl));
                           END_IF;
                           IF SIZEOF(tpl) <> 0
                           THEN
                             INSERT(vlist, ctmv(tpl), 0);
                           END_IF;
                           IF SIZEOF(vlist) = 1
                           THEN
                             RETURN(vlist[1]);
                           END_IF;
      END;
      ef_size_t : IF 'LIST' IN TYPEOF(v1)
      THEN
        tpl := v1;
        RETURN(ctmv(SIZEOF(tpl)));
      END_IF;
      ef_entuple : RETURN(ctmv(vlist));
      ef_detuple : IF 'LIST' IN TYPEOF(v1)
      THEN
        tpl := v1;
        RETURN(ctmv(tpl[1]));
      END_IF;
      ef_insert : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v3))
      THEN
        tpl := v1;
        k := v3;
        INSERT(tpl, v2, k);
        RETURN(ctmv(tpl));
      END_IF;
      ef_remove : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
      THEN
        tpl := v1;
        k := v2;
        REMOVE(tpl, k);
        RETURN(ctmv(tpl));
      END_IF;
      ef_sum_it : IF good_t(v1, 'INTEGER')
      THEN
        tpl := v1;
        j := 0;
        REPEAT i := 1 TO SIZEOF(tpl);
          j := j + tpl[i];
        END_REPEAT;
        RETURN(ctmv(j));
      END_IF;
      ef_product_it : IF good_t(v1, 'INTEGER')
      THEN
        tpl := v1;
        j := 1;
        REPEAT i := 1 TO SIZEOF(tpl);
          j := j * tpl[i];
        END_REPEAT;
        RETURN(ctmv(j));
      END_IF;
      ef_add_it : BEGIN  
                         boo := FALSE;
                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                           IF good_t(vlist[i], 'INTEGER')
                           THEN
                             IF NOT boo
                             THEN
                               tpl := vlist[i];
                               boo := TRUE;
                             ELSE
                               tp2 := vlist[i];
                               IF SIZEOF(tpl) <> SIZEOF(tp2)
                               THEN
                                 RETURN(?);
                               END_IF;
                               REPEAT l := 1 TO SIZEOF(tpl);
                                 tpl[j] := tpl[j] + tp2[j];
                               END_REPEAT;
                             END_IF;
                             REMOVE(vlist, i);
                           END_IF;
                         END_REPEAT;
                         IF SIZEOF(vlist) = 0
                         THEN
                           RETURN(ctmv(tpl));
                         END_IF;
                         IF boo
                         THEN
                           INSERT(vlist, ctmv(tpl), 0);
                         END_IF;
                         IF SIZEOF(vlist) = 1
                         THEN
                           RETURN(vlist[1]);
                         END_IF;
      END;
      ef_subtract_it : IF good_t(v1, 'INTEGER') AND good_t(v2, 'INTEGER')
      THEN
        tpl := v1;
        tp2 := v2;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          tpl[i] := tpl[i] - tp2[i];
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_scalar_mult_it : IF ('INTEGER' IN TYPEOF(v1)) AND good_t(v2, 'INTEGER')
      THEN
        j := v1;
        tpl := v2;
        REPEAT i := 1 TO SIZEOF(tpl);
          tpl[i] := j * tpl[i];
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_dot_prod_it : IF good_t(v1, 'INTEGER') AND good_t(v2, 'INTEGER')
      THEN
        tpl := v1;
        tp2 := v2;
        j := 0;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          j := j + tpl[i] * tp2[i];
        END_REPEAT;
        RETURN(ctmv(j));
      END_IF;
      ef_sum_rt : IF good_t(v1, 'REAL')
      THEN
        tpl := v1;
        r := 0.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          r := r + tpl[i];
        END_REPEAT;
        RETURN(ctmv(r));
      END_IF;
      ef_product_rt : IF good_t(v1, 'REAL')
      THEN
        tpl := v1;
        r := 1.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          r := r * tpl[i];
        END_REPEAT;
        RETURN(ctmv(r));
      END_IF;
      ef_add_rt : BEGIN  
                         boo := FALSE;
                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                           IF good_t(vlist[i], 'REAL')
                           THEN
                             IF NOT boo
                             THEN
                               tpl := vlist[i];
                               boo := TRUE;
                             ELSE
                               tp2 := vlist[i];
                               IF SIZEOF(tpl) <> SIZEOF(tp2)
                               THEN
                                 RETURN(?);
                               END_IF;
                               REPEAT l := 1 TO SIZEOF(tpl);
                                 tpl[j] := tpl[j] + tp2[j];
                               END_REPEAT;
                             END_IF;
                             REMOVE(vlist, i);
                           END_IF;
                         END_REPEAT;
                         IF SIZEOF(vlist) = 0
                         THEN
                           RETURN(ctmv(tpl));
                         END_IF;
                         IF boo
                         THEN
                           INSERT(vlist, ctmv(tpl), 0);
                         END_IF;
                         IF SIZEOF(vlist) = 1
                         THEN
                           RETURN(vlist[1]);
                         END_IF;
      END;
      ef_subtract_rt : IF good_t(v1, 'REAL') AND good_t(v2, 'REAL')
      THEN
        tpl := v1;
        tp2 := v2;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          tpl[i] := tpl[i] - tp2[i];
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_scalar_mult_rt : IF ('REAL' IN TYPEOF(v1)) AND good_t(v2, 'REAL')
      THEN
        r := v1;
        tpl := v2;
        REPEAT i := 1 TO SIZEOF(tpl);
          tpl[i] := r * tpl[i];
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_dot_prod_rt : IF good_t(v1, 'REAL') AND good_t(v2, 'REAL')
      THEN
        tpl := v1;
        tp2 := v2;
        r := 0;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          r := r + tpl[i] * tp2[i];
        END_REPEAT;
        RETURN(ctmv(r));
      END_IF;
      ef_norm_rt : IF good_t(v1, 'REAL')
      THEN
        tpl := v1;
        r := 0.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          r := r + tpl[i] * tpl[i];
        END_REPEAT;
        RETURN(ctmv(SQRT(r)));
      END_IF;
      ef_sum_ct : IF good_t(v1, cnlit)
      THEN
        tpl := v1;
        p := 0.0;
        q := 0.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], r, s);
          p := p + r;
          q := q + s;
        END_REPEAT;
        RETURN(makec(p, q));
      END_IF;
      ef_product_ct : IF good_t(v1, cnlit)
      THEN
        tpl := v1;
        p := 1.0;
        q := 0.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], r, s);
          p := p * r - q * s;
          q := p * s + q * r;
        END_REPEAT;
        RETURN(makec(p, q));
      END_IF;
      ef_add_ct : BEGIN  
                         boo := FALSE;
                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
                           IF good_t(vlist[i], cnlit)
                           THEN
                             IF NOT boo
                             THEN
                               tpl := vlist[i];
                               boo := TRUE;
                             ELSE
                               tp2 := vlist[i];
                               IF SIZEOF(tpl) <> SIZEOF(tp2)
                               THEN
                                 RETURN(?);
                               END_IF;
                               REPEAT l := 1 TO SIZEOF(tpl);
                                 parts(tpl[j], p, q);
                                 parts(tp2[j], r, s);
                                 tpl[j] := makec(p + r, q + s);
                               END_REPEAT;
                             END_IF;
                             REMOVE(vlist, i);
                           END_IF;
                         END_REPEAT;
                         IF SIZEOF(vlist) = 0
                         THEN
                           RETURN(ctmv(tpl));
                         END_IF;
                         IF boo
                         THEN
                           INSERT(vlist, ctmv(tpl), 0);
                         END_IF;
                         IF SIZEOF(vlist) = 1
                         THEN
                           RETURN(vlist[1]);
                         END_IF;
      END;
      ef_subtract_ct : IF good_t(v1, cnlit) AND good_t(v2, cnlit)
      THEN
        tpl := v1;
        tp2 := v2;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], p, q);
          parts(tp2[i], r, s);
          tpl[i] := makec(p - r, q - s);
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_scalar_mult_ct : IF (cnlit IN TYPEOF(v1)) AND good_t(v2, cnlit)
      THEN
        parts(v1, p, q);
        tpl := v2;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], r, s);
          tpl[i] := makec(p * r - q * s, p * s + q * r);
        END_REPEAT;
        RETURN(ctmv(tpl));
      END_IF;
      ef_dot_prod_ct : IF good_t(v1, cnlit) AND good_t(v2, cnlit)
      THEN
        tpl := v1;
        tp2 := v2;
        t := 0.0;
        u := 0.0;
        IF SIZEOF(tpl) <> SIZEOF(tp2)
        THEN
          RETURN(?);
        END_IF;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], p, q);
          parts(tp2[i], r, s);
          t := t + p * r + q * s;
          u := u + q * r - p * s;
        END_REPEAT;
        RETURN(makec(t, u));
      END_IF;
      ef_norm_ct : IF good_t(v1, cnlit)
      THEN
        tpl := v1;
        r := 0.0;
        REPEAT i := 1 TO SIZEOF(tpl);
          parts(tpl[i], p, q);
          r := r + p * p + q * q;
        END_REPEAT;
        RETURN(ctmv(SQRT(r)));
      END_IF;
      ef_if, ef_if_i, ef_if_r, ef_if_c, ef_if_s, ef_if_b, ef_if_t : IF 'LOGICAL' IN TYPEOF(v1)
      THEN
        lgc := v1;
        IF lgc
        THEN
          RETURN(v2);
        ELSE
          RETURN(v3);
        END_IF;
      END_IF;
      ef_ensemble : RETURN(make_finite_space(mem + vlist));
      ef_member_of : IF (schema_prefix + 'MATHS_SPACE') IN TYPEOF(v2)
      THEN
        lgc := member_of(v1, v2);
        IF lgc <> UNKNOWN
        THEN
          RETURN(ctmv(lgc));
        END_IF;
      END_IF;
    END_CASE;
    RETURN(make_function_application(expr.func, vlist));
  END_IF;
      IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN types
  THEN
    gexpr := substitute(expr.func\abstracted_expression_function.expr, expr.func\quantifier_expression.variables, vlist);
    RETURN(simplify_generic_expression(gexpr));
  END_IF;
      IF 'FINITE_FUNCTION' IN types
  THEN
    pairs := expr.func\finite_function.pairs;
    REPEAT i := 1 TO SIZEOF(pairs);
      IF equal_maths_values(vlist[1], pairs[i][1])
      THEN
        RETURN(simplify_maths_value(pairs[i][2]));
      END_IF;
    END_REPEAT;
    RETURN(make_function_application(expr.func, vlist));
  END_IF;
      RETURN(expr);
END_FUNCTION;

FUNCTION simplify_generic_expression
 (expr : generic_expression) : maths_value;
FUNCTION restore_unary(expr : unary_generic_expression;
                                        opnd : generic_expression) : generic_expression;
    expr.operand := opnd;
    RETURN(expr);
  END_FUNCTION;
  FUNCTION restore_binary(expr : binary_generic_expression;
                          opd1 : generic_expression;
                          opd2 : generic_expression) : generic_expression;
    expr.operands[1] := opd1;
    expr.operands[2] := opd2;
    RETURN(expr);
  END_FUNCTION;
  FUNCTION restore_mulary(expr : multiple_arity_generic_expression;
                          ops : LIST OF generic_expression) : generic_expression;
    expr.operands := ops;
    RETURN(expr);
  END_FUNCTION;
  FUNCTION make_number_literal(nmb : NUMBER) : generic_literal;
    IF 'INTEGER' IN TYPEOF(nmb)
    THEN
      RETURN(make_int_literal(nmb));
    END_IF;
    RETURN(make_real_literal(nmb));
  END_FUNCTION;
    LOCAL
  types : SET OF STRING := stripped_typeof(expr);
  v1 : maths_value;
  v2 : maths_value;
  vlist : LIST OF maths_value := [];
  op1 : generic_expression;
  op2 : generic_expression;
  oplist : LIST OF generic_expression := [];
  opnds : LIST [2 : ?] OF generic_expression;
  n : INTEGER;
  m : INTEGER;
  finfun : maths_function_select;
  boo : BOOLEAN;
  str : STRING;
  nmb : NUMBER;
    END_LOCAL;
      -- Unwrap the elementary kinds of literals
      IF 'INT_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\int_literal.the_value));
  END_IF;
      IF 'REAL_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\real_literal.the_value));
  END_IF;
      IF 'BOOLEAN_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\boolean_literal.the_value));
  END_IF;
      IF 'STRING_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\string_literal.the_value));
  END_IF;
      IF 'COMPLEX_NUMBER_LITERAL' IN types
  THEN
    RETURN(expr);
  END_IF;
      IF 'LOGICAL_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\logical_literal.lit_value));
  END_IF;
      IF 'BINARY_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\binary_literal.lit_value));
  END_IF;
      IF 'MATHS_ENUM_LITERAL' IN types
  THEN
    RETURN(expr\maths_enum_literal.lit_value);
  END_IF;
      IF 'REAL_TUPLE_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\real_tuple_literal.lit_value));
  END_IF;
      IF 'INTEGER_TUPLE_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\integer_tuple_literal.lit_value));
  END_IF;
      IF 'ATOM_BASED_LITERAL' IN types
  THEN
    RETURN(expr\atom_based_literal.lit_value);
  END_IF;
      IF 'MATHS_TUPLE_LITERAL' IN types
  THEN
    RETURN(convert_to_maths_value(expr\maths_tuple_literal.lit_value));
  END_IF;
      -- Simplify one special class of literals
      IF 'MATHS_SPACE' IN types
  THEN
    RETURN(simplify_maths_space(expr));
  END_IF;
      -- Simplify one special kind of expression
      IF 'FUNCTION_APPLICATION' IN types
  THEN
    RETURN(simplify_function_application(expr));
  END_IF;
      -- Separate and simplify the operands
      IF 'UNARY_GENERIC_EXPRESSION' IN types
  THEN
    v1 := simplify_generic_expression(expr\unary_generic_expression.operand);
    op1 := convert_to_operand(v1);
  END_IF;
      IF 'BINARY_GENERIC_EXPRESSION' IN types
  THEN
    v1 := simplify_generic_expression(expr\binary_generic_expression.operands[1]);
    op1 := convert_to_operand(v1);
    v2 := simplify_generic_expression(expr\binary_generic_expression.operands[2]);
    op2 := convert_to_operand(v2);
  END_IF;
      IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
  THEN
    opnds := expr\multiple_arity_generic_expression.operands;
    REPEAT i := 1 TO SIZEOF(opnds);
      v1 := simplify_generic_expression(opnds[i]);
      INSERT(vlist, v1, i - 1);
      INSERT(oplist, convert_to_operand(v1), i - 1);
    END_REPEAT;
  END_IF;
      -- Simplify the one kind of maths_function which derives its operands.
      IF 'PARALLEL_COMPOSED_FUNCTION' IN types
  THEN
    v1 := vlist[1];
    n := SIZEOF(vlist);
    finfun := vlist[n];
    REMOVE(vlist, n);
    REMOVE(vlist, 1);
    RETURN(make_parallel_composed_function(v1, vlist, finfun));
  END_IF;
      -- Simplify individual kinds of expressions.  It is not necessary to cover all cases.
      IF ('ABS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(ABS(v1)));
  END_IF;
      IF ('ACOS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(ACOS(v1)));
  END_IF;
      IF 'AND_EXPRESSION' IN types
  THEN
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'BOOLEAN' IN TYPEOF(vlist[i])
      THEN
        boo := vlist[i];
        IF NOT boo
        THEN
          RETURN(convert_to_maths_value(FALSE));
        END_IF;
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(TRUE));
    END_IF;
    IF SIZEOF(oplist) = 1
    THEN
      RETURN(oplist[1]);
    END_IF;
  END_IF;
      IF ('ASIN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(ASIN(v1)));
  END_IF;
      IF ('ATAN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(ATAN(v1, v2)));
  END_IF;
      IF ('COMPARISON_EXPRESSION' IN types) AND
         ((('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))) OR
          (('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))) OR
          (('BOOLEAN' IN TYPEOF(v1)) AND ('BOOLEAN' IN TYPEOF(v2))))
  THEN
    IF 'COMPARISON_EQUAL' IN types
    THEN
      boo := bool(v1 = v2);
    ELSE
      IF 'COMPARISON_GREATER' IN types
      THEN
        boo := bool(v1 > v2);
      ELSE
        IF 'COMPARISON_GREATER_EQUAL' IN types
        THEN
          boo := bool(v1 >= v2);
        ELSE
          IF 'COMPARISON_LESS' IN types
          THEN
            boo := bool(v1 < v2);
          ELSE
            IF 'COMPARISON_LESS_EQUAL' IN types
            THEN
              boo := bool(v1 <= v2);
            ELSE
              IF 'COMPARISON_NOT_EQUAL' IN types
              THEN
                boo := bool(v1 <> v2);
              ELSE
                IF 'LIKE_EXPRESSION' IN types
                THEN
                  boo := bool(v1 LIKE v2);
                ELSE
                  RETURN(?);
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
    RETURN(convert_to_maths_value(boo));
  END_IF;
      IF 'CONCAT_EXPRESSION' IN types
  THEN
    str := '';
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'STRING' IN TYPEOF(vlist[i])
      THEN
        str := vlist[i] + str;
        REMOVE(oplist, i);
      ELSE
        IF LENGTH(str) > 0
        THEN
          INSERT(oplist, make_string_literal(str), i);
          str := '';
        END_IF;
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(str));
    END_IF;
    IF LENGTH(str) > 0
    THEN
      INSERT(oplist, make_string_literal(str), 0);
    END_IF;
    IF SIZEOF(oplist) = 1
    THEN
      RETURN(oplist[1]);
    END_IF;
  END_IF;
      IF ('COS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(COS(v1)));
  END_IF;
      IF ('DIV_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 DIV v2));
  END_IF;
      IF 'EQUALS_EXPRESSION' IN types
  THEN
    opnds := expr\binary_generic_expression.operands;
    RETURN(convert_to_maths_value(opnds[1] :=: opnds[2]));
  END_IF;
      IF ('EXP_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(EXP(v1)));
  END_IF;
      IF ('FORMAT_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(FORMAT(v1, v2)));
  END_IF;
      IF ('INDEX_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    str := v1;
    n := v2;
    RETURN(convert_to_maths_value(str[n]));
  END_IF;
      IF ('INT_VALUE_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(VALUE(v1)));
  END_IF;
      IF 'INTERVAL_EXPRESSION' IN types
  THEN
    str := '';
    IF 'NUMBER' IN TYPEOF(vlist[1])
    THEN
      str := 'NUMBER';
    END_IF;
    IF 'STRING' IN TYPEOF(vlist[1])
    THEN
      str := 'STRING';
    END_IF;
    IF 'BOOLEAN' IN TYPEOF(vlist[1])
    THEN
      str := 'BOOLEAN';
    END_IF;
    IF (LENGTH(str) > 0) AND (str IN TYPEOF(vlist[2])) AND (str IN TYPEOF(vlist[3]))
    THEN
      RETURN(convert_to_maths_value({vlist[1] <= vlist[2] <= vlist[3]}));
    END_IF;
  END_IF;
      IF ('LENGTH_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(LENGTH(v1)));
  END_IF;
      IF ('LOG_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(LOG(v1)));
  END_IF;
      IF ('LOG10_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(LOG10(v1)));
  END_IF;
      IF ('LOG2_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(LOG2(v1)));
  END_IF;
      IF 'MAXIMUM_EXPRESSION' IN types
  THEN
    boo := FALSE;
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'NUMBER' IN TYPEOF(vlist[i])
      THEN
        IF boo
        THEN
          IF nmb < vlist[i]
          THEN
            nmb := vlist[i];
          END_IF;
        ELSE
          nmb := vlist[i];
          boo := TRUE;
        END_IF;
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(nmb));
    END_IF;
    IF boo
    THEN
      INSERT(oplist, make_number_literal(nmb), 0);
    END_IF;
  END_IF;
      IF 'MINIMUM_EXPRESSION' IN types
  THEN
    boo := FALSE;
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'NUMBER' IN TYPEOF(vlist[i])
      THEN
        IF boo
        THEN
          IF nmb > vlist[i]
          THEN
            nmb := vlist[i];
          END_IF;
        ELSE
          nmb := vlist[i];
          boo := TRUE;
        END_IF;
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(nmb));
    END_IF;
    IF boo
    THEN
      INSERT(oplist, make_number_literal(nmb), 0);
    END_IF;
  END_IF;
      IF ('MINUS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 - v2));
  END_IF;
      IF ('MOD_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 MOD v2));
  END_IF;
      IF 'MULT_EXPRESSION' IN types
  THEN
    nmb := 1;
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'NUMBER' IN TYPEOF(vlist[i])
      THEN
        nmb := nmb * vlist[i];
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(nmb));
    END_IF;
    IF nmb <> 1
    THEN
      INSERT(oplist, make_number_literal(nmb), 0);
    END_IF;
    IF SIZEOF(oplist) = 1
    THEN
      RETURN(oplist[1]);
    END_IF;
  END_IF;
      IF ('NOT_EXPRESSION' IN types) AND ('BOOLEAN' IN TYPEOF(v1))
  THEN
    boo := v1;
    RETURN(convert_to_maths_value(NOT (boo)));
  END_IF;
      IF ('ODD_EXPRESSION' IN types) AND ('INTEGER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(ODD(v1)));
  END_IF;
      IF 'OR_EXPRESSION' IN types
  THEN
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'BOOLEAN' IN TYPEOF(vlist[i])
      THEN
        boo := vlist[i];
        IF boo
        THEN
          RETURN(convert_to_maths_value(TRUE));
        END_IF;
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(FALSE));
    END_IF;
    IF SIZEOF(oplist) = 1
    THEN
      RETURN(oplist[1]);
    END_IF;
  END_IF;
      IF 'PLUS_EXPRESSION' IN types
  THEN
    nmb := 0;
    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
      IF 'NUMBER' IN TYPEOF(vlist[i])
      THEN
        nmb := nmb + vlist[i];
        REMOVE(oplist, i);
      END_IF;
    END_REPEAT;
    IF SIZEOF(oplist) = 0
    THEN
      RETURN(convert_to_maths_value(nmb));
    END_IF;
    IF nmb <> 0
    THEN
      INSERT(oplist, make_number_literal(nmb), 0);
    END_IF;
    IF SIZEOF(oplist) = 1
    THEN
      RETURN(oplist[1]);
    END_IF;
  END_IF;
      IF ('POWER_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 ** v2));
  END_IF;
      IF ('SIN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(SIN(v1)));
  END_IF;
      IF ('SLASH_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 / v2));
  END_IF;
      IF ('SQUARE_ROOT_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(SQRT(v1)));
  END_IF;
      IF ('SUBSTRING_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(vlist[1])) AND ('NUMBER' IN TYPEOF(vlist[2])) AND
         ('NUMBER' IN TYPEOF(vlist[3]))
  THEN
    str := vlist[1];
    n := vlist[2];
    m := vlist[3];
    RETURN(convert_to_maths_value(str[n:m]));
  END_IF;
      IF ('TAN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(TAN(v1)));
  END_IF;
      IF ('UNARY_MINUS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
  THEN
    nmb := v1;
    RETURN(convert_to_maths_value(-nmb));
  END_IF;
      IF ('VALUE_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
  THEN
    RETURN(convert_to_maths_value(VALUE(v1)));
  END_IF;
      IF ('XOR_EXPRESSION' IN types) AND ('BOOLEAN' IN TYPEOF(v1)) AND ('BOOLEAN' IN TYPEOF(v2))
  THEN
    RETURN(convert_to_maths_value(v1 XOR v2));
  END_IF;
      -- No special simplification defined, return same with simplified operands.
      IF 'UNARY_GENERIC_EXPRESSION' IN types
  THEN
    RETURN(restore_unary(expr, op1));
  END_IF;
      IF 'BINARY_GENERIC_EXPRESSION' IN types
  THEN
    RETURN(restore_binary(expr, op1, op2));
  END_IF;
      IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
  THEN
    RETURN(restore_mulary(expr, oplist));
  END_IF;
      -- Should be unreachable, but for safety, return unsimplified expression.
      RETURN(expr);
END_FUNCTION;

FUNCTION simplify_maths_space
 (spc : maths_space) : maths_space;
  LOCAL
  stypes : SET OF STRING := stripped_typeof(spc);
  sset : SET OF maths_value;
  zset : SET OF maths_value := [];
  zval : maths_value;
  zspc : maths_space;
  zallint : BOOLEAN := TRUE;
  zint : INTEGER;
  zmin : INTEGER;
  zmax : INTEGER;
  factors : LIST OF maths_space;
  zfactors : LIST OF maths_space := [];
  rspc : maths_space;
    END_LOCAL;
      IF 'FINITE_SPACE' IN stypes
  THEN
    sset := spc\finite_space.members;
    REPEAT i := 1 TO SIZEOF(sset);
      zval := simplify_maths_value(sset[i]);
      zset := zset + [zval];
      IF zallint AND ('INTEGER' IN TYPEOF(zval))
      THEN
        zint := zval;
        IF i = 1
        THEN
          zmin := zint;
          zmax := zint;
        ELSE
          IF zint < zmin
          THEN
            zmin := zint;
          END_IF;
          IF zint > zmax
          THEN
            zmax := zint;
          END_IF;
        END_IF;
      ELSE
        zallint := FALSE;
      END_IF;
    END_REPEAT;
    IF zallint AND (SIZEOF(zset) = zmax - zmin + 1)
    THEN
      RETURN(make_finite_integer_interval(zmin, zmax));
    END_IF;
    RETURN(make_finite_space(zset));
  END_IF;
      IF 'UNIFORM_PRODUCT_SPACE' IN stypes
  THEN
    zspc := simplify_maths_space(spc\uniform_product_space.base);
    RETURN(make_uniform_product_space(zspc, spc\uniform_product_space.exponent));
  END_IF;
      IF 'LISTED_PRODUCT_SPACE' IN stypes
  THEN
    factors := spc\listed_product_space.factors;
    REPEAT i := 1 TO SIZEOF(factors);
      INSERT(zfactors, simplify_maths_space(factors[i]), i - 1);
    END_REPEAT;
    RETURN(make_listed_product_space(zfactors));
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN stypes
  THEN
    zspc := simplify_maths_space(spc\extended_tuple_space.base);
    rspc := simplify_maths_space(spc\extended_tuple_space.extender);
    RETURN(make_extended_tuple_space(zspc, rspc));
  END_IF;
      IF 'FUNCTION_SPACE' IN stypes
  THEN
    zspc := simplify_maths_space(spc\function_space.domain_argument);
    rspc := simplify_maths_space(spc\function_space.range_argument);
    RETURN(make_function_space(spc\function_space.domain_constraint, zspc, spc\function_space.range_constraint, rspc));
  END_IF;
      RETURN(spc);
END_FUNCTION;

FUNCTION simplify_maths_value
 (val : maths_value) : maths_value;
  LOCAL
  vtypes : SET OF STRING := stripped_typeof(val);
  vlist : LIST OF maths_value;
  nlist : LIST OF maths_value := [];
    END_LOCAL;
      IF 'GENERIC_EXPRESSION' IN vtypes
  THEN
    RETURN(simplify_generic_expression(val));
  END_IF;
      IF 'LIST' IN vtypes
  THEN
    vlist := val;
    REPEAT i := 1 TO SIZEOF(vlist);
      INSERT(nlist, simplify_maths_value(vlist[i]), i - 1);
    END_REPEAT;
    RETURN(convert_to_maths_value(nlist));
  END_IF;
      RETURN(val);
END_FUNCTION;

FUNCTION singleton_member_of
 (spc : maths_space) : maths_value;
  LOCAL
  types : SET OF STRING := stripped_typeof(spc);
    END_LOCAL;
      IF 'FINITE_SPACE' IN types
  THEN
    IF SIZEOF(spc\finite_space.members) = 1
    THEN
      RETURN(spc\finite_space.members[1]);
    END_IF;
    RETURN(?);
  END_IF;
      IF 'FINITE_INTEGER_INTERVAL' IN types
  THEN
    IF spc\finite_integer_interval.size = 1
    THEN
      RETURN(spc\finite_integer_interval.min);
    END_IF;
    RETURN(?);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION sort_link_associations
 (aprr : SET[1:?] OF pair_representation_relationship; one_not_two : BOOLEAN) : SET OF kinematic_link_representation;
  LOCAL
  result : SET OF kinematic_link_representation := [];
    END_LOCAL;
      IF one_not_two
  THEN
    REPEAT i := 1 TO HIINDEX(aprr);
      result := result + aprr[i].rep_1;
    END_REPEAT;
  ELSE
    REPEAT i := 1 TO HIINDEX(aprr);
      result := result + aprr[i].rep_2;
    END_REPEAT;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION space_dimension
 (tspace : tuple_space) : nonnegative_integer;
  LOCAL
  types : SET OF STRING := TYPEOF(tspace);
    END_LOCAL;
      IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN types
  THEN
    RETURN(tspace\uniform_product_space.exponent);
  END_IF;
      IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN types
  THEN
    RETURN(SIZEOF(tspace\listed_product_space.factors));
  END_IF;
      IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
  THEN
    RETURN(space_dimension(tspace\extended_tuple_space.base));
  END_IF;
      -- Should be unreachable
      RETURN(?);
END_FUNCTION;

FUNCTION space_is_continuum
 (space : maths_space) : BOOLEAN;
  LOCAL
  typenames : SET OF STRING := TYPEOF(space);
  factors : LIST OF maths_space;
    END_LOCAL;
      IF NOT EXISTS(space)
  THEN
    RETURN(FALSE);
  END_IF;
      IF subspace_of_es(space, es_reals) OR subspace_of_es(space, es_complex_numbers)
  THEN
    RETURN(TRUE);
  END_IF;
      IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
  THEN
    RETURN(space_is_continuum(space\uniform_product_space.base));
  END_IF;
      IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
  THEN
    factors := space\listed_product_space.factors;
    IF SIZEOF(factors) = 0
    THEN
      RETURN(FALSE);
    END_IF;
    REPEAT i := 1 TO SIZEOF(factors);
      IF NOT space_is_continuum(factors[i])
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    RETURN(TRUE);
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION space_is_singleton
 (spc : maths_space) : BOOLEAN;
  LOCAL
  types : SET OF STRING := stripped_typeof(spc);
    END_LOCAL;
      IF 'FINITE_SPACE' IN types
  THEN
    RETURN(bool(SIZEOF(spc\finite_space.members) = 1));
  END_IF;
      IF 'FINITE_INTEGER_INTERVAL' IN types
  THEN
    RETURN(bool(spc\finite_integer_interval.size = 1));
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION stripped_typeof
 (arg : GENERIC : G) : SET OF STRING;
  LOCAL
  types : SET OF STRING := TYPEOF(arg);
  stypes : SET OF STRING := [];
  n : INTEGER := LENGTH(schema_prefix);
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(types);
    IF types[i][1:n] = schema_prefix
    THEN
      stypes := stypes + types[i][n + 1:LENGTH(types[i])];
    ELSE
      stypes := stypes + types[i];
    END_IF;
  END_REPEAT;
      RETURN(stypes);
END_FUNCTION;

FUNCTION sts_get_general_datum_reference
 (input : datum_reference_element) : general_datum_reference;
  LOCAL
  general_datum_reference_bag : BAG OF general_datum_reference := (USEDIN(input, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_DATUM_REFERENCE.BASE'));
    END_LOCAL;
      IF SIZEOF(general_datum_reference_bag) = 1
  THEN
    RETURN(general_datum_reference_bag[1]);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION sts_get_product_definition_shape
 (input : geometric_tolerance_target) : product_definition_shape;
    CASE TRUE OF
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION' IN
     TYPEOF(input)) : RETURN(input\shape_aspect_relationship.relating_shape_aspect\shape_aspect.of_shape);
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN
     TYPEOF(input)) : RETURN(input\dimensional_size.applies_to\shape_aspect.of_shape);
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(input)) : RETURN(input);
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
     TYPEOF(input)) : RETURN(input\shape_aspect.of_shape);
    OTHERWISE: RETURN(?);
  END_CASE;
END_FUNCTION;

FUNCTION subspace_of
 (space1 : maths_space; space2 : maths_space) : LOGICAL;
  LOCAL
  spc1 : maths_space := simplify_maths_space(space1);
  spc2 : maths_space := simplify_maths_space(space2);
  types1 : SET OF STRING := stripped_typeof(spc1);
  types2 : SET OF STRING := stripped_typeof(spc2);
  lgcl : LOGICAL;
  cum : LOGICAL;
  es_val : elementary_space_enumerators;
  bnd1 : REAL;
  bnd2 : REAL;
  n : INTEGER;
  sp1 : maths_space;
  sp2 : maths_space;
  prgn1 : polar_complex_number_region;
  prgn2 : polar_complex_number_region;
  aitv : finite_real_interval;
    END_LOCAL;
      IF NOT EXISTS(spc1) OR NOT EXISTS(spc2)
  THEN
    RETURN(FALSE);
  END_IF;
      IF spc2 = the_generics
  THEN
    RETURN(TRUE);
  END_IF;
      IF 'ELEMENTARY_SPACE' IN types1
  THEN
    IF NOT ('ELEMENTARY_SPACE' IN types2)
    THEN
      RETURN(FALSE);
    END_IF;
    es_val := spc2\elementary_space.space_id;
    IF spc1\elementary_space.space_id = es_val
    THEN
      RETURN(TRUE);
    END_IF;
    CASE spc1\elementary_space.space_id OF
      es_numbers : RETURN(FALSE);
      es_complex_numbers : RETURN(es_val = es_numbers);
      es_reals : RETURN(es_val = es_numbers);
      es_integers : RETURN(es_val = es_numbers);
      es_logicals : RETURN(FALSE);
      es_booleans : RETURN(es_val = es_logicals);
      es_strings : RETURN(FALSE);
      es_binarys : RETURN(FALSE);
      es_maths_spaces : RETURN(FALSE);
      es_maths_functions : RETURN(FALSE);
      es_generics : RETURN(FALSE);
    END_CASE;
    RETURN(UNKNOWN);
  END_IF;
      IF 'FINITE_INTEGER_INTERVAL' IN types1
  THEN
    cum := TRUE;
    REPEAT i := spc1\finite_integer_interval.min TO spc1\finite_integer_interval.max;
      cum := cum AND member_of(i, spc2);
      IF cum = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    RETURN(cum);
  END_IF;
      IF 'INTEGER_INTERVAL_FROM_MIN' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_integers));
    END_IF;
    IF 'INTEGER_INTERVAL_FROM_MIN' IN types2
    THEN
      RETURN(spc1\integer_interval_from_min.min >= spc2\integer_interval_from_min.min);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'INTEGER_INTERVAL_TO_MAX' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_integers));
    END_IF;
    IF 'INTEGER_INTERVAL_TO_MAX' IN types2
    THEN
      RETURN(spc1\integer_interval_to_max.max <= spc2\integer_interval_to_max.max);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FINITE_REAL_INTERVAL' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_reals));
    END_IF;
    IF ('FINITE_REAL_INTERVAL' IN types2) OR ('REAL_INTERVAL_FROM_MIN' IN types2) OR ('REAL_INTERVAL_TO_MAX' IN types2)
    THEN
      IF min_exists(spc2)
      THEN
        bnd1 := spc1\finite_real_interval.min;
        bnd2 := real_min(spc2);
        IF (bnd1 < bnd2) OR ((bnd1 = bnd2) AND min_included(spc1) AND NOT min_included(spc2))
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      IF max_exists(spc2)
      THEN
        bnd1 := spc1\finite_real_interval.max;
        bnd2 := real_max(spc2);
        IF (bnd1 > bnd2) OR ((bnd1 = bnd2) AND max_included(spc1) AND NOT max_included(spc2))
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      RETURN(TRUE);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'REAL_INTERVAL_FROM_MIN' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_reals));
    END_IF;
    IF 'REAL_INTERVAL_FROM_MIN' IN types2
    THEN
      bnd1 := spc1\real_interval_from_min.min;
      bnd2 := spc2\real_interval_from_min.min;
      RETURN((bnd2 < bnd1) OR ((bnd2 = bnd1) AND (min_included(spc2) OR NOT min_included(spc1))));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'REAL_INTERVAL_TO_MAX' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_reals));
    END_IF;
    IF 'REAL_INTERVAL_TO_MAX' IN types2
    THEN
      bnd1 := spc1\real_interval_to_max.max;
      bnd2 := spc2\real_interval_to_max.max;
      RETURN((bnd2 > bnd1) OR ((bnd2 = bnd1) AND (max_included(spc2) OR NOT max_included(spc1))));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_complex_numbers));
    END_IF;
    IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types2
    THEN
      RETURN(subspace_of(spc1\cartesian_complex_number_region.real_constraint, spc2\cartesian_complex_number_region.real_constraint) AND
             subspace_of(spc1\cartesian_complex_number_region.imag_constraint, spc2\cartesian_complex_number_region.imag_constraint));
    END_IF;
    IF 'POLAR_COMPLEX_NUMBER_REGION' IN types2
    THEN
      RETURN(subspace_of(enclose_cregion_in_pregion(spc1, spc2\polar_complex_number_region.centre), spc2));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'POLAR_COMPLEX_NUMBER_REGION' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      es_val := spc2\elementary_space.space_id;
      RETURN((es_val = es_numbers) OR (es_val = es_complex_numbers));
    END_IF;
    IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types2
    THEN
      RETURN(subspace_of(enclose_pregion_in_cregion(spc1), spc2));
    END_IF;
    IF 'POLAR_COMPLEX_NUMBER_REGION' IN types2
    THEN
      prgn1 := spc1;
      prgn2 := spc2;
      IF prgn1.centre = prgn2.centre
      THEN
        IF prgn2.direction_constraint.max > PI
        THEN
          aitv := make_finite_real_interval(-PI, open, prgn2.direction_constraint.max -
                                                       2.0 * PI, prgn2.direction_constraint.max_closure);
          RETURN(subspace_of(prgn1.distance_constraint, prgn2.distance_constraint) AND
                 (subspace_of(prgn1.direction_constraint, prgn2.direction_constraint) OR
                  subspace_of(prgn1.direction_constraint, aitv)));
        ELSE
          RETURN(subspace_of(prgn1.distance_constraint, prgn2.distance_constraint) AND
                 subspace_of(prgn1.direction_constraint, prgn2.direction_constraint));
        END_IF;
      END_IF;
      RETURN(subspace_of(enclose_pregion_in_pregion(prgn1, prgn2.centre), prgn2));
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FINITE_SPACE' IN types1
  THEN
    cum := TRUE;
    REPEAT i := 1 TO SIZEOF(spc1\finite_space.members);
      cum := cum AND member_of(spc1\finite_space.members[i], spc2);
      IF cum = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    RETURN(cum);
  END_IF;
      IF 'PRODUCT_SPACE' IN types1
  THEN
    IF 'PRODUCT_SPACE' IN types2
    THEN
      IF space_dimension(spc1) = space_dimension(spc2)
      THEN
        cum := TRUE;
        REPEAT i := 1 TO space_dimension(spc1);
          cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(cum);
      END_IF;
    END_IF;
    IF 'EXTENDED_TUPLE_SPACE' IN types2
    THEN
      IF space_dimension(spc1) >= space_dimension(spc2)
      THEN
        cum := TRUE;
        REPEAT i := 1 TO space_dimension(spc1);
          cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
          IF cum = FALSE
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(cum);
      END_IF;
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'EXTENDED_TUPLE_SPACE' IN types1
  THEN
    IF 'EXTENDED_TUPLE_SPACE' IN types2
    THEN
      n := space_dimension(spc1);
      IF n < space_dimension(spc2)
      THEN
        n := space_dimension(spc2);
      END_IF;
      cum := TRUE;
      REPEAT i := 1 TO n + 1;
        cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
        IF cum = FALSE
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
      RETURN(cum);
    END_IF;
    RETURN(FALSE);
  END_IF;
      IF 'FUNCTION_SPACE' IN types1
  THEN
    IF 'ELEMENTARY_SPACE' IN types2
    THEN
      RETURN(spc2\elementary_space.space_id = es_maths_functions);
    END_IF;
    IF 'FUNCTION_SPACE' IN types2
    THEN
      cum := TRUE;
      sp1 := spc1\function_space.domain_argument;
      sp2 := spc2\function_space.domain_argument;
      CASE spc1\function_space.domain_constraint OF
        sc_equal : BEGIN  
                          CASE spc2\function_space.domain_constraint OF
                            sc_equal : cum := cum AND equal_maths_spaces(sp1, sp2);
                            sc_subspace : cum := cum AND subspace_of(sp1, sp2);
                            sc_member : cum := cum AND member_of(sp1, sp2);
                          END_CASE;
        END;
        sc_subspace : BEGIN  
                             CASE spc2\function_space.domain_constraint OF
                               sc_equal : RETURN(FALSE);
                               sc_subspace : cum := cum AND subspace_of(sp1, sp2);
                               sc_member : BEGIN  
                                                  IF NOT member_of(sp1, sp2)
                                                  THEN
                                                    RETURN(FALSE);
                                                  END_IF;
                                                  cum := UNKNOWN;
                               END;
                             END_CASE;
        END;
        sc_member : BEGIN  
                           CASE spc2\function_space.domain_constraint OF
                             sc_equal : cum := cum AND space_is_singleton(sp1) AND
                                               equal_maths_spaces(singleton_member_of(sp1), sp2);
                             sc_subspace : BEGIN  
                                                  IF NOT member_of(sp2, sp1)
                                                  THEN
                                                    RETURN(FALSE);
                                                  END_IF;
                                                  cum := UNKNOWN;
                             END;
                             sc_member : cum := cum AND (subspace_of(sp1, sp2));
                           END_CASE;
        END;
      END_CASE;
      IF cum = FALSE
      THEN
        RETURN(FALSE);
      END_IF;
      sp1 := spc1\function_space.range_argument;
      sp2 := spc2\function_space.range_argument;
      CASE spc1\function_space.range_constraint OF
        sc_equal : BEGIN  
                          CASE spc2\function_space.range_constraint OF
                            sc_equal : cum := cum AND equal_maths_spaces(sp1, sp2);
                            sc_subspace : cum := cum AND subspace_of(sp1, sp2);
                            sc_member : cum := cum AND member_of(sp1, sp2);
                          END_CASE;
        END;
        sc_subspace : BEGIN  
                             CASE spc2\function_space.domain_constraint OF
                               sc_equal : RETURN(FALSE);
                               sc_subspace : cum := cum AND subspace_of(sp1, sp2);
                               sc_member : BEGIN  
                                                  IF NOT member_of(sp1, sp2)
                                                  THEN
                                                    RETURN(FALSE);
                                                  END_IF;
                                                  cum := UNKNOWN;
                               END;
                             END_CASE;
        END;
        sc_member : BEGIN  
                           CASE spc2\function_space.domain_constraint OF
                             sc_equal : cum := cum AND space_is_singleton(sp1) AND
                                               equal_maths_spaces(singleton_member_of(sp1), sp2);
                             sc_subspace : BEGIN  
                                                  IF NOT member_of(sp2, sp1)
                                                  THEN
                                                    RETURN(FALSE);
                                                  END_IF;
                                                  cum := UNKNOWN;
                             END;
                             sc_member : cum := cum AND subspace_of(sp1, sp2);
                           END_CASE;
        END;
      END_CASE;
      RETURN(cum);
    END_IF;
    RETURN(FALSE);
  END_IF;
      -- Should be unreachable
      RETURN(UNKNOWN);
END_FUNCTION;

FUNCTION subspace_of_es
 (spc : maths_space; es : elementary_space_enumerators) : LOGICAL;
  LOCAL
  types : SET OF STRING := stripped_typeof(spc);
    END_LOCAL;
      IF NOT EXISTS(spc) OR NOT EXISTS(es)
  THEN
    RETURN(FALSE);
  END_IF;
      IF 'ELEMENTARY_SPACE' IN types
  THEN
    RETURN(es_subspace_of_es(spc\elementary_space.space_id, es));
  END_IF;
      IF 'FINITE_SPACE' IN types
  THEN
    RETURN(all_members_of_es(spc\finite_space.members, es));
  END_IF;
      CASE es OF
    es_numbers : RETURN(('FINITE_INTEGER_INTERVAL' IN types) OR ('INTEGER_INTERVAL_FROM_MIN' IN types) OR
                        ('INTEGER_INTERVAL_TO_MAX' IN types) OR ('FINITE_REAL_INTERVAL' IN types) OR
                        ('REAL_INTERVAL_FROM_MIN' IN types) OR ('REAL_INTERVAL_TO_MAX' IN types) OR
                        ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types));
    es_complex_numbers : RETURN(('CARTESIAN_COMPLEX_NUMBER_REGION' IN types) OR
                                ('POLAR_COMPLEX_NUMBER_REGION' IN types));
    es_reals : RETURN(('FINITE_REAL_INTERVAL' IN types) OR ('REAL_INTERVAL_FROM_MIN' IN types) OR
                      ('REAL_INTERVAL_TO_MAX' IN types));
    es_integers : RETURN(('FINITE_INTEGER_INTERVAL' IN types) OR ('INTEGER_INTERVAL_FROM_MIN' IN types) OR
                         ('INTEGER_INTERVAL_TO_MAX' IN types));
    es_logicals : RETURN(FALSE);
    es_booleans : RETURN(FALSE);
    es_strings : RETURN(FALSE);
    es_binarys : RETURN(FALSE);
    es_maths_spaces : RETURN(FALSE);
    es_maths_functions : RETURN('FUNCTION_SPACE' IN types);
    es_generics : RETURN(TRUE);
  END_CASE;
      RETURN(UNKNOWN);
END_FUNCTION;

FUNCTION substitute
 (expr : generic_expression; vars : LIST[1:?] OF generic_variable; vals : LIST[1:?] OF maths_value) : generic_expression;
  LOCAL
  types : SET OF STRING := stripped_typeof(expr);
  opnds : LIST OF generic_expression;
  op1 : generic_expression;
  op2 : generic_expression;
  qvars : LIST OF generic_variable;
  srcdom : maths_space_or_function;
  prpfun : LIST [1 : ?] OF maths_function;
  finfun : maths_function_select;
    END_LOCAL;
      IF SIZEOF(vars) <> SIZEOF(vals)
  THEN
    RETURN(?);
  END_IF;
      IF 'GENERIC_LITERAL' IN types
  THEN
    RETURN(expr);
  END_IF;
      IF 'GENERIC_VARIABLE' IN types
  THEN
    REPEAT i := 1 TO SIZEOF(vars);
      IF expr :=: vars[i]
      THEN
        RETURN(vals[i]);
      END_IF;
    END_REPEAT;
    RETURN(expr);
  END_IF;
      IF 'QUANTIFIER_EXPRESSION' IN types
  THEN
    qvars := expr\quantifier_expression.variables;
    REPEAT i := SIZEOF(vars) TO 1 BY -1;
      IF vars[i] IN qvars
      THEN
        REMOVE(vars, i);
        REMOVE(vals, i);
      END_IF;
    END_REPEAT;
    opnds := expr\multiple_arity_generic_expression.operands;
    REPEAT i := 1 TO SIZEOF(opnds);
      IF NOT (opnds[i] IN qvars)
      THEN
        expr\multiple_arity_generic_expression.operands[i] := substitute(opnds[i], vars, vals);
      END_IF;
    END_REPEAT;
    RETURN(expr);
  END_IF;
      IF 'UNARY_GENERIC_EXPRESSION' IN types
  THEN
    op1 := expr\unary_generic_expression.operand;
    expr\unary_generic_expression.operand := substitute(op1, vars, vals);
  END_IF;
      IF 'BINARY_GENERIC_EXPRESSION' IN types
  THEN
    op1 := expr\binary_generic_expression.operands[1];
    expr\binary_generic_expression.operands[1] := substitute(op1, vars, vals);
    op2 := expr\binary_generic_expression.operands[2];
    expr\binary_generic_expression.operands[2] := substitute(op2, vars, vals);
  END_IF;
      IF 'PARALLEL_COMPOSED_FUNCTION' IN types
  THEN
    srcdom := expr\parallel_composed_function.source_of_domain;
    prpfun := expr\parallel_composed_function.prep_functions;
    finfun := expr\parallel_composed_function.final_function;
    srcdom := substitute(srcdom, vars, vals);
    REPEAT i := 1 TO SIZEOF(prpfun);
      prpfun[i] := substitute(prpfun[i], vars, vals);
    END_REPEAT;
    IF 'MATHS_FUNCTION' IN stripped_typeof(finfun)
    THEN
      finfun := substitute(finfun, vars, vals);
    END_IF;
    RETURN(make_parallel_composed_function(srcdom, prpfun, finfun));
  END_IF;
      IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
  THEN
    opnds := expr\multiple_arity_generic_expression.operands;
    REPEAT i := 1 TO SIZEOF(opnds);
      expr\multiple_arity_generic_expression.operands[i] := substitute(opnds[i], vars, vals);
    END_REPEAT;
  END_IF;
      RETURN(expr);
END_FUNCTION;

FUNCTION surface_condition_correlation
 (pd : property_definition; rep : representation) : LOGICAL;
    CASE pd.name OF
    'visual appearance', 'tactile appearance', 'contact ratio', 'hardness', 'treatment result', 'surface texture' : RETURN(pd.name =
                                                                                                                           rep.name);
    OTHERWISE: RETURN(UNKNOWN);
  END_CASE;
END_FUNCTION;

FUNCTION surface_weights_positive
 (b : rational_b_spline_surface) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 0 TO b.u_upper;
    REPEAT j := 0 TO b.v_upper;
      IF (b.weights[i][j] <= 0.0)
      THEN
        result := FALSE;
        RETURN(result);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION topology_reversed
 (an_item : reversible_topology) : reversible_topology;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE' IN TYPEOF(an_item))
  THEN
    RETURN(edge_reversed(an_item));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH' IN TYPEOF(an_item))
  THEN
    RETURN(path_reversed(an_item));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BOUND' IN TYPEOF(an_item))
  THEN
    RETURN(face_bound_reversed(an_item));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE' IN TYPEOF(an_item))
  THEN
    RETURN(face_reversed(an_item));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL' IN TYPEOF(an_item))
  THEN
    RETURN(shell_reversed(an_item));
  END_IF;
      IF ('SET' IN TYPEOF(an_item))
  THEN
    RETURN(set_of_topology_reversed(an_item));
  END_IF;
      IF ('LIST' IN TYPEOF(an_item))
  THEN
    RETURN(list_of_topology_reversed(an_item));
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION tsdq_get_inspected_element_type_name
 (ei : SET[1:?] OF inspected_element_select) : tsdq_inspected_element_type_name;
  LOCAL
  tie : tsdq_inspection_element;
  type_out : SET OF STRING := [];
    END_LOCAL;
      IF (SIZEOF(ei) > 1)
  THEN
    RETURN(tsdqi_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TSDQ_INSPECTION_ELEMENT' IN TYPEOF(ei[1]))
  THEN
    tie := ei[1];
    type_out := TYPEOF(tie.inspected_element.relating_representation_item);
  ELSE
    RETURN(tsdqi_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADJACENT_TRIANGLE_PAIR' IN type_out)
  THEN
    RETURN(tsdqi_adjacent_triangle_pair);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADJACENT_TRIANGULATED_FACE_PAIR' IN type_out)
  THEN
    RETURN(tsdqi_adjacent_triangulated_face_pair);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_TRIANGLE' IN type_out)
  THEN
    RETURN(tsdqi_representative_triangle);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CONNECTING_EDGE' IN type_out)
  THEN
    RETURN(tsdqi_tessellated_connecting_edge);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL' IN type_out)
  THEN
    RETURN(tsdqi_tessellated_shell);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID' IN type_out)
  THEN
    RETURN(tsdqi_tessellated_solid);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_EDGE' IN type_out)
  THEN
    RETURN(tsdqi_triangle_edge);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGULATED_FACE' IN type_out)
  THEN
    RETURN(tsdqi_triangulated_face);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_VERTEX' IN type_out)
  THEN
    RETURN(tsdqi_triangle_vertex);
  END_IF;
      RETURN(tsdqi_others);
END_FUNCTION;

FUNCTION tsdq_get_measured_type_name
 (ei : a3m_data_quality_measured_value_select) : tsdq_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING := [];
    END_LOCAL;
      type_out := TYPEOF(ei);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_area_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
  THEN
    RETURN(tsdqm_boolean_value);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_count_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_positive_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_positive_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_ratio_measure);
  END_IF;
      RETURN(tsdqm_others);
END_FUNCTION;

FUNCTION tsdq_get_type_name_for_location_of_extreme_value
 (ei : SET[1:?] OF a3m_location_of_extreme_value_select) : tsdq_type_name_for_location_of_extreme_value;
  LOCAL
  type_out : SET OF STRING;
  tlev : tsdq_location_of_extreme_value;
    END_LOCAL;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TSDQ_LOCATION_OF_EXTREME_VALUE' IN TYPEOF(ei[1]))
  THEN
    tlev := ei[1];
    type_out := TYPEOF(tlev.location_of_extreme_value.relating_representation_item);
  ELSE
    RETURN(tsdqe_others);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_VERTEX' IN type_out)
  THEN
    IF (SIZEOF(ei) = 1)
    THEN
      RETURN(tsdqe_triangle_vertex);
    ELSE
      RETURN(tsdqe_others);
    END_IF;
  END_IF;
      (*Check elements of the set is same type*)
  
      REPEAT i := 2 TO SIZEOF(ei);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TSDQ_LOCATION_OF_EXTREME_VALUE' IN TYPEOF(ei[i]))
    THEN
      tlev := ei[i];
      IF (TYPEOF(tlev.location_of_extreme_value.relating_representation_item) <> type_out)
      THEN
        RETURN(tsdqe_others);
      END_IF;
    ELSE
      RETURN(tsdqe_others);
    END_IF;
  END_REPEAT;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_TRIANGLE' IN type_out)
  THEN
    RETURN(tsdqe_set_of_representative_triangle);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL' IN type_out)
  THEN
    RETURN(tsdqe_set_of_tessellated_shell);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGLE_EDGE' IN type_out)
  THEN
    RETURN(tsdqe_set_of_triangle_edge);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIANGULATED_FACE' IN type_out)
  THEN
    RETURN(tsdqe_set_of_triangulated_face);
  END_IF;
      RETURN(tsdqe_others);
END_FUNCTION;

FUNCTION tsdq_get_value_limit_type_name
 (sdqvlts : shape_data_quality_value_limit_type_select) : tsdq_measured_data_type_name;
  LOCAL
  type_out : SET OF STRING := [];
    END_LOCAL;
      type_out := value_limit_type(sdqvlts);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_area_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_count_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_positive_length_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_positive_plane_angle_measure);
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN type_out)
  THEN
    RETURN(tsdqm_ratio_measure);
  END_IF;
      RETURN(tsdqm_others);
END_FUNCTION;

FUNCTION tsdq_validate_element_types
 (ir : data_quality_inspection_report; cr : a3m_triangulated_shape_data_quality_criterion) : LOGICAL;
  LOCAL
  aqiiri : a3m_data_quality_inspection_instance_report_item;
  dqiir : data_quality_inspection_instance_report;
  tietn : LIST [1 : ?] OF tsdq_inspected_element_type_name;
    END_LOCAL;
      tietn := cr.inspected_elements_types;
      -- data_quality_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ir))
  THEN
    dqiir := ir;
    REPEAT i := 1 TO SIZEOF(dqiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqiiri := dqiir.inspected_instances[i];
        IF (NOT (tsdq_get_inspected_element_type_name(aqiiri.inspected_elements) IN tietn))
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION tsdq_validate_location_of_extreme_value_types
 (ir : data_quality_inspection_report; cr : a3m_triangulated_shape_data_quality_criterion) : LOGICAL;
  LOCAL
  aqirie : a3m_instance_report_item_with_extreme_instances;
  dqiir : data_quality_inspection_instance_report;
  ttnle : LIST [0 : ?] OF tsdq_type_name_for_location_of_extreme_value;
    END_LOCAL;
      ttnle := cr.location_of_extreme_value_types;
      -- data_quality_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ir))
  THEN
    dqiir := ir;
    REPEAT i := 1 TO SIZEOF(dqiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqirie := dqiir.inspected_instances[i];
        IF (SIZEOF(ttnle) = 0)
        THEN
          RETURN(FALSE);
        END_IF;
        REPEAT j := 1 TO SIZEOF(aqirie.extreme_instances);
          IF (NOT (tsdq_get_type_name_for_location_of_extreme_value(aqirie.extreme_instances[j].locations_of_extreme_value) IN
                   ttnle))
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION tsdq_validate_measured_type
 (ir : data_quality_inspection_report; cr : a3m_triangulated_shape_data_quality_criterion) : LOGICAL;
  LOCAL
  aqicri : a3m_data_quality_inspection_criterion_report_item;
  aqiiri : a3m_data_quality_inspection_instance_report_item;
  aqirie : a3m_instance_report_item_with_extreme_instances;
  dqicr : data_quality_inspection_criterion_report;
  dqiir : data_quality_inspection_instance_report;
  tmdtn : tsdq_measured_data_type_name;
    END_LOCAL;
      tmdtn := cr.measured_data_type;
      -- data_quality_inspection_criterion_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_CRITERION_REPORT' IN TYPEOF(ir))
  THEN
    dqicr := ir;
    REPEAT i := 1 TO SIZEOF(dqicr.statistical_values);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_CRITERION_REPORT_ITEM' IN
          TYPEOF(dqicr.statistical_values[i]))
      THEN
        aqicri := dqicr.statistical_values[i];
        IF (tsdq_get_measured_type_name(aqicri.representative_measured_value) <> tmdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
    END_REPEAT;
  END_IF;
      -- data_quality_inspection_instance_report
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ir))
  THEN
    dqiir := ir;
    REPEAT i := 1 TO SIZEOF(dqiir.inspected_instances);
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqiiri := dqiir.inspected_instances[i];
        IF (tsdq_get_measured_type_name(aqiiri.representative_measured_value) <> tmdtn)
        THEN
          RETURN(FALSE);
        END_IF;
      END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
          TYPEOF(dqiir.inspected_instances[i]))
      THEN
        aqirie := dqiir.inspected_instances[i];
        REPEAT j := 1 TO SIZEOF(aqirie.extreme_instances);
          IF (tsdq_get_measured_type_name(aqirie.extreme_instances[j].measured_value) <> tmdtn)
          THEN
            RETURN(FALSE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION type_check_function
 (the_type : GENERIC; sub_names : SET OF STRING; criterion : INTEGER) : LOGICAL;
    IF ((NOT EXISTS(the_type)) 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);
      OTHERWISE: RETURN(UNKNOWN);
    END_CASE;
  END_IF;
END_FUNCTION;

FUNCTION unambiguously_specified_multi_level_reference_designator
 (links : LIST[1:?] OF next_assembly_usage_occurrence) : BOOLEAN;
    REPEAT i := 1 TO SIZEOF(links) - 1;
    CASE TRUE OF
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
       TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
       TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN  
                                                                                                  IF NOT ((links[i]\product_definition_relationship.related_product_definition :=:
                                                                                                           links[i +
                                                                                                                 1]\product_definition_relationship.relating_product_definition) OR
                                                                                                          ((SIZEOF(QUERY(pdr
                                                                                                                         <* USEDIN(links[i]\product_definition_relationship.related_product_definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
                                                                                                                         | pdr\product_definition_relationship.relating_product_definition :=:
                                                                                                                           links[i +
                                                                                                                                 1]\product_definition_relationship.relating_product_definition)) =
                                                                                                            1) AND
                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition.formation\product_definition_formation.of_product :=:
                                                                                                            links[i +
                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition.formation\product_definition_formation.of_product)))
                                                                                                  THEN
                                                                                                    RETURN(FALSE);
                                                                                                  END_IF;
      END;
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
       TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN  
                                                                                                  IF NOT ((links[i]\product_definition_relationship.related_product_definition :=:
                                                                                                           links[i +
                                                                                                                 1]\product_definition_relationship.relating_product_definition) OR
                                                                                                          ((SIZEOF(QUERY(pdr
                                                                                                                         <* USEDIN(links[i]\product_definition_relationship.related_product_definition, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
                                                                                                                         | pdr\product_definition_relationship.relating_product_definition :=:
                                                                                                                           links[i +
                                                                                                                                 1]\product_definition_relationship.relating_product_definition)) =
                                                                                                            1) AND
                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_id =
                                                                                                            links[i +
                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_id) AND
                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.id_owning_organization_name =
                                                                                                            links[i +
                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.id_owning_organization_name) AND
                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_definition_id <>
                                                                                                            links[i +
                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_definition_id)))
                                                                                                  THEN
                                                                                                    RETURN(FALSE);
                                                                                                  END_IF;
      END;
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
       TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND
      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) : RETURN(FALSE);
      OTHERWISE: RETURN(FALSE);
    END_CASE;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION unique_in_product_definition
 (item : representative_shape_representation) : BOOLEAN;
  LOCAL
  local_p_d : SET OF product_definition := [];
  local_s_r : SET OF shape_representation := [];
  i : INTEGER;
  j : INTEGER;
    END_LOCAL;
      -- find product_definitions represented by the input 
      -- representative_shape_representation
      local_p_d := using_product_definition_of_shape_representation(item);
      -- ERROR
      IF (SIZEOF(local_p_d) <> 1)
  THEN
    RETURN(FALSE);
  ELSE
    REPEAT i := 1 TO HIINDEX(local_p_d);
      local_s_r := find_shape_representation_of_product_definition(local_p_d[i]);
      REPEAT j := 1 TO HIINDEX(local_s_r);
        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
             TYPEOF(local_s_r[j])) AND
            (local_s_r[j] :<>: item))
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION unique_in_shape_aspect
 (item : representative_shape_representation) : BOOLEAN;
  LOCAL
  local_s_a : SET OF shape_aspect := [];
  local_s_r : SET OF shape_representation := [];
  i : INTEGER;
  j : INTEGER;
    END_LOCAL;
      -- find shape_aspects represented by the input 
      -- representative_shape_representation
      local_s_a := using_shape_aspect_of_shape_representation(item);
      -- ERROR
      IF (SIZEOF(local_s_a) <> 1)
  THEN
    RETURN(FALSE);
  ELSE
    REPEAT i := 1 TO HIINDEX(local_s_a);
      local_s_r := find_shape_representation_of_shape_aspect(local_s_a[i]);
      REPEAT j := 1 TO HIINDEX(local_s_r);
        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
             TYPEOF(local_s_r[j])) AND
            (local_s_r[j] :<>: item))
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION used_variables
 (arg : generic_expression) : SET OF generic_variable;
  LOCAL
  result : SET OF generic_variable := [];
    END_LOCAL;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_VARIABLE' IN TYPEOF(arg)
  THEN
    RETURN([arg]);
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNARY_GENERIC_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(used_variables(arg\unary_generic_expression.operand));
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BINARY_GENERIC_EXPRESSION' IN TYPEOF(arg)
  THEN
    RETURN(used_variables(arg\binary_generic_expression.operands[1]) +
           used_variables(arg\binary_generic_expression.operands[2]));
  END_IF;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTIPLE_ARITY_GENERIC_EXPRESSION' IN TYPEOF(arg)
  THEN
    REPEAT i := 1 TO SIZEOF(arg\multiple_arity_generic_expression.operands);
      result := result + used_variables(arg\multiple_arity_generic_expression.operands[i]);
    END_REPEAT;
    RETURN(result);
  END_IF;
      RETURN([]);
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;
      -- Find the set of representation_items or founded_items
      -- in which item is used directly.
      next_items := QUERY(z
                          <* bag_to_set(USEDIN(item, ''))
                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z)) OR
                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FOUNDED_ITEM' IN TYPEOF(z)));
      -- If the set of next_items is not empty;
      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 the set of representation_items or founded_items
      -- in which the input item is used directly and indirectly.
      RETURN(result_items);
END_FUNCTION;

FUNCTION using_product_definition_of_shape_aspect
 (item : shape_aspect) : product_definition;
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
                         TYPEOF(item.of_shape.definition))
  THEN
    RETURN(item.of_shape.definition);
  ELSE
    RETURN(?);
  END_IF;
END_FUNCTION;

FUNCTION using_product_definition_of_shape_representation
 (item : shape_representation) : SET OF product_definition;
  LOCAL
  local_s_d_r : SET OF shape_definition_representation := [];
  local_p_d : SET OF product_definition := [];
  i : INTEGER;
    END_LOCAL;
      -- find shape_definition_representations 
      local_s_d_r := QUERY(i1
                           <* bag_to_set(USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION'))
                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
                             TYPEOF(i1));
      -- find product_definition_shape & product_definitions
      REPEAT i := 1 TO HIINDEX(local_s_d_r);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN
        TYPEOF(local_s_d_r[i]\property_definition_representation.definition))
    THEN
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
          TYPEOF(local_s_d_r[i]\property_definition_representation.definition\property_definition.definition))
      THEN
        local_p_d := local_p_d +
                     local_s_d_r[i]\property_definition_representation.definition\property_definition.definition;
      END_IF;
    END_IF;
  END_REPEAT;
      RETURN(local_p_d);
END_FUNCTION;

FUNCTION using_representation_with_mapping
 (item : representation_item) : SET OF representation;
  LOCAL
  results : SET OF representation := [];
  local_results : SET OF representation := [];
  local_representation_map : SET OF representation_map := [];
  intermediate_items : SET OF representation_item := [];
  i : INTEGER;
  j : INTEGER;
    END_LOCAL;
      -- find the representations in which the item is used
      -- and which is referenced from the representation_map
      local_results := QUERY(z
                             <* using_representations(item)
                             | SIZEOF(USEDIN(z, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION')) >
                               0);
      IF (SIZEOF(local_results) = 0)
  THEN
    RETURN([]);
  ELSE
    REPEAT i := 1 TO HIINDEX(local_results);
      local_representation_map := local_representation_map +
                                  bag_to_set(USEDIN(local_results[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
    END_REPEAT;
    REPEAT i := 1 TO HIINDEX(local_representation_map);
      intermediate_items := intermediate_items +
                            bag_to_set(USEDIN(local_representation_map[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE'));
    END_REPEAT;
    REPEAT j := 1 TO HIINDEX(intermediate_items);
      results := results + bag_to_set(using_representation_with_mapping(intermediate_items[j]));
    END_REPEAT;
  END_IF;
      RETURN(results);
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;
      -- Find the representations in which the item is used and add to the
      -- results set.
      results := [];
      result_bag := USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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;
      -- Find all representation_items or founded_items
      -- by which item is referenced directly or indirectly.
      intermediate_items := using_items(item, []);
      -- If the set of intermediate items is not empty;
      IF SIZEOF(intermediate_items) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(intermediate_items);
      result_bag := USEDIN(intermediate_items[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 the set of representation in which the input item is
      -- used directly and indirectly (through intervening
      -- representation_items or founded items).
      RETURN(results);
END_FUNCTION;

FUNCTION using_shape_aspect_of_shape_representation
 (item : shape_representation) : SET OF shape_aspect;
  LOCAL
  local_s_d_r : SET OF shape_definition_representation := [];
  local_s_d_r2 : BAG OF shape_definition_representation := [];
  local_s_a : SET OF shape_aspect := [];
  i : INTEGER;
    END_LOCAL;
      -- find shape_definition_representations 
      local_s_d_r2 := local_s_d_r2 +
                      QUERY(pdr
                            <* USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
                            | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
                              TYPEOF(pdr));
      local_s_d_r := bag_to_set(local_s_d_r2);
      -- find shape_aspects
      REPEAT i := 1 TO HIINDEX(local_s_d_r);
    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
        TYPEOF(local_s_d_r[i]\property_definition_representation.definition\property_definition.definition))
    THEN
      local_s_a := local_s_a +
                   local_s_d_r[i]\property_definition_representation.definition\property_definition.definition;
    END_IF;
  END_REPEAT;
      RETURN(local_s_a);
END_FUNCTION;

FUNCTION valid_basis_curve_in_2d_wireframe
 (crv : curve) : BOOLEAN;
    -- check for valid basic curve types
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE'] *
                TYPEOF(crv)) =
         1
  THEN
    RETURN(TRUE);
  ELSE
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE') IN TYPEOF(crv))
    THEN
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARABOLA',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HYPERBOLA'] *
                TYPEOF(crv\trimmed_curve.basis_curve)) =
         1
      THEN
        RETURN(TRUE);
      ELSE
        RETURN(valid_basis_curve_in_2d_wireframe(crv\trimmed_curve.basis_curve));
      END_IF;
    ELSE
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_2D') IN TYPEOF(crv))
      THEN
        RETURN(valid_basis_curve_in_2d_wireframe(crv\offset_curve_2d.basis_curve));
      ELSE
        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA') IN TYPEOF(crv))
        THEN
          RETURN(valid_basis_curve_in_2d_wireframe(crv\curve_replica.parent_curve));
        ELSE
          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE') IN TYPEOF(crv))
          THEN
            RETURN(SIZEOF(QUERY(ccs
                                <* crv\composite_curve.segments
                                | NOT (valid_basis_curve_in_2d_wireframe(ccs.parent_curve)))) =
                   0);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
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_csg_2d_primitives
 (input : csg_solid_2d) : BOOLEAN;
    CASE TRUE OF
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D' IN
     TYPEOF(input\csg_solid_2d.tree_root_expression)) : BEGIN  
                                                               IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_AREA',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPLEX_AREA',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPTIC_AREA',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HALF_SPACE_2D',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYGONAL_AREA',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY',
                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_AREA'] *
                                                                          TYPEOF(input\csg_solid_2d.tree_root_expression)) >
                                                                   0)
                                                               THEN
                                                                 RETURN(TRUE);
                                                               ELSE
                                                                 RETURN(FALSE);
                                                               END_IF;
    END;
    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_RESULT_2D' IN
     TYPEOF(input\csg_solid_2d.tree_root_expression)) : RETURN(valid_csg_2d_primitives(input\csg_solid_2d.tree_root_expression\boolean_result_2d.first_operand) AND
                                                               valid_csg_2d_primitives(input\csg_solid_2d.tree_root_expression\boolean_result_2d.second_operand));
    OTHERWISE: RETURN(FALSE);
  END_CASE;
END_FUNCTION;

FUNCTION valid_datum_target_parameters
 (pdf : placed_datum_target_feature) : BOOLEAN;
  LOCAL
  rep_set : SET OF representation := [];
  parameter_representations : SET OF representation;
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(pdf.representation_associations);
    rep_set := rep_set + pdf.representation_associations[i].used_representation;
  END_REPEAT;
      parameter_representations := QUERY(rep
                                         <* rep_set
                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
                                            TYPEOF(rep)));
      IF (SIZEOF(QUERY(srwp
                       <* parameter_representations
                       | (SIZEOF(QUERY(i
                                       <* srwp.items
                                       | (i.name = 'orientation') AND
                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(i)))) =
                          1))) <>
          1)
  THEN
    RETURN(FALSE);
  END_IF;
      CASE pdf\shape_aspect.description OF
    'point' : RETURN(SIZEOF(QUERY(srwp <* parameter_representations | (SIZEOF(srwp.items) = 1))) = 1);
    'circle', 'circular curve' : RETURN((SIZEOF(QUERY(srwp
                                                      <* parameter_representations
                                                      | (SIZEOF(srwp.items) = 2))) =
                                         1) AND
                                        (SIZEOF(QUERY(srwp
                                                      <* parameter_representations
                                                      | (SIZEOF(QUERY(i
                                                                      <* srwp.items
                                                                      | (i.name = 'target diameter') AND
                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
                                                                                TYPEOF(i)) =
                                                                         2))) =
                                                         1))) =
                                         1));
    'line' : RETURN(SIZEOF(QUERY(srwp
                                 <* parameter_representations
                                 | (SIZEOF(QUERY(i
                                                 <* srwp.items
                                                 | (i.name = 'target length') AND
                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
                                                           TYPEOF(i)) =
                                                    2))) =
                                    1))) =
                    1);
    'rectangle' : RETURN((SIZEOF(QUERY(srwp <* parameter_representations | (SIZEOF(srwp.items) = 3))) = 1) AND
                         (SIZEOF(QUERY(srwp
                                       <* parameter_representations
                                       | (SIZEOF(QUERY(i
                                                       <* srwp.items
                                                       | (i.name = 'target length') AND
                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
                                                                 TYPEOF(i)) =
                                                          2))) =
                                          1))) =
                          1) AND
                         (SIZEOF(QUERY(srwp
                                       <* parameter_representations
                                       | (SIZEOF(QUERY(i
                                                       <* srwp.items
                                                       | (i.name = 'target width') AND
                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
                                                                 TYPEOF(i)) =
                                                          2))) =
                                          1))) =
                          1));
    OTHERWISE: RETURN(FALSE);
  END_CASE;
END_FUNCTION;

FUNCTION valid_geometrically_bounded_wf_curve
 (crv : curve) : BOOLEAN;
    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE'] *
                               TYPEOF(crv)) =
                        1
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(crv)
    THEN
      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARABOLA',
                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HYPERBOLA'] *
                TYPEOF(crv\trimmed_curve.basis_curve)) =
         1
      THEN
        RETURN(TRUE);
      ELSE
        RETURN(valid_geometrically_bounded_wf_curve(crv\trimmed_curve.basis_curve));
      END_IF;
    ELSE
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(crv)
      THEN
        RETURN(valid_geometrically_bounded_wf_curve(crv\offset_curve_3d.basis_curve));
      ELSE
        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(crv)
        THEN
          RETURN(valid_geometrically_bounded_wf_curve(crv\curve_replica.parent_curve));
        ELSE
          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(crv)
          THEN
            RETURN(SIZEOF(QUERY(ccs
                                <* crv\composite_curve.segments
                                | NOT valid_geometrically_bounded_wf_curve(ccs.parent_curve))) =
                   0);
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION valid_geometrically_bounded_wf_point
 (pnt : point) : BOOLEAN;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN TYPEOF(pnt)
    THEN
      RETURN(valid_geometrically_bounded_wf_curve(pnt\point_on_curve.basis_curve));
    ELSE
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA' IN TYPEOF(pnt)
      THEN
        RETURN(valid_geometrically_bounded_wf_point(pnt\point_replica.parent_pt));
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION valid_identified_item_in_representation
 (identified_item : item_identified_representation_usage_select; used_representation : representation) : BOOLEAN;
  LOCAL
  i : INTEGER := 1;
    END_LOCAL;
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(identified_item)
  THEN
    RETURN(used_representation IN using_representations(identified_item));
  END_IF;
      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIST_REPRESENTATION_ITEM' IN TYPEOF(identified_item)) OR
         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SET_REPRESENTATION_ITEM' IN TYPEOF(identified_item))
  THEN
    REPEAT WHILE (EXISTS(identified_item[i]));
      IF NOT (used_representation IN using_representations(identified_item[i]))
      THEN
        RETURN(FALSE);
      END_IF;
      i := i + 1;
    END_REPEAT;
    RETURN(TRUE);
  END_IF;
      RETURN(?);
END_FUNCTION;

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

FUNCTION valid_selected_instance_representation
 (pd : product_definition_or_assembly_relationship) : LOGICAL;
  LOCAL
  properties : SET OF property_definition := bag_to_set(QUERY(prd
                                                              <* USEDIN(pd, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
                                                              | (prd.name = 'occurrence selection')));
  property_definition_representations : SET OF property_definition_representation := bag_to_set(QUERY(pdr
                                                                                                      <* USEDIN(properties[1], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
                                                                                                      | (pdr.used_representation.name =
                                                                                                         'selection criteria')));
  selected_representation : representation;
    END_LOCAL;
      IF (SIZEOF(properties) <> 1)
  THEN
    RETURN(FALSE);
  END_IF;
      IF (SIZEOF(property_definition_representations) <> 1)
  THEN
    RETURN(FALSE);
  END_IF;
      selected_representation := property_definition_representations[1]\property_definition_representation.used_representation;
      IF (SIZEOF(selected_representation\representation.items) < 1) OR
         (SIZEOF(selected_representation\representation.items) > 2)
  THEN
    RETURN(FALSE);
  END_IF;
      IF (SIZEOF(QUERY(i
                       <* selected_representation\representation.items
                       | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
                                 TYPEOF(i)) =
                          1) AND
                         (i.name = 'selection quantity'))) <>
          1)
  THEN
    RETURN(FALSE);
  END_IF;
      IF (SIZEOF(QUERY(i
                       <* selected_representation\representation.items
                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
                          TYPEOF(i)) AND
                         (i.name = 'selection control'))) >
          1)
  THEN
    RETURN(FALSE);
  END_IF;
      -- the selection control is not specified then the quantity shall be a qualified_representation_item or a value_range
      IF (SIZEOF(QUERY(i
                       <* selected_representation\representation.items
                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
                          TYPEOF(i)) AND
                         (i.name = 'selection control'))) =
          0) AND
         (SIZEOF(QUERY(i
                       <* selected_representation\representation.items
                       | (i.name = 'selection quantity') AND
                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUALIFIED_REPRESENTATION_ITEM',
                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
                                 TYPEOF(i)) =
                          0))) >
          0)
  THEN
    RETURN(FALSE);
  END_IF;
      RETURN(TRUE);
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_tri_ids
 (objs : SET OF topological_representation_item) : BOOLEAN;
  LOCAL
  values : BAG OF identifier := [];
    END_LOCAL;
      REPEAT i := LOINDEX(objs) TO HIINDEX(objs);
    IF NOT (EXISTS(objs[i]\topological_representation_item.permanent_id) OR
            EXISTS(objs[i]\topological_representation_item.permanent_aggregate_id))
    THEN
      RETURN(FALSE);
    END_IF;
    values := values + objs[i]\topological_representation_item.permanent_id +
              objs[i]\topological_representation_item.permanent_aggregate_id;
  END_REPEAT;
      -- ids are unique across both types
      IF SIZEOF(bag_to_set(values)) <> SIZEOF(values)
  THEN
    RETURN(FALSE);
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

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

FUNCTION valid_wireframe_edge_curve
 (crv : curve) : BOOLEAN;
    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE'] *
                               TYPEOF(crv)) =
                        1
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(crv)
    THEN
      RETURN(valid_wireframe_edge_curve(crv\curve_replica.parent_curve));
    ELSE
      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(crv)
      THEN
        RETURN(valid_wireframe_edge_curve(crv\offset_curve_3d.basis_curve));
      END_IF;
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION valid_wireframe_vertex_point
 (pnt : point) : BOOLEAN;
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
  THEN
    RETURN(TRUE);
  ELSE
    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA' IN TYPEOF(pnt)
    THEN
      RETURN(valid_wireframe_vertex_point(pnt\point_replica.parent_pt));
    END_IF;
  END_IF;
      RETURN(FALSE);
END_FUNCTION;

FUNCTION validate_accuracy_types
 (ei : shape_data_quality_criterion; type_list : BAG OF STRING) : LOGICAL;
  LOCAL
  sdqca : BAG OF shape_data_quality_criterion_and_accuracy_association := [];
  sma : BAG OF shape_measurement_accuracy := [];
  sdqir : SET OF shape_data_quality_inspection_result := [];
  scraa : BAG OF shape_inspection_result_accuracy_association := [];
  t_logic : BOOLEAN;
    END_LOCAL;
      -- STEP-1
      -- collect types of range attribute of shape_measurement_accuracy
      -- referred from shape_data_quality_criterion_and_accuracy_association 
      -- that refers to given shape_data_quality_criterion.
      sdqca := USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_CRITERION_AND_ACCURACY_ASSOCIATION.SHAPE_DATA_QUALITY_CRITERION');
      IF (SIZEOF(sdqca) <> 0)
  THEN
    REPEAT i := 1 TO SIZEOF(sdqca);
      sma := sma + sdqca[i].required_specific_accuracy;
    END_REPEAT;
    IF (SIZEOF(type_list) < SIZEOF(sma))
    THEN
      RETURN(FALSE);
    END_IF;
    REPEAT i := 1 TO SIZEOF(sma);
      t_logic := FALSE;
      REPEAT j := 1 TO SIZEOF(type_list);
        IF (type_list[j] IN value_limit_type(sma[i].range))
        THEN
          t_logic := TRUE;
          ESCAPE;
        END_IF;
      END_REPEAT;
      IF (NOT (t_logic))
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      -- STEP-3
      -- collect types of range attribute of shape_measurement_accuracy
      -- referred from shape_inspection_result_accuracy_association
      -- that refers to shape_data_quality_inspection_result
      -- for the given shape_data_quality_criterion.
      sdqir := QUERY(q
                     <* bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
                       TYPEOF(q));
      IF (SIZEOF(sdqir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdqir);
    scraa := USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_INSPECTION_RESULT_ACCURACY_ASSOCIATION.SHAPE_DATA_QUALITY_RESULT');
    IF (SIZEOF(scraa) <> 0)
    THEN
      sma := [];
      REPEAT j := 1 TO SIZEOF(scraa);
        sma := sma + scraa[j].applied_specific_accuracy;
      END_REPEAT;
      IF (SIZEOF(type_list) < SIZEOF(sma))
      THEN
        RETURN(FALSE);
      END_IF;
      REPEAT j := 1 TO SIZEOF(sma);
        t_logic := FALSE;
        REPEAT k := 1 TO SIZEOF(type_list);
          IF (type_list[k] IN value_limit_type(sma[j].range))
          THEN
            t_logic := TRUE;
            ESCAPE;
          END_IF;
        END_REPEAT;
        IF (NOT (t_logic))
        THEN
          RETURN(FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION validate_attribute_id
 (attid : attribute_identifier) : BOOLEAN;
  CONSTANT
  letters : SET [52 : 52] OF STRING :=
            ['a',
             'b',
             'c',
             'd',
             'e',
             'f',
             'g',
             'h',
             'i',
             'j',
             'k',
             'l',
             'm',
             'n',
             'o',
             'p',
             'q',
             'r',
             's',
             't',
             'u',
             'v',
             'w',
             'x',
             'y',
             'z',
             'A',
             'B',
             'C',
             'D',
             'E',
             'F',
             'G',
             'H',
             'I',
             'J',
             'K',
             'L',
             'M',
             'N',
             'O',
             'P',
             'Q',
             'R',
             'S',
             'T',
             'U',
             'V',
             'W',
             'X',
             'Y',
             'Z'];
  numbers_etc : SET [15 : 15] OF STRING := ['0','1','2','3','4','5','6','7','8','9','_','[',']','.','\'];
  valid_chars : SET [67 : 67] OF STRING := letters + numbers_etc;
    END_CONSTANT;
    LOCAL
  id_length : INTEGER := LENGTH(attid);
  id_valid : BOOLEAN := TRUE;
  i : INTEGER;
    END_LOCAL;
      -- check that indentifier starts with a letter
      IF NOT (attid[1] IN letters)
  THEN
    id_valid := FALSE;
  END_IF;
      -- check that no invalid characters occur subsequently
      REPEAT i := 2 TO id_length
  WHILE id_valid = TRUE;
    IF NOT (attid[i] IN valid_chars)
    THEN
      id_valid := FALSE;
    END_IF;
  END_REPEAT;
      RETURN(id_valid);
END_FUNCTION;

FUNCTION validate_countersink_radii
 (cskhole : solid_with_stepped_round_hole_and_conical_transitions) : BOOLEAN;
  LOCAL
  i : INTEGER;
  j : INTEGER;
  n : INTEGER := 1 + cskhole\solid_with_stepped_round_hole.segments;
  smaller : positive_length_measure;
  larger : positive_length_measure;
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(cskhole.conical_transitions);
    IF (((cskhole.conical_transitions[i].transition_number = 1) AND
         (cskhole.conical_transitions[i].cone_apex_angle < 0)) XOR
        ((cskhole.conical_transitions[i].transition_number = n) AND
         (cskhole.conical_transitions[i].cone_apex_angle > 0)))
    THEN
      RETURN(FALSE);
    ELSE
      IF ((cskhole.conical_transitions[i].transition_number <> 1) AND
          (cskhole.conical_transitions[i].transition_number <> n))
      THEN
        BEGIN  
               j := cskhole.conical_transitions[i].transition_number;
               IF cskhole\solid_with_stepped_round_hole.segment_radii[j] >
                  cskhole\solid_with_stepped_round_hole.segment_radii[j - 1]
               THEN
                 BEGIN  
                        IF (cskhole.conical_transitions[i].cone_apex_angle > 0)
                        THEN
                          RETURN(FALSE);
                        END_IF;
                        larger := cskhole\solid_with_stepped_round_hole.segment_radii[j];
                        smaller := cskhole\solid_with_stepped_round_hole.segment_radii[j - 1];
                 END;
               ELSE
                 BEGIN  
                        IF (cskhole.conical_transitions[i].cone_apex_angle < 0)
                        THEN
                          RETURN(FALSE);
                        END_IF;
                        larger := cskhole\solid_with_stepped_round_hole.segment_radii[j - 1];
                        smaller := cskhole\solid_with_stepped_round_hole.segment_radii[j];
                 END;
               END_IF;
               IF ((cskhole.conical_transitions[i].cone_base_radius > larger) OR
                   (cskhole.conical_transitions[i].cone_base_radius < smaller))
               THEN
                 RETURN(FALSE);
               END_IF;
        END;
      END_IF;
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION validate_ecdq_inspected_elements_type
 (ei : externally_conditioned_data_quality_criterion; type_list : BAG OF STRING) : LOGICAL;
  LOCAL
  sdqir : SET OF externally_conditioned_data_quality_inspection_result := [];
  dir : SET OF data_quality_inspection_instance_report := [];
  sdiri : SET OF externally_conditioned_data_quality_inspection_instance_report_item := [];
  t_type_list : BAG OF STRING := [];
    END_LOCAL;
      -- STEP-1
      -- collect all externally_conditioned_data_quality_inspection_instance_report_item
      -- instances associated with the given externally_conditioned_data_quality_criterion
      -- via externally_conditioned_data_quality_inspection_result and
      -- data_quality_inspection_instance_report
      sdqir := QUERY(q
                     <* bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN
                       TYPEOF(q));
      IF (SIZEOF(sdqir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdqir);
    dir := dir +
           QUERY(q
                 <* bag_to_set(USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
                   TYPEOF(q));
  END_REPEAT;
      IF (SIZEOF(dir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(dir);
    sdiri := sdiri +
             QUERY(q
                   <* dir[i].inspected_instances
                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
                     TYPEOF(q));
  END_REPEAT;
      -- STEP-2
      -- check if the types of inspected_elements of the collected
      -- instances are exactly coincident with the type names in the 
      -- type list given as an input argument of this function.
      -- If there is no instance_report_item, then this function returns true.
      IF (SIZEOF(sdiri) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      -- When reports exist, then perform the following checking process.
      REPEAT i := 1 TO SIZEOF(sdiri);
    IF (SIZEOF(sdiri[i].inspected_elements) <> SIZEOF(type_list))
    THEN
      RETURN(FALSE);
    END_IF;
    t_type_list := type_list;
    REPEAT j := 1 TO SIZEOF(sdiri[i].inspected_elements);
      REPEAT k := 1 TO SIZEOF(t_type_list);
        IF (t_type_list[k] IN TYPEOF(sdiri[i].inspected_elements[j]))
        THEN
          t_type_list := t_type_list - t_type_list[k];
          ESCAPE;
        END_IF;
      END_REPEAT;
    END_REPEAT;
    IF (SIZEOF(t_type_list) > 0)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION validate_inspected_elements_type
 (ei : shape_data_quality_criterion; type_list : BAG OF STRING) : LOGICAL;
  LOCAL
  sdqir : SET OF shape_data_quality_inspection_result := [];
  sdir : SET OF shape_data_quality_inspection_instance_report := [];
  sdiri : SET OF shape_data_quality_inspection_instance_report_item := [];
  t_type_list : BAG OF STRING := [];
    END_LOCAL;
      -- STEP-1
      -- collect all shape_data_quality_inspection_instance_report_item
      -- instances associated with the given shape_data_quality_criterion
      -- via shape_data_quality_inspection_result and
      -- shape_data_quality_inspection_instance_report
      sdqir := QUERY(q
                     <* bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
                       TYPEOF(q));
      IF (SIZEOF(sdqir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdqir);
    sdir := sdir +
            QUERY(q
                  <* bag_to_set(USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
                    TYPEOF(q));
  END_REPEAT;
      IF (SIZEOF(sdir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdir);
    sdiri := sdiri +
             QUERY(q
                   <* sdir[i].inspected_instances
                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
                     TYPEOF(q));
  END_REPEAT;
      -- STEP-2
      -- check if the types of inspected_elements of the collected
      -- instances are exactly coincident with the type names in the 
      -- type list given as an input argument of this function.
      -- If there is no instance_report_item, then return true.
      IF (SIZEOF(sdiri) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      -- When reports exist, then perform the following checking process.
      REPEAT i := 1 TO SIZEOF(sdiri);
    IF (SIZEOF(sdiri[i].inspected_elements) <> SIZEOF(type_list))
    THEN
      RETURN(FALSE);
    END_IF;
    t_type_list := type_list;
    REPEAT j := 1 TO SIZEOF(sdiri[i].inspected_elements);
      REPEAT k := 1 TO SIZEOF(t_type_list);
        IF (t_type_list[k] IN TYPEOF(sdiri[i].inspected_elements[j]))
        THEN
          t_type_list := t_type_list - t_type_list[k];
          ESCAPE;
        END_IF;
      END_REPEAT;
    END_REPEAT;
    IF (SIZEOF(t_type_list) > 0)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION validate_locations_of_extreme_value_type
 (ei : shape_data_quality_criterion; type_list : BAG OF STRING) : LOGICAL;
  LOCAL
  sdqir : SET OF shape_data_quality_inspection_result := [];
  sdir : SET OF shape_data_quality_inspection_instance_report := [];
  sdei : SET OF instance_report_item_with_extreme_instances := [];
  t_type_list : BAG OF STRING := [];
    END_LOCAL;
      -- STEP-1
      -- collect all instance_report_item_with_extreme_instances instances
      -- associated with the given shape_data_quality_criterion
      -- via shape_data_quality_inspection_result and
      -- shape_data_quality_inspection_instance_report.
      sdqir := QUERY(q
                     <* bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
                       TYPEOF(q));
      IF (SIZEOF(sdqir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdqir);
    sdir := sdir +
            QUERY(q
                  <* bag_to_set(USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
                    TYPEOF(q));
  END_REPEAT;
      REPEAT i := 1 TO SIZEOF(sdir);
    sdei := sdei +
            QUERY(q
                  <* sdir[i].inspected_instances
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
                    TYPEOF(q));
  END_REPEAT;
      -- STEP-2
      -- check if the types of locations_of_extreme_value attributes
      -- of all extreme_instances attributes of the collected instances are 
      -- exactly coincident with the type names in the type list given as an 
      -- input argument of this function. 
      -- If there is no instance report, then return true.
      IF (SIZEOF(sdei) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      -- If the type_list is empty and 
      -- instance_report_item_with_extreme_instances exists, then return false.
      IF ((SIZEOF(type_list) = 0) AND (SIZEOF(sdei) <> 0))
  THEN
    RETURN(FALSE);
  END_IF;
      -- When report_items exist, then perform the following checking process.
      REPEAT i := 1 TO SIZEOF(sdei);
    REPEAT j := 1 TO SIZEOF(sdei[i].extreme_instances);
      IF (SIZEOF(sdei[i].extreme_instances[j].locations_of_extreme_value) <> SIZEOF(type_list))
      THEN
        RETURN(FALSE);
      END_IF;
      t_type_list := type_list;
      REPEAT k := 1 TO SIZEOF(sdei[i].extreme_instances[j].locations_of_extreme_value);
        REPEAT l := 1 TO SIZEOF(t_type_list);
          IF (t_type_list[l] IN TYPEOF(sdei[i].extreme_instances[j].locations_of_extreme_value[k]))
          THEN
            t_type_list := t_type_list - t_type_list[l];
            ESCAPE;
          END_IF;
        END_REPEAT;
      END_REPEAT;
      IF (SIZEOF(t_type_list) > 0)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION validate_measured_data_type
 (ei : shape_data_quality_criterion; type_string : STRING) : LOGICAL;
  LOCAL
  sdqir : SET OF shape_data_quality_inspection_result := [];
  sdcr : SET OF shape_data_quality_inspection_criterion_report := [];
  sdir : SET OF shape_data_quality_inspection_instance_report := [];
  sdii : SET OF shape_data_quality_inspection_instance_report_item := [];
  sdei : BAG OF instance_report_item_with_extreme_instances := [];
    END_LOCAL;
      -- STEP-1
      -- collect all shape_data_quality_inspection_criterion_report instances,
      -- all shape_data_quality_inspection_instance_report_item instances, and
      -- instance_report_item_with_extreme_instances instances
      -- associated with the given shape_data_quality_criterion
      -- via shape_data_quality_inspection_result.
      sdqir := QUERY(q
                     <* bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
                       TYPEOF(q));
      IF (SIZEOF(sdqir) = 0)
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdqir);
    sdcr := sdcr +
            QUERY(q
                  <* bag_to_set(USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_CRITERION_REPORT' IN
                    TYPEOF(q));
  END_REPEAT;
      REPEAT i := 1 TO SIZEOF(sdqir);
    sdir := sdir +
            QUERY(q
                  <* bag_to_set(USEDIN(sdqir[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
                    TYPEOF(q));
  END_REPEAT;
      -- If there is no report, then return true.
      IF ((SIZEOF(sdcr) = 0) AND (SIZEOF(sdir) = 0))
  THEN
    RETURN(TRUE);
  END_IF;
      REPEAT i := 1 TO SIZEOF(sdir);
    sdii := sdii +
            QUERY(q
                  <* sdir[i].inspected_instances
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
                    TYPEOF(q));
  END_REPEAT;
      REPEAT i := 1 TO SIZEOF(sdir);
    sdei := sdei +
            QUERY(q
                  <* sdir[i].inspected_instances
                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
                    TYPEOF(q));
  END_REPEAT;
      -- When reports exist, then perform the following checking process.  
      -- Check representative_measured_value of 
      -- shape_data_quality_inspection_criterion_report
      REPEAT i := 1 TO SIZEOF(sdcr);
    IF (NOT (type_string IN TYPEOF(sdcr[i].representative_measured_value)))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      -- Check measured_value of shape_data_quality_inspection_
      -- instance_report_item
      REPEAT i := 1 TO SIZEOF(sdii);
    IF (NOT (type_string IN TYPEOF(sdii[i].measured_value)))
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      -- Check measured_value of extreme_instances of
      -- instance_report_item_with_extreme_instance
      REPEAT i := 1 TO SIZEOF(sdei);
    REPEAT j := 1 TO SIZEOF(sdei[i].extreme_instances);
      IF (NOT (type_string IN TYPEOF(sdei[i].extreme_instances[j].measured_value)))
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION value_limit_type
 (iv : shape_data_quality_value_limit_type_select) : SET OF STRING;
  LOCAL
  retval : SET OF STRING := [];
    END_LOCAL;
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE') IN TYPEOF(iv))
  THEN
    retval := TYPEOF(iv\compound_representation_item.item_element[1].value_component);
  END_IF;
      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_LIMIT') IN TYPEOF(iv))
  THEN
    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_WITH_UNIT') IN TYPEOF(iv))
    THEN
      retval := TYPEOF(iv\measure_with_unit.value_component);
    END_IF;
  END_IF;
      RETURN(retval);
END_FUNCTION;

FUNCTION value_range_aggregate_rep_item
 (agg : AGGREGATE OF representation_item) : BOOLEAN;
    BEGIN  
                            IF (SIZEOF(QUERY(i1
                                             <* agg
                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                TYPEOF(i1)))) =
                                6)
                            THEN
                              RETURN(TRUE);
                            ELSE
                              RETURN(FALSE);
                            END_IF;
  END;
END_FUNCTION;

FUNCTION value_range_wr1
 (agg : compound_item_definition) : BOOLEAN;
    BEGIN  
                            IF (SIZEOF(agg) = 2) AND
                               ((SIZEOF(QUERY(i1
                                              <* agg
                                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                 TYPEOF(i1)))) =
                                 2) OR
                                (SIZEOF(QUERY(i2
                                              <* agg
                                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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
                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
                                                TYPEOF(i1)) AND
                                               (SIZEOF(QUERY(i2
                                                             <* agg
                                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_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 values_space_of
 (expr : generic_expression) : maths_space;
  LOCAL
  e_prefix : STRING := 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.';
  typenames : SET OF STRING := TYPEOF(expr);
    END_LOCAL;
      IF (schema_prefix + 'MATHS_VARIABLE') IN typenames
  THEN
    RETURN(expr\maths_variable.values_space);
  END_IF;
      IF (e_prefix + 'EXPRESSION') IN typenames
  THEN
    IF (e_prefix + 'NUMERIC_EXPRESSION') IN typenames
    THEN
      IF expr\numeric_expression.is_int
      THEN
        IF (e_prefix + 'INT_LITERAL') IN typenames
        THEN
          RETURN(make_finite_space([expr\int_literal.the_value]));
        ELSE
          RETURN(the_integers);
        END_IF;
      ELSE
        IF (e_prefix + 'REAL_LITERAL') IN typenames
        THEN
          RETURN(make_finite_space([expr\real_literal.the_value]));
        ELSE
          RETURN(the_reals);
        END_IF;
      END_IF;
    END_IF;
    IF (e_prefix + 'BOOLEAN_EXPRESSION') IN typenames
    THEN
      IF (e_prefix + 'BOOLEAN_LITERAL') IN typenames
      THEN
        RETURN(make_finite_space([expr\boolean_literal.the_value]));
      ELSE
        RETURN(the_booleans);
      END_IF;
    END_IF;
    IF (e_prefix + 'STRING_EXPRESSION') IN typenames
    THEN
      IF (e_prefix + 'STRING_LITERAL') IN typenames
      THEN
        RETURN(make_finite_space([expr\string_literal.the_value]));
      ELSE
        RETURN(the_strings);
      END_IF;
    END_IF;
    RETURN(?);
  END_IF;
      IF (schema_prefix + 'MATHS_FUNCTION') IN typenames
  THEN
    IF expression_is_constant(expr)
    THEN
      RETURN(make_finite_space([expr]));
    ELSE
      RETURN(make_function_space(sc_equal, expr\maths_function.domain, sc_equal, expr\maths_function.range));
    END_IF;
  END_IF;
      IF (schema_prefix + 'FUNCTION_APPLICATION') IN typenames
  THEN
    RETURN(expr\function_application.func.range);
  END_IF;
      IF (schema_prefix + 'MATHS_SPACE') IN typenames
  THEN
    IF expression_is_constant(expr)
    THEN
      RETURN(make_finite_space([expr]));
    ELSE
      RETURN(make_elementary_space(es_maths_spaces));
    END_IF;
  END_IF;
      IF (schema_prefix + 'DEPENDENT_VARIABLE_DEFINITION') IN typenames
  THEN
    RETURN(values_space_of(expr\unary_generic_expression.operand));
  END_IF;
      IF (schema_prefix + 'COMPLEX_NUMBER_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr]));
  END_IF;
      IF (schema_prefix + 'LOGICAL_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\logical_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'BINARY_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\binary_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'MATHS_ENUM_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\maths_enum_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'REAL_TUPLE_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\real_tuple_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'INTEGER_TUPLE_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\integer_tuple_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'ATOM_BASED_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\atom_based_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'MATHS_TUPLE_LITERAL') IN typenames
  THEN
    RETURN(make_finite_space([expr\maths_tuple_literal.lit_value]));
  END_IF;
      IF (schema_prefix + 'PARTIAL_DERIVATIVE_EXPRESSION') IN typenames
  THEN
    RETURN(drop_numeric_constraints(values_space_of(expr\partial_derivative_expression.derivand)));
  END_IF;
      IF (schema_prefix + 'DEFINITE_INTEGRAL_EXPRESSION') IN typenames
  THEN
    RETURN(drop_numeric_constraints(values_space_of(expr\definite_integral_expression.integrand)));
  END_IF;
      RETURN(?);
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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg1)
           THEN
             mag1 := arg1\vector.magnitude;
             vec1 := arg1\vector.orientation;
           ELSE
             mag1 := 1.0;
             vec1 := arg1;
           END_IF;
           IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg2)
           THEN
             mag2 := arg2\vector.magnitude;
             vec2 := arg2\vector.orientation;
           ELSE
             mag2 := 1.0;
             vec2 := arg2;
           END_IF;
           vec1 := normalise(vec1);
           vec2 := normalise(vec2);
           ndim := SIZEOF(vec1.direction_ratios);
           mag := 0.0;
           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.0)
           THEN
             result := dummy_gri || vector(res, SQRT(mag));
           ELSE
             result := dummy_gri || vector(vec1, 0.0);
           END_IF;
    END;
  END_IF;
      RETURN(result);
END_FUNCTION;

FUNCTION volume_weights_positive
 (b : rational_b_spline_volume) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 0 TO b.u_upper;
    REPEAT j := 0 TO b.v_upper;
      REPEAT k := 0 TO b.w_upper;
        IF (b.weights[i][j][k] <= 0.0)
        THEN
          result := FALSE;
          RETURN(result);
        END_IF;
      END_REPEAT;
    END_REPEAT;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION weights_positive
 (weights : LIST OF REAL) : BOOLEAN;
  LOCAL
  result : BOOLEAN := TRUE;
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(weights);
    IF weights[i] <= 0.0
    THEN
      result := FALSE;
      RETURN(result);
    END_IF;
  END_REPEAT;
      RETURN(result);
END_FUNCTION;

FUNCTION ypr_index
 (ypr : ypr_enumeration) : INTEGER;
    CASE ypr OF
    yaw : RETURN(1);
    pitch : RETURN(2);
    roll : RETURN(3);
  END_CASE;
      RETURN(?);
END_FUNCTION;

END_SCHEMA;  -- Ap242_managed_model_based_3d_engineering_mim_lf