]> OCCT Git - occt-copy.git/commitdiff
Replace generation of CDLs by HXX files,
authorika <ika@opencascade.com>
Mon, 6 Apr 2020 15:06:47 +0000 (18:06 +0300)
committerika <ika@opencascade.com>
Mon, 24 Aug 2020 12:00:47 +0000 (15:00 +0300)
add generation of entity registration code,
add a small readme,
add some useful files,
remove unnecessary old html.

35 files changed:
src/ExpToCasExe/ExpToCasExe.cxx
src/ExpToCasExe/ap242.exp [new file with mode: 0644]
src/ExpToCasExe/expparse.cxx
src/ExpToCasExe/expscan.cxx
src/ExpToCasExe/exptocas.html [deleted file]
src/ExpToCasExe/occt_step_entities.lst [new file with mode: 0644]
src/ExpToCasExe/readme.txt [new file with mode: 0644]
src/Express/Express.cxx
src/Express/Express.hxx
src/Express/Express_Alias.cxx
src/Express/Express_Alias.hxx
src/Express/Express_Boolean.cxx
src/Express/Express_Boolean.hxx
src/Express/Express_ComplexType.cxx
src/Express/Express_ComplexType.hxx
src/Express/Express_Entity.cxx
src/Express/Express_Entity.hxx
src/Express/Express_Enum.cxx
src/Express/Express_Enum.hxx
src/Express/Express_Integer.cxx
src/Express/Express_Integer.hxx
src/Express/Express_Item.cxx
src/Express/Express_Item.hxx
src/Express/Express_Logical.cxx
src/Express/Express_Logical.hxx
src/Express/Express_NamedType.cxx
src/Express/Express_NamedType.hxx
src/Express/Express_Real.cxx
src/Express/Express_Real.hxx
src/Express/Express_Schema.hxx
src/Express/Express_Select.cxx
src/Express/Express_Select.hxx
src/Express/Express_String.cxx
src/Express/Express_String.hxx
src/Express/Express_Type.hxx

index 427bb1bbd4d33d3e6a5366bf4508dd9ba34596d6..3eead1ccf73edc369e33f77c6bd6e9c7896bf2ad 100644 (file)
 #include <Express_Schema.hxx>
 #include <Express_Item.hxx>
 
+#pragma warning(push)
+#pragma warning (disable:4267)
+#pragma warning (disable:4706)
+
 Handle(Express_Schema) ec_parse ( FILE *fin ); // interface to parser
 
 // Load list of (class name, package name) from the file
@@ -30,7 +34,7 @@ static Standard_Boolean LoadList (const char file[], const Handle(Express_Schema
   char string[200];
   while ( fgets ( string, 199, fd_pack ) ) {
     char *s = string, *name=0;
-    Standard_Integer ind;
+    Standard_Integer ind = 0;
     while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
     if ( ! *s ) continue;
     name = s;
@@ -127,7 +131,7 @@ Standard_Integer main ( const Standard_Integer argc, const char *argv[] )
 {
   if ( argc <2 ) {
     std::cout << "EXPRESS -> CASCADE/XSTEP classes generator 3.0" << std::endl;
-    std::cout << "Use: ExpToCas <schema.exp> [<create.lst> [<packaging.lst>]]" << std::endl;
+    std::cout << "Use: ExpToCas <schema.exp> [<create.lst> [<packaging.lst> [start_index]]]" << std::endl;
     std::cout << "Where: " << std::endl;
     std::cout << "- schema.exp is a file with EXPRESS schema " << std::endl;
     std::cout << "- create.lst is a file with list of types to generate (all if none)" << std::endl;
@@ -135,6 +139,8 @@ Standard_Integer main ( const Standard_Integer argc, const char *argv[] )
     std::cout << "- packaging.lst is a file with classes distribution per package" << std::endl;
     std::cout << "  in the form of the list (one item per line) \"<TypeName> <Package>\"" << std::endl;
     std::cout << "  If package not defined for some type, \"StepStep\" assumed" << std::endl;
+    std::cout << "- start_index - a first number for auxiliary generated files with data" << std::endl;
+    std::cout << "  to copy into StepAP214_Protocol.cxx, RWStepAP214_GeneralModule.cxx and RWStepAP214_ReadWriteModule.cxx" << std::endl;
     return 0;
   }
   
@@ -176,12 +182,17 @@ Standard_Integer main ( const Standard_Integer argc, const char *argv[] )
     else if ( ! LoadList ( argv[2], schema, Standard_True ) ) return 0;
   }
 
+  Standard_Integer anIndex = -1;
+  if (argc > 4)
+    anIndex = atoi(argv[4]);
+
   //=================================
   // Step 3: Iterate by items and generate classes
 
   std::cout << "Total " << schema->NbItems() << " items" << std::endl;
   Standard_Boolean done = Standard_False;
   Standard_Integer nbgen = 0;
+  Express_Item::SetIndex(anIndex);
   do {
     done = Standard_False;
     for ( Standard_Integer num=1; num <= schema->NbItems(); num++ ) {
@@ -194,3 +205,5 @@ Standard_Integer main ( const Standard_Integer argc, const char *argv[] )
 //  std::cout << "Finished; total " << nbgen << " classes generated" << std::endl;
   return 1;
 }
+
+#pragma warning(pop)
diff --git a/src/ExpToCasExe/ap242.exp b/src/ExpToCasExe/ap242.exp
new file mode 100644 (file)
index 0000000..994d350
--- /dev/null
@@ -0,0 +1,49554 @@
+(*
+   $Id: mim_lf.exp,v 1.101 2019/07/01 16:42:01 kevin Exp $
+   ISO TC184/SC4/WG12 N10517 - ISO/TS 10303-442 AP242 managed model based 3d engineering - EXPRESS MIM Long form
+   Supersedes ISO TC184/SC4/WG3 N10384
+*)
+
+-- -*- Mode: Express -*-
+
+(* ===================================================================================== *)
+(* Long form schema generated by The EXPRESS Data Manager  compiler version 9.8.9B 20130507 *)
+(* Sat Jun 08 15:16:30 2019 *)
+(* The schema is converted from ISO10303 P11-2003 to ISO10303 P11-1994 *)
+(* ===================================================================================== *)
+
+(* Pretty Printed by Express Engine
+      5.0.21 (GIT eeng-5.0.21)
+      Steel Bank CL 1.4.16 (64-bits)
+
+     eengine --pretty
+       -mode mim_longform
+       -schema mim_lf.exp
+   Line Width: 120
+   Commandline:
+     eengine --pretty
+       -mode mim_longform
+       -schema mim_lf.exp
+*)
+
+(* File: /Users/klt/Desktop/mim_lf.exp *)
+(* 1 Schema: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF *)
+
+(*  Interfaces:                 0 *)
+(*  Constants:                 29 *)
+(*  Types:                    449 *)
+(*  Entities:               2,118 *)
+(*  Subtype_Constraints:        0 *)
+(*  Functions:                316 *)
+(*  Rules:                     55 *)
+(*  Procedures:                 0 *)
+
+SCHEMA automotive_design;
+
+TYPE a3m_accuracy_type_name = ENUMERATION OF
+  (atna_others,
+   atns_area_measure,
+   atns_length_measure,
+   atns_others,
+   atns_plane_angle_measure,
+   atns_volume_measure);
+END_TYPE;
+
+TYPE a3m_detected_difference_type_name = ENUMERATION OF
+  (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,
+   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);
+END_TYPE;
+
+TYPE a3m_element_type_name = ENUMERATION OF
+  (etna_others,
+   etna_product_definition_or_reference,
+   etna_shape_representation,
+   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);
+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_measured_data_type_name = ENUMERATION OF
+  (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,
+   mdns_area_measure,
+   mdns_boolean_value,
+   mdns_length_measure,
+   mdns_others,
+   mdns_plane_angle_measure,
+   mdns_volume_measure);
+END_TYPE;
+
+TYPE a3ma_accuracy_type_name = a3m_accuracy_type_name;
+END_TYPE;
+
+TYPE a3ma_detected_difference_type_name = a3m_detected_difference_type_name;
+END_TYPE;
+
+TYPE a3ma_element_type_name = a3m_element_type_name;
+END_TYPE;
+
+TYPE a3ma_measured_data_type_name = a3m_measured_data_type_name;
+END_TYPE;
+
+TYPE a3ms_accuracy_type_name = a3m_accuracy_type_name;
+END_TYPE;
+
+TYPE a3ms_detected_difference_type_name = a3m_detected_difference_type_name;
+END_TYPE;
+
+TYPE a3ms_element_type_name = a3m_element_type_name;
+END_TYPE;
+
+TYPE a3ms_inspected_equivalence_element_select = inspected_equivalence_element_select;
+END_TYPE;
+
+TYPE a3ms_measured_data_type_name = a3m_measured_data_type_name;
+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_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_organizational_project_assignment,
+   applied_organization_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_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,
+   class,
+   classification_item,
+   class_system,
+   condition,
+   conditional_effectivity,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   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,
+   evaluated_characteristic,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   event_occurrence,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   hierarchical_interface_connection,
+   identification_assignment_relationship,
+   inclusion_product_concept_feature,
+   identification_item,
+   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,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_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_definition,
+   product_definition_element_relationship,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   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,
+   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,
+   versioned_action_request);
+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_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   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,
+   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 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,
+   organizational_project_relationship,
+   organization_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_organizational_project_assignment,
+   applied_organization_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,
+   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_general_property,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   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,
+   in_zone,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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 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,
+   cylindrical,
+   rectangular,
+   spherical,
+   square);
+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_organizational_project_assignment,
+   applied_organization_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_value = SELECT 
+  (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_organizational_project_assignment,
+   applied_organization_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,
+   organizational_address,
+   organizational_project_relationship,
+   organization_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,
+   data_environment,
+   date_role,
+   date_time_role,
+   descriptive_representation_item,
+   document_relationship,
+   document_usage_role,
+   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,
+   organizational_project,
+   organizational_project_relationship,
+   organizational_project_role,
+   organization_relationship,
+   organization_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
+  (solid_model,
+   csg_primitive,
+   boolean_result);
+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 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;
+END_TYPE;
+
+TYPE box_width = positive_ratio_measure;
+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,
+   alternate_product_relationship,
+   analysis_assignment,
+   applied_action_method_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_organizational_project_assignment,
+   applied_organization_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,
+   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_relationship,
+   alternative_solution_relationship,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   shape_aspect_relationship);
+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);
+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,
+   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_organizational_project_assignment,
+   applied_organization_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_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,
+   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,
+   feature_definition,
+   general_feature,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment,
+   identification_assignment_relationship,
+   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,
+   in_zone,
+   language,
+   link_motion_relationship,
+   local_time,
+   location,
+   location_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_qualification,
+   measure_representation_item,
+   measure_with_unit,
+   message_relationship,
+   multi_language_attribute_assignment,
+   named_unit,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   plus_minus_tolerance,
+   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,
+   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 connected_edge_with_length_set_items = SELECT 
+  (connected_edge_set,
+   path,
+   vertex_on_edge);
+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 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 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_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_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,
+   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,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_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,
+   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,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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,
+   distance,
+   projected,
+   spherical);
+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 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,
+   organizational_project,
+   organization_role,
+   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_organizational_project_assignment,
+   applied_organization_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,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   contract,
+   contract_relationship,
+   data_environment,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   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,
+   global_uncertainty_assigned_context,
+   global_unit_assigned_context,
+   group,
+   group_relationship,
+   location,
+   location_relationship,
+   material_designation_characterization,
+   measure_qualification,
+   measure_with_unit,
+   message_relationship,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   organization_type,
+   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 directed_tolerance_zone_type = ENUMERATION OF
+  (perpendicular,
+   parallel,
+   including);
+END_TYPE;
+
+TYPE direction_count_select = SELECT 
+  (u_direction_count,
+   v_direction_count);
+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_organizational_project_assignment,
+   applied_organization_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,
+   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,
+   in_zone,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_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 draughting_callout_element = SELECT 
+  (annotation_curve_occurrence,
+   annotation_fill_area_occurrence,
+   annotation_placeholder_occurrence,
+   annotation_symbol_occurrence,
+   annotation_text_occurrence,
+   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_organizational_project_assignment,
+   applied_organization_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,
+   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,
+   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_or_curve = SELECT 
+  (curve,
+   edge);
+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_organizational_project_assignment,
+   applied_organization_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_general_property,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   group,
+   identification_assignment_relationship,
+   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,
+   in_zone,
+   link_motion_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   multi_language_attribute_assignment,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_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,
+   general_organizational_data_select,
+   general_property,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_project,
+   organization_relationship,
+   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_organizational_project_assignment,
+   applied_organization_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 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 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_joint,
+   assembly_component_usage,
+   breakdown_context,
+   certification,
+   class,
+   composite_curve,
+   condition,
+   configuration_effectivity,
+   contract,
+   curve,
+   date_and_time_assignment,
+   date_assignment,
+   derived_unit,
+   document_file,
+   effectivity,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   event_occurrence,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_class,
+   externally_defined_context_dependent_unit,
+   externally_defined_conversion_based_unit,
+   externally_defined_general_property,
+   externally_defined_representation_item,
+   external_source,
+   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,
+   loop,
+   material_designation,
+   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_item,
+   requirement_source,
+   satisfies_requirement,
+   security_classification,
+   shape_representation,
+   state_observed,
+   state_type,
+   structured_message,
+   surface,
+   time_interval,
+   trimmed_curve,
+   type_qualifier,
+   uncertainty_qualifier,
+   validation,
+   verification,
+   versioned_action_request,
+   vertex_point);
+END_TYPE;
+
+TYPE face_or_surface = SELECT 
+  (face,
+   surface);
+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_organizational_project_assignment,
+   applied_organization_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,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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_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,
+   each_radial_element,
+   free_state,
+   least_material_requirement,
+   line_element,
+   major_diameter,
+   maximum_material_requirement,
+   minor_diameter,
+   not_convex,
+   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,
+   standard_deviation,
+   statistical_tolerance,
+   tangent_plane,
+   total_range_deviations,
+   united_feature,
+   valley_depth);
+END_TYPE;
+
+TYPE geometric_tolerance_target = SELECT 
+  (dimensional_location,
+   dimensional_size,
+   product_definition_shape,
+   shape_aspect);
+END_TYPE;
+
+TYPE gps_filtration_specification_target = SELECT 
+  (geometric_tolerance);
+END_TYPE;
+
+TYPE gps_filtration_type = SELECT 
+  (geometric_tolerance_modifier);
+END_TYPE;
+
+TYPE groupable_item = SELECT (
+   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,
+   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,
+   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,
+   instanced_feature,
+   interface_connector_definition,
+   interface_definition_connection,
+   interface_definition_for,
+   item_defined_transformation,
+   local_time,
+   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,
+   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,
+   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 id_attribute_select = SELECT 
+  (action,
+   address,
+   application_context,
+   ascribable_state_relationship,
+   dimensional_size,
+   geometric_tolerance,
+   group,
+   organizational_project,
+   product_category,
+   property_definition,
+   representation,
+   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_organizational_project_assignment,
+   applied_organization_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,
+   class,
+   class_system,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   contract,
+   contract_relationship,
+   date_and_time_assignment,
+   date_assignment,
+   degenerate_pcurve,
+   dimensional_size,
+   dimensional_size_with_path,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   document_type,
+   draughting_model,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   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,
+   link_motion_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   message_relationship,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   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_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   retention,
+   rule_set,
+   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,
+   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.B_SPLINE_OR_COMPOSITE_CURVE_SELECT' IN TYPEOF(SELF));
+  wr2 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT' IN TYPEOF(SELF));
+  wr3 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_OR_OPEN_SHELL_SELECT' IN TYPEOF(SELF));
+  wr4 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN TYPEOF(SELF));
+  wr5 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF));
+  wr6 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(SELF));
+  wr7 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(SELF));
+  wr8 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(SELF));
+  wr9 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(SELF));
+  wr10 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(SELF));
+  wr11 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(SELF));
+  wr12 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(SELF));
+  wr13 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(SELF));
+  wr14 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' 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,
+   direction,
+   edge_curve,
+   edge_loop,
+   face_surface,
+   global_uncertainty_assigned_context,
+   global_unit_assigned_context,
+   group,
+   manifold_solid_brep,
+   placement,
+   point,
+   presentation_layer_assignment,
+   representation_item,
+   styled_item,
+   surface,
+   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.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(SELF));
+  wr2 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF));
+  wr3 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_TRANSFORMATION_OPERATOR_3D' IN TYPEOF(SELF));
+  wr4 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT' IN TYPEOF(SELF));
+  wr5 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(SELF));
+  wr6 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP' IN TYPEOF(SELF));
+  wr7 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT' IN TYPEOF(SELF));
+  wr8 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(SELF));
+  wr9 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' 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_organizational_project_assignment,
+   applied_organization_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_item_defined_transformation = LIST [2 : ?] OF item_defined_transformation;
+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 
+  (assembly_component_usage,
+   document_file,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   organization,
+   organizational_project,
+   organization_type,
+   person,
+   person_and_organization,
+   product,
+   product_definition,
+   product_definition_formation,
+   product_definition_relationship,
+   product_group);
+END_TYPE;
+
+TYPE location_of_extreme_value_select = SELECT 
+  (boundary_curve_of_b_spline_or_rectangular_composite_surface,
+   b_spline_curve_knot_locator,
+   b_spline_curve_segment,
+   b_spline_surface_knot_locator,
+   b_spline_surface_patch,
+   b_spline_surface_strip,
+   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,
+   spherical_cap,
+   step,
+   slot,
+   thread,
+   turned_knurl);
+END_TYPE;
+
+TYPE magnetic_flux_density_measure = REAL;
+END_TYPE;
+
+TYPE magnetic_flux_measure = REAL;
+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_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_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,
+   maths_tuple,
+   generic_expression);
+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_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_relationship,
+   approval_status,
+   ascribable_state,
+   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,
+   data_environment,
+   date_role,
+   date_time_role,
+   descriptive_representation_item,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   document_usage_role,
+   draughting_title,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_class,
+   external_source,
+   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,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   in_zone,
+   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,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organizational_project_role,
+   organization_relationship,
+   organization_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,
+   product,
+   product_definition);
+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 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_organizational_project_assignment,
+   applied_organization_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,
+   document_file,
+   document_type,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   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,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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_organizational_project_assignment,
+   applied_organization_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,
+   document_file,
+   document_type,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   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,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   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,
+   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_organization_select = SELECT 
+  (organization,
+   person,
+   person_and_organization);
+END_TYPE;
+
+TYPE picture_representation_item_select = SELECT 
+  (axis2_placement_2d,
+   planar_box,
+   styled_item);
+END_TYPE;
+
+TYPE planar_curve_select = SELECT
+  (line,
+   conic,
+   trimmed_curve,
+   pcurve,
+   surface_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 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 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,
+   texture_style_tessellation_specification,
+   text_style);
+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 product_definition_occurrence_or_reference = SELECT 
+  (product_definition_occurrence,
+   product_definition_occurrence_reference);
+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 
+  (uniform_product_space);
+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
+  (real_interval_from_min,
+   real_interval_to_max,
+   finite_real_interval,
+   elementary_space);
+WHERE
+  WR1: NOT ('ELEMENTARY_SPACE' IN stripped_typeof(SELF)) OR
+    (SELF\elementary_space.space_id = es_reals);
+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 
+  (product_definition_formation);
+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 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 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 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_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 [2 : ?] 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
+  (any_cross_section,
+   any_longitudinal_section,
+   basic,
+   contacting_feature,
+   degree_of_freedom_constraint_u,
+   degree_of_freedom_constraint_v,
+   degree_of_freedom_constraint_w,
+   degree_of_freedom_constraint_x,
+   degree_of_freedom_constraint_y,
+   degree_of_freedom_constraint_z,
+   distance_variable,
+   free_state,
+   least_material_requirement,
+   line,
+   major_diameter,
+   maximum_material_requirement,
+   minor_diameter,
+   orientation,
+   pitch_diameter,
+   plane,
+   point,
+   translation);
+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,
+   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 supported_item = SELECT 
+  (action,
+   action_directive,
+   action_method);
+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_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 tessellated_edge_or_vertex = SELECT 
+  (tessellated_edge,
+   tessellated_vertex);
+END_TYPE;
+
+TYPE tessellated_facet_long_short_edge_ratio = ratio_measure;
+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_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,
+   configured_effectivity_assignment,
+   contract,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   evidence,
+   executed_action,
+   general_property,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_project,
+   organization_relationship,
+   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,
+   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);
+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 transformation = SELECT 
+  (functionally_defined_transformation,
+   item_defined_transformation,
+   list_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 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 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; -- value_format_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_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;
+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_inspected_model_and_inspection_result_relationship;
+  inspected_model    : target_annotated_3d_model_select;
+  equivalence_result : a3m_equivalence_inspection_result_representation;
+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]);
+  WR4: 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;
+  WR5: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+       TYPEOF(SELF\compound_representation_item.item_element[2]);
+  WR6: 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 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;
+  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;
+  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_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_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 advanced_brep_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   '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.MANIFOLD_SOLID_BREP',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                              TYPEOF(it)) =
+                       1))) >
+       0;
+  WR3: 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;
+  WR4: 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;
+  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.ADVANCED_BREP_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+END_ENTITY;
+
+ENTITY advanced_face
+  SUBTYPE OF (face_surface);
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE'] *
+              TYPEOF(face_geometry)) =
+       1;
+  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 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                               TYPEOF(oe\oriented_edge.edge_element)))) =
+                           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 (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;
+  WR4: 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;
+  WR5: 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;
+  WR6: 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);
+  WR7: 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;
+  WR8: 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;
+  WR9: 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;
+  WR10: (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 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(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_text_occurrence, annotation_symbol_occurrence)) ANDOR
+                (ONEOF(annotation_curve_occurrence, annotation_fill_area_occurrence, annotation_plane,
+                       annotation_symbol_occurrence, annotation_text_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_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_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 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 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_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_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_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_presented_item
+  SUBTYPE OF (presented_item);
+  items : SET [1 : ?] OF presented_item_select;
+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_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_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 component_mating_constraint_condition
+    SUBTYPE OF ( shape_aspect );
+    UNIQUE
+      ur1 : SELF\shape_aspect.name, SELF\shape_aspect.of_shape;
+END_ENTITY;
+
+ENTITY connection_zone_based_assembly_joint
+    SUBTYPE OF ( assembly_joint );
+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_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 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(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_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
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY binary_generic_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (generic_expression);
+  operands : LIST [2 : 2] OF generic_expression;
+END_ENTITY;
+
+ENTITY binary_numeric_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(minus_expression, div_expression, mod_expression, slash_expression, power_expression,
+                               binary_function_call))
+  SUBTYPE OF (numeric_expression, binary_generic_expression);
+  SELF\binary_generic_expression.operands : LIST [2 : 2] OF numeric_expression;
+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_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 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 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];
+  directed_link : LIST [1 : ?] OF representation_relationship := get_directed_link(nodes, undirected_link);
+  leaf          : representation                              := SELF\item_identified_representation_usage.used_representation;
+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
+  composition : change_group   := SELF\group_relationship.relating_group;
+  element     : change_element := SELF\group_relationship.related_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];
+  directed_link : LIST [1 : ?] OF representation_relationship := get_directed_link(nodes, undirected_link);
+  leaf          : representation                              := SELF\characterized_item_within_representation.rep;
+WHERE
+  WR1: EXISTS(directed_link);
+END_ENTITY;
+
+ENTITY characterized_class
+  SUBTYPE OF (characterized_object, class);
+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_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
+  predecessor : collection_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+  successor   : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
+END_ENTITY;
+
+ENTITY collection_view_definition
+  SUBTYPE OF (product_definition);
+  SELF\product_definition.formation : collection_version;
+DERIVE
+  defined_version : collection_version := SELF\product_definition.formation;
+END_ENTITY;
+
+ENTITY 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 <> 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 <> 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_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_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);
+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.context_of_items)) AND
+       (SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3);
+  WR2: SIZEOF(QUERY(cbsr_i
+                    <* SELF.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.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.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 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_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_with_length_set_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF connected_edge_with_length_set_items;
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN TYPEOF(it))) =
+       1;
+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;
+END_ENTITY;
+
+ENTITY connected_volume_set
+  SUBTYPE OF (topological_representation_item);
+  cvs_volumes : SET [1 : ?] OF volume_with_faces;
+END_ENTITY;
+
+ENTITY connected_volume_sub_set
+  SUBTYPE OF (connected_volume_set);
+  parent_volume_set : connected_volume_set;
+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_root_shape_aspect(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.PLACEMENT',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT'] *
+                             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.rep_1.context_of_items :=: SELF.rep_2.context_of_items) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+        TYPEOF(SELF.rep_1.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 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_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(SELF.represented_product_relation.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 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;
+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));
+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    : 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;
+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));
+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     : 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;
+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));
+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;
+END_ENTITY;
+
+ENTITY criterion_report_item_with_value
+  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
+  report_value : measure_with_unit;
+  value_type   : label;
+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);
+WHERE
+  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REVOLVED_FACE_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTRUDED_FACE_SOLID'] *
+                              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.CSG_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR4: 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;
+  WR5: 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] <> SELF.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 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_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;
+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_target
+  SUBTYPE OF (shape_aspect);
+  target_id : identifier;
+INVERSE
+  target_basis_relationship : SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+WHERE
+  WR1: SIZEOF(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)))) =
+       1;
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY datum_target_callout
+  SUBTYPE OF (draughting_callout);
+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_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;
+END_ENTITY;
+
+ENTITY dimensional_location_with_datum_feature
+  SUBTYPE OF (datum_feature, dimensional_location);
+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.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_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;
+  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)));
+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_placeholder
+  SUBTYPE OF (draughting_model_item_association);
+  SELF\draughting_model_item_association.definition          : draughting_model_item_definition;
+  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 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, edge_with_length, oriented_edge, subedge))
+  SUBTYPE OF (topological_representation_item);
+  edge_start : vertex;
+  edge_end   : vertex;
+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_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_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 edge_with_length
+  SUBTYPE OF (edge);
+  edge_length : positive_length_measure;
+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);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   '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.MANIFOLD_SOLID_BREP',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: 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.cfs_faces
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN
+                                                                   TYPEOF(fcs)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: 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.ELEMENTARY_SURFACE' IN
+                                                                    TYPEOF(fcs\face_surface.face_geometry))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: 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 (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;
+  WR6: 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 (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;
+  WR7: 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 (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;
+  WR8: 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 (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;
+  WR9: 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;
+  WR10: 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;
+  WR11: 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;
+  WR12: 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 (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 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_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_relationship;
+  name           : label;
+  description    : OPTIONAL text;
+  relating_event : event_occurrence;
+  related_event  : event_occurrence;
+END_ENTITY;
+
+ENTITY event_occurrence_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY evidence
+  SUBTYPE OF (group_assignment);
+  items : SET [1 : ?] OF evidence_item;
+END_ENTITY;
+
+ENTITY 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 exp_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY expanded_uncertainty
+  SUBTYPE OF (standard_uncertainty);
+  coverage_factor : REAL;
+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_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_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, subface, oriented_face))
+  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_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);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   '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
+                    <* 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;
+  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 (('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;
+  WR4: 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;
+  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.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: relating_shape_aspect.of_shape :=: related_shape_aspect.of_shape;
+  WR2: 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 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 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.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
+  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 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_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 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(point, direction, vector, placement, cartesian_transformation_operator, curve, surface,
+                       edge_curve, face_surface, poly_loop, vertex_point, solid_model, boolean_result, sphere,
+                       right_circular_cone, right_circular_cylinder, torus, block, primitive_2d, right_angular_wedge,
+                       ellipsoid, faceted_primitive, rectangular_pyramid, cyclide_segment_solid, volume,
+                       half_space_solid, shell_based_surface_model, face_based_surface_model,
+                       shell_based_wireframe_model, edge_based_wireframe_model, geometric_set, tessellated_item,
+                       volume_with_faces, scanned_data_item)) ANDOR
+                ((ONEOF(annotation_fill_area, curve, point, text_literal))) ANDOR
+                ((ONEOF(camera_model, curve, direction))) ANDOR
+                ((ONEOF(curve, externally_defined_hatch_style, externally_defined_tile_style, fill_area_style_hatching,
+                        fill_area_style_tile_symbol_with_style, fill_area_style_tiles, one_direction_repeat_factor,
+                        point, vector))) ANDOR
+                ((ONEOF(curve, planar_extent))) ANDOR (ONEOF(kinematic_path, placement)) ANDOR
+                (ONEOF(rotation_about_direction, su_parameters)))
+  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
+  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_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(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(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(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.SHAPE_ASPECT' IN
+             TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)) AND
+            (SELF\geometric_tolerance.toleranced_shape_aspect\shape_aspect.product_definitional = true) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN
+             TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)));
+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_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_relationship;
+  name           : label;
+  description    : OPTIONAL text;
+  relating_group : group;
+  related_group  : group;
+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 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 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_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_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_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_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 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 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 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;
+  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: NOT (SIZEOF(identified_item) = 1) OR (used_representation IN using_representations(identified_item));
+  WR2: NOT (SIZEOF(identified_item) > 1) OR (used_representation IN get_representations_for_items(identified_item));
+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 language
+  SUBTYPE OF (group);
+WHERE
+  WR1: SELF\group.name <> '';
+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 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_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_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);
+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(SELF.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(SELF.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_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 log_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY log10_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY log2_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 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);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_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.CONNECTED_FACE_SUB_SET',
+                              '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.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR4: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR5: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR6: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR7: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR8: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR9: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.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;
+  WR10: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.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;
+  WR11: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.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;
+  WR12: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.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);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_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(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.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;
+  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.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;
+  WR4: 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(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;
+  WR5: 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.FACE_SURFACE' IN
+                                                                   TYPEOF(fa)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: 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
+                                                                   (msf_surface_check(fa\face_surface.face_geometry))))) =
+                                               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(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;
+  WR8: 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;
+  WR9: 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_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;
+  WR10: 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 (msf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: 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.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;
+  WR12: 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 ((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;
+  WR13: 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(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;
+  WR14: 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(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 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,
+                               uniform_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_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;
+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(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_FILL_AREA',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY'] *
+                                                                                              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(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;
+  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(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;
+  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(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;
+  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(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;
+  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(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 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;
+  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;
+  root : product_definition := relating_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 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 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_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_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);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['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(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.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;
+  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.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;
+  WR4: 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 (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;
+  WR5: 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(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;
+  WR6: 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(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;
+  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(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;
+  WR8: 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;
+  WR9: 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_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;
+  WR10: 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 (nmsf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: 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.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;
+  WR12: 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 ((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;
+  WR13: 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(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;
+  WR14: 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(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 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 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 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 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 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 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_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_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 pmi_requirement_item_association
+  SUBTYPE OF (item_identified_representation_usage);
+  requirement : characterized_object;
+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_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_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_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_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 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 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 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_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, 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE' IN TYPEOF(SELF)) XOR
+       (('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)));
+  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.value_component))) OR (quantity.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
+  individual_product : product := SELF\product_relationship.related_product;
+  product_design     : product := SELF\product_relationship.relating_product;
+END_ENTITY;
+
+ENTITY product_design_version_to_individual
+  SUBTYPE OF (product_definition_formation_relationship);
+DERIVE
+  individual_product     : product_definition_formation := SELF\product_definition_formation_relationship.related_product_definition_formation;
+  product_design_version : product_definition_formation := SELF\product_definition_formation_relationship.relating_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);
+DERIVE
+  planned_product  : product_definition_formation := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+  realized_product : product_definition_formation := SELF\product_definition_formation_relationship.related_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 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(SELF.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(SELF.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(SELF.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 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(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)) ANDOR
+                (ONEOF(kinematic_topology_structure, kinematic_topology_directed_structure,
+                       kinematic_topology_network_structure)));
+  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(compound_representation_item, mapped_item,
+                       value_representation_item)) ANDOR
+                ((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(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
+  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
+           (item_in_context(transformation_operator\item_defined_transformation.transform_item_1,
+                            SELF\representation_relationship.rep_1.context_of_items) AND
+            item_in_context(transformation_operator\item_defined_transformation.transform_item_2,
+                            SELF\representation_relationship.rep_2.context_of_items));
+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 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 right_to_usage_association
+  SUBTYPE OF (action_method_relationship);
+  SELF\action_method_relationship.relating_method : information_usage_right;
+  SELF\action_method_relationship.related_method  : information_right;
+DERIVE
+  right_applied : information_right       := SELF\action_method_relationship.related_method;
+  right_usage   : information_usage_right := SELF\action_method_relationship.relating_method;
+END_ENTITY;
+
+ENTITY rigid_link_representation
+  SUBTYPE OF (kinematic_link_representation);
+END_ENTITY;
+
+ENTITY rigid_subsketch
+  SUBTYPE OF (subsketch);
+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
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) 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: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) 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 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 seam_edge
+  SUBTYPE OF (oriented_edge);
+  pcurve_reference : pcurve;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(edge_element)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SEAM_CURVE' IN TYPEOF(edge_element\edge_curve.edge_geometry));
+  WR2: pcurve_reference IN edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry;
+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 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(shape_aspect_occurrence, component_path_shape_aspect) ANDOR constituent_shape_aspect) ANDOR
+                (ONEOF(harness_node, harness_segment)) ANDOR
+                (ONEOF(contacting_feature, datum, datum_feature, datum_target, datum_system,
+                       general_datum_reference)) ANDOR
+                (ONEOF(assembly_shape_constraint, assembly_shape_joint, connectivity_definition, contact_feature,
+                       transport_feature)));
+  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 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_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 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 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_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 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_constant_radius_edge_blend
+  SUBTYPE OF (edge_blended_solid);
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_depression
+  ABSTRACT SUPERTYPE OF (solid_with_through_depression ANDOR
+                         ONEOF(solid_with_hole, solid_with_pocket, 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_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_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_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_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 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 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.CONTEXT_DEPENDENT_OVER_RIDING_STYLED_ITEM' IN TYPEOF(SELF));
+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;
+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))));
+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_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_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 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_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_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_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_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_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_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 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, 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,
+                      connected_volume_set, volume_with_faces, (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 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 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 <> coordinates.npoints));
+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 <> 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 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
+  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_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 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_on_edge
+  SUBTYPE OF (vertex);
+  parent_edge         : edge_with_length;
+  distance_from_start : positive_length_measure;
+WHERE
+  WR1: distance_from_start < parent_edge.edge_length;
+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 volume_with_faces
+  ABSTRACT SUPERTYPE OF (ONEOF(volume_with_shell, volume_with_parametric_boundary))
+  SUBTYPE OF (geometric_representation_item, topological_representation_item);
+  volume_geometry : volume;
+END_ENTITY;
+
+ENTITY volume_with_parametric_boundary
+  SUBTYPE OF (volume_with_faces);
+  outer_bound : LIST [6 : 6] OF face;
+END_ENTITY;
+
+ENTITY volume_with_shell
+  SUBTYPE OF (volume_with_faces);
+  outer_bound : closed_shell;
+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;
+
+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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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.ALTERNATIVE_SOLUTION_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;
+  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 := [];
+  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 state_definition_to_state_assignment_relationship;
+END_LOCAL;
+  IF relation.relating_ascribable_state IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(sdtsar
+             <* bag_to_set(USEDIN(relation.relating_ascribable_state,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_DEFINITION_TO_STATE_ASSIGNMENT_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 advanced_face_properties(testface : face) : BOOLEAN;
+(* return TRUE if testface is of type advanced_face *)
+  (* 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;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION aspect_ratio(p : planar_box) : positive_ratio_measure;
+  IF (p.size_in_x > 0.) AND (p.size_in_y > 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;
+  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;
+  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;
+  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;
+  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;
+  IF (SIZEOF(edges) = 1)
+  THEN
+    RETURN(true);
+  END_IF;
+  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;
+  IF (SIZEOF(edges) = 2)
+  THEN
+    RETURN(true);
+  END_IF;
+  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;
+  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 [0 : ?] OF geometric_representation_context) : BOOLEAN;
+LOCAL
+  globaldim : INTEGER                       := 0;
+  reps      : SET [0 : ?] OF representation := [];
+  result    : BOOLEAN                       := true;
+END_LOCAL;
+  IF (SIZEOF(grc) = 0)
+  THEN
+    RETURN(false);
+  END_IF;
+  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);
+  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;
+  REPEAT i := 1 TO HIINDEX(ct.collected_text);
+    a := a + [ct.collected_text[i]\text_literal.alignment];
+  END_REPEAT;
+  RETURN(SIZEOF(a) = 1);
+END_FUNCTION;
+
+FUNCTION check_text_font(ct : composite_text) : BOOLEAN;
+LOCAL
+  f : SET OF font_select := [];
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(ct.collected_text);
+    f := f + [ct.collected_text[i]\text_literal.font];
+  END_REPEAT;
+  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;
+  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;
+  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;
+  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;
+  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 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.YPR_ROTATION' IN TYPEOF(rotation)
+  THEN
+    RETURN(rotation);
+  END_IF;
+  axis := normalise(rotation\rotation_about_direction.direction_of_axis);
+  angle := rotation\rotation_about_direction.rotation_angle;
+  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];
+  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);
+  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;
+  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;
+  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]];
+  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;
+  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_operand(val : maths_value) : generic_expression;
+LOCAL
+  types : SET OF STRING := stripped_typeof(val);
+END_LOCAL;
+  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;
+  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 dependently_instantiated(set_of_input_instances : SET OF GENERIC : IGEN;
+                                  set_of_input_types : SET OF STRING;
+                                  previous_in_chain : LIST OF GENERIC : CGEN) : BOOLEAN;
+(* 'dependently_instantiated' To test whether all instances in the
+   input set_of_input_instances are referenced by independently
+   instantiable instances. If so, this function returns true.
+   Set_of_input_types includes the type strings for all input instances.
+   The instances in previous_in_chain are used to detect cyclic
+   references during recursive calls to this function. The parameter
+   lists already tested instances in a chain of references.
+    *)
+LOCAL
+  number_of_input_instances     : INTEGER;
+  number_of_referring_instances : INTEGER;
+  bag_of_referring_instances    : BAG OF GENERIC : IGEN  := [];
+  dependently_instantiated_flag : BOOLEAN;
+  previous_in_chain_plus        : LIST OF GENERIC : CGEN := [];
+  result                        : BOOLEAN                := true;
+  set_of_types                  : SET OF STRING          := [];
+END_LOCAL;
+  IF EXISTS(set_of_input_instances)
+  THEN
+    number_of_input_instances := SIZEOF(set_of_input_instances);
+    set_of_input_types := set_of_input_types + 'GENERIC';
+    REPEAT i := 1 TO number_of_input_instances;
+      bag_of_referring_instances := USEDIN(set_of_input_instances[i], '');
+      IF EXISTS(bag_of_referring_instances)
+      THEN
+        number_of_referring_instances := SIZEOF(bag_of_referring_instances);
+        dependently_instantiated_flag := false;
+        REPEAT j := 1 TO number_of_referring_instances;
+          set_of_types := TYPEOF(bag_of_referring_instances[j]);
+          IF set_of_types <= set_of_input_types
+          THEN
+            IF NOT (bag_of_referring_instances[j] IN previous_in_chain)
+            THEN
+              previous_in_chain_plus := previous_in_chain + set_of_input_instances[i];
+              IF dependently_instantiated([bag_of_referring_instances[j]], set_of_input_types, previous_in_chain_plus)
+              THEN
+                dependently_instantiated_flag := true;
+                ESCAPE;
+              ELSE
+                SKIP;
+              END_IF;
+            END_IF;
+          ELSE
+            dependently_instantiated_flag := true;
+            ESCAPE;
+          END_IF;
+        END_REPEAT;
+        IF NOT dependently_instantiated_flag
+        THEN
+          RETURN(false);
+        END_IF;
+      ELSE
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  ELSE
+    RETURN(false);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION derive_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;
+-- Internal utility function:
+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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  x := using_representations(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;
+-- Find equivalent direction in range -PI < a <= PI.
+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;
+  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;
+  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;
+  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;
+  xc := prgn.centre.real_part;
+  yc := prgn.centre.imag_part;
+  ritv := prgn.distance_constraint;
+  aitv := prgn.direction_constraint;
+  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;
+  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;
+  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;
+  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;
+  IF NOT (xmin_exists OR xmax_exists OR ymin_exists OR ymax_exists)
+  THEN
+    RETURN(?);
+  END_IF;
+  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;
+  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;
+  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;
+-- Find equivalent direction in range -PI < a <= PI.
+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;
+  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);
+  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);
+  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;
+  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;
+  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 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;
+  RETURN(?);
+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;
+  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;
+  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;
+  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;
+  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;
+  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);
+  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;
+  local_p_d := bag_to_set(USEDIN(item,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
+  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;
+  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;
+  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;
+  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_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;
+  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_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;
+  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_root_shape_aspect(current : shape_aspect) : product_definition_shape;
+  REPEAT WHILE ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONSTITUENT_SHAPE_ASPECT' IN TYPEOF(current));
+    current := current.parent;
+  END_REPEAT;
+  RETURN(current.of_shape);
+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 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 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);
+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_with_placeholder.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_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;
+  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(points) < 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;
+-- Trivial function introduced to avoid NIST Fedex compiler error
+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;
+  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
+    *)
+  (* 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
+    *)
+  (* 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
+    *)
+  (* 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
+    *)
+  (* 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;
+  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 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;
+  exti := exti +
+          bag_to_set(USEDIN(item,
+                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTREME_INSTANCE.LOCATIONS_OF_EXTREME_VALUE'));
+  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;
+  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;
+  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;
+  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;
+  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;
+    *)
+  (*
+     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;
+  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;
+  IF 'MATHS_SPACE' IN types
+  THEN
+    RETURN(simplify_maths_space(expr));
+  END_IF;
+  IF 'FUNCTION_APPLICATION' IN types
+  THEN
+    RETURN(simplify_function_application(expr));
+  END_IF;
+  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;
+  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;
+  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;
+  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;
+  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;
+  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 ((LENGTH(types[i]) > n) AND (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;
+  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 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;
+  local_p_d := using_product_definition_of_shape_representation(item);
+  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;
+  local_s_a := using_shape_aspect_of_shape_representation(item);
+  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;
+  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 SIZEOF(next_items) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(next_items);
+      IF NOT (next_items[i] IN new_check_items)
+      THEN
+        result_items := result_items + next_items[i] + using_items(next_items[i], new_check_items);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(result_items);
+END_FUNCTION;
+
+FUNCTION using_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;
+  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));
+  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;
+  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;
+  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;
+  intermediate_items := using_items(item, []);
+  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(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;
+  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);
+  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_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;
+  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_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;
+  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;
+  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;
+  IF NOT (attid[1] IN letters)
+  THEN
+    id_valid := false;
+  END_IF;
+  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;
+  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;
+  IF (SIZEOF(sdiri) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  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;
+  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;
+  IF (SIZEOF(sdiri) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  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;
+  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;
+  IF (SIZEOF(sdei) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ((SIZEOF(type_list) = 0) AND (SIZEOF(sdei) <> 0))
+  THEN
+    RETURN(false);
+  END_IF;
+  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;
+  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 ((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;
+  REPEAT i := 1 TO SIZEOF(sdcr);
+    IF (NOT (type_string IN TYPEOF(sdcr[i].representative_measured_value)))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdii);
+    IF (NOT (type_string IN TYPEOF(sdii[i].measured_value)))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  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;
+
+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 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: 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.5M-1994') OR
+                                                                      (adr\document_reference.assigned_document\document.id =
+                                                                       'ISO 1101: 2004'))));
+  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 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 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 subtype_mandatory_shape_representation FOR (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(sr
+                    <* shape_representation
+                    | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_SHAPE_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.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.ELEMENTARY_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_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_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.SHAPE_DIMENSION_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHAPE_REPRESENTATION'] *
+                                   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 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 unique_datum_system FOR (datum_system);
+LOCAL
+  pass : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(datum_system);
+    REPEAT j := 1 TO SIZEOF(datum_system);
+      IF (i <> j)
+      THEN
+        IF datum_system[i]\datum_system.constituents = datum_system[j]\datum_system.constituents
+        THEN
+          pass := false;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+WHERE
+  WR1: pass;
+END_RULE;
+
+RULE unique_gdt_element_id_constraint FOR (product_definition_shape,
+                                           dimensional_location,
+                                           dimensional_size,
+                                           shape_aspect,
+                                           shape_aspect_relationship);
+LOCAL
+  bss  : BAG OF STRING                    := [];
+  ds   : SET OF dimensional_size          := QUERY(ds <* dimensional_size | EXISTS(ds\dimensional_size.id));
+  sa   : SET OF shape_aspect              := QUERY(sa <* shape_aspect | EXISTS(sa\shape_aspect.id));
+  sar  : SET OF shape_aspect_relationship := QUERY(sar
+                                                   <* shape_aspect_relationship
+                                                   | EXISTS(sar\shape_aspect_relationship.id));
+  ssa  : 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'));
+    REPEAT i := 1 TO SIZEOF(ds);
+      IF (ds[i]\dimensional_size.applies_to IN ssa)
+      THEN
+        bss := bss + ds[i]\dimensional_size.id;
+      END_IF;
+    END_REPEAT;
+    REPEAT i := 1 TO SIZEOF(sa);
+      IF (sa[i] IN ssa)
+      THEN
+        bss := bss + sa[i]\shape_aspect.id;
+      END_IF;
+    END_REPEAT;
+    REPEAT i := 1 TO SIZEOF(sar);
+      IF (sar[i]\shape_aspect_relationship.relating_shape_aspect IN ssa)
+      THEN
+        bss := bss + sar[i]\shape_aspect_relationship.id;
+      END_IF;
+    END_REPEAT;
+    IF (SIZEOF(bag_to_set(bss)) <> SIZEOF(bss))
+    THEN
+      pass := false;
+    END_IF;
+  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;
+
+RULE validate_dependently_instantiable_entity_data_types FOR (aggregate_id_attribute,
+                                                              attribute_value_role,
+                                                              camera_model_d2,
+                                                              classification_assignment_relationship,
+                                                              concept_feature_relationship,
+                                                              concept_feature_relationship_with_condition,
+                                                              data_equivalence_assessment_specification,
+                                                              data_equivalence_criteria_representation,
+                                                              data_equivalence_criterion,
+                                                              data_equivalence_inspection_instance_report_item,
+                                                              data_equivalence_inspection_requirement,
+                                                              data_equivalence_inspection_result_representation,
+                                                              document_usage_constraint,
+                                                              edge_blended_solid,
+                                                              effectivity_context_role,
+                                                              event_occurrence_role,
+                                                              explicit_procedural_representation_item_relationship,
+                                                              founded_item,
+                                                              indirectly_selected_elements,
+                                                              location_representation_role,
+                                                              location_role,
+                                                              modified_solid_with_placed_configuration,
+                                                              one_direction_repeat_factor,
+                                                              organization_type_role,
+                                                              procedural_representation,
+                                                              procedural_representation_sequence,
+                                                              product_definition_effectivity,
+                                                              product_definition_relationship_relationship,
+                                                              runout_zone_orientation,
+                                                              solid_with_depression,
+                                                              solid_with_hole,
+                                                              solid_with_pocket,
+                                                              solid_with_protrusion,
+                                                              solid_with_shape_element_pattern,
+                                                              solid_with_slot,
+                                                              swept_area_solid,
+                                                              symbol_target,
+                                                              two_direction_repeat_factor,
+                                                              user_selected_elements);
+LOCAL
+  number_of_input_instances : INTEGER;
+  previous_in_chain         : LIST OF GENERIC := [];
+  set_of_input_types        : SET OF STRING   := [];
+  all_instances             : SET OF GENERIC  := [];
+END_LOCAL;
+  all_instances := all_instances + aggregate_id_attribute;
+  all_instances := all_instances + attribute_value_role;
+  all_instances := all_instances + camera_model_d2;
+  all_instances := all_instances + classification_assignment_relationship;
+  all_instances := all_instances + concept_feature_relationship;
+  all_instances := all_instances + concept_feature_relationship_with_condition;
+  all_instances := all_instances + data_equivalence_assessment_specification;
+  all_instances := all_instances + data_equivalence_criteria_representation;
+  all_instances := all_instances + data_equivalence_criterion;
+  all_instances := all_instances + data_equivalence_inspection_instance_report_item;
+  all_instances := all_instances + data_equivalence_inspection_requirement;
+  all_instances := all_instances + data_equivalence_inspection_result_representation;
+  all_instances := all_instances + document_usage_constraint;
+  all_instances := all_instances + edge_blended_solid;
+  all_instances := all_instances + effectivity_context_role;
+  all_instances := all_instances + event_occurrence_role;
+  all_instances := all_instances + explicit_procedural_representation_item_relationship;
+  all_instances := all_instances + founded_item;
+  all_instances := all_instances + indirectly_selected_elements;
+  all_instances := all_instances + location_representation_role;
+  all_instances := all_instances + location_role;
+  all_instances := all_instances + modified_solid_with_placed_configuration;
+  all_instances := all_instances + one_direction_repeat_factor;
+  all_instances := all_instances + organization_type_role;
+  all_instances := all_instances + procedural_representation;
+  all_instances := all_instances + procedural_representation_sequence;
+  all_instances := all_instances + product_definition_effectivity;
+  all_instances := all_instances + product_definition_relationship_relationship;
+  all_instances := all_instances + runout_zone_orientation;
+  all_instances := all_instances + solid_with_depression;
+  all_instances := all_instances + solid_with_hole;
+  all_instances := all_instances + solid_with_pocket;
+  all_instances := all_instances + solid_with_protrusion;
+  all_instances := all_instances + solid_with_shape_element_pattern;
+  all_instances := all_instances + solid_with_slot;
+  all_instances := all_instances + swept_area_solid;
+  all_instances := all_instances + symbol_target;
+  all_instances := all_instances + two_direction_repeat_factor;
+  all_instances := all_instances + user_selected_elements;
+  ;
+  number_of_input_instances := SIZEOF(all_instances);
+  REPEAT i := 1 TO number_of_input_instances;
+    set_of_input_types := set_of_input_types + TYPEOF(all_instances[i]);
+  END_REPEAT;
+WHERE
+  WR1: dependently_instantiated(all_instances, set_of_input_types, previous_in_chain);
+END_RULE;
+END_SCHEMA;
index 76507817fd75ea0d5491049f9f0e672035b79eda..20d5abfca41110ece6012ed5d544a1f10fbc42e4 100644 (file)
@@ -53,6 +53,11 @@ complex time or redefinition of inherited field are ignored.
 #include <Express_Reference.hxx>
 #include <Express.hxx>
 
+#pragma warning(push)
+#pragma warning(disable:4244)
+#pragma warning(disable:4274)
+#pragma warning(disable:4800)
+
 /************************************************/
 /* ERROR MESSAGE FUNCTION                       */
 
@@ -1314,3 +1319,4 @@ case 66:
        goto yystack;           /* reset registers in driver code */
 }
 
+#pragma warning(pop)
index 3bcb1b9cb1a584627ad1fbe25a6b3562f729ac66..6274344bf5ebcfaed30867180e15238c73f53b38 100644 (file)
@@ -80,6 +80,11 @@ struct yysvf {
 struct yysvf *yyestate;
 extern struct yysvf yysvec[], *yybgin;
 
+#pragma warning(push)
+#pragma warning (disable:4244)
+#pragma warning (disable:4274)
+#pragma warning (disable:4706)
+#pragma warning (disable:4701)
 
 # line 4 "exptocas.l"
 /* File:       exptocas.l                     */
@@ -2910,3 +2915,5 @@ yyunput(c)
 {
        unput(c);
        }
+
+#pragma warning(pop)
diff --git a/src/ExpToCasExe/exptocas.html b/src/ExpToCasExe/exptocas.html
deleted file mode 100644 (file)
index 8bc7b59..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; SunOS 5.6 sun4u) [Netscape]">
-   <title>ExpToCas: Generator of STEP read/write classes from EXPRESS schema</title>
-</head>
-<body text="#000040" bgcolor="#C0C0C0" link="#0000EE" vlink="#551A8B" alink="#FF0000" background="http://info.nnov.matra-dtv.fr/~det/images/StandardBackground.gif" nosave>
-<!-- <body text="#000040" bgcolor="#C0C0FF" link="#0000EE" vlink="#551A8B" alink="#FF0000"> -->
-<h1>ExpToCas: Generator of STEP read/write classes from EXPRESS schema</h1>
-
-<hr>
-<h2>Abstract</h2>
-
-This document describes <b>ExpToCas</b>, a package defining several parsers of 
-EXPRESS schema aimed to analyse the schema and generate STEP read/write classes
-for Open CASCADE Data Exchange (XSTEP).
-
-<hr>
-<h2>Basic principles</h2>
-
-EXPRESS schema is parsed by tools based on 
-<a href="http://info.nnov.matra-dtv.fr/scriptsdet/man2html?flex">lex</a> 
-(scanner) and <a href="http://www.nnov.matra-dtv.fr/~det/bison/bison_toc.html">yacc</a>
-(parser).
-
-<p>
-
-
-<hr>
-<h2>Organisation</h2>
-
-<p>
-Physically ExpToCas is organised as two WOK units:
-
-<h4>CDL package ExpToCas</h4>
-
-Defines set of classes to represent structure of 
-EXPRESS file (more accurately to say, schema). It represents data contained 
-in EXPRESS schema as list of items (e.g. definition of ENTITY and SELECT
-types). Each item has methods to generate relevant CDL/CXX classes for 
-CASCADE.
-
-<h4>Executable ExpToCasExe</h4>
-
-Provides executable (named ExpToCas) allowing to load EXPRESS file to memory
-(to the structure of classes from ExpToCas package) and generate CDL/CXX classes
-for user-defined list of entities.
-
-</body>
-</html>
diff --git a/src/ExpToCasExe/occt_step_entities.lst b/src/ExpToCasExe/occt_step_entities.lst
new file mode 100644 (file)
index 0000000..d7ddbbb
--- /dev/null
@@ -0,0 +1,780 @@
+# Last update 03.04.2020
+#===============================================
+#             package StepAP203
+#===============================================
+ApprovedItem StepAP203
+CcDesignApproval StepAP203
+CcDesignCertification StepAP203
+CcDesignContract StepAP203
+CcDesignDateAndTimeAssignment StepAP203
+CcDesignPersonAndOrganizationAssignment StepAP203
+CcDesignSecurityClassification StepAP203
+CcDesignSpecificationReference StepAP203
+CertifiedItem StepAP203
+Change StepAP203
+ChangeRequest StepAP203
+ChangeRequestItem StepAP203
+ClassifiedItem StepAP203
+ContractedItem StepAP203
+DateTimeItem StepAP203
+PersonOrganizationItem StepAP203
+SpecifiedItem StepAP203
+StartRequest StepAP203
+StartRequestItem StepAP203
+StartWork StepAP203
+WorkItem StepAP203
+
+#===============================================
+#             package StepAP214
+#===============================================
+AppliedApprovalAssignment StepAP214
+AppliedDateAndTimeAssignment StepAP214
+AppliedDateAssignment StepAP214
+AppliedDocumentReference StepAP214
+AppliedExternalIdentificationAssignment StepAP214
+AppliedGroupAssignment StepAP214
+AppliedOrganizationAssignment StepAP214
+AppliedPersonAndOrganizationAssignment StepAP214
+AppliedPresentedItem StepAP214
+AppliedSecurityClassificationAssignment StepAP214
+ApprovalItem StepAP214
+AutoDesignActualDateAndTimeAssignment StepAP214
+AutoDesignActualDateAssignment StepAP214
+AutoDesignApprovalAssignment StepAP214
+AutoDesignDateAndPersonAssignment StepAP214
+AutoDesignDateAndPersonItem StepAP214
+AutoDesignDateAndTimeItem StepAP214
+AutoDesignDatedItem StepAP214
+AutoDesignDocumentReference StepAP214
+AutoDesignGeneralOrgItem StepAP214
+AutoDesignGroupAssignment StepAP214
+AutoDesignGroupedItem StepAP214
+AutoDesignNominalDateAndTimeAssignment StepAP214
+AutoDesignNominalDateAssignment StepAP214
+AutoDesignOrganizationAssignment StepAP214
+AutoDesignOrganizationItem StepAP214
+AutoDesignPersonAndOrganizationAssignment StepAP214
+AutoDesignPresentedItem StepAP214
+AutoDesignPresentedItemSelect StepAP214
+AutoDesignReferencingItem StepAP214
+AutoDesignSecurityClassificationAssignment StepAP214
+Class StepAP214
+DateAndTimeItem StepAP214
+DateItem StepAP214
+DocumentReferenceItem StepAP214
+ExternalIdentificationItem StepAP214
+ExternallyDefinedClass StepAP214
+ExternallyDefinedGeneralProperty StepAP214
+GroupItem StepAP214
+OrganizationItem StepAP214
+PersonAndOrganizationItem StepAP214
+PresentedItemSelect StepAP214
+Protocol StepAP214
+RepItemGroup StepAP214
+SecurityClassificationItem StepAP214
+
+#===============================================
+#             package StepAP242
+#===============================================
+DraughtingModelItemAssociation StepAP242
+GeometricItemSpecificUsage StepAP242
+IdAttribute StepAP242
+IdAttributeSelect StepAP242
+ItemIdentifiedRepresentationUsage StepAP242
+ItemIdentifiedRepresentationUsageDefinition StepAP242
+
+#===============================================
+#             package StepBasic
+#===============================================
+Action StepBasic
+ActionAssignment StepBasic
+ActionMethod StepBasic
+ActionRequestAssignment StepBasic
+ActionRequestSolution StepBasic
+Address StepBasic
+ApplicationContext StepBasic
+ApplicationContextElement StepBasic
+ApplicationProtocolDefinition StepBasic
+Approval StepBasic
+ApprovalAssignment StepBasic
+ApprovalDateTime StepBasic
+ApprovalPersonOrganization StepBasic
+ApprovalRelationship StepBasic
+ApprovalRole StepBasic
+ApprovalStatus StepBasic
+AreaUnit StepBasic
+CalendarDate StepBasic
+Certification StepBasic
+CertificationAssignment StepBasic
+CertificationType StepBasic
+CharacterizedObject StepBasic
+Contract StepBasic
+ContractAssignment StepBasic
+ContractType StepBasic
+ConversionBasedUnit StepBasic
+ConversionBasedUnitAndAreaUnit StepBasic
+ConversionBasedUnitAndLengthUnit StepBasic
+ConversionBasedUnitAndMassUnit StepBasic
+ConversionBasedUnitAndPlaneAngleUnit StepBasic
+ConversionBasedUnitAndRatioUnit StepBasic
+ConversionBasedUnitAndSolidAngleUnit StepBasic
+ConversionBasedUnitAndTimeUnit StepBasic
+ConversionBasedUnitAndVolumeUnit StepBasic
+CoordinatedUniversalTimeOffset StepBasic
+Date StepBasic
+DateAndTime StepBasic
+DateAndTimeAssignment StepBasic
+DateAssignment StepBasic
+DateRole StepBasic
+DateTimeRole StepBasic
+DateTimeSelect StepBasic
+DerivedUnit StepBasic
+DerivedUnitElement StepBasic
+DesignContext StepBasic
+DigitalDocument StepBasic
+DimensionalExponents StepBasic
+Document StepBasic
+DocumentFile StepBasic
+DocumentProductAssociation StepBasic
+DocumentProductEquivalence StepBasic
+DocumentReference StepBasic
+DocumentRelationship StepBasic
+DocumentRepresentationType StepBasic
+DocumentType StepBasic
+DocumentUsageConstraint StepBasic
+Effectivity StepBasic
+EffectivityAssignment StepBasic
+EulerAngles StepBasic
+ExternalIdentificationAssignment StepBasic
+ExternallyDefinedItem StepBasic
+ExternalSource StepBasic
+GeneralProperty StepBasic
+Group StepBasic
+GroupAssignment StepBasic
+GroupRelationship StepBasic
+IdentificationAssignment StepBasic
+IdentificationRole StepBasic
+LengthMeasureWithUnit StepBasic
+LengthUnit StepBasic
+LocalTime StepBasic
+MassMeasureWithUnit StepBasic
+MassUnit StepBasic
+MeasureValueMember StepBasic
+MeasureWithUnit StepBasic
+MechanicalContext StepBasic
+NameAssignment StepBasic
+NamedUnit StepBasic
+ObjectRole StepBasic
+OrdinalDate StepBasic
+Organization StepBasic
+OrganizationalAddress StepBasic
+OrganizationAssignment StepBasic
+OrganizationRole StepBasic
+Person StepBasic
+PersonalAddress StepBasic
+PersonAndOrganization StepBasic
+PersonAndOrganizationAssignment StepBasic
+PersonAndOrganizationRole StepBasic
+PersonOrganizationSelect StepBasic
+PhysicallyModeledProductDefinition StepBasic
+PlaneAngleMeasureWithUnit StepBasic
+PlaneAngleUnit StepBasic
+Product StepBasic
+ProductCategory StepBasic
+ProductCategoryRelationship StepBasic
+ProductConceptContext StepBasic
+ProductContext StepBasic
+ProductDefinition StepBasic
+ProductDefinitionContext StepBasic
+ProductDefinitionEffectivity StepBasic
+ProductDefinitionFormation StepBasic
+ProductDefinitionFormationRelationship StepBasic
+ProductDefinitionFormationWithSpecifiedSource StepBasic
+ProductDefinitionOrReference StepBasic
+ProductDefinitionReference StepBasic
+ProductDefinitionReferenceWithLocalRepresentation StepBasic
+ProductDefinitionRelationship StepBasic
+ProductDefinitionWithAssociatedDocuments StepBasic
+ProductOrFormationOrDefinition StepBasic
+ProductRelatedProductCategory StepBasic
+ProductType StepBasic
+RatioMeasureWithUnit StepBasic
+RatioUnit StepBasic
+RoleAssociation StepBasic
+RoleSelect StepBasic
+SecurityClassification StepBasic
+SecurityClassificationAssignment StepBasic
+SecurityClassificationLevel StepBasic
+SiUnit StepBasic
+SiUnitAndAreaUnit StepBasic
+SiUnitAndLengthUnit StepBasic
+SiUnitAndMassUnit StepBasic
+SiUnitAndPlaneAngleUnit StepBasic
+SiUnitAndRatioUnit StepBasic
+SiUnitAndSolidAngleUnit StepBasic
+SiUnitAndThermodynamicTemperatureUnit StepBasic
+SiUnitAndTimeUnit StepBasic
+SiUnitAndVolumeUnit StepBasic
+SizeMember StepBasic
+SizeSelect StepBasic
+SolidAngleMeasureWithUnit StepBasic
+SolidAngleUnit StepBasic
+SourceItem StepBasic
+ThermodynamicTemperatureUnit StepBasic
+TimeMeasureWithUnit StepBasic
+TimeUnit StepBasic
+UncertaintyMeasureWithUnit StepBasic
+Unit StepBasic
+VersionedActionRequest StepBasic
+VolumeUnit StepBasic
+WeekOfYearAndDayDate StepBasic
+
+#===============================================
+#             package StepDimTol
+#===============================================
+AngularityTolerance StepDimTol
+CircularRunoutTolerance StepDimTol
+CoaxialityTolerance StepDimTol
+CommonDatum StepDimTol
+ConcentricityTolerance StepDimTol
+CylindricityTolerance StepDimTol
+Datum StepDimTol
+DatumFeature StepDimTol
+DatumOrCommonDatum StepDimTol
+DatumReference StepDimTol
+DatumReferenceCompartment StepDimTol
+DatumReferenceElement StepDimTol
+DatumReferenceModifier StepDimTol
+DatumReferenceModifierWithValue StepDimTol
+DatumSystem StepDimTol
+DatumSystemOrReference StepDimTol
+DatumTarget StepDimTol
+FlatnessTolerance StepDimTol
+GeneralDatumReference StepDimTol
+GeometricTolerance StepDimTol
+GeometricToleranceRelationship StepDimTol
+GeometricToleranceTarget StepDimTol
+GeometricToleranceWithDatumReference StepDimTol
+GeometricToleranceWithDefinedAreaUnit StepDimTol
+GeometricToleranceWithDefinedUnit StepDimTol
+GeometricToleranceWithMaximumTolerance StepDimTol
+GeometricToleranceWithModifiers StepDimTol
+GeoTolAndGeoTolWthDatRef StepDimTol
+GeoTolAndGeoTolWthDatRefAndGeoTolWthMaxTol StepDimTol
+GeoTolAndGeoTolWthDatRefAndGeoTolWthMod StepDimTol
+GeoTolAndGeoTolWthDatRefAndModGeoTolAndPosTol StepDimTol
+GeoTolAndGeoTolWthDatRefAndUneqDisGeoTol StepDimTol
+GeoTolAndGeoTolWthMaxTol StepDimTol
+GeoTolAndGeoTolWthMod StepDimTol
+LineProfileTolerance StepDimTol
+ModifiedGeometricTolerance StepDimTol
+NonUniformZoneDefinition StepDimTol
+ParallelismTolerance StepDimTol
+PerpendicularityTolerance StepDimTol
+PlacedDatumTargetFeature StepDimTol
+PositionTolerance StepDimTol
+ProjectedZoneDefinition StepDimTol
+RoundnessTolerance StepDimTol
+RunoutZoneDefinition StepDimTol
+RunoutZoneOrientation StepDimTol
+ShapeToleranceSelect StepDimTol
+SimpleDatumReferenceModifierMember StepDimTol
+StraightnessTolerance StepDimTol
+SurfaceProfileTolerance StepDimTol
+SymmetryTolerance StepDimTol
+ToleranceZone StepDimTol
+ToleranceZoneDefinition StepDimTol
+ToleranceZoneForm StepDimTol
+ToleranceZoneTarget StepDimTol
+TotalRunoutTolerance StepDimTol
+UnequallyDisposedGeometricTolerance StepDimTol
+
+#===============================================
+#             package StepElement
+#===============================================
+AnalysisItemWithinRepresentation StepElement
+Curve3dElementDescriptor StepElement
+CurveElementEndReleasePacket StepElement
+CurveElementFreedom StepElement
+CurveElementFreedomMember StepElement
+CurveElementPurpose StepElement
+CurveElementPurposeMember StepElement
+CurveElementSectionDefinition StepElement
+CurveElementSectionDerivedDefinitions StepElement
+ElementAspect StepElement
+ElementAspectMember StepElement
+ElementDescriptor StepElement
+ElementMaterial StepElement
+MeasureOrUnspecifiedValue StepElement
+MeasureOrUnspecifiedValueMember StepElement
+Surface3dElementDescriptor StepElement
+SurfaceElementProperty StepElement
+SurfaceElementPurpose StepElement
+SurfaceElementPurposeMember StepElement
+SurfaceSection StepElement
+SurfaceSectionField StepElement
+SurfaceSectionFieldConstant StepElement
+SurfaceSectionFieldVarying StepElement
+UniformSurfaceSection StepElement
+Volume3dElementDescriptor StepElement
+VolumeElementPurpose StepElement
+VolumeElementPurposeMember StepElement
+
+#===============================================
+#             package StepFEA
+#===============================================
+AlignedCurve3dElementCoordinateSystem StepFEA
+AlignedSurface3dElementCoordinateSystem StepFEA
+ArbitraryVolume3dElementCoordinateSystem StepFEA
+ConstantSurface3dElementCoordinateSystem StepFEA
+Curve3dElementProperty StepFEA
+Curve3dElementRepresentation StepFEA
+CurveElementEndCoordinateSystem StepFEA
+CurveElementEndOffset StepFEA
+CurveElementEndRelease StepFEA
+CurveElementInterval StepFEA
+CurveElementIntervalConstant StepFEA
+CurveElementIntervalLinearlyVarying StepFEA
+CurveElementLocation StepFEA
+DegreeOfFreedom StepFEA
+DegreeOfFreedomMember StepFEA
+DummyNode StepFEA
+ElementGeometricRelationship StepFEA
+ElementGroup StepFEA
+ElementOrElementGroup StepFEA
+ElementRepresentation StepFEA
+FeaAreaDensity StepFEA
+FeaAxis2Placement3d StepFEA
+FeaCurveSectionGeometricRelationship StepFEA
+FeaGroup StepFEA
+FeaLinearElasticity StepFEA
+FeaMassDensity StepFEA
+FeaMaterialPropertyRepresentation StepFEA
+FeaMaterialPropertyRepresentationItem StepFEA
+FeaModel StepFEA
+FeaModel3d StepFEA
+FeaModelDefinition StepFEA
+FeaMoistureAbsorption StepFEA
+FeaParametricPoint StepFEA
+FeaRepresentationItem StepFEA
+FeaSecantCoefficientOfLinearThermalExpansion StepFEA
+FeaShellBendingStiffness StepFEA
+FeaShellMembraneBendingCouplingStiffness StepFEA
+FeaShellMembraneStiffness StepFEA
+FeaShellShearStiffness StepFEA
+FeaSurfaceSectionGeometricRelationship StepFEA
+FeaTangentialCoefficientOfLinearThermalExpansion StepFEA
+FreedomAndCoefficient StepFEA
+FreedomsList StepFEA
+GeometricNode StepFEA
+Node StepFEA
+NodeDefinition StepFEA
+NodeGroup StepFEA
+NodeRepresentation StepFEA
+NodeSet StepFEA
+NodeWithSolutionCoordinateSystem StepFEA
+NodeWithVector StepFEA
+ParametricCurve3dElementCoordinateDirection StepFEA
+ParametricCurve3dElementCoordinateSystem StepFEA
+ParametricSurface3dElementCoordinateSystem StepFEA
+Surface3dElementRepresentation StepFEA
+SymmetricTensor22d StepFEA
+SymmetricTensor23d StepFEA
+SymmetricTensor23dMember StepFEA
+SymmetricTensor42d StepFEA
+SymmetricTensor43d StepFEA
+SymmetricTensor43dMember StepFEA
+Volume3dElementRepresentation StepFEA
+
+#===============================================
+#             package StepGeom
+#===============================================
+Axis1Placement StepGeom
+Axis2Placement StepGeom
+Axis2Placement2d StepGeom
+Axis2Placement3d StepGeom
+BezierCurve StepGeom
+BezierCurveAndRationalBSplineCurve StepGeom
+BezierSurface StepGeom
+BezierSurfaceAndRationalBSplineSurface StepGeom
+BoundaryCurve StepGeom
+BoundedCurve StepGeom
+BoundedSurface StepGeom
+BSplineCurve StepGeom
+BSplineCurveWithKnots StepGeom
+BSplineCurveWithKnotsAndRationalBSplineCurve StepGeom
+BSplineSurface StepGeom
+BSplineSurfaceWithKnots StepGeom
+BSplineSurfaceWithKnotsAndRationalBSplineSurface StepGeom
+CartesianPoint StepGeom
+CartesianTransformationOperator StepGeom
+CartesianTransformationOperator2d StepGeom
+CartesianTransformationOperator3d StepGeom
+Circle StepGeom
+CompositeCurve StepGeom
+CompositeCurveOnSurface StepGeom
+CompositeCurveSegment StepGeom
+Conic StepGeom
+ConicalSurface StepGeom
+Curve StepGeom
+CurveBoundedSurface StepGeom
+CurveOnSurface StepGeom
+CurveReplica StepGeom
+CylindricalSurface StepGeom
+DegeneratePcurve StepGeom
+DegenerateToroidalSurface StepGeom
+Direction StepGeom
+ElementarySurface StepGeom
+Ellipse StepGeom
+EvaluatedDegeneratePcurve StepGeom
+GeometricRepresentationContext StepGeom
+GeometricRepresentationContextAndGlobalUnitAssignedContext StepGeom
+GeometricRepresentationContextAndParametricRepresentationContext StepGeom
+GeometricRepresentationItem StepGeom
+GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx StepGeom
+Hyperbola StepGeom
+IntersectionCurve StepGeom
+Line StepGeom
+OffsetCurve3d StepGeom
+OffsetSurface StepGeom
+OrientedSurface StepGeom
+OuterBoundaryCurve StepGeom
+Parabola StepGeom
+Pcurve StepGeom
+PcurveOrSurface StepGeom
+Placement StepGeom
+Plane StepGeom
+Point StepGeom
+PointOnCurve StepGeom
+PointOnSurface StepGeom
+PointReplica StepGeom
+Polyline StepGeom
+QuasiUniformCurve StepGeom
+QuasiUniformCurveAndRationalBSplineCurve StepGeom
+QuasiUniformSurface StepGeom
+QuasiUniformSurfaceAndRationalBSplineSurface StepGeom
+RationalBSplineCurve StepGeom
+RationalBSplineSurface StepGeom
+RectangularCompositeSurface StepGeom
+RectangularTrimmedSurface StepGeom
+ReparametrisedCompositeCurveSegment StepGeom
+SeamCurve StepGeom
+SphericalSurface StepGeom
+Surface StepGeom
+SurfaceBoundary StepGeom
+SurfaceCurveAndBoundedCurve StepGeom
+SurfaceOfLinearExtrusion StepGeom
+SurfaceOfRevolution StepGeom
+SurfacePatch StepGeom
+SurfaceReplica StepGeom
+SweptSurface StepGeom
+ToroidalSurface StepGeom
+TrimmedCurve StepGeom
+TrimmingMember StepGeom
+TrimmingSelect StepGeom
+UniformCurve StepGeom
+UniformCurveAndRationalBSplineCurve StepGeom
+UniformSurface StepGeom
+UniformSurfaceAndRationalBSplineSurface StepGeom
+Vector StepGeom
+VectorOrDirection StepGeom
+
+#===============================================
+#             package StepRepr
+#===============================================
+AllAroundShapeAspect StepRepr
+Apex StepRepr
+AssemblyComponentUsage StepRepr
+AssemblyComponentUsageSubstitute StepRepr
+BetweenShapeAspect StepRepr
+CentreOfSymmetry StepRepr
+CharacterizedDefinition StepRepr
+CharacterizedRepresentation StepRepr
+CompGroupShAspAndCompShAspAndDatumFeatAndShAsp StepRepr
+CompositeGroupShapeAspect StepRepr
+CompositeShapeAspect StepRepr
+CompoundRepresentationItem StepRepr
+CompShAspAndDatumFeatAndShAsp StepRepr
+ConfigurationDesign StepRepr
+ConfigurationDesignItem StepRepr
+ConfigurationEffectivity StepRepr
+ConfigurationItem StepRepr
+ConstructiveGeometryRepresentation StepRepr
+ConstructiveGeometryRepresentationRelationship StepRepr
+ContinuosShapeAspect StepRepr
+DataEnvironment StepRepr
+DefinitionalRepresentation StepRepr
+DerivedShapeAspect StepRepr
+DescriptiveRepresentationItem StepRepr
+Extension StepRepr
+ExternallyDefinedRepresentation StepRepr
+FeatureForDatumTargetRelationship StepRepr
+FunctionallyDefinedTransformation StepRepr
+GeometricAlignment StepRepr
+GlobalUncertaintyAssignedContext StepRepr
+GlobalUnitAssignedContext StepRepr
+IntegerRepresentationItem StepRepr
+ItemDefinedTransformation StepRepr
+MakeFromUsageOption StepRepr
+MappedItem StepRepr
+MaterialDesignation StepRepr
+MaterialProperty StepRepr
+MaterialPropertyRepresentation StepRepr
+MeasureRepresentationItem StepRepr
+NextAssemblyUsageOccurrence StepRepr
+ParallelOffset StepRepr
+ParametricRepresentationContext StepRepr
+PerpendicularTo StepRepr
+ProductConcept StepRepr
+ProductDefinitionShape StepRepr
+ProductDefinitionUsage StepRepr
+PromissoryUsageOccurrence StepRepr
+PropertyDefinition StepRepr
+PropertyDefinitionRelationship StepRepr
+PropertyDefinitionRepresentation StepRepr
+QuantifiedAssemblyComponentUsage StepRepr
+Representation StepRepr
+RepresentationContext StepRepr
+RepresentationItem StepRepr
+RepresentationMap StepRepr
+RepresentationRelationship StepRepr
+RepresentationRelationshipWithTransformation StepRepr
+RepresentedDefinition StepRepr
+ReprItemAndLengthMeasureWithUnit StepRepr
+ReprItemAndLengthMeasureWithUnitAndQRI StepRepr
+ReprItemAndMeasureWithUnit StepRepr
+ReprItemAndMeasureWithUnitAndQRI StepRepr
+ReprItemAndPlaneAngleMeasureWithUnit StepRepr
+ReprItemAndPlaneAngleMeasureWithUnitAndQRI StepRepr
+ShapeAspect StepRepr
+ShapeAspectDerivingRelationship StepRepr
+ShapeAspectRelationship StepRepr
+ShapeAspectTransition StepRepr
+ShapeDefinition StepRepr
+ShapeRepresentationRelationship StepRepr
+ShapeRepresentationRelationshipWithTransformation StepRepr
+SpecifiedHigherUsageOccurrence StepRepr
+StructuralResponseProperty StepRepr
+StructuralResponsePropertyDefinitionRepresentation StepRepr
+SuppliedPartRelationship StepRepr
+Tangent StepRepr
+Transformation StepRepr
+ValueRange StepRepr
+ValueRepresentationItem StepRepr
+
+#===============================================
+#             package StepShape
+#===============================================
+AdvancedBrepShapeRepresentation StepShape
+AdvancedFace StepShape
+AngularLocation StepShape
+AngularSize StepShape
+Block StepShape
+BooleanOperand StepShape
+BooleanResult StepShape
+BoxDomain StepShape
+BoxedHalfSpace StepShape
+BrepWithVoids StepShape
+ClosedShell StepShape
+CompoundShapeRepresentation StepShape
+ConnectedEdgeSet StepShape
+ConnectedFaceSet StepShape
+ConnectedFaceShapeRepresentation StepShape
+ConnectedFaceSubSet StepShape
+ContextDependentShapeRepresentation StepShape
+CsgPrimitive StepShape
+CsgSelect StepShape
+CsgShapeRepresentation StepShape
+CsgSolid StepShape
+DefinitionalRepresentationAndShapeRepresentation StepShape
+DimensionalCharacteristic StepShape
+DimensionalCharacteristicRepresentation StepShape
+DimensionalLocation StepShape
+DimensionalLocationWithPath StepShape
+DimensionalSize StepShape
+DimensionalSizeWithPath StepShape
+DirectedDimensionalLocation StepShape
+Edge StepShape
+EdgeBasedWireframeModel StepShape
+EdgeBasedWireframeShapeRepresentation StepShape
+EdgeCurve StepShape
+EdgeLoop StepShape
+ExtrudedAreaSolid StepShape
+ExtrudedFaceSolid StepShape
+Face StepShape
+FaceBasedSurfaceModel StepShape
+FaceBound StepShape
+FaceOuterBound StepShape
+FaceSurface StepShape
+FacetedBrep StepShape
+FacetedBrepAndBrepWithVoids StepShape
+FacetedBrepShapeRepresentation StepShape
+GeometricallyBoundedSurfaceShapeRepresentation StepShape
+GeometricallyBoundedWireframeShapeRepresentation StepShape
+GeometricCurveSet StepShape
+GeometricSet StepShape
+GeometricSetSelect StepShape
+HalfSpaceSolid StepShape
+LimitsAndFits StepShape
+Loop StepShape
+LoopAndPath StepShape
+ManifoldSolidBrep StepShape
+ManifoldSurfaceShapeRepresentation StepShape
+MeasureQualification StepShape
+MeasureRepresentationItemAndQualifiedRepresentationItem StepShape
+NonManifoldSurfaceShapeRepresentation StepShape
+OpenShell StepShape
+OrientedClosedShell StepShape
+OrientedEdge StepShape
+OrientedFace StepShape
+OrientedOpenShell StepShape
+OrientedPath StepShape
+Path StepShape
+PlusMinusTolerance StepShape
+PointRepresentation StepShape
+PolyLoop StepShape
+PrecisionQualifier StepShape
+QualifiedRepresentationItem StepShape
+ReversibleTopologyItem StepShape
+RevolvedAreaSolid StepShape
+RevolvedFaceSolid StepShape
+RightAngularWedge StepShape
+RightCircularCone StepShape
+RightCircularCylinder StepShape
+SeamEdge StepShape
+ShapeDefinitionRepresentation StepShape
+ShapeDimensionRepresentation StepShape
+ShapeDimensionRepresentationItem StepShape
+ShapeRepresentation StepShape
+ShapeRepresentationWithParameters StepShape
+Shell StepShape
+ShellBasedSurfaceModel StepShape
+SolidModel StepShape
+SolidReplica StepShape
+Sphere StepShape
+Subedge StepShape
+Subface StepShape
+SurfaceModel StepShape
+SweptAreaSolid StepShape
+SweptFaceSolid StepShape
+ToleranceMethodDefinition StepShape
+ToleranceValue StepShape
+TopologicalRepresentationItem StepShape
+Torus StepShape
+TransitionalShapeRepresentation StepShape
+TypeQualifier StepShape
+ValueFormatTypeQualifier StepShape
+ValueQualifier StepShape
+Vertex StepShape
+VertexLoop StepShape
+VertexPoint StepShape
+
+#===============================================
+#             package StepVisual
+#===============================================
+AnnotationCurveOccurrence StepVisual
+AnnotationCurveOccurrenceAndAnnotationOccurrenceAndGeomReprItemAndReprItemAndStyledItem StepVisual
+AnnotationFillArea StepVisual
+AnnotationFillAreaOccurrence StepVisual
+AnnotationOccurrence StepVisual
+AnnotationPlane StepVisual
+AnnotationPlaneElement StepVisual
+AnnotationText StepVisual
+AnnotationTextOccurrence StepVisual
+AreaInSet StepVisual
+AreaOrView StepVisual
+BackgroundColour StepVisual
+BoxCharacteristicSelect StepVisual
+CameraImage StepVisual
+CameraImage2dWithScale StepVisual
+CameraImage3dWithScale StepVisual
+CameraModel StepVisual
+CameraModelD2 StepVisual
+CameraModelD3 StepVisual
+CameraModelD3MultiClipping StepVisual
+CameraModelD3MultiClippingInterectionSelect StepVisual
+CameraModelD3MultiClippingIntersection StepVisual
+CameraModelD3MultiClippingUnion StepVisual
+CameraModelD3MultiClippingUnionSelect StepVisual
+CameraUsage StepVisual
+CharacterizedObjectAndCharacterizedRepresentationAndDraughtingModelAndRepresentation StepVisual
+Colour StepVisual
+ColourRgb StepVisual
+ColourSpecification StepVisual
+CompositeText StepVisual
+CompositeTextWithExtent StepVisual
+ContextDependentInvisibility StepVisual
+ContextDependentOverRidingStyledItem StepVisual
+CurveStyle StepVisual
+CurveStyleFont StepVisual
+CurveStyleFontPattern StepVisual
+CurveStyleFontSelect StepVisual
+DirectionCountSelect StepVisual
+DraughtingAnnotationOccurrence StepVisual
+DraughtingCallout StepVisual
+DraughtingCalloutElement StepVisual
+DraughtingModel StepVisual
+DraughtingPreDefinedColour StepVisual
+DraughtingPreDefinedCurveFont StepVisual
+ExternallyDefinedCurveFont StepVisual
+ExternallyDefinedTextFont StepVisual
+FillAreaStyle StepVisual
+FillAreaStyleColour StepVisual
+FillStyleSelect StepVisual
+FontSelect StepVisual
+Invisibility StepVisual
+InvisibilityContext StepVisual
+InvisibleItem StepVisual
+LayeredItem StepVisual
+MarkerMember StepVisual
+MarkerSelect StepVisual
+MechanicalDesignGeometricPresentationArea StepVisual
+MechanicalDesignGeometricPresentationRepresentation StepVisual
+NullStyleMember StepVisual
+OverRidingStyledItem StepVisual
+PlanarBox StepVisual
+PlanarExtent StepVisual
+PointStyle StepVisual
+PreDefinedColour StepVisual
+PreDefinedCurveFont StepVisual
+PreDefinedItem StepVisual
+PreDefinedTextFont StepVisual
+PresentationArea StepVisual
+PresentationLayerAssignment StepVisual
+PresentationLayerUsage StepVisual
+PresentationRepresentation StepVisual
+PresentationRepresentationSelect StepVisual
+PresentationSet StepVisual
+PresentationSize StepVisual
+PresentationSizeAssignmentSelect StepVisual
+PresentationStyleAssignment StepVisual
+PresentationStyleByContext StepVisual
+PresentationStyleSelect StepVisual
+PresentationView StepVisual
+PresentedItem StepVisual
+PresentedItemRepresentation StepVisual
+StyleContextSelect StepVisual
+StyledItem StepVisual
+StyledItemTarget StepVisual
+SurfaceSideStyle StepVisual
+SurfaceStyleBoundary StepVisual
+SurfaceStyleControlGrid StepVisual
+SurfaceStyleElementSelect StepVisual
+SurfaceStyleFillArea StepVisual
+SurfaceStyleParameterLine StepVisual
+SurfaceStyleSegmentationCurve StepVisual
+SurfaceStyleSilhouette StepVisual
+SurfaceStyleUsage StepVisual
+Template StepVisual
+TemplateInstance StepVisual
+TextLiteral StepVisual
+TextOrCharacter StepVisual
+TextStyle StepVisual
+TextStyleForDefinedFont StepVisual
+TextStyleWithBoxCharacteristics StepVisual
+ViewVolume StepVisual
+TessellatedAnnotationOccurrence StepVisual
+TessellatedItem StepVisual
+TessellatedGeometricSet StepVisual
+TessellatedCurveSet StepVisual
+CoordinatesList StepVisual
diff --git a/src/ExpToCasExe/readme.txt b/src/ExpToCasExe/readme.txt
new file mode 100644 (file)
index 0000000..10ed624
--- /dev/null
@@ -0,0 +1,15 @@
+This is an auxiliary tool to generate code for implementation of new STEP entities into OCCT.
+
+Example how to run ExpToCas tool:
+ExpToCasExe.exe schemaAP000.exp to_add.lst occt_step_entities.lst N
+
+where
+* schemaAP000.exp - STEP schema, some lines in can be not parsed, just delete them.
+ap242.exp - cleaned schema for AP242 edition 2.
+* to_add.lst  - list of necessary entities, each line should be like this "ShapeAspect StepRepr".
+* occt_step_entities.lst - list of already implemented entities, please update the file after each generation.
+* N - a first index for entity registration (files StepAP214_Protocol.cxx, RWStepAP214_GeneralModule.cxx,RWStepAP214_ReadWriteModule.cxx)
+
+The result of generation consists of several folders:
+* two folders for each package for which new entities was generated.
+* a folder Registration with *.txt files with code to copy into common files (see description of last parameter).
\ No newline at end of file
index eff38a2a8518430b5cb9aa3c14a24752a51de6da..6ac1793577717c5d2e2b04602d1d991487d5378a 100644 (file)
@@ -37,17 +37,12 @@ Handle(Express_Schema) &Express::Schema ()
 //purpose  : 
 //=======================================================================
 
-// Write header of CDL or CXX file
-void Express::WriteFileStamp (Standard_OStream &os, 
-                              const Handle(TCollection_HAsciiString) &name,
-                              const Standard_Boolean isCDL)
+// Write header of HXX or CXX file
+void Express::WriteFileStamp (Standard_OStream &os)
 {
   static const char *EC_VERSION = "2.0";
 
-  Standard_CString comm = ( isCDL ? "--" : "//" );
-  os << comm << " File:        " << name->ToCString();
-  os << (isCDL ? ".cdl" : ".cxx" ) << std::endl;
-
+  Standard_CString comm = "//";
   TCollection_AsciiString timestring;
   if ( getenv ( "EXPTOCAS_TIME" ) ) timestring = getenv ( "EXPTOCAS_TIME" );
   else {
@@ -56,15 +51,23 @@ void Express::WriteFileStamp (Standard_OStream &os,
     timestring = ctime ( &curtime );
     timestring.ChangeAll ( '\n', ' ' );
   }
-  os << comm << " Created:     " << timestring << std::endl;
-  
+  os << comm << " Created on : " << timestring << std::endl;
+
   OSD_Process aProcess;
-  os << comm << " Author:      " << aProcess.UserName().ToCString() << std::endl;
-  
+  os << comm << " Created by: " << aProcess.UserName().ToCString() << std::endl;
   os << comm << " Generator:   Express (EXPRESS -> CASCADE/XSTEP Translator) V" << EC_VERSION << std::endl;
-//  if ( ! Express::Schema().IsNull() )
-//    os << comm << " Schema used:     " << Express::Schema()->Name()->ToCString() << std::endl;
-  os << comm << " Copyright:   Open CASCADE 2020" << std::endl;
+  os << comm << " Copyright (c) Open CASCADE 2020" << std::endl;
+  os << comm << std::endl;
+  os << comm << " This file is part of Open CASCADE Technology software library." << std::endl;
+  os << comm << std::endl;
+  os << comm << " This library is free software; you can redistribute it and/or modify it under" << std::endl;
+  os << comm << " the terms of the GNU Lesser General Public License version 2.1 as published" << std::endl;
+  os << comm << " by the Free Software Foundation, with special exception defined in the file" << std::endl;
+  os << comm << " OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT" << std::endl;
+  os << comm << " distribution for complete text of the license and disclaimer of any warranty." << std::endl;
+  os << comm << std::endl;
+  os << comm << " Alternatively, this file may be used under the terms of Open CASCADE" << std::endl;
+  os << comm << " commercial license or contractual agreement." << std::endl;
   os << std::endl;
 }
 
index 8016b6f7f971d4351407bc57554cb5944fd73eee..544b01d62fe35974883fd6c49c7b0f39e86bf4d7 100644 (file)
@@ -24,7 +24,7 @@ class TCollection_HAsciiString;
 
 //! Provides data structures for representation of EXPRESS schema
 //! (items, types, entities etc.)
-//! and tools for generating XSTEP classes (CDL and CXX) from
+//! and tools for generating XSTEP classes (HXX and CXX) from
 //! items of the schema
 class Express 
 {
@@ -37,8 +37,7 @@ public:
   Standard_EXPORT static   Handle(Express_Schema)& Schema() ;
   
   //! Writes standard copyright stamp (creation date/time, user, etc.)
-  //! in CDL (if isCDL) or CXX (if ! isCDL) style to the output stream.
-  Standard_EXPORT static   void WriteFileStamp (Standard_OStream& os, const Handle(TCollection_HAsciiString)& name, const Standard_Boolean isCDL) ;
+  Standard_EXPORT static   void WriteFileStamp (Standard_OStream& os) ;
   
   //! Writes standard comment for method in CXX file
   Standard_EXPORT static   void WriteMethodStamp (Standard_OStream& os, const Handle(TCollection_HAsciiString)& name) ;
index d5cb35f870c84393a83e2abae73452648a3b93b6..b270fe4706eeb6772f6db8eb23815428b1ad340e 100644 (file)
@@ -49,16 +49,6 @@ Handle(TCollection_HAsciiString) Express_Alias::CPPName () const
   return myType->CPPName();
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Alias::CDLName () const
-{
-  return myType->CDLName();
-}
-
 //=======================================================================
 //function : GenerateClass
 //purpose  : 
@@ -67,6 +57,6 @@ Handle(TCollection_HAsciiString) Express_Alias::CDLName () const
 Standard_Boolean Express_Alias::GenerateClass () const
 {
 //  std::cout << "Warning: writing ALIAS is not yet implemented, cannot generate " << Name()->ToCString() << std::endl;
-  std::cout << "ALIAS " << Name()->ToCString() << " = " << Type()->CDLName()->ToCString() << " used; no generation is needed" << std::endl;
+  std::cout << "ALIAS " << Name()->ToCString() << " = " << Type()->CPPName()->ToCString() << " used; no generation is needed" << std::endl;
   return Standard_False;
 }
index 7b2be42ff0d213c2b9172e65d5561bb34891162b..5ee19a76a7bcc53ecd89410b63af6b80b885836e 100644 (file)
@@ -38,10 +38,7 @@ public:
   //! Returns name of aliased type
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns name of aliased type
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
-  //! Create CDL/CXX files from item
+  //! Create HXX/CXX files from item
   Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const;
 
 
index 27360fa60c03a8d6c73ee8beaaacdc1c3e9827b0..efa8f906809e06f95873b2649b93f6c13edaadfb 100644 (file)
@@ -36,13 +36,3 @@ Handle(TCollection_HAsciiString) Express_Boolean::CPPName () const
 {
   return new TCollection_HAsciiString ( "Standard_Boolean" );
 }
-
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Boolean::CDLName () const
-{
-  return new TCollection_HAsciiString ( "Boolean" );
-}
index 8737feb8a8a03a3cff57e6d6f4e51d96597ccaaa..b2961a7f1680f841e5eb289431a4551ee435d6ee 100644 (file)
@@ -33,9 +33,6 @@ public:
   //! Returns "Standard_Boolean"
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns "Boolean"
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-
 
 
 
index 6763ec8473e628ee04523ad2d2294796a198b8c4..b5fc6b0eab6eb1f0496667eef5c504264a9056d3 100644 (file)
@@ -77,41 +77,6 @@ Handle(TCollection_HAsciiString) Express_ComplexType::CPPName () const
   return name;
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_ComplexType::CDLName () const
-{
-  // check if array 2
-  Handle(TCollection_HAsciiString) name;
-  Handle(Express_Type) type = myType;
-  if ( type->IsKind ( STANDARD_TYPE(Express_ComplexType) ) ) {
-    Handle(Express_ComplexType) c2 = Handle(Express_ComplexType)::DownCast ( type );
-    type = c2->Type();
-    name = new TCollection_HAsciiString ( "HArray2Of" );
-  }
-  else 
-    name = new TCollection_HAsciiString ( "HArray1Of" );
-  
-  // generate name
-  name->AssignCat ( type->CDLName() );
-  Handle(TCollection_HAsciiString) str = new TCollection_HAsciiString("TCollection");
-  Standard_Integer ind =name->Location(str,1,name->Length());
-  if(ind) {
-    Handle(TCollection_HAsciiString) tmp = name->Split(ind-1);
-    name->AssignCat("Interface");
-  }
-  if ( type->IsStandard() ) 
-    name->AssignCat ( " from TColStd" );
-    
-  
-  return name;
-}
-
-
 //=======================================================================
 //function : Use
 //purpose  : 
index 40ac8705247daa76c71a0f59173bb78895d1f429..9f2aeb046d4d4f98bbc99116cbb89249ff86c6bd 100644 (file)
@@ -39,9 +39,6 @@ public:
   //! Returns CPP-style name of the type
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns CDL-style name of the type
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
   //! Declares type as used by some item being generated.
   //! Calls Use() for type of elements
   Standard_EXPORT virtual   Standard_Boolean Use (const Handle(TCollection_HAsciiString)& pack, const Standard_Boolean defer = Standard_False)  const;
index 59f2b3b5d39d0efdd211504c479752920c446396..39075cf84712f5a62fbef33ea49803d5e5341a59 100644 (file)
@@ -117,7 +117,7 @@ static void WriteGetMethod (Standard_OStream &os,
   Express::WriteMethodStamp ( os, method );
   os << ( isHandle ? "Handle(" : "" ) << type->ToCString() << ( isHandle ? ") " : " " ) <<
        name->ToCString() << "::" << method->ToCString() << " () const" << std::endl;
-  os << "{" << std::endl << "  return the" << field->ToCString() << ";\n}" << std::endl;
+  os << "{" << std::endl << "  return my" << field->ToCString() << ";\n}" << std::endl;
 }
 
 //=======================================================================
@@ -137,8 +137,8 @@ static void WriteSetMethod (Standard_OStream &os,
   Express::WriteMethodStamp ( os, method );
   os << "void " << name->ToCString() << "::" << method->ToCString() << " (const " <<
         ( isHandle ? "Handle(" : "" ) << type->ToCString() << ( isHandle ? ")" : "" ) <<
-       " " << ( isSimple ? "" : "&" ) << "a" << field->ToCString() << ")" << std::endl;
-  os << "{" << std::endl << "  the" << field->ToCString() << " = a" << field->ToCString() << ";\n}" << std::endl;
+    ( isSimple ? "" : "&" ) << " the" << field->ToCString() << ")" << std::endl;
+  os << "{" << std::endl << "  my" << field->ToCString() << " = the" << field->ToCString() << ";\n}" << std::endl;
 }
 
 //=======================================================================
@@ -159,11 +159,10 @@ static inline void WriteSpaces (Standard_OStream &os, Standard_Integer num)
 Standard_Boolean Express_Entity::GenerateClass () const
 {
   Handle(TCollection_HAsciiString) CPPname = CPPName();
-  Handle(TCollection_HAsciiString) CDLname = CDLName();
   std::cout << "Generating ENTITY " << CPPname->ToCString() << std::endl;
   
   // create a package directory (if not yet exist)
-  OSD_Protection prot ( OSD_RX, OSD_RWX, OSD_RX, OSD_RX );
+  OSD_Protection prot(OSD_RWXD, OSD_RWXD, OSD_RWXD, OSD_RWXD);
   TCollection_AsciiString pack = GetPackageName()->String();
   OSD_Path path ( pack );
   OSD_Directory dir ( path );
@@ -172,47 +171,58 @@ Standard_Boolean Express_Entity::GenerateClass () const
   pack += CPPname->String();
   
   //===============================
-  // Step 1: generating CDL
+  // Step 1: generating HXX
   
-  // Open CDL file 
-  std::ofstream os ( pack.Cat ( ".cdl" ).ToCString() );
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_True );
+  Express::WriteFileStamp ( os );
 
-  // write start of declaration (inheritance)
-  os << "class " << CDLname->ToCString() << std::endl << "inherits ";
-  if ( myInherit->Length() >0 ) { // first inherited class will be actually inherited
+  Handle(TCollection_HAsciiString) InheritName = new TCollection_HAsciiString("Standard_Transient");
+  if (myInherit->Length() > 0) { // first inherited class will be actually inherited
     Handle(Express_Entity) it = myInherit->Value(1);
-    it->Use ( GetPackageName() );
-    os << it->CDLName()->ToCString();
-    if ( myInherit->Length() >1 ) {
+    it->Use(GetPackageName());
+    InheritName = it->CPPName();
+    if (myInherit->Length() > 1) {
       std::cout << "Warning: ENTITY " << Name()->ToCString() << " defined with multiple inheritance;" << std::endl;
       std::cout << "Warning: only first base class is actually inherited, others are made fields" << std::endl;
     }
   }
-  else os << "TShared from MMgt";
-  os << std::endl << std::endl;
-  
-  os << "    ---Purpose: Representation of STEP entity " << Name()->ToCString() << std::endl;
+
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
+  os << std::endl;
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_Type.hxx>" << std::endl;
+  os << "#include <" << InheritName->ToCString() << ".hxx>" << std::endl;
   os << std::endl;
   
-  // write "uses" section (also creates all used types)
+  // write includes section (also creates all used types)
   DataMapOfStringInteger dict;
-  if ( ! WriteUses ( os, Standard_True, dict ) ) os << std::endl << std::endl;
-    
-  // start 'is' section
-  os << "is" << std::endl;
-  os << "    Create returns " << CDLname->ToCString() << ";" << std::endl;
-  os << "      ---Purpose: Empty constructor" << std::endl;
+  WriteIncludes(os, dict);
+  os << std::endl;
+
+  os << "DEFINE_STANDARD_HANDLE(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
+  os << std::endl;
+
+  // write start of declaration (inheritance)
+  os << "//! Representation of STEP entity " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public " << InheritName->ToCString();
+  os << std::endl << "{" << std::endl;
+  os << "public :" << std::endl << std::endl;
+  
+  // write constructor
+  os << "  //! default constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
   os << std::endl;
   
   // write Init methods
-  if ( myInherit->Length() >1 || myFields->Length() >0 ) {
-    os << "    Init (me: mutable; ";
-    MakeInit ( os, 23, Standard_True, 0 );
+  if ( myInherit->Length() > 1 || myFields->Length() > 0 ) {
+    os << "  //! Initialize all fields (own and inherited)" << std::endl;
+    os << " Standard_EXPORT void Init(";
+    MakeInit ( os, 27, Standard_True, 0 );
     os << ");" << std::endl;
-    os << "    ---Purpose: Initialize all fields (own and inherited)" << std::endl;
     os << std::endl;
   }
   
@@ -220,58 +230,70 @@ Standard_Boolean Express_Entity::GenerateClass () const
   for ( Standard_Integer i=2; i <= myInherit->Length(); i++ ) {
     Handle(Express_Entity) it = myInherit->Value(i);
     Handle(TCollection_HAsciiString) name = it->Name();
-    Handle(TCollection_HAsciiString) str = it->CDLName();
-    os << "    " << name->ToCString() << " (me) returns " << str->ToCString() << ";" << std::endl;
-    os << "    ---Purpose: Returns data for supertype " << name->ToCString() << std::endl;
-    os << "    Set" << name->ToCString() << " (me: mutable; " << name->ToCString() << ": " << str->ToCString() << ");" << std::endl;
-    os << "    ---Purpose: Set data for supertype " << name->ToCString() << std::endl;
+    os << "  //! Returns data for supertype " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT Handle(" << it->CPPName()->ToCString()
+       << ") " << name->ToCString() << "() const;" << std::endl;
+    os << "  //! Sets data for supertype " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT void Set" << name->ToCString() 
+       << " (const Handle(" << it->CPPName()->ToCString() << ")& the"<< name->ToCString() << ");" << std::endl;
     os << std::endl;
   }
-  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
-    Handle(Express_Field) field = myFields->Value ( i );
-    Handle(TCollection_HAsciiString) str = field->Type()->CDLName();
-    os << "    " << field->Name()->ToCString() << " (me) returns " << str->ToCString() << ";" << std::endl;
-    os << "    ---Purpose: Returns field " << field->Name()->ToCString() << std::endl;
-    os << "    Set" << field->Name()->ToCString() << " (me: mutable; " << 
-          field->Name()->ToCString() << ": " << str->ToCString() << ");" << std::endl;
-    os << "    ---Purpose: Set field " << field->Name()->ToCString() << std::endl;
-    if ( field->IsOptional() ) {
-      os << "    Has" << field->Name()->ToCString() << " (me) returns Boolean;" << std::endl;
-      os << "  ---Purpose: Returns True if optional field " << field->Name()->ToCString() << " is defined" << std::endl;
-//      os << "        ---C++: return &" << std::endl;
+  for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+    Handle(Express_Field) field = myFields->Value(i);
+    os << "  //! Returns field " << field->Name()->ToCString() << std::endl;
+    if (field->Type()->IsHandle())
+      os << "  Standard_EXPORT Handle(" << field->Type()->CPPName()->ToCString() << ") "
+         << field->Name()->ToCString() << "() const;" << std::endl;
+    else
+      os << "  Standard_EXPORT " << field->Type()->CPPName()->ToCString() << " "
+         << field->Name()->ToCString() << "() const;" << std::endl;
+    os << "  //! Sets field " << field->Name()->ToCString() << std::endl;
+    if (field->Type()->IsHandle())
+      os << "  Standard_EXPORT void Set" << field->Name()->ToCString() << " (const Handle("
+        << field->Type()->CPPName()->ToCString() << ")& the" << field->Name()->ToCString() << ");" << std::endl;
+    else
+      os << "  Standard_EXPORT void Set" << field->Name()->ToCString() << " (const "
+         << field->Type()->CPPName()->ToCString() << " the" << field->Name()->ToCString() << ");" << std::endl;
+    if (field->IsOptional()) {
+      os << "  //! Returns True if optional field " << field->Name()->ToCString() << " is defined" << std::endl;
+      os << "  Standard_EXPORT Standard_Boolean Has" << field->Name()->ToCString() << "() const;" << std::endl;
     }
     os << std::endl;
   }
-  
+
+  os << "DEFINE_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
+  os << std::endl;
+
   // write fields section
   if ( myInherit->Length() >1 || myFields->Length() >0 ) {
-    os << "fields" << std::endl;
-    for (Standard_Integer i=2; i <= myInherit->Length(); i++ ) {
+    os << "private:" << std::endl;
+    for (Standard_Integer i = 2; i <= myInherit->Length(); i++) {
       Handle(Express_Entity) it = myInherit->Value(i);
       Handle(TCollection_HAsciiString) name = it->Name();
-      Handle(TCollection_HAsciiString) str = it->CDLName();
-      os << "    the" << it->Name()->ToCString() << ": " <<
-           it->CDLName()->ToCString() << "; -- supertype" << std::endl;
+      os << "  Handle(" << it->CPPName()->ToCString() << ") my" << name->ToCString() << "; //!< supertype" << std::endl;
     }
-    for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
-      Handle(Express_Field) field = myFields->Value ( i );
-      os << "    the" << field->Name()->ToCString() << ": " << 
-           field->Type()->CDLName()->ToCString() << ";";
-      if ( field->IsOptional() ) os << " -- optional";
+    for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+      Handle(Express_Field) field = myFields->Value(i);
+      if (field->Type()->IsHandle())
+        os << "  Handle(" << field->Type()->CPPName()->ToCString() << ") my" << field->Name()->ToCString() << ";";
+      else
+        os << "  " << field->Type()->CPPName()->ToCString() << " my" << field->Name()->ToCString() << ";";
+      if (field->IsOptional()) os << " //!< optional";
       os << std::endl;
     }
     // optional fields: flag 'is field set'
-    for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
-      Handle(Express_Field) field = myFields->Value ( i );
-      if ( ! field->IsOptional() ) continue;
-      os << "    def" << field->Name()->ToCString() << ": Boolean; -- flag \"is " << 
-           field->Name()->ToCString() << " defined\"" << std::endl;
+    for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+      Handle(Express_Field) field = myFields->Value(i);
+      if (!field->IsOptional()) continue;
+      os << "  Standard_Boolean def" << field->Name()->ToCString() << "; //!< flag \"is " <<
+        field->Name()->ToCString() << " defined\"" << std::endl;
     }
     os << std::endl;
   }
-      
+  
   // write end
-  os << "end " << Name()->ToCString() << ";" << std::endl;
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
   os.close();
   
   //===============================
@@ -281,10 +303,12 @@ Standard_Boolean Express_Entity::GenerateClass () const
   os.open ( pack.Cat ( ".cxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_False );
+  Express::WriteFileStamp ( os );
 
   // write include section
-  os << "#include <" << CPPname->ToCString() << ".ixx>" << std::endl;
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  os << std::endl;
+  os << "IMPLEMENT_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
   
   // write constructor
   Express::WriteMethodStamp ( os, CPPname );
@@ -329,17 +353,13 @@ Standard_Boolean Express_Entity::GenerateClass () const
   os.close();
   if(AbstractFlag()) return Standard_True;  
   //===============================
-  // Step 3: generating CDL for Reader/Writer class
+  // Step 3: generating HXX for Reader/Writer class
   
-  // Open CDL file 
+  // Open HXX file 
   Handle(TCollection_HAsciiString) RWCPPName = new TCollection_HAsciiString ( "RW" );
   RWCPPName->AssignCat ( GetPackageName() );
   RWCPPName->AssignCat ( "_RW" );
   RWCPPName->AssignCat ( Name() );
-  Handle(TCollection_HAsciiString) RWCDLName = new TCollection_HAsciiString ( "RW" );
-  RWCDLName->AssignCat ( Name() );
-  RWCDLName->AssignCat ( " from RW" );
-  RWCDLName->AssignCat ( GetPackageName() );
 
   pack = "RW";
   pack += GetPackageName()->String();
@@ -349,61 +369,52 @@ Standard_Boolean Express_Entity::GenerateClass () const
   pack += "/";
   pack += RWCPPName->String();
   
-  os.open ( pack.Cat ( ".cdl" ).ToCString() );
+  os.open ( pack.Cat ( ".hxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, RWCPPName, Standard_True );
+  Express::WriteFileStamp ( os );
 
-  // write start of declaration (inheritance)
-  os << "class " << RWCDLName->ToCString() << "  inherits RWClass from StepData" << std::endl << std::endl;
-  
-  os << "    ---Purpose: Read & Write tool for " << Name()->ToCString() << std::endl;
-  os << std::endl;
-  
-  // write "uses" section
-  os << "uses" << std::endl;
-  os << "    Check from Interface," << std::endl;
-  os << "    StepWriter from StepData," << std::endl;
-  os << "    StepReaderData from StepData," << std::endl;
-  os << "    EntityIterator from Interface," << std::endl;
-  os << "    InterfaceModel from Interface," << std::endl;
-  os << "    ShareTool from Interface," << std::endl;
-  os << "    " << CDLname->ToCString() << std::endl;
+  os << "#ifndef _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
+  os << "#define _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
   os << std::endl;
 
-  // write "is" section
-  os << "is" << std::endl;
-  os << "    New(me) returns Transient;"<< std::endl; // << RWCDLName->ToCString() << ";" << std::endl;
-  os << "      ---Purpose: Returns new entity " << RWCDLName->ToCString()<< std::endl;
+  // write insludes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_DefineAlloc.hxx>" << std::endl;
+  os << "#include <Standard_Handle.hxx>" << std::endl;
   os << std::endl;
-  os << "    ReadStep (me; data: StepReaderData from StepData; num: Integer;" << std::endl;
-  os << "                  ach : in out Check from Interface;" << std::endl;
-  os << "                  entt : Transient);" << std::endl;
-  os << "      ---Purpose: Reads " << Name()->ToCString() << std::endl;
-  os << std::endl;
-  os << "    WriteStep (me; SW: in out StepWriter from StepData;" << std::endl;
-  os << "                   entt: Transient);" << std::endl;
-  os << "      ---Purpose: Writes " << Name()->ToCString() << std::endl;
-  os << std::endl;
-  os << "    Share (me; entt : Transient;" << std::endl;
-  os << "               iter: in out EntityIterator from Interface);" << std::endl;
-  os << "      ---Purpose: Fills data for graph (shared items)" << std::endl;
-  if(CheckFlag()) {
-     os << "    Check (me; entt : Transient;" << std::endl;
-     os << "               shares : ShareTool from Interface;" << std::endl;
-     os << "               ach : in out Check from Interface) is redefined;" << std::endl;
-     os << "   ---Purpose: Check data for entity " << std::endl;
-    }
-  if(FillSharedFlag()) {
-     os << "    Share (me;   model : InterfaceModel from Interface;" << std::endl;
-     os << "               entt : Transient;" << std::endl;
-     os << "               iter: in out EntityIterator from Interface) is redefined;" << std::endl;
-     os << "   ---Purpose: Shared data for entity " << std::endl;
-  }
+  os << "class StepData_StepReaderData;" << std::endl;
+  os << "class Interface_Check;" << std::endl;
+  os << "class StepData_StepWriter;" << std::endl;
+  os << "class Interface_EntityIterator;" << std::endl;
+  os << "class " << CPPName()->ToCString() << ";" << std::endl;
   os << std::endl;
 
+  // write start of declaration (inheritance)
+  os << "//! Read & Write tool for " << Name()->ToCString() << std::endl;
+  os << "class " << RWCPPName->ToCString() << std::endl;
+  os << "{" << std::endl;
+  os << "public:" << std::endl;
+  os << std::endl << "  DEFINE_STANDARD_ALLOC" << std::endl << std::endl;
+
+  // default constructor
+  os << "  Standard_EXPORT " << RWCPPName->ToCString() << "();" << std::endl << std::endl;
+
+  // read step
+  os << "  Standard_EXPORT void ReadStep(const Handle(StepData_StepReaderData)& data, const Standard_Integer num, Handle(Interface_Check)& ach, const Handle(" <<
+    CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl;
+
+  // write step
+  os << "  Standard_EXPORT void WriteStep(StepData_StepWriter& SW, const Handle(" <<
+    CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl;
+
+  // share
+  os << "  Standard_EXPORT void Share(const Handle(" <<
+    CPPName()->ToCString() << ")& ent, Interface_EntityIterator& iter) const;" << std::endl << std::endl;
+
   // write end
-  os << "end RW" << Name()->ToCString() << ";" << std::endl;
+  os << "};" << std::endl;
+  os << "#endif // _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
   os.close();
   
   //===============================
@@ -413,19 +424,20 @@ Standard_Boolean Express_Entity::GenerateClass () const
   os.open ( pack.Cat ( ".cxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, RWCPPName, Standard_False );
+  Express::WriteFileStamp ( os );
 
   // write include section
-  os << "#include <" << RWCPPName->ToCString() << ".ixx>" << std::endl;
-  WriteRWInclude ( os, dict );
+  os << "#include <Interface_EntityIterator.hxx>" << std::endl;
+  os << "#include <StepData_StepReaderData.hxx>" << std::endl;
+  os << "#include <StepData_StepWriter.hxx>" << std::endl;
+  os << "#include <" << RWCPPName->ToCString() << ".hxx>" << std::endl;
+  dict.Clear();
   os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
-  // write method New
+  dict.Bind(CPPname->ToCString(), 1);
+  WriteRWInclude ( os, dict );
+  // write constructor
   Express::WriteMethodStamp ( os, RWCPPName );
-  os << "Handle(Standard_Transient) " << RWCPPName->ToCString() << "::" << "New () const" << std::endl;
-  os << "{" << std::endl;
-  os << "  Handle("<<RWCPPName->ToCString()<<") newRW = new " <<RWCPPName->ToCString()<<";"<< std::endl;
-  os << "  return newRW;"<< std::endl;
-  os << "}" << std::endl;
+  os << RWCPPName->ToCString() << "::" << RWCPPName->ToCString() << "() {}" << std::endl << std::endl;
 
   // write method ReadStep
   Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "ReadStep" ) );
@@ -433,13 +445,11 @@ Standard_Boolean Express_Entity::GenerateClass () const
   WriteSpaces ( os, 17 + RWCPPName->Length() );
   os << "const Standard_Integer num," << std::endl;
   WriteSpaces ( os, 17 + RWCPPName->Length() );
-  os << "Interface_Check& ach," << std::endl;
+  os << "Handle(Interface_Check)& ach," << std::endl;
   WriteSpaces ( os, 17 + RWCPPName->Length() );
-  os << "const Handle(Standard_Transient) &entt) const" << std::endl;
+  os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl;
   os << "{" << std::endl;
   Standard_Integer nbFld = NbFields ( Standard_True );
-  //DownCast entity to it's type
-  os<<"  Handle("<<CPPname->ToCString() << ") ent = Handle("<<CPPname->ToCString() <<")::DownCast(entt);"<< std::endl;
   
   os << "  // Check number of parameters" << std::endl;
   os << "  if ( ! data->CheckNbParams(num," << nbFld << ",ach,\"" << 
@@ -448,33 +458,30 @@ Standard_Boolean Express_Entity::GenerateClass () const
   os << std::endl;
   os << "  // Initialize entity" << std::endl;
   os << "  ent->Init(";
-  MakeInit ( os, 12, Standard_True, 2 );
+  MakeInit ( os, 12, Standard_True, 4 );
   os << ");\n}" << std::endl;
 
   // write method WriteStep
   Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "WriteStep" ) );
   os << "void " << RWCPPName->ToCString() << "::WriteStep (StepData_StepWriter& SW," << std::endl;
   WriteSpaces ( os, 18 + RWCPPName->Length() );
-  os << "const Handle(Standard_Transient) &entt) const" << std::endl;
+  os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl;
   os << "{" << std::endl;
-  //DownCast entity to it's type
-  os<<"  Handle("<<CPPname->ToCString() << ") ent = Handle("<<CPPname->ToCString() <<")::DownCast(entt);"<< std::endl;
   
   WriteRWWriteCode ( os, 0, Standard_True ); // write code for writing inherited and own fields
   os << "}" << std::endl;
 
   // write method Share
   Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Share" ) );
-  os << "void " << RWCPPName->ToCString() << "::Share (const Handle(Standard_Transient) &entt," << std::endl;
+  os << "void " << RWCPPName->ToCString() << "::Share (const Handle(" << CPPname->ToCString() << ")& ent," << std::endl;
   WriteSpaces ( os, 14 + RWCPPName->Length() );
   os << "Interface_EntityIterator& iter) const" << std::endl;
   os << "{" << std::endl;
-  os<<"  Handle("<<CPPname->ToCString() << ") ent = Handle("<<CPPname->ToCString() <<")::DownCast(entt);"<< std::endl;
   WriteRWShareCode ( os, 1, Standard_True ); // write code for filling graph of references
   os << "}" << std::endl;
   if(CheckFlag()) {
     Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Check" ) );
-    os << "void " << RWCPPName->ToCString() << "::Check(const Handle(Standard_Transient) &entt," << std::endl;
+    os << "void " << RWCPPName->ToCString() << "::Check(const Handle(Standard_Transient)entt," << std::endl;
     WriteSpaces ( os, 18 + RWCPPName->Length() );
     os << "const Interface_ShareTool& shares,"<< std::endl;
     WriteSpaces ( os, 18 + RWCPPName->Length() );
@@ -488,7 +495,7 @@ Standard_Boolean Express_Entity::GenerateClass () const
     Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "FillShared" ) );
     os << "void " << RWCPPName->ToCString() << "::Share(const Handle(Interface_InterfaceModel)& model," << std::endl;
     WriteSpaces ( os, 18 + RWCPPName->Length() );
-    os << "const Handle(Standard_Transient) &entt,"<< std::endl;
+    os << "const Handle(Standard_Transient)entt,"<< std::endl;
     WriteSpaces ( os, 18 + RWCPPName->Length() );
     os << "Interface_EntityIterator& iter) const"<< std::endl;
     os << "{" << std::endl;
@@ -499,77 +506,133 @@ Standard_Boolean Express_Entity::GenerateClass () const
   
   // close
   os.close();
-  //adding method for registartion of entities and include in the two files
+
+  //===============================
+  // Step 5: adding method for registartion of entities and include
   
-  TCollection_AsciiString packname = GetPackageName()->String();
-  OSD_Path path_reg ( packname );
-  OSD_Directory dir_reg ( packname );
+  Standard_Integer anIndex = Express_Item::Index();
+  TCollection_AsciiString regDir = "Registration";
+  OSD_Path path_reg(regDir);
+  OSD_Directory dir_reg(regDir);
   dir_reg.Build ( prot );
+  regDir += "/";
   
-  TCollection_AsciiString packname_inc = packname +".cxx_inc"; 
-  TCollection_AsciiString packname_rec = packname + ".cxx_reg";
-  packname += "/";
-  //write file with includes for registration
-  os.open(packname.Cat(packname_inc).ToCString(),std::ios::app);
-    os <<"#include <" << RWCPPName->ToCString() << ".hxx>" << std::endl;
+  TCollection_AsciiString packname_inc = "inc.txt";
+  TCollection_AsciiString packname_rwinc = "rwinc.txt";
+  // write file with includes
+  os.open(regDir.Cat(packname_inc).ToCString(), std::ios::app);
+  os <<"#include <" << CPPName()->ToCString() << ".hxx>" << std::endl;
+  os.close();
+  // write file with RW includes
+  os.open(regDir.Cat(packname_rwinc).ToCString(), std::ios::app);
+  os << "#include <" << RWCPPName->ToCString() << ".hxx>" << std::endl;
+  os.close();
+
+  // generate data for entity registration
+  if (anIndex > 0) {
+    // StepAP214_Protocol.cxx
+    TCollection_AsciiString packname_protocol = "protocol.txt";
+    os.open(regDir.Cat(packname_protocol).ToCString(), std::ios::app);
+    os << "types.Bind(STANDARD_TYPE(" << CPPName()->ToCString() << "), " << anIndex << ");" << std::endl;
     os.close();
-  
-  //write file with registration
-  os.open(packname.Cat(packname_rec).ToCString(),std::ios::app);
-  os<<"  //Registration class "<<CPPname->ToCString()<< std::endl;
-  os<<"  stepname = "<<"\""<<CPPname->ToCString()<<"\""<<";"<< std::endl;
-  if(!ShortName().IsNull() && ShortName()->Length() >0) {
-    os<<"  shortname = "<<"\""<<ShortName()->ToCString()<<"\""<<";"<< std::endl;
+    // RWStepAP214_GeneralModule.cxx
+    // FillSharedCase
+    TCollection_AsciiString packname_fillshared = "fillshared.txt";
+    os.open(regDir.Cat(packname_fillshared).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.Share(anent, iter);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // NewVoid
+    TCollection_AsciiString packname_newvoid = "newvoid.txt";
+    os.open(regDir.Cat(packname_newvoid).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "    ent = new " << CPPName()->ToCString() << ";" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // CategoryNumber
+    TCollection_AsciiString packname_category = "category.txt";
+    os.open(regDir.Cat(packname_category).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ": return " << Category()->ToCString() << ";" << std::endl;
+    os.close();
+    // RWStepAP214_ReadWriteModule.cxx
+    // Reco
+    Handle(TCollection_HAsciiString) recoName = Express::ToStepName(Name());
+    recoName->UpperCase();
+    TCollection_AsciiString packname_reco = "reco.txt";
+    os.open(regDir.Cat(packname_reco).ToCString(), std::ios::app);
+    os << "  static TCollection_AsciiString Reco_" << Name()->ToCString() << "(\""
+       << recoName->ToCString() << "\");" << std::endl;
+    os.close();
+    //type bind
+    TCollection_AsciiString packname_typebind = "typebind.txt";
+    os.open(regDir.Cat(packname_typebind).ToCString(), std::ios::app);
+    os << "  typenums.Bind(Reco_" << Name()->ToCString() << ", " << anIndex << ");" << std::endl;
+    os.close();
+    // StepType
+    TCollection_AsciiString packname_steptype = "steptype.txt";
+    os.open(regDir.Cat(packname_steptype).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ": return Reco_" << Name()->ToCString() << ";" << std::endl;
+    os.close();
+    // ReadStep
+    TCollection_AsciiString packname_readstep = "readstep.txt";
+    os.open(regDir.Cat(packname_readstep).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.ReadStep(data, num, ach, anent);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // WriteStep
+    TCollection_AsciiString packname_writestep = "writestep.txt";
+    os.open(regDir.Cat(packname_writestep).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.WriteStep(SW, anent);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    Express_Item::SetIndex(anIndex + 1);
   }
-  if(!Category().IsNull() && Category()->Length() >0)
-    os<<"   category = "<<"Interface_Category::Number(\""<<Category()->ToCString()<<"\");"<< std::endl;
-  else 
-    os<<"   category = vcateg;"<< std::endl;
-//PDN modification of $ on handles
-//  os<<"  Handle(" << RWCPPName->ToCString()<<")& rwclass = new "<<RWCPPName->ToCString()<<";"<< std::endl;
-//  os<<"  Protocol->RegisterEntity(stepname,shortname,category,rwclass);"<< std::endl<< std::endl;
-  os<<"  Protocol->RegisterEntity(stepname,shortname,category,new "<<RWCPPName->ToCString()<<");"<< std::endl;
-  os<<"  shortname.Clear();"<< std::endl<< std::endl;
-  os.close();
   
   return Standard_True;
 }
 
 //=======================================================================
-//function : WriteUses
+//function : WriteIncludes
 //purpose  : 
 //=======================================================================
 
-Standard_Boolean Express_Entity::WriteUses (Standard_OStream &os, 
-                                            const Standard_Boolean start,
-                                             DataMapOfStringInteger &dict) const
+Standard_Boolean Express_Entity::WriteIncludes (Standard_OStream &os, 
+                                            DataMapOfStringInteger &dict) const
 {
-  Standard_Boolean st = start;
   for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) {
     Handle(Express_Entity) it = myInherit->Value(i);
-    st = it->WriteUses ( os, st, dict );
-    if ( i <=1 ) continue;
-      
-    if ( dict.IsBound ( it->CDLName()->String() ) ) continue; // avoid duplicating
-    dict.Bind ( it->CDLName()->String(), 1 );
+    it->WriteIncludes ( os, dict );
+    if ( i <= 1 ) continue;
+
+    if ( dict.IsBound ( it->CPPName()->String() ) ) continue; // avoid duplicating
+    dict.Bind ( it->CPPName()->String(), 1 );
     it->Use ( GetPackageName() );
-    os << ( st ? "uses" : "," ) << std::endl;
-    st = Standard_False;
-    os << "    ";
-    os << it->CDLName()->ToCString();
+    os << "#include <" << it->CPPName()->ToCString() << ".hxx>" << std::endl;
   }
   for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
     Handle(Express_Type) type = myFields->Value(i)->Type();
-    if ( dict.IsBound ( type->CDLName()->String() ) ) continue; // avoid duplicating
-    dict.Bind ( type->CDLName()->String(), 1 );
+    if ( dict.IsBound ( type->CPPName()->String() ) ) continue; // avoid duplicating
+    dict.Bind ( type->CPPName()->String(), 1 );
     type->Use ( GetPackageName() );
     if ( type->IsStandard() ) continue;
-    os << ( st ? "uses" : "," ) << std::endl;
-    st = Standard_False;
-    os << "    ";
-    os << type->CDLName()->ToCString();
+    os << "#include <" << type->CPPName()->ToCString() << ".hxx>" << std::endl;
   }
-  return st;
+  return Standard_True;
 }
 
 //=======================================================================
@@ -581,25 +644,21 @@ void Express_Entity::WriteRWInclude (Standard_OStream &os, DataMapOfStringIntege
 {
   for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) {
     Handle(Express_Entity) it = myInherit->Value(i);
-    if ( i >1 ) { // include hxx for base classes which are implemented as fields
+    if ( i >1 ) { // include HXX for base classes which are implemented as fields
       os << "#include <" << it->CPPName()->ToCString() << ".hxx>" << std::endl;
     }
     it->WriteRWInclude ( os, dict );
   }
   for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
     Handle(Express_Type) type = myFields->Value(i)->Type();
-    
     for ( Standard_Integer deep=0; deep < 10; deep++ ) {
       if ( dict.IsBound ( type->CPPName()->String() ) ) break; // avoid duplicating
-      dict.Bind ( type->CDLName()->String(), 1 );
-    
-      Standard_Boolean iscomplex = type->IsKind(STANDARD_TYPE(Express_ComplexType));
-      if ( ! deep && ! iscomplex ) break; // only complex types and their elements need #include
-    
+      dict.Bind ( type->CPPName()->String(), 1 );
       os << "#include <" << type->CPPName()->ToCString() << ".hxx>" << std::endl;
       
-      if ( ! iscomplex ) break;
       Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+      if (complex.IsNull())
+        break;
       type = complex->Type();
     }
   }
@@ -619,12 +678,12 @@ static Handle(TCollection_HAsciiString) TypeToSTEPName (const Handle(Express_Typ
 }
 
 static void WriteRWReadField (Standard_OStream &os, 
-                             const Standard_CString index,
-                             const Standard_CString STEPName,
-                             const Standard_CString varname,
-                             const Handle(Express_Type) &vartype, 
-                             const Standard_Integer lev,
-                             const Standard_Boolean optional)
+                              const Standard_CString index,
+                              const Standard_CString STEPName,
+                              const Standard_CString varname,
+                              const Handle(Express_Type) &vartype, 
+                              const Standard_Integer lev,
+                              const Standard_Boolean optional)
 {
   // indent
   TCollection_AsciiString shift ( "  " );
@@ -686,10 +745,10 @@ static void WriteRWReadField (Standard_OStream &os,
                       varname << " = " << enpack.ToCString() << "_" << prefix->ToCString()<<
                       names->Value(i)->ToCString() << ";" << std::endl;
       }
-      os << shift << "  else ach.AddFail(\"Parameter #" << index << " (" <<
+      os << shift << "  else ach->AddFail(\"Parameter #" << index << " (" <<
                     STEPName << ") has not allowed value\");" << std::endl;
       os << shift << "}" << std::endl;
-      os << shift << "else ach.AddFail(\"Parameter #" << index << " (" <<
+      os << shift << "else ach->AddFail(\"Parameter #" << index << " (" <<
                     STEPName << ") is not enumeration\");" << std::endl;
 //      os << "!!! READING/WRITING ENUM NOT IMPLEMENTED !!!" << std::endl;
 //      std::cout << "Warning: Reading/Writing ENUMERATION not yet implemented (" << 
@@ -763,7 +822,14 @@ static void WriteRWReadField (Standard_OStream &os,
     os << shift << "}" << std::endl;
     os << shift << "else {" << std::endl;
     os << shift << "  has" << varname << " = Standard_False;" << std::endl;
-    if ( ! type->IsHandle() ) os << shift << "  a" << varname << " = 0;" << std::endl;
+    os << shift << "  a" << varname;
+    if (type->IsHandle())
+      os << ".Nullify();";
+    else if (type->IsStandard())
+      os << " = 0;";
+    else
+      os << " = " << type->CPPName()->ToCString() << "();";
+    os << std::endl;
     os << shift << "}" << std::endl;
   }
 }
@@ -774,8 +840,8 @@ static void WriteRWReadField (Standard_OStream &os,
 //=======================================================================
 
 Standard_Integer Express_Entity::WriteRWReadCode (Standard_OStream &os, 
-                                                  const Standard_Integer start,
-                                                  const Standard_Integer own) const
+                                                  const Standard_Integer start,
+                                                  const Standard_Integer own) const
 {
   Standard_Integer num = start;
   
@@ -789,16 +855,16 @@ Standard_Integer Express_Entity::WriteRWReadCode (Standard_OStream &os,
     os << "  // " << ( own ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl;
   }
   
-  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+  for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
     Handle(Express_Field) field = myFields->Value(i);
-    Handle(TCollection_HAsciiString) STEPName = Express::ToStepName ( field->Name() );
-    if ( ! own ) STEPName->Prepend ( Express::ToStepName ( Name()->Cat ( "." ) ) );
-    Handle(TCollection_HAsciiString) varName = new TCollection_HAsciiString ( field->Name() );
-    if ( ! own ) varName->Prepend ( Name()->Cat ( "_" ) );
-    
+    Handle(TCollection_HAsciiString) STEPName = Express::ToStepName(field->Name());
+    if (!own) STEPName->Prepend(Express::ToStepName(Name()->Cat(".")));
+    Handle(TCollection_HAsciiString) varName = new TCollection_HAsciiString(field->Name());
+    if (!own) varName->Prepend(Name()->Cat("_"));
+
     os << std::endl;
-    WriteRWReadField ( os, TCollection_AsciiString(num).ToCString(), STEPName->ToCString(), 
-                      varName->ToCString(), field->Type(), 0, field->IsOptional() );
+    WriteRWReadField(os, TCollection_AsciiString(num).ToCString(), STEPName->ToCString(),
+      varName->ToCString(), field->Type(), 0, field->IsOptional());
     num++;
   }
   return num;
@@ -985,7 +1051,7 @@ static Standard_Boolean WriteRWShareField (Standard_OStream &os,
     os << shift << ( type->IsHandle() ? "  Handle(" : "  " ) << type->CPPName()->ToCString() <<
                    ( type->IsHandle() ? ") " : " " ) << var.ToCString() << " = " <<
                   varname << "->Value(i" << index << ");" << std::endl;
-    oos << '\0';
+
     os << oos.str();
     os << shift << "}" << std::endl;
     return Standard_True;
@@ -1046,7 +1112,7 @@ Standard_Integer Express_Entity::WriteRWShareCode (Standard_OStream &os,
       else if ( own ==-1 ) os << Name()->ToCString() << "()->";
       os << "Has" << field->Name()->ToCString() << "() ) {" << std::endl;
     }
-    oos << '\0';
+
     os << oos.str();
     if ( field->IsOptional() ) {
       os << "  }" << std::endl;
@@ -1061,30 +1127,30 @@ Standard_Integer Express_Entity::WriteRWShareCode (Standard_OStream &os,
 //=======================================================================
 
 Standard_Integer Express_Entity::MakeInit (Standard_OStream &os, 
-                                           const Standard_Integer shift,
-                                           const Standard_Integer own,
-                                           const Standard_Integer mode) const
+                                           const Standard_Integer shift,
+                                           const Standard_Integer own,
+                                           const Standard_Integer mode) const
 {
   Standard_Integer sh = shift;
   
   // write code for inherited fields
-  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) {
+  for (Standard_Integer i = 1; i <= myInherit->Length(); i++) {
     Handle(Express_Entity) ent = myInherit->Value(i);
-    if ( mode ==3 ) {
+    if (mode == 3) {
       Standard_Integer s = 0;
-      if ( i >1 ) {
-       os << "\n  the" << ent->Name()->ToCString() << " = new " << ent->CPPName()->ToCString() << ";";
-       os << "\n  the" << ent->Name()->ToCString() << "->Init(";
-       s = 12 + ent->Name()->Length();
+      if (i > 1) {
+        os << "\n  my" << ent->Name()->ToCString() << " = new " << ent->CPPName()->ToCString() << ";";
+        os << "\n  my" << ent->Name()->ToCString() << "->Init(";
+        s = 12 + ent->Name()->Length();
       }
       else {
-       os << "\n  " << ent->CPPName()->ToCString() << "::Init(";
-       s = 9 + ent->CPPName()->Length();
+        os << "\n  " << ent->CPPName()->ToCString() << "::Init(";
+        s = 9 + ent->CPPName()->Length();
       }
-      ent->MakeInit ( os, s, Standard_False, 2 );
+      ent->MakeInit(os, s, Standard_False, 2);
       os << ");";
     }
-    else sh = ent->MakeInit ( os, sh, ( i >1 ? -1 : Standard_False ), mode );
+    else sh = ent->MakeInit(os, sh, (i > 1 ? -1 : Standard_False), mode);
   }
 
   // write code for own fields
@@ -1097,37 +1163,49 @@ Standard_Integer Express_Entity::MakeInit (Standard_OStream &os,
     // make CR and indent
     TCollection_AsciiString space = "";
     for ( Standard_Integer sn=0; sn < abs(sh); sn++ ) space += " ";
-    Standard_Character delim = ( mode ==0 ? ';' : ( mode == 3 ? '\n' : ',' ) );
-    if ( sh <0 ) os << delim << "\n" << space;
+    Standard_Character delim = ( mode == 0 ? ',' : ( mode == 3 ? '\n' : ',' ) );
+    if ( sh < 0 ) os << delim << "\n" << space;
     else sh = -sh;
     
     if ( field->IsOptional() ) {
-      if ( mode ==0 ) os << "has" << varName->ToCString() << ": Boolean;\n" << space;
-      else if ( mode ==1 ) os << "const Standard_Boolean has" << varName->ToCString() << ",\n" << space;
-      else if ( mode ==) os << "has" << varName->ToCString() << ",\n" << space;
+      if ( mode == 0 ) os << "const Standard_Boolean has" << varName->ToCString() << ",\n" << space;
+      else if ( mode == 1 ) os << "const Standard_Boolean has" << varName->ToCString() << ",\n" << space;
+      else if ( mode == 2 || mode == 4) os << "has" << varName->ToCString() << ",\n" << space;
     }
     
     // write field
-    if ( mode ==0 ) {
-      os << "a" << varName->ToCString() << ": " << field->Type()->CDLName()->ToCString();
+    if ( mode == 0 ) {
+      if (field->Type()->IsHandle())
+        os << "const Handle(" << field->Type()->CPPName()->ToCString() << ")& the" << varName->ToCString();
+      else
+        os << "const " << field->Type()->CPPName()->ToCString() << " the" << varName->ToCString();
     }
-    else if ( mode ==1 ) {
-      os << "const " << ( field->Type()->IsHandle() ? "Handle(" : "" ) <<
-           field->Type()->CPPName()->ToCString() << ( field->Type()->IsHandle() ? ")" : "" ) <<
-           ( field->Type()->IsSimple() ? " a" : " &a" ) << varName->ToCString();
+    else if (mode == 1) {
+      os << "const " << (field->Type()->IsHandle() ? "Handle(" : "") <<
+        field->Type()->CPPName()->ToCString() << (field->Type()->IsHandle() ? ")" : "") <<
+        (field->Type()->IsSimple() ? " the" : "& the") << varName->ToCString();
     }
-    else if ( mode ==2 ) {
+    else if ( mode == 2 ) {
+      os << "the" << varName->ToCString();
+    }
+    else if (mode == 4) {
       os << "a" << varName->ToCString();
     }
     else {
-      if ( field->IsOptional() ) {
-       os << "def" << field->Name()->ToCString() << " = has" << varName->ToCString() << ";" << std::endl;
-       os << "  if (def" << field->Name()->ToCString() << ") {\n    ";
+      if (field->IsOptional()) {
+        os << "def" << field->Name()->ToCString() << " = has" << varName->ToCString() << ";" << std::endl;
+        os << "  if (def" << field->Name()->ToCString() << ") {\n    ";
+      }
+      os << "my" << field->Name()->ToCString() << " = the" << varName->ToCString() << ";";
+      if (field->IsOptional()) {
+        os << "\n  }\n  else my" << field->Name()->ToCString();
+        if (field->Type()->IsHandle())
+          os << ".Nullify();";
+        else if (field->Type()->IsStandard())
+          os << " = 0;";
+        else
+          os << " = " << field->Type()->CPPName()->ToCString() << "();";
       }
-      os << "the" << field->Name()->ToCString() << " = a" << varName->ToCString() << ";";
-      if ( field->IsOptional() ) 
-       if ( field->Type()->IsHandle() ) os << "\n  }\n  else the" << field->Name()->ToCString() << ".Nullify();";
-       else os << "\n  }\n  else the" << field->Name()->ToCString() << " = 0;";
     }
     if ( sh >0 ) sh = -sh;
   }
index 58ccd94f21f40891091837401899f343cab76436..34d1be8db6dddef8825189d141643823a7382b66 100644 (file)
@@ -72,11 +72,11 @@ private:
 
   typedef NCollection_DataMap<TCollection_AsciiString,Standard_Integer,TCollection_AsciiString> DataMapOfStringInteger;
   
-  //! Create CDL/CXX files from item
+  //! Create HXX/CXX files from item
   Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const;
   
-  //! Writes uses section of CDL
-  Standard_EXPORT   Standard_Boolean WriteUses (Standard_OStream& os, const Standard_Boolean start, DataMapOfStringInteger& dict)  const;
+  //! Writes includes section of HXX
+  Standard_EXPORT   Standard_Boolean WriteIncludes (Standard_OStream& os, DataMapOfStringInteger& dict)  const;
   
   //! Writes #include declarations for RW class
   Standard_EXPORT   void WriteRWInclude (Standard_OStream& os, DataMapOfStringInteger& dict)  const;
@@ -92,10 +92,11 @@ private:
   
   //! Writes arguments and code for method Init()
   //! Mode identifyes what code is being written:
-  //! 0 - CDL declaration
+  //! 0 - HXX declaration
   //! 1 - CXX declaration
   //! 2 - call (argument list)
   //! 3 - implementation
+  //! 4 - call (argument list for RW)
   Standard_EXPORT   Standard_Integer MakeInit (Standard_OStream& os, const Standard_Integer shift, const Standard_Integer own, const Standard_Integer mode)  const;
 
   Handle(TColStd_HSequenceOfHAsciiString) mySupers;
index f82d4e794291c9954cc7df71df723967b4169fb7..76d64c21a88a029eeddeee30ad611d9989eeb95a 100644 (file)
@@ -59,18 +59,29 @@ Standard_Boolean Express_Enum::GenerateClass () const
   OSD_Directory dir ( path );
   dir.Build ( prot );
   pack += "/";
-  pack += GetPackageName()->String();
+  pack += CPPName()->String();
   
-  // Open CDL file 
-  std::ofstream os ( pack.Cat ( ".cdl" ).ToCString(), std::ios::out | std::ios::ate );
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString(), std::ios::out | std::ios::ate );
 
-  os << std::endl << "    enumeration " << Name()->ToCString() << " is " << std::endl;
+  // write header
+  Express::WriteFileStamp(os);
+
+  // write defines
+  os << "#ifndef _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
+
+  os << std::endl << "enum " << CPPName()->ToCString() << std::endl;
+  os << "{" << std::endl;
   Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(Name());
-  for ( Standard_Integer i=1; i <= myNames->Length(); i++ ) {
-    if ( i >1 ) os << "," << std::endl;
-    os << "    " << prefix->ToCString()<<myNames->Value(i)->ToCString();
+  for ( Standard_Integer i = 1; i <= myNames->Length(); i++ ) {
+    if ( i > 1 ) os << "," << std::endl;
+    os << "  " <<  GetPackageName()->ToCString() << "_" << prefix->ToCString()
+       << myNames->Value(i)->ToCString();
   }
-  os << std::endl << "    end;" << std::endl;
+
+  os << std::endl << "};" << std::endl;
+  os << "#endif // _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
   os.close();
   
   return Standard_False;
index 68fd0763e4605acb716f7c96b656ded299a4f087..8663e3c23f947b41da66e1673acfa8f891f8c280 100644 (file)
@@ -34,7 +34,7 @@ public:
   //! Returns names of enumeration variants
   Standard_EXPORT  const  Handle(TColStd_HSequenceOfHAsciiString)& Names()  const;
   
-  //! Create CDL/CXX files from item
+  //! Create HXX/CXX files from item
   Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const;
 
 
index 682706999eca7b536c59bdc2004e0c1bc3778804..4595d170d29a3a9b0f2987faffdc1f48c20e0ca3 100644 (file)
@@ -36,13 +36,3 @@ Handle(TCollection_HAsciiString) Express_Integer::CPPName () const
 {
   return new TCollection_HAsciiString ( "Standard_Integer" );
 }
-
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Integer::CDLName () const
-{
-  return new TCollection_HAsciiString ( "Integer" );
-}
index 1637a4a95d53c2b1891f2cf906d22d9de175e54d..1d03027f790a5a2371f02e35839edc4b631fcca6 100644 (file)
@@ -33,9 +33,6 @@ public:
   //! Returns "Standard_Integer"
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns "Integer"
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-
 
 
 
index 55dd571d8199b632e7695ffae7b6263396b052e1..b2e9aed53fd4f44de1bee20be2d996c47c63ab70 100644 (file)
@@ -16,7 +16,9 @@
 #include <Express_Item.hxx>
 #include <TCollection_HAsciiString.hxx>
 
-IMPLEMENT_STANDARD_RTTIEXT(Express_Item,Standard_Transient)
+IMPLEMENT_STANDARD_RTTIEXT(Express_Item, Standard_Transient)
+
+Standard_Integer Express_Item::myIndex = -1;
 
 //=======================================================================
 //function : Express_Item
@@ -70,18 +72,6 @@ Handle(TCollection_HAsciiString) Express_Item::CPPName () const
   return name;
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Item::CDLName () const
-{
-  Handle(TCollection_HAsciiString) name = myName->Cat ( " from " );
-  name->AssignCat ( GetPackageName ( Standard_True ) );
-  return name;
-}
-
 //=======================================================================
 //function : SetPackageName
 //purpose  : 
@@ -251,3 +241,23 @@ Standard_Boolean Express_Item::Use (const Handle(TCollection_HAsciiString) &pack
   return myhasFillShared;
 }
 
+ //=======================================================================
+ //function : SetIndex
+ //purpose  : 
+ //=======================================================================
+
+ void Express_Item::SetIndex(const Standard_Integer theIndex)
+ {
+   myIndex = theIndex;
+ }
+
+ //=======================================================================
+ //function : Index
+ //purpose  : 
+ //=======================================================================
+
+ Standard_Integer Express_Item::Index()
+ {
+   return myIndex;
+ }
+
index 4c6c4807270adbe26adc19fddccf9f73cfda4b48..1248a9ccf539f09a5190dc29ac4906da8e2b2657 100644 (file)
@@ -25,23 +25,20 @@ class TCollection_HAsciiString;
 
 //! Base class for items of the schema. Stores a name of the class,
 //! package name and flag used to mark items for generation.
-//! Provides interface for writing generated class definitions to CDL
+//! Provides interface for writing generated class definitions to HXX
 //! and CXX files.
 class Express_Item : public Standard_Transient
 {
-
 public:
 
-  
+  static Standard_Integer myIndex;
+
   //! Returns item name
   Standard_EXPORT  const  Handle(TCollection_HAsciiString)& Name()  const;
   
   //! Returns (generated) name for the item in CXX-style (Package_Class)
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns (generated) name for the item in CDL-style (Class from Package)
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
   //! Returns package name
   //! If not defined, returns NULL if auto is False (default)
   //! or "StepStep" if auto is True
@@ -56,7 +53,7 @@ public:
   //! Change generation mark flag
   Standard_EXPORT   void SetMark (const Standard_Boolean mark) ;
   
-  //! General interface for creating CDL/CXX files from item
+  //! General interface for creating HXX/CXX files from item
   Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const = 0;
   
   //! Checks that item is marked for generation and if yes,
@@ -95,6 +92,12 @@ public:
   //! Get flag resposible for  presence of method FillShared in the class
   Standard_EXPORT   Standard_Boolean FillSharedFlag()  const;
 
+  //! Set start entity index
+  Standard_EXPORT static void SetIndex(const Standard_Integer theIndex);
+
+  //! Get current entity index
+  Standard_EXPORT static Standard_Integer Index();
+
 
 
 
@@ -132,5 +135,4 @@ private:
 
 
 
-
 #endif // _Express_Item_HeaderFile
index e80cdbfad517b3528946a691e0d532bce44e0b2b..4b1e0a286d7c3115a11172d1324633db62ad4d3d 100644 (file)
@@ -37,16 +37,6 @@ Handle(TCollection_HAsciiString) Express_Logical::CPPName () const
   return new TCollection_HAsciiString ( "StepData_Logical" );
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Logical::CDLName () const
-{
-  return new TCollection_HAsciiString ( "Logical from StepData" );
-}
-
 //=======================================================================
 //function : IsStandard
 //purpose  : 
index 983dbbe752e1f35f4e339d73c1d37d7a37e280c2..8cc9d6f4aaa86ad4b7396cb0a1d65acfd70214b9 100644 (file)
@@ -34,9 +34,6 @@ public:
   //! Returns "StepData_Logical"
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns "Logical from StepData"
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
   //! Return False
   Standard_EXPORT virtual   Standard_Boolean IsStandard()  const;
   
index 6b37f44a2b8dc0c47eadfbf869a946351cccd2ca..7c6c34503350f42a97d557cddcbba586f3535389 100644 (file)
@@ -81,16 +81,6 @@ Handle(TCollection_HAsciiString) Express_NamedType::CPPName () const
   return myItem->CPPName();
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_NamedType::CDLName () const
-{
-  return myItem->CDLName();
-}
-
 //=======================================================================
 //function : IsStandard
 //purpose  : 
index 87c9f71855859c0ffd5176fef04ad66060b88806..8ec8cb6bec67417579d73b9ad6984897e4975aa0 100644 (file)
@@ -49,9 +49,6 @@ public:
   //! Returns CPP-style name of the type
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns CDL-style name of the type
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
   //! Return True if type is defined in package Standard
   Standard_EXPORT virtual   Standard_Boolean IsStandard()  const;
   
index 255e40f12cd084964090ed38d683d48f72354860..7ee5c21d7089f71d850400bc46a468624b003aeb 100644 (file)
@@ -36,13 +36,3 @@ Handle(TCollection_HAsciiString) Express_Real::CPPName () const
 {
   return new TCollection_HAsciiString ( "Standard_Real" );
 }
-
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_Real::CDLName () const
-{
-  return new TCollection_HAsciiString ( "Real" );
-}
index 21d1195e289bdb43121d5ebe768faf3e1dfc971a..ec2654d11c677b2c3e74f5bf7d7702e645e1ad4f 100644 (file)
@@ -33,9 +33,6 @@ public:
   //! Returns "Standard_Real"
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns "Real"
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-
 
 
 
index d5c8c13e9401caa6a461f9af19bf85e9e0f58f10..94551f26246a9d901eb16159ac6de819a3eeed4c 100644 (file)
@@ -26,7 +26,7 @@ class Express_Type;
 
 
 //! Represents a schema as a list of items and provides general
-//! tools for generating CDL/CXX files (including dictionary of
+//! tools for generating HXX/CXX files (including dictionary of
 //! item names)
 class Express_Schema : public Standard_Transient
 {
index 66f63e04758490717fff06567b73bb1783441a70..2d8cdd4d317936e72d5c6b5e6ca6750f029b42a9 100644 (file)
@@ -22,6 +22,7 @@
 #include <TCollection_HAsciiString.hxx>
 #include <TColStd_HSequenceOfHAsciiString.hxx>
 
+#include <Express_ComplexType.hxx>
 #include <Express_Enum.hxx>
 #include <Express_Entity.hxx>
 #include <Express_Alias.hxx>
@@ -71,19 +72,18 @@ const Handle(Express_HSequenceOfItem) &Express_Select::Items () const
 Standard_Boolean Express_Select::GenerateClass () const
 {
   Handle(TCollection_HAsciiString) CPPname = CPPName();
-  Handle(TCollection_HAsciiString) CDLname = CDLName();
   
   Handle(TColStd_HSequenceOfInteger) seqMember = new TColStd_HSequenceOfInteger;
   Handle(TColStd_HSequenceOfInteger) seqEntities = new TColStd_HSequenceOfInteger;
   for ( Standard_Integer i=1; i <= myItems->Length(); i++ ) {
     Handle(Express_Item) item = myItems->Value(i);
-    if (item->IsKind(STANDARD_TYPE(Express_Entity)) || item->IsKind(STANDARD_TYPE(Express_Select))) 
+    if (item->IsKind(STANDARD_TYPE(Express_Entity)) || item->IsKind(STANDARD_TYPE(Express_Select))
+      || item->IsKind(STANDARD_TYPE(Express_Alias)) || item->IsKind(STANDARD_TYPE(Express_ComplexType)))
        seqEntities->Append(i);
     else seqMember->Append(i);
     
   }
-  //if(!seqEntities->IsEmpty())
-    std::cout << "Generating SELECT " << CPPname->ToCString() << std::endl;
+  std::cout << "Generating SELECT " << CPPname->ToCString() << std::endl;
   if(!seqMember->IsEmpty()) {
     std::cout << "Generating SELECTMember " << CPPname->ToCString() << "Member"<< std::endl;
     GenerateSelectMember(seqMember);
@@ -98,96 +98,112 @@ Standard_Boolean Express_Select::GenerateClass () const
   pack += CPPname->String();
   
   //===============================
-  // Step 1: generating CDL
+  // Step 1: generating HXX
   
-  // Open CDL file 
-  std::ofstream os ( pack.Cat ( ".cdl" ).ToCString() );
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_True );
-
-  // write start of declaration (inheritance)
-  os << "class " << CDLname->ToCString() << std::endl << "inherits SelectType from StepData";
-  os << std::endl << std::endl;
+  Express::WriteFileStamp ( os );
   
-  os << "    ---Purpose: Representation of STEP SELECT type " << Name()->ToCString() << std::endl;
+  // write start define
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
   os << std::endl;
-  
-  // write "uses" section (also creates all used types)
-  os << "uses" << std::endl;
-  os << "    SelectMember from StepData";
-  Standard_Integer jj =1;
-  for (Standard_Integer i=1; i <= myItems->Length(); i++ ) {
+
+  // write common includes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_DefineAlloc.hxx>" << std::endl;
+  os << "#include <Standard_Handle.hxx>" << std::endl;
+  os << "#include <StepData_SelectType.hxx>" << std::endl;
+  os << "#include <Standard_Integer.hxx>" << std::endl;
+  os << std::endl;
+
+  os << "class Standard_Transient;" << std::endl;
+  if (!seqMember->IsEmpty())
+    os << "class StepData_SelectMember;" << std::endl;
+
+  Standard_Integer jj = 1;
+  for (Standard_Integer i = 1; i <= myItems->Length(); i++) {
     Handle(Express_Item) item = myItems->Value(i);
-    item->Use ( GetPackageName() );
-    if(item->IsKind(STANDARD_TYPE(Express_Alias))) {
-      Handle(Express_Type) type = Handle(Express_Alias)::DownCast(item )->Type();
+    item->Use(GetPackageName());
+    if (item->IsKind(STANDARD_TYPE(Express_Alias))) {
+      Handle(Express_Type) type = Handle(Express_Alias)::DownCast(item)->Type();
       TCollection_AsciiString ats = type->CPPName()->String();
-      if(type->IsStandard()) //(STANDARD_TYPE(Express_PredefinedType)))
-       continue;
-     }
-    os << "," << std::endl;
-    os << "    ";
-    os << item->CDLName()->ToCString();
+      if (type->IsStandard()) //(STANDARD_TYPE(Express_PredefinedType)))
+        continue;
+    }
+    os << "class " << item->CPPName()->ToCString() << ";" << std::endl;
     jj++;
   }
-  os << std::endl << std::endl;
-    
-  // write "is" section
-  os << "is" << std::endl;
-  os << "    Create returns " << CDLname->ToCString() << ";" << std::endl;
-  os << "      ---Purpose: Empty constructor" << std::endl;
   os << std::endl;
-  os << "    CaseNum (me; ent: Transient) returns Integer;" << std::endl;
-  os << "      ---Purpose: Recognizes a kind of " << Name()->ToCString() << " select type" << std::endl;
-  Standard_Integer j =1;
-  if(seqEntities->Length()) {
-    for( j =1; j <= seqEntities->Length(); j++) {
-      Standard_Integer ind = seqEntities->Value(j);
-      os << "  --          " << j << " -> " << myNames->Value(ind)->ToCString() << std::endl;
-    }
-    
-    os << "    --          0 else" << std::endl << std::endl;
-  }
-  else os << " --          return 0 " << std::endl << std::endl;
+
+  // class declaration
+  os << "//! Representation of STEP SELECT type " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public StepData_SelectType" << std::endl;
+  os << "{" << std::endl;
+  os << std::endl;
+  os << "public:" << std::endl;
+  os << std::endl;
+  os << "  DEFINE_STANDARD_ALLOC" << std::endl;
+  os << std::endl;
+
+  // default constructor
+  os << "  //! Empty constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
+  os << std::endl;
   
+  // write common methods section
+  os << "  //! Recognizes a kind of " << Name()->ToCString() << " select type" << std::endl;
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++) {
+    Standard_Integer ind = seqEntities->Value(i);
+    os << "  //! -- " << i << " -> " << myNames->Value(ind)->ToCString() << std::endl;
+  }
+  os << "  Standard_EXPORT Standard_Integer CaseNum (const Handle(Standard_Transient)& ent) const Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+
   if(!seqMember->IsEmpty()) {
-    os << "    CaseMem (me; ent: SelectMember from StepData) returns Integer is redefined;" << std::endl;
-    os << "    ---Purpose: Recognizes a items of select member " << Name()->ToCString()<<"Member" << std::endl;
-    for (Standard_Integer i=1; i <= seqMember->Length(); i++ ) {
+    os << "  //! Recognizes items of select member " << Name()->ToCString() << "Member" << std::endl;
+    for (Standard_Integer i = 1; i <= seqMember->Length(); i++) {
       Standard_Integer ind = seqMember->Value(i);
-      os << "  --          " << i << " -> " << myNames->Value(ind)->ToCString() << std::endl;
+      os << "  //! -- " << i << " -> " << myNames->Value(ind)->ToCString() << std::endl;
     }
-    os << "    --          0 else" << std::endl << std::endl;
+    os << "  //! -- 0 else" << std::endl;
+    os << "  Standard_EXPORT virtual Standard_Integer CaseMem (const Handle(StepData_SelectMember)& ent) const Standard_OVERRIDE;" << std::endl;
     os << std::endl;
-    os << "     NewMember(me) returns SelectMember from StepData is redefined;" << std::endl;
-    os << "    ---Purpose: Returns a new select member the type " <<Name()->ToCString()<<"Member" << std::endl;
+
+    os << " //! Returns a new select member the type " << Name()->ToCString() << "Member" << std::endl;
+    os << "  Standard_EXPORT virtual Handle(StepData_SelectMember) NewMember() const Standard_OVERRIDE;" << std::endl;
     os << std::endl;
   }
-  //write method get for entities
-  for (Standard_Integer i=1; i <= seqEntities->Length(); i++ ) {
+
+  // write methods get for entities
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++) {
     Standard_Integer ind = seqEntities->Value(i);
     Handle(Express_Item) item = myItems->Value(ind);
     Handle(TCollection_HAsciiString) name = item->Name();
-    os << "    " << name->ToCString() << " (me) returns " << item->CDLName()->ToCString() << ";" << std::endl;
-    os << "    ---Purpose: Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  //! Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  Standard_EXPORT Handle(" << item->CPPName()->ToCString() << ") "  << name->ToCString() << "() const;" << std::endl;
     os << std::endl;
   }
-  //writes method set and get for enum , integer, real and string.
+
+  // writes method set and get for enum , integer, real and string.
   for (Standard_Integer i = 1; i <= seqMember->Length(); i++) {
     Standard_Integer ind = seqMember->Value(i);
     Handle(Express_Item) item = myItems->Value(ind);
     Handle(TCollection_HAsciiString) name = item->Name();
-    os << "    Set" << name->ToCString() << "(me: in out; aVal :" << item->CDLName()->ToCString()<<");"<< std::endl;
-    os << "    ---Purpose: Set Value for " << name->ToCString() << std::endl;
+    os << "  //! Set Value for " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT void Set" << name->ToCString()
+       << " (const " << item->CPPName()->ToCString() << " theVal);"<< std::endl;
     os << std::endl;
-    os << "    " << name->ToCString() << " (me) returns " << item->CDLName()->ToCString() << ";" << std::endl;
-    os << "    ---Purpose: Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  //! Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  " << item->CPPName()->ToCString() << " " << name->ToCString() << "() const;" << std::endl;
     os << std::endl;
   }
   
   // write end
-  os << "end " << Name()->ToCString() << ";" << std::endl;
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
   os.close();
   
   //===============================
@@ -197,15 +213,20 @@ Standard_Boolean Express_Select::GenerateClass () const
   os.open ( pack.Cat ( ".cxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_False );
+  Express::WriteFileStamp ( os );
 
   // write include section
-  os << "#include <" << CPPname->ToCString() << ".ixx>" << std::endl;
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
   if(!seqMember->IsEmpty()) {
-    os << "#include <"<<CPPName()->ToCString()<<"Member.hxx>"<< std::endl;
+    os << "#include <" << CPPName()->ToCString() << "Member.hxx>"<< std::endl;
     os << "#include <TCollection_HAsciiString.hxx>"<< std::endl;
-    
   }
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++)  {
+    Standard_Integer ind = seqEntities->Value(i);
+    os << "#include <" <<
+      myItems->Value(ind)->CPPName()->ToCString() << ".hxx>" << std::endl;
+  }
+
   // write constructor
   Express::WriteMethodStamp ( os, CPPname );
   os << CPPname->ToCString() << "::" << CPPname->ToCString() << " ()" << std::endl;
@@ -226,8 +247,8 @@ Standard_Boolean Express_Select::GenerateClass () const
     os << "  return 0;\n}" << std::endl;
   }
   else os << "  return 0;\n}" << std::endl;
+
   if(!seqMember->IsEmpty()) { //gka for AP209
-    
     //write CaseMem method
     Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "CaseMem" ) );
     os<<"Standard_Integer "<<CPPname->ToCString()<<"::CaseMem (const Handle(StepData_SelectMember)& ent) const"<< std::endl;
@@ -236,7 +257,7 @@ Standard_Boolean Express_Select::GenerateClass () const
     //os<<" Handle("<< CPPName()->ToCString()<<"Member sm = Handle("<<CPPName()->ToCString()<<"Member)::DownCast(ent);"<< std::endl; 
     //os<<" if(sm.IsNull()) return 0;"<< std::endl;
     //os<<" Handle(TCollection_HAsciiString) name;"<< std::endl;
-    for( j = 1; j<= seqMember->Length(); j++) {
+    for( int j = 1; j<= seqMember->Length(); j++) {
       Standard_Integer ind = seqMember->Value(j);
       //os<<"  name = new TCollection_HAsciiString(\""<<myNames->Value(ind)->ToCString()<<"\");"<< std::endl;
       if(j ==1)
@@ -375,10 +396,6 @@ Standard_Boolean Express_Select::GenerateClass () const
   Handle(TCollection_HAsciiString) MemberName = new TCollection_HAsciiString;
   MemberName->AssignCat(Name());
   MemberName->AssignCat("Member");
-  Handle(TCollection_HAsciiString) CDLname = new TCollection_HAsciiString;
-  CDLname->AssignCat(MemberName);
-  CDLname->AssignCat(" from ");
-  CDLname-> AssignCat(GetPackageName());
    // create a package directory (if not yet exist)
   OSD_Protection prot ( OSD_RX, OSD_RWX, OSD_RX, OSD_RX );
   TCollection_AsciiString pack = GetPackageName()->String();
@@ -387,44 +404,59 @@ Standard_Boolean Express_Select::GenerateClass () const
   dir.Build ( prot );
   pack += "/";
   pack += CPPname->String();
-  ///pack += "Member";
-  // Step 1: generating CDL
+  // Step 1: generating HXX
   
-  // Open CDL file 
-  std::ofstream os ( pack.Cat ( ".cdl" ).ToCString() );
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_True );
-  
-  // write start of declaration (inheritance)
-  os << "class " << CDLname->ToCString() << std::endl << "inherits SelectNamed from StepData";
-  os << std::endl << std::endl;
-  
-  os << "    ---Purpose: Representation of member for  STEP SELECT type " << Name()->ToCString() << std::endl;
+  Express::WriteFileStamp ( os );
+
+  // write start define
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << std::endl;
+
+  // includes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_Type.hxx>" << std::endl;
+  os << "#include <Standard_Boolean.hxx>" << std::endl;
+  os << "#include <Standard_CString.hxx>" << std::endl;
+  os << "#include <Standard_Integer.hxx>" << std::endl;
+  os << "#include <StepData_SelectNamed.hxx>" << std::endl;
   os << std::endl;
+  os << "DEFINE_STANDARD_HANDLE(" << CPPname->ToCString() << ", StepData_SelectNamed)" << std::endl;
+  os << std::endl;
+
+  // write start of declaration (inheritance)
+  os << "  //! Representation of member for STEP SELECT type " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public StepData_SelectNamed" << std::endl;
+  os << "{" << std::endl;
+  os << "public:" << std::endl;
   
-   // write "is" section
-  os << "is" << std::endl;
-  os << "    Create returns " << CDLname->ToCString() << ";" << std::endl;
-  os << "      ---Purpose: Empty constructor" << std::endl;
+   // write methods
+  os << "  //! Empty constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
   os << std::endl;
   
-  os << "    HasName (me) returns Boolean  is redefined;"<< std::endl;
-  os << "      ---Purpose: Returns True if has name"<< std::endl;
+  os << "  //! Returns True if has name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean HasName() const Standard_OVERRIDE;" << std::endl;
   os << std::endl;
-  os << "    Name (me) returns CString  is redefined;"<< std::endl;
-  os << "      ---Purpose: Returns set name "<< std::endl;
+  os << "  //! Returns set name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_CString Name() const Standard_OVERRIDE;" << std::endl;
   os << std::endl;
-  os << "    SetName (me : mutable; name : CString)  returns Boolean  is redefined;"<< std::endl;
-  os << "      ---Purpose: Set name "<< std::endl;
+  os << "  //! Set name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean SetName(const Standard_CString name) Standard_OVERRIDE;" << std::endl;
   os << std::endl;
-  os << "    Matches (me; name : CString) returns Boolean  is redefined;"<< std::endl;
-  os << "      ---Purpose : Tells if the name of a SelectMember matches a given one;"<< std::endl;
+  os << "  //! Tells if the name of a SelectMember matches a given one;" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean Matches(const Standard_CString name) const Standard_OVERRIDE;" << std::endl;
   os << std::endl;
+
   //write fields
-  os<<"fields"<< std::endl<< std::endl;
-  os << "    mycase : Integer;"<< std::endl<< std::endl;
+  os <<"private:"<< std::endl;
+  os << "  Standard_Integer myCase;"<< std::endl<< std::endl;
   // write end
-  os << "end " << MemberName->ToCString()<< ";" << std::endl;
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
   os.close();
 
   //===============================
@@ -433,21 +465,21 @@ Standard_Boolean Express_Select::GenerateClass () const
   os.open ( pack.Cat ( ".cxx" ).ToCString() );
 
   // write header
-  Express::WriteFileStamp ( os, CPPname, Standard_False );
+  Express::WriteFileStamp ( os );
 
   // write include section
-  os << "#include <" << CPPname->ToCString() << ".ixx>" << std::endl;
-   os << "#include <TCollection_HAsciiString.hxx>"<< std::endl;
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  os << "#include <TCollection_HAsciiString.hxx>"<< std::endl;
   // write constructor
   Express::WriteMethodStamp ( os, CPPname );
-  os << CPPname->ToCString() << "::" << CPPname->ToCString() << " () : mycase(0) " << std::endl;
+  os << CPPname->ToCString() << "::" << CPPname->ToCString() << " () : myCase(0) " << std::endl;
   os << "{" << std::endl << "}" << std::endl;
   
   //write method HasName
   Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("HasName") );
   os<<"Standard_Boolean "<<CPPname->ToCString()<<"::HasName() const"<< std::endl;
   os << "{" << std::endl;
-  os<< " return mycase >0;"<< std::endl;
+  os<< " return myCase > 0;"<< std::endl;
   os<< "}" << std::endl;
   
   Standard_Boolean hasEnum = Standard_False;
@@ -455,19 +487,19 @@ Standard_Boolean Express_Select::GenerateClass () const
   Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("Name") );
   os<<"Standard_CString "<<CPPname->ToCString()<<"::Name() const"<< std::endl;
   os << "{" << std::endl;
-  os << "  Handle(TCollection_HAsciiString) aname = new TCollection_HAsciiString;"<< std::endl;
-  os << "  switch(mycase)  {"<< std::endl;
+  os << "  Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString;"<< std::endl;
+  os << "  switch(myCase)  {"<< std::endl;
   Standard_Integer i = 1;
   for( i = 1; i <= seqMember->Length(); i++) {
     Standard_Integer ind = seqMember->Value(i);
     Handle(Express_Item) item = myItems->Value(ind);
     if(item->IsKind(STANDARD_TYPE(Express_Enum)))
       hasEnum = Standard_True;
-    os << "    case "<<i<<"  : aname->AssignCat(\""<<myNames->Value(ind)->ToCString()<<"\"); break;"<< std::endl;
+    os << "    case "<<i<<"  : aName->AssignCat(\""<<myNames->Value(ind)->ToCString()<<"\"); break;"<< std::endl;
   }
   os << "    default : break;"<< std::endl;
   os<<"  }"<< std::endl;
-  os<<"  return aname->ToCString();"<< std::endl;
+  os<<"  return aName->ToCString();"<< std::endl;
   os<< "}" << std::endl;
   
   //write static method for compare name
@@ -478,7 +510,7 @@ Standard_Boolean Express_Select::GenerateClass () const
   else
     os<<")"<< std::endl;
   os << "{" << std::endl;
-  os << "  Standard_Integer thecase =0;"<< std::endl;
+  os << "  Standard_Integer thecase = 0;"<< std::endl;
   os << "  if (!name || name[0] == \'/0\') thecase = 0;"<< std::endl;
   for( i = 1; i <= seqMember->Length(); i++) {
     Standard_Integer ind = seqMember->Value(i);
@@ -504,14 +536,14 @@ Standard_Boolean Express_Select::GenerateClass () const
   os<<"Standard_Boolean "<<CPPname->ToCString()<<"::SetName(const Standard_CString name) "<< std::endl;
   os << "{" << std::endl;
   if(hasEnum) {
-    os << "  Standard_Integer numit =0;"<< std::endl;
-    os << "  mycase = CompareNames(name,numit);"<< std::endl;
+    os << "  Standard_Integer numit = 0;"<< std::endl;
+    os << "  myCase = CompareNames(name,numit);"<< std::endl;
   
-    os << "  if(numit) SetInteger(numit);"<< std::endl;
+    os << "  if (numit) SetInteger(numit);"<< std::endl;
   }
   else
-    os << "  mycase = CompareNames(name);"<< std::endl;
-  os << "  return (mycase >0);"<< std::endl;
+    os << "  myCase = CompareNames(name);"<< std::endl;
+  os << "  return (myCase >0);"<< std::endl;
   
   os<< "}" << std::endl;
   //write method Matches
@@ -519,12 +551,12 @@ Standard_Boolean Express_Select::GenerateClass () const
   os<<"Standard_Boolean "<<CPPname->ToCString()<<"::Matches(const Standard_CString name) const"<< std::endl;
   os << "{" << std::endl;
   if(hasEnum) {
-    os << "  Standard_Integer numit =0;"<< std::endl;
-    os<< " Standard_Integer thecase =CompareNames(name,numit);"<< std::endl;
+    os << "  Standard_Integer numit = 0;"<< std::endl;
+    os<< " Standard_Integer thecase = CompareNames(name,numit);"<< std::endl;
   }
   else
-    os<< " Standard_Integer thecase =CompareNames(name);"<< std::endl;
-  os << "  return (thecase >0);"<< std::endl;
+    os<< " Standard_Integer thecase = CompareNames(name);"<< std::endl;
+  os << "  return (thecase > 0);"<< std::endl;
   os << "}" << std::endl;
   return Standard_True;
 }
index f224359a89cd913e9a836818ca0ed2dffa9df941..708261c4b5af5b94d432a260d95d75cdf28924df 100644 (file)
@@ -41,7 +41,7 @@ public:
   //! Returns sequence of items corresponding to typenames
   Standard_EXPORT  const  Handle(Express_HSequenceOfItem)& Items()  const;
   
-  //! Create CDL/CXX files from item
+  //! Create HXX/CXX files from item
   Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const;
 
 
index e7c6447b0b2bb7f4b8c3f0e5fa588dfad9fc460a..0cf4d8c7f44d0246df3a8ad1816e915a45ab9c0f 100644 (file)
@@ -37,16 +37,6 @@ Handle(TCollection_HAsciiString) Express_String::CPPName () const
   return new TCollection_HAsciiString ( "TCollection_HAsciiString" );
 }
 
-//=======================================================================
-//function : CDLName
-//purpose  : 
-//=======================================================================
-
-Handle(TCollection_HAsciiString) Express_String::CDLName () const
-{
-  return new TCollection_HAsciiString ( "HAsciiString from TCollection" );
-}
-
 //=======================================================================
 //function : IsStandard
 //purpose  : 
index f3b4ccd3cc8397a612c4ebf53a497a9dc0940a2f..6351ef45e577f49a2c214c647d7831f65ae55e8d 100644 (file)
@@ -34,9 +34,6 @@ public:
   //! Returns "Handle(TCollection_HAsciiString)"
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
   
-  //! Returns "HAsciiString from TCollection"
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const;
-  
   //! Returns False
   Standard_EXPORT virtual   Standard_Boolean IsStandard()  const;
 
index 88c7b015bed426f4ba4ed0ebbe802636da4a92ee..2268d0e3862fbe8db6731173988318e7446a048b 100644 (file)
@@ -29,9 +29,6 @@ public:
   //! Returns CPP-style name of the type
   Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const = 0;
   
-  //! Returns CDL-style name of the type
-  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CDLName()  const = 0;
-  
   //! Return True if type is defined in package Standard (False by default)
   Standard_EXPORT virtual   Standard_Boolean IsStandard()  const;