(*
  $Id: mim_lf.exp,v 1.43 2009/09/10 20:08:09 darla Exp $
  ISO TC184/SC4/WG3 N2635 - ISO/TS 10303-403 AP203 configuration controlled 3d design of mechanical parts and assemblies - EXPRESS MIM Long form 
  Supersedes ISO TC184/SC4/WG3 N2464
*) 

SCHEMA Ap203_configuration_controlled_3d_design_of_mechanical_parts_and_assemblies_mim_lf;


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


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


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


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


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


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



END_CONSTANT;

TYPE absorbed_dose_measure = REAL;
END_TYPE;

TYPE acceleration_measure = REAL;
END_TYPE;

TYPE action_items = SELECT (
	action_directive,
	certification_item,
	characterized_object,
	classification_item,
	configuration_effectivity,
	document_reference_item,
	identification_item,
	organization,
	person_and_organization,
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	requirement_assigned_item);
END_TYPE;

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

TYPE action_request_item = SELECT (
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	property_definition,
	versioned_action_request);
END_TYPE;

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

TYPE amount_of_substance_measure = REAL;
END_TYPE;

TYPE angle_direction_reference_select = SELECT (
	direction,
	curve,
	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 annotation_plane_element = SELECT (
	draughting_callout,
	styled_item);
END_TYPE;

TYPE annotation_representation_select = SELECT (
	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 (
	text_literal,
	annotation_text,
	annotation_text_character,
	composite_text);
END_TYPE;

TYPE approval_item = SELECT (
	action,
	action_directive,
	alternate_product_relationship,
	applied_action_assignment,
	applied_usage_right,
	assembly_component_usage_substitute,
	certification,
	configuration_effectivity,
	configuration_item,
	contract,
	date,
	directed_action,
	document,
	document_file,
	effectivity,
	executed_action,
	general_property_relationship,
	group,
	group_relationship,
	information_usage_right,
	product,
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	representation,
	requirement_assignment,
	security_classification,
	shape_aspect_relationship,
	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 attribute_classification_item = SELECT (
	action_directive,
	action_method,
	action_property,
	action_property_representation,
	action_relationship,
	action_request_solution,
	action_request_status,
	alternate_product_relationship,
	applied_action_assignment,
	applied_action_request_assignment,
	applied_approval_assignment,
	applied_certification_assignment,
	applied_document_reference,
	applied_document_usage_constraint_assignment,
	applied_effectivity_assignment,
	applied_event_occurrence_assignment,
	applied_external_identification_assignment,
	applied_identification_assignment,
	applied_organization_assignment,
	applied_organizational_project_assignment,
	applied_person_and_organization_assignment,
	approval,
	approval_person_organization,
	approval_relationship,
	approval_status,
	certification,
	context_dependent_unit,
	contract,
	date_and_time_assignment,
	date_assignment,
	derived_unit,
	descriptive_representation_item,
	document_file,
	document_relationship,
	effectivity,
	event_occurrence_relationship,
	executed_action,
	general_property,
	general_property_relationship,
	group,
	group_relationship,
	information_right,
	information_usage_right,
	language,
	measure_representation_item,
	measure_with_unit,
	named_unit,
	organization_relationship,
	organizational_address,
	organizational_project_relationship,
	person_and_organization,
	person_and_organization_address,
	product,
	product_category,
	product_concept,
	product_concept_context,
	product_definition,
	product_definition_context,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	property_definition,
	property_definition_relationship,
	property_definition_representation,
	representation,
	representation_context,
	representation_item,
	security_classification,
	time_interval_relationship,
	uncertainty_measure_with_unit,
	usage_association,
	versioned_action_request);
END_TYPE;

TYPE attribute_language_item = SELECT (
	alternate_product_relationship,
	application_context,
	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,
	date_role,
	date_time_role,
	descriptive_representation_item,
	document_relationship,
	document_usage_role,
	effectivity,
	effectivity_relationship,
	event_occurrence,
	external_source,
	general_property,
	general_property_relationship,
	geometric_representation_item,
	geometric_tolerance,
	identification_role,
	information_right,
	information_usage_right,
	make_from_usage_option,
	mapped_item,
	multi_language_attribute_assignment,
	object_role,
	organization_relationship,
	organization_role,
	organizational_project,
	organizational_project_relationship,
	organizational_project_role,
	person_and_organization,
	person_and_organization_role,
	product,
	product_concept,
	product_concept_relationship,
	product_definition,
	product_definition_context,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	product_definition_shape,
	product_related_product_category,
	property_definition,
	representation,
	security_classification,
	security_classification_assignment,
	shape_aspect,
	shape_aspect_relationship,
	shape_representation,
	time_interval_role,
	topological_representation_item,
	uncertainty_measure_with_unit,
	uncertainty_qualifier,
	usage_association);
END_TYPE;

TYPE attribute_type = SELECT (
	label,
	text);
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_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRIMITIVE_2D' IN TYPEOF(SELF));
END_TYPE;

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

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

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

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

TYPE box_characteristic_select = SELECT (
	box_height,
	box_width,
	box_slant_angle,
	box_rotate_angle);
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_interection_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 (
	alternate_product_relationship,
	make_from_usage_option,
	product_definition_formation,
	product_definition_formation_relationship);
END_TYPE;

TYPE certified_item = SELECT (
	supplied_part_relationship);
END_TYPE;

TYPE change_request_item = SELECT (
	product_definition_formation);
END_TYPE;

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

TYPE character_style_select = SELECT (
	character_glyph_style_stroke,
	character_glyph_style_outline,
	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_object,
	characterized_product_definition,
	shape_definition);
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_relationship);
END_TYPE;

TYPE class_usage_effectivity_context_item = SELECT (
	product_definition);
END_TYPE;

TYPE classification_item = SELECT (
	action,
	action_directive,
	action_method,
	action_property,
	action_relationship,
	action_request_solution,
	action_request_status,
	address,
	alternate_product_relationship,
	applied_action_assignment,
	applied_action_request_assignment,
	applied_approval_assignment,
	applied_certification_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_identification_assignment,
	applied_organization_assignment,
	applied_organizational_project_assignment,
	applied_person_and_organization_assignment,
	applied_security_classification_assignment,
	approval,
	approval_person_organization,
	approval_relationship,
	approval_status,
	assembly_component_usage_substitute,
	calendar_date,
	certification,
	characterized_class,
	characterized_object,
	class,
	classified_item,
	configuration_item,
	context_dependent_unit,
	contract,
	conversion_based_unit,
	date_and_time,
	date_and_time_assignment,
	date_assignment,
	derived_unit,
	descriptive_representation_item,
	directed_action,
	document_file,
	document_relationship,
	effectivity,
	event_occurrence,
	executed_action,
	general_property,
	general_property_relationship,
	group,
	identification_assignment,
	information_right,
	information_usage_right,
	language,
	measure_representation_item,
	measure_with_unit,
	multi_language_attribute_assignment,
	named_unit,
	organization,
	organization_relationship,
	organizational_address,
	organizational_project,
	organizational_project_relationship,
	person,
	person_and_organization_address,
	product,
	product_concept,
	product_definition,
	product_definition_context,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	property_definition,
	property_definition_representation,
	representation,
	representation_context,
	representation_item,
	security_classification,
	uncertainty_measure_with_unit,
	usage_association,
	versioned_action_request);
END_TYPE;

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

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

TYPE conductance_measure = REAL;
END_TYPE;

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

TYPE configured_effectivity_context_item = SELECT (
	product_concept_feature_association);
END_TYPE;

TYPE configured_effectivity_item = SELECT (
	product_definition);
END_TYPE;

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

TYPE context_dependent_measure = REAL;
END_TYPE;

TYPE contract_item = SELECT (
	action_directive,
	alternate_product_relationship,
	directed_action,
	executed_action,
	information_usage_right,
	organization,
	person_and_organization,
	product,
	product_definition_formation);
END_TYPE;

TYPE contracted_item = SELECT (
	product_definition_formation);
END_TYPE;

TYPE count_measure = NUMBER;
END_TYPE;

TYPE csg_primitive = SELECT (
	sphere,
	block,
	right_angular_wedge,
	torus,
	right_circular_cone,
	right_circular_cylinder);
END_TYPE;

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

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

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

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

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

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

TYPE date_and_time_item = SELECT (
	action,
	action_directive,
	applied_action_assignment,
	applied_organization_assignment,
	applied_person_and_organization_assignment,
	applied_security_classification_assignment,
	approval_person_organization,
	certification,
	contract,
	directed_action,
	document,
	document_file,
	event_occurrence,
	executed_action,
	information_usage_right,
	organizational_project,
	product_definition,
	product_definition_formation,
	product_definition_relationship,
	rule_action,
	security_classification,
	versioned_action_request);
END_TYPE;

TYPE date_item = SELECT (
	action,
	action_directive,
	applied_action_assignment,
	applied_organization_assignment,
	applied_person_and_organization_assignment,
	applied_security_classification_assignment,
	approval_person_organization,
	certification,
	contract,
	directed_action,
	document,
	document_file,
	event_occurrence,
	executed_action,
	information_usage_right,
	organizational_project,
	product_definition,
	product_definition_formation,
	product_definition_relationship,
	security_classification,
	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 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_symbol_select = SELECT (
	pre_defined_symbol,
	externally_defined_symbol);
END_TYPE;

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

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

TYPE descriptive_measure = STRING;
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 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_method,
	applied_external_identification_assignment,
	assembly_component_usage,
	characterized_class,
	characterized_object,
	configuration_item,
	descriptive_representation_item,
	dimensional_size,
	executed_action,
	externally_defined_dimension_definition,
	externally_defined_item,
	group,
	group_relationship,
	information_right,
	information_usage_right,
	material_designation,
	measure_representation_item,
	product,
	product_category,
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	property_definition,
	representation,
	representation_item,
	rule_set,
	shape_aspect,
	shape_aspect_relationship,
	usage_association,
	versioned_action_request);
END_TYPE;

TYPE dose_equivalent_measure = REAL;
END_TYPE;

TYPE draughting_callout_element = SELECT (
	annotation_text_occurrence,
	annotation_symbol_occurrence,
	annotation_curve_occurrence);
END_TYPE;

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

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

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

TYPE effectivity_item = SELECT (
	assembly_component_usage_substitute,
	product,
	product_definition,
	product_definition_formation,
	product_definition_relationship,
	product_definition_substitute);
END_TYPE;

TYPE electric_charge_measure = REAL;
END_TYPE;

TYPE electric_current_measure = REAL;
END_TYPE;

TYPE electric_potential_measure = REAL;
END_TYPE;

TYPE energy_measure = REAL;
END_TYPE;

TYPE event_occurrence_item = SELECT (
	organizational_project);
END_TYPE;

TYPE external_identification_item = SELECT (
	action_relationship,
	action_request_status,
	applied_organization_assignment,
	applied_person_and_organization_assignment,
	approval,
	approval_status,
	date_and_time_assignment,
	date_assignment,
	document_file,
	external_source,
	externally_defined_class,
	externally_defined_context_dependent_unit,
	externally_defined_conversion_based_unit,
	externally_defined_general_property,
	externally_defined_picture_representation_item,
	externally_defined_representation_item,
	organizational_address,
	product_definition,
	security_classification,
	trimmed_curve,
	versioned_action_request);
END_TYPE;

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

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

TYPE font_select = SELECT (
	pre_defined_text_font,
	externally_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 generalized_surface_select = SELECT (
	surface,
	face_surface,
	surfaced_open_shell);
END_TYPE;

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

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

TYPE groupable_item = SELECT (
	geometric_representation_item,
	group_relationship,
	mapped_item,
	package_product_concept_feature,
	product_concept_feature,
	product_definition,
	product_definition_formation,
	property_definition_representation,
	representation,
	representation_item,
	representation_relationship_with_transformation,
	shape_aspect,
	shape_aspect_relationship,
	shape_representation_relationship,
	styled_item,
	topological_representation_item);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,
	product_category,
	property_definition,
	shape_aspect,
	shape_aspect_relationship,
	application_context,
	group,
	organizational_project,
	representation);
END_TYPE;

TYPE identification_item = SELECT (
	approval_status,
	characterized_class,
	class,
	configuration_item,
	contract,
	dimensional_size,
	document_file,
	general_property,
	group,
	group_relationship,
	information_right,
	information_usage_right,
	material_designation,
	organization,
	person_and_organization,
	product,
	product_category,
	product_class,
	product_concept,
	product_concept_feature,
	product_definition,
	product_definition_formation,
	product_identification,
	representation,
	rule_set,
	security_classification,
	security_classification_level,
	shape_aspect_relationship,
	shape_representation,
	usage_association);
END_TYPE;

TYPE identifier = STRING;
END_TYPE;

TYPE illuminance_measure = REAL;
END_TYPE;

TYPE inductance_measure = REAL;
END_TYPE;

TYPE instance_usage_context_select = SELECT (
	product_definition_relationship,
	product_definition_usage);
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;
WHERE
	wr1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONFIGURATION_EFFECTIVITY' IN TYPEOF(SELF));
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 limit_condition = ENUMERATION OF (
	maximum_material_condition,
	least_material_condition,
	regardless_of_feature_size );
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 luminous_flux_measure = REAL;
END_TYPE;

TYPE luminous_intensity_measure = REAL;
END_TYPE;

TYPE magnetic_flux_density_measure = REAL;
END_TYPE;

TYPE magnetic_flux_measure = REAL;
END_TYPE;

TYPE 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 measure_value = SELECT (
	absorbed_dose_measure,
	dose_equivalent_measure,
	radioactivity_measure,
	acceleration_measure,
	amount_of_substance_measure,
	area_measure,
	celsius_temperature_measure,
	context_dependent_measure,
	count_measure,
	descriptive_measure,
	capacitance_measure,
	electric_charge_measure,
	conductance_measure,
	electric_current_measure,
	electric_potential_measure,
	energy_measure,
	magnetic_flux_density_measure,
	force_measure,
	frequency_measure,
	illuminance_measure,
	inductance_measure,
	length_measure,
	luminous_flux_measure,
	luminous_intensity_measure,
	magnetic_flux_measure,
	mass_measure,
	numeric_measure,
	non_negative_length_measure,
	parameter_value,
	plane_angle_measure,
	positive_length_measure,
	positive_plane_angle_measure,
	positive_ratio_measure,
	power_measure,
	pressure_measure,
	ratio_measure,
	resistance_measure,
	solid_angle_measure,
	thermodynamic_temperature_measure,
	time_measure,
	velocity_measure,
	volume_measure);
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 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 (
	alternate_product_relationship,
	application_context,
	applied_certification_assignment,
	applied_document_reference,
	applied_document_usage_constraint_assignment,
	applied_external_identification_assignment,
	applied_identification_assignment,
	applied_organizational_project_assignment,
	approval,
	approval_relationship,
	approval_status,
	assembly_component_usage_substitute,
	attribute_value_assignment,
	certification,
	certification_type,
	colour,
	configuration_design,
	configuration_item,
	contract,
	date_role,
	date_time_role,
	descriptive_representation_item,
	document_relationship,
	document_usage_role,
	effectivity,
	effectivity_relationship,
	event_occurrence,
	external_source,
	general_property,
	general_property_relationship,
	geometric_representation_item,
	geometric_tolerance,
	identification_role,
	information_right,
	information_usage_right,
	make_from_usage_option,
	mapped_item,
	object_role,
	organization_relationship,
	organization_role,
	organizational_project,
	organizational_project_relationship,
	organizational_project_role,
	person_and_organization,
	person_and_organization_role,
	product,
	product_concept,
	product_concept_relationship,
	product_definition,
	product_definition_context,
	product_definition_formation,
	product_definition_formation_relationship,
	product_definition_relationship,
	product_definition_shape,
	product_related_product_category,
	property_definition,
	representation,
	representation_relationship,
	security_classification,
	security_classification_assignment,
	shape_aspect,
	shape_aspect_relationship,
	shape_representation,
	time_interval_role,
	topological_representation_item,
	uncertainty_measure_with_unit,
	usage_association);
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 (
	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 nonnegative_integer = INTEGER;
WHERE
	nonnegativity : SELF >= 0;
END_TYPE;

TYPE null_style = ENUMERATION OF (
	null );
END_TYPE;

TYPE numeric_measure = NUMBER;
END_TYPE;

TYPE organization_item = SELECT (
	action,
	action_directive,
	alternate_product_relationship,
	applied_action_assignment,
	applied_classification_assignment,
	applied_identification_assignment,
	applied_security_classification_assignment,
	approval,
	assembly_component_usage_substitute,
	certification,
	class,
	configuration_item,
	contract,
	document_file,
	executed_action,
	general_property,
	information_usage_right,
	organizational_project,
	product,
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	property_definition,
	rule_action,
	security_classification,
	shape_representation,
	versioned_action_request);
END_TYPE;

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

TYPE parameter_value = REAL;
END_TYPE;

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

TYPE person_and_organization_item = SELECT (
	action,
	action_directive,
	alternate_product_relationship,
	applied_action_assignment,
	applied_classification_assignment,
	applied_identification_assignment,
	applied_security_classification_assignment,
	approval,
	assembly_component_usage_substitute,
	certification,
	configuration_item,
	contract,
	document_file,
	executed_action,
	general_property,
	information_usage_right,
	organizational_project,
	person_and_organization,
	product,
	product_definition,
	product_definition_formation,
	product_definition_formation_relationship,
	property_definition,
	rule_action,
	security_classification,
	shape_representation,
	versioned_action_request);
END_TYPE;

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

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

TYPE plane_angle_measure = REAL;
END_TYPE;

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

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

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

TYPE point_path_members = LIST [1:?] OF point_and_vector;
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_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 (
	presentation_view,
	presentation_area,
	area_in_set);
END_TYPE;

TYPE presentation_style_select = SELECT (
	point_style,
	curve_style,
	surface_style_usage,
	symbol_style,
	fill_area_style,
	text_style,
	null_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 product_definition_or_assembly_relationship = SELECT (
	assembly_component_usage,
	product_definition);
END_TYPE;

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

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

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

TYPE project_item = SELECT (
	executed_action,
	product_concept);
END_TYPE;

TYPE radioactivity_measure = REAL;
END_TYPE;

TYPE ratio_measure = REAL;
END_TYPE;

TYPE rendering_properties_select = SELECT (
	surface_style_reflectance_ambient,
	surface_style_transparent);
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 (
	configuration_item,
	descriptive_representation_item,
	product,
	product_class,
	product_definition,
	product_definition_formation,
	product_definition_relationship,
	representation,
	shape_aspect);
END_TYPE;

TYPE requirement_satisfaction_item = SELECT (
	requirement_assigned_item);
END_TYPE;

TYPE requirement_source_item = SELECT (
	characterized_object,
	group,
	group_relationship,
	product,
	product_definition,
	product_definition_formation,
	product_definition_relationship,
	shape_aspect);
END_TYPE;

TYPE resistance_measure = REAL;
END_TYPE;

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

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

TYPE role_select = SELECT (
	action_assignment,
	action_request_assignment,
	approval_assignment,
	approval_date_time,
	certification_assignment,
	contract_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 second_in_minute = REAL;
WHERE
	WR1 : { 0 <= SELF <= 60.0 };
END_TYPE;

TYPE security_classification_item = SELECT (
	assembly_component_usage,
	document,
	document_file,
	make_from_usage_option,
	product,
	product_definition,
	product_definition_formation,
	product_definition_usage);
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_definition = SELECT (
	product_definition_shape,
	shape_aspect,
	shape_aspect_relationship);
END_TYPE;

TYPE shell = SELECT (
	vertex_shell,
	wire_shell,
	open_shell,
	closed_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 size_select = SELECT (
	positive_length_measure,
	measure_with_unit,
	descriptive_measure);
END_TYPE;

TYPE sketch_basis_select = SELECT (
	curve_bounded_surface,
	face_surface);
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 start_request_item = SELECT (
	product_definition_formation);
END_TYPE;

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

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

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

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

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

TYPE symbol_style_select = SELECT (
	symbol_colour);
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,
	text_literal);
END_TYPE;

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

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

TYPE thermodynamic_temperature_measure = REAL;
END_TYPE;

TYPE time_interval_item = SELECT (
	action,
	time_interval_based_effectivity);
END_TYPE;

TYPE time_measure = REAL;
END_TYPE;

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

TYPE transformation = SELECT (
	item_defined_transformation,
	functionally_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 (
	length_measure,
	plane_angle_measure,
	generalized_surface_select,
	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 u_direction_count = INTEGER;
WHERE
	WR1 : SELF > 1;
END_TYPE;

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

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

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

TYPE vector_or_direction = SELECT (
	vector,
	direction);
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;
END_TYPE;

ENTITY absorbed_dose_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 acceleration_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 action;
	name : label;
	description : OPTIONAL text;
	chosen_method : action_method;
DERIVE
	id : identifier := get_id_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;


ENTITY action_assignment
	ABSTRACT SUPERTYPE;
	assigned_action : action;
DERIVE
	role : object_role := get_role(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;


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


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


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


ENTITY advanced_brep_shape_representation
	SUBTYPE OF (shape_representation);
WHERE
	WR1 : SIZEOF ( 
QUERY ( it <* SELF.items| NOT ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACETED_BREP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' ] * TYPEOF (it)) = 1) )) = 0;
	WR2 : SIZEOF ( 
QUERY ( it <* SELF.items| ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ] * TYPEOF (it)) = 1) )) > 0;
	WR3 : SIZEOF ( 
QUERY ( msb <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fcs)) )) = 0) )) = 0) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( msb <* 
QUERY ( it <* items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF (it)) )| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF (msb\manifold_solid_brep.outer)) )) = 0;
	WR5 : SIZEOF ( 
QUERY ( brv <* 
QUERY ( it <* items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_SURFACE' ] * TYPEOF (face_geometry)) = 1;
	WR2 : SIZEOF ( 
QUERY ( elp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| NOT ( SIZEOF ( 
QUERY ( oe <* elp_fbnds.bound\path.edge_list| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF (oe\oriented_edge.edge_element)) )) = 0) )) = 0;
	WR3 : SIZEOF ( 
QUERY ( elp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| NOT ( SIZEOF ( 
QUERY ( oe <* elp_fbnds.bound\path.edge_list| NOT ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE' ] * TYPEOF (oe.edge_element\edge_curve.edge_geometry)) = 1) )) = 0) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( elp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| NOT ( SIZEOF ( 
QUERY ( oe <* elp_fbnds.bound\path.edge_list| NOT ((('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (oe\edge.edge_start)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF (oe\edge.edge_start\vertex_point.vertex_geometry))) AND (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (oe\edge.edge_end)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF (oe\edge.edge_end\vertex_point.vertex_geometry)))) )) = 0) )) = 0;
	WR5 : SIZEOF ( 
QUERY ( elp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_PATH' IN TYPEOF (elp_fbnds.bound)) )) = 0;
	WR6 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_SURFACE' IN TYPEOF (face_geometry)) OR ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE' ] * TYPEOF (face_geometry\swept_surface.swept_curve)) = 1);
	WR7 : SIZEOF ( 
QUERY ( vlp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (bnds.bound)) )| NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' ] * TYPEOF (bnd.bound)) = 1) )) = 0;
	WR9 : SIZEOF ( 
QUERY ( elp_fbnds <* 
QUERY ( bnds <* bounds| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| NOT ( SIZEOF ( 
QUERY ( oe <* elp_fbnds.bound\path.edge_list| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF (sc_ag)) )) = 0) )) = 0) )) = 0;
	WR10 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_SURFACE' IN TYPEOF (face_geometry)) OR (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) )| NOT ( SIZEOF ( 
QUERY ( oe <* elp_fbnds.bound\path.edge_list| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 alternate_product_relationship;
	name : label;
	definition : OPTIONAL text;
	alternate : product;
	base : product;
	basis : text;
UNIQUE
	UR1 : alternate, base;
WHERE
	WR1 : alternate :<>: base;
END_ENTITY;


ENTITY amount_of_substance_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 angle_direction_reference
	SUBTYPE OF (representation_item_relationship, geometric_representation_item);
	SELF\representation_item_relationship.related_representation_item : angle_direction_reference_select;
	SELF\representation_item_relationship.relating_representation_item : orientation_basis_select;
WHERE
	WR1 : ((('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MIN_AND_MAJOR_PLY_ORIENTATION_BASIS' IN TYPEOF(relating_representation_item))) 
        OR
		(NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(relating_representation_item))));
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);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) < 3;
END_ENTITY;


ENTITY annotation_curve_occurrence
	SUBTYPE OF (annotation_occurrence);
	SELF\styled_item.item : curve;
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 <* SELF.boundaries |
          NOT (
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE' IN TYPEOF (curve)) OR 
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE' IN TYPEOF (curve)) OR 
              ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE' IN TYPEOF (curve)) 
                   AND (curve\b_spline_curve.closed_curve = TRUE) ) OR 
              ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_CURVE' IN TYPEOF (curve)) 
                   AND (curve\composite_curve.closed_curve = TRUE) ) OR 
              ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_curve_occurrence, annotation_fill_area_occurrence, annotation_text_occurrence, annotation_symbol_occurrence))
	SUBTYPE OF (styled_item);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN
             TYPEOF (SELF);
	WR2 : SIZEOF (QUERY (reps <* using_representations(SELF) | 
        NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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) *
          ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE',
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE',
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\styled_item.item\planar_box.placement));
	WR3 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'CURVE_STYLE' IN TYPEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles[1]))) OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PLANE' IN TYPEOF(SELF\styled_item.item)) AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NULL_STYLE'
               IN TYPEOF (sty.styles[1]))       ))=0;
	WR3 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL'
           IN TYPEOF (SELF.item));
	WR4 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_STRING_REPRESENTATION' IN
        TYPEOF( SELF\mapped_item.mapping_source.mapped_representation);
	WR2 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CHARACTER_GLYPH_SYMBOL' IN
         TYPEOF (SELF\mapped_item.mapping_source.mapped_representation);
	WR2 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_attribute_classification_assignment
	SUBTYPE OF (attribute_classification_assignment);
	items : SET [1:?] OF attribute_classification_item;
	SELF\attribute_classification_assignment.assigned_class : class;
END_ENTITY;


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


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


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


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


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


ENTITY applied_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_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_name_assignment
	SUBTYPE OF (name_assignment);
	item : name_item;
END_ENTITY;


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


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


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


ENTITY applied_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_time_interval_assignment
	SUBTYPE OF (time_interval_assignment);
	items : SET [0:?] OF time_interval_item;
END_ENTITY;


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


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


ENTITY approval_assignment
	ABSTRACT SUPERTYPE;
	assigned_approval : approval;
DERIVE
	role : object_role := get_role(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 assembly_component_usage
	SUPERTYPE OF (ONEOF (next_assembly_usage_occurrence, specified_higher_usage_occurrence, promissory_usage_occurrence))
	SUBTYPE OF (product_definition_usage);
	reference_designator : OPTIONAL identifier;
END_ENTITY;


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


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


ENTITY atomic_formula
	SUBTYPE OF (compound_representation_item);
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);
	items : SET [1:?] OF attribute_language_item;
	SELF\attribute_classification_assignment.assigned_class : language;
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_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
	control_points : ARRAY [0:upper_index_on_control_points] OF cartesian_point := list_to_array(control_points_list,0,
                                             upper_index_on_control_points);
	upper_index_on_control_points : INTEGER := (SIZEOF(control_points_list) - 1);
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.UNIFORM_CURVE' IN TYPEOF(self)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.QUASI_UNIFORM_CURVE' IN TYPEOF(self)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BEZIER_CURVE' IN TYPEOF(self)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(self));
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_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
	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);
	u_upper : INTEGER := SIZEOF(control_points_list) - 1;
	v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1;
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.QUASI_UNIFORM_SURFACE' IN TYPEOF(SELF)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BEZIER_SURFACE' IN TYPEOF(SELF)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS' IN TYPEOF(SELF));
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 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 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 binary_generic_expression
	ABSTRACT SUPERTYPE
	SUBTYPE OF (generic_expression);
	operands : LIST [2:2] OF generic_expression;
END_ENTITY;


ENTITY binary_numeric_expression
	ABSTRACT SUPERTYPE
	SUBTYPE OF (numeric_expression, binary_generic_expression);
	SELF\binary_generic_expression.operands : LIST [2:2] OF numeric_expression;
END_ENTITY;


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


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


ENTITY boolean_expression
	ABSTRACT SUPERTYPE OF (ONEOF (simple_boolean_expression, multiple_arity_boolean_expression, comparison_expression, interval_expression))
	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 boundary_curve
	SUBTYPE OF (composite_curve_on_surface);
WHERE
	WR1 : SELF\composite_curve.closed_curve;
END_ENTITY;


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


ENTITY bounded_pcurve
	SUBTYPE OF (pcurve, bounded_curve);
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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))
	SUBTYPE OF (surface);
END_ENTITY;


ENTITY bounded_surface_curve
	SUBTYPE OF (surface_curve, bounded_curve);
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
	items : SET [1:1] OF product_definition_or_breakdown_element_usage;
	SELF\group_assignment.assigned_group : product_definition_element_relationship;
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 bytes_representation_item
	SUBTYPE OF (binary_representation_item);
DERIVE
	no_of_bytes : INTEGER := BLENGTH(SELF\binary_representation_item.binary_value) DIV 8;
WHERE
	WR1 : BLENGTH(SELF\binary_representation_item.binary_value) MOD 8 = 0;
END_ENTITY;


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


ENTITY camera_image
	SUBTYPE OF (mapped_item);
	SELF\mapped_item.mapping_source : camera_usage;
	SELF\mapped_item.mapping_target : planar_box;
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM'
        IN TYPEOF (SELF);
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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
            'AXIS2_PLACEMENT_2D' IN TYPEOF (SELF\mapped_item.
           mapping_target\planar_box.placement))
           AND NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
           'AXIS2_PLACEMENT_3D' IN TYPEOF (SELF\mapped_item.
           mapping_target\planar_box.placement));
END_ENTITY;


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


ENTITY camera_model_d3
	SUBTYPE OF (camera_model);
	view_reference_system : axis2_placement_3d;
	perspective_of_volume : view_volume;
WHERE
	WR1 : (dot_product (SELF.view_reference_system.p[3],
           SELF.perspective_of_volume.view_window.placement.p[3]) = 1.0)
           AND
           (SELF.view_reference_system.location.coordinates[3] =
           SELF.perspective_of_volume.view_window.
             placement.location.coordinates[3]);
	WR2 : 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_interection_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_interection_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 celsius_temperature_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;


ENTITY centre_of_symmetry
	SUBTYPE OF (derived_shape_aspect);
WHERE
	WR1 : SIZEOF
        (QUERY(sadr<*SELF\derived_shape_aspect.deriving_relationships|
    NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMMETRIC_SHAPE_ASPECT'
     IN TYPEOF
     (sadr\shape_aspect_relationship.related_shape_aspect))))=0;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;


ENTITY certification_type;
	description : label;
END_ENTITY;


ENTITY change
	SUBTYPE OF (action_assignment);
	items : SET [1:?] OF work_item;
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(SELF.character_box, 
                       SELF\representation.context_of_items);
	WR3 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE'
        IN TYPEOF (SELF.box_height);
END_ENTITY;


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


ENTITY character_glyph_symbol_stroke
	SUBTYPE OF (character_glyph_symbol);
	strokes : SET [1:?] OF curve;
WHERE
	WR1 : SELF.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_class
	SUBTYPE OF (characterized_object, class);
END_ENTITY;


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


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


ENTITY circular_runout_tolerance
	SUBTYPE OF (geometric_tolerance_with_datum_reference);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 2;
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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) )) = 0;
	WR3 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_role;
	name : label;
	description : OPTIONAL text;
END_ENTITY;


ENTITY closed_shell
	SUBTYPE OF (connected_face_set);
END_ENTITY;


ENTITY coaxiality_tolerance
	SUBTYPE OF (geometric_tolerance_with_datum_reference);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 2;
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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DATUM' IN TYPEOF (sar.related_shape_aspect)) AND 
                          NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMMON_DATUM' IN TYPEOF (sar.related_shape_aspect))) )) = 0;
END_ENTITY;


ENTITY comparison_expression
	ABSTRACT SUPERTYPE
	SUBTYPE OF (boolean_expression, binary_generic_expression);
	SELF\binary_generic_expression.operands : LIST [2:2] OF expression;
WHERE
	WR1 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NUMERIC_EXPRESSION' 
IN TYPEOF(SELF\binary_generic_expression.operands[1]))
		AND 
		 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NUMERIC_EXPRESSION' 
IN TYPEOF(SELF\binary_generic_expression.operands[2]))) 
OR
 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOOLEAN_EXPRESSION' 
IN TYPEOF(SELF\binary_generic_expression.operands[1]))
		AND 
		 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOOLEAN_EXPRESSION' 
	IN TYPEOF(SELF\binary_generic_expression.operands[2])))
OR
(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION' 
IN TYPEOF(SELF\binary_generic_expression.operands[1]))
		AND 
		 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION' 
IN TYPEOF(SELF\binary_generic_expression.operands[2])));
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_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 composite_assembly_definition
	SUBTYPE OF (product_definition);
WHERE
	WR1 : SIZEOF (QUERY (pdr <* USEDIN (SELF, 
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'PRODUCT_DEFINITION_RELATIONSHIP.' +
                             'RELATING_PRODUCT_DEFINITION') |
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
                             TYPEOF (pdr))) = 1;
END_ENTITY;


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


ENTITY composite_assembly_table
	SUBTYPE OF (part_laminate_table);
END_ENTITY;


ENTITY composite_curve
	SUBTYPE OF (bounded_curve);
	segments : LIST [1:?] OF composite_curve_segment;
	self_intersect : LOGICAL;
DERIVE
	closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous;
	n_segments : INTEGER := SIZEOF(segments);
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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_CURVE' IN TYPEOF(parent_curve));
END_ENTITY;


ENTITY composite_material_designation
	SUBTYPE OF (material_designation);
END_ENTITY;


ENTITY composite_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 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 compound_representation_item
	SUPERTYPE OF (ONEOF (point_and_vector, point_path, 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 : ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'EDGE_BASED_WIREFRAME_MODEL' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'FACE_BASED_SURFACE_MODEL' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MAPPED_ITEM' , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
         'AXIS2_PLACEMENT_3D']* TYPEOF ( cbsr_i ) ) <>1 ) ) =0;
	WR3 : SIZEOF ( QUERY ( cbsr_i <* SELF.items | SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'EDGE_BASED_WIREFRAME_MODEL' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'FACE_BASED_SURFACE_MODEL' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MAPPED_ITEM']* TYPEOF ( cbsr_i ) ) =1 ) ) >0;
	WR4 : SIZEOF ( QUERY ( cbsr_i <* SELF.items | (
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MAPPED_ITEM' IN TYPEOF ( cbsr_i ) )
         AND ( SIZEOF ( ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
         'COMPOUND_SHAPE_REPRESENTATION' , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
         'EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
         'NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION']* TYPEOF (
         cbsr_i\ mapped_item.mapping_source ) ) <>1 ) ) ) =0;
END_ENTITY;


ENTITY concentricity_tolerance
	SUBTYPE OF (geometric_tolerance_with_datum_reference);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) = 1;
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 conditional_concept_feature
	SUBTYPE OF (product_concept_feature);
	condition : concept_feature_relationship_with_condition;
END_ENTITY;


ENTITY conductance_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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
	description : text := get_description_value (SELF);
	name : label := get_name_value (SELF);
UNIQUE
	UR1 : configuration, design;
WHERE
	WR1 : SIZEOF (USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
	WR2 : SIZEOF (USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'EFFECTIVITY_CONTEXT_ASSIGNMENT.ASSIGNED_EFFECTIVITY_ASSIGNMENT') | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONFIGURED_EFFECTIVITY_CONTEXT_ASSIGNMENT' IN TYPEOF(x) )) = 1;
END_ENTITY;


ENTITY configured_effectivity_context_assignment
	SUBTYPE OF (effectivity_context_assignment);
	items : SET [1:?] OF configured_effectivity_context_item;
	SELF\effectivity_context_assignment.assigned_effectivity_assignment : configured_effectivity_assignment;
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_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 constructive_geometry_representation
	SUBTYPE OF (representation);
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF.context_of_items)) AND ({2 <= SELF.context_of_items\geometric_representation_context. coordinate_space_dimension <= 3});
	WR2 : SIZEOF( QUERY( cgr_i <* SELF.items | SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLACEMENT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT'] * TYPEOF(cgr_i)) <> 1 )) = 0;
	WR3 : SIZEOF( USEDIN( SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION_RELATIONSHIP.REP_2') ) > 0;
	WR4 : SIZEOF( USEDIN( SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION_MAP.MAPPED_REPRESENTATION') ) = 0;
END_ENTITY;


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


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


ENTITY context_dependent_invisibility
	SUBTYPE OF (invisibility);
	presentation_context : invisibility_context;
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 <* SELF.style_context | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(sc)))= 1) OR
(SIZEOF(QUERY(sc <* SELF.style_context |
     ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(sc))
  OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF.represented_product_relation.definition);
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
	WR3 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;


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


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


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


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


ENTITY contract_type;
	description : label;
END_ENTITY;


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


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


ENTITY 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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CSG_SOLID', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_REPLICA', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REVOLVED_FACE_SOLID', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXTRUDED_FACE_SOLID' ] * TYPEOF (it)) <> 1) )) = 0;
	WR3 : SIZEOF ( 
QUERY ( mi <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CSG_SHAPE_REPRESENTATION' IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation)) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( sr <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_REPLICA' IN TYPEOF (it)) )| ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CSG_SOLID', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REVOLVED_FACE_SOLID', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXTRUDED_FACE_SOLID' ] * TYPEOF (sr\solid_replica.parent_solid)) = 0) )) = 0;
	WR5 : SIZEOF ( 
QUERY ( it <* SELF.items| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 curve
	SUPERTYPE OF (ONEOF (line, conic, pcurve, surface_curve, offset_curve_2d, offset_curve_3d, curve_replica))
	SUBTYPE OF (geometric_representation_item);
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 |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) = 0);
	WR2 : (NOT(implicit_outer)) OR
                ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(basis_surface));
	WR3 : SIZEOF(QUERY(temp <* boundaries |
                  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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_style
	SUBTYPE OF (founded_item);
	name : label;
	curve_font : curve_font_or_scaled_curve_font_select;
	curve_width : size_select;
	curve_colour : 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_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_AREA_SOLID',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_DISK_SOLID',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] *
                   TYPEOF(it)) = 1))) = 0;
	WR2 : SIZEOF (QUERY (it <* SELF.items |
         SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_AREA_SOLID',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_DISK_SOLID',
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) =1 )) > 0;
	WR3 : SIZEOF (QUERY (mi <*  QUERY (it <* items |
                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) |
   NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE_SWEPT_AREA_SOLID' IN
              TYPEOF(it)) |
          NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE' IN
                 TYPEOF(scsas\surface_curve_swept_area_solid.directrix)) OR
                   ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN
                   TYPEOF(scsas\surface_curve_swept_area_solid.directrix))))) = 0;
END_ENTITY;


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


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


ENTITY data_environment;
	name : label;
	description : text;
	elements : SET [1:?] OF property_definition_representation;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
END_ENTITY;


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


ENTITY datum
	SUBTYPE OF (shape_aspect);
	identification : identifier;
INVERSE
	established_by_relationships: SET [1:?] OF shape_aspect_relationship FOR related_shape_aspect;
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMMON_DATUM' IN TYPEOF(SELF)) XOR
       ((SIZEOF(QUERY(x <* SELF\datum.established_by_relationships |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DATUM_FEATURE' IN TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)))) = 1) XOR
       (SIZEOF(QUERY(x <* SELF\datum.established_by_relationships |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DATUM_TARGET' IN TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)))) >= 1));
END_ENTITY;


ENTITY 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 
       | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 
       | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_tolerance_table
	SUBTYPE OF (representation);
WHERE
	WR1 : SIZEOF( QUERY( i <* SELF.items | NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEFAULT_TOLERANCE_TABLE_CELL' IN TYPEOF(i)) )) = 0;
	WR2 : (SIZEOF( QUERY( rr <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION_RELATIONSHIP.REP_1') | rr.name < 'general tolerance definition' )) = 0) AND (SIZEOF( QUERY( rr <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION_RELATIONSHIP.REP_1') | (rr.name = 'general tolerance definition') AND (rr.rep_2.name < 'default tolerance') )) = 0) AND (SIZEOF( USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION.ITEMS') | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_symbol
	SUBTYPE OF (geometric_representation_item);
	definition : defined_symbol_select;
	target : symbol_target;
END_ENTITY;


ENTITY definitional_representation
	SUBTYPE OF (representation);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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],
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 derived_shape_aspect
	SUPERTYPE OF (ONEOF (apex, centre_of_symmetry, geometric_alignment, geometric_intersection, parallel_offset, perpendicular_to, extension, tangent))
	SUBTYPE OF (shape_aspect);
INVERSE
	deriving_relationships: SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
WHERE
	WR1 : SIZEOF (QUERY (dr <*
          SELF\derived_shape_aspect.deriving_relationships |
          NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
               'SHAPE_ASPECT_DERIVING_RELATIONSHIP'
          IN TYPEOF (dr)))) = 0;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 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 dimension_callout
	SUBTYPE OF (draughting_callout);
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_CALLOUT'
        IN (TYPEOF (SELF))) XOR
       (SIZEOF (QUERY(dce_1 <* SELF\draughting_callout.contents |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_CURVE'
        IN (TYPEOF(dce_1))))) = 0);
	WR2 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_DIRECTED_CALLOUT'
        IN (TYPEOF (SELF))) XOR
       (SIZEOF (QUERY(dce_1 <* SELF\draughting_callout.contents |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE'
        IN (TYPEOF(dce_1))))) = 0);
	WR3 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT'
        IN (TYPEOF (SELF))) XOR
       (SIZEOF (QUERY(dce_1 <* SELF\draughting_callout.contents |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRUCTURED_DIMENSION_CALLOUT'
           IN TYPEOF (SELF.relating_draughting_callout);
	WR3 : SIZEOF (TYPEOF (SELF.related_draughting_callout) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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) * 
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANGULAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIAMETER_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINEAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORDINATE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.RADIUS_DIMENSION'])>=1;
	WR3 : SIZEOF (TYPEOF (SELF.related_draughting_callout) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                'TERMINATOR_SYMBOL.ANNOTATED_CURVE')
               | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
                  'DIMENSION_CURVE_TERMINATOR' IN TYPEOF(dct))
                  ))
          ) <= 2);
	WR2 : SIZEOF(
            QUERY( dcdc <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                   'DRAUGHTING_CALLOUT.CONTENTS') |
                   ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
                    'DIMENSION_CURVE_DIRECTED_CALLOUT' IN TYPEOF(dcdc)))
          )>= 1;
	WR3 : (SIZEOF(
            QUERY(dct1 <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                  'TERMINATOR_SYMBOL.ANNOTATED_CURVE') 
               | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
                   'TERMINATOR_SYMBOL.ANNOTATED_CURVE') 
                 | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(d_c))))=1;
	WR2 : SIZEOF(SELF\draughting_callout.contents) >= 2;
END_ENTITY;


ENTITY dimension_curve_terminator
	SUBTYPE OF (terminator_symbol);
	role : dimension_extent_usage;
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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.related_annotation_occurrence : projection_curve;
	SELF\annotation_occurrence_relationship.relating_annotation_occurrence : dimension_curve_terminator;
END_ENTITY;


ENTITY dimension_pair
	SUBTYPE OF (draughting_callout_relationship);
WHERE
	WR1 : SELF.name IN ['chained', 'parallel'];
	WR2 : SIZEOF (TYPEOF (SELF.relating_draughting_callout) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANGULAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIAMETER_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINEAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORDINATE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.RADIUS_DIMENSION'])=1;
	WR3 : SIZEOF (TYPEOF (SELF.related_draughting_callout) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANGULAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIAMETER_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINEAR_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORDINATE_DIMENSION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_DIMENSION_REPRESENTATION'
          IN TYPEOF (SELF\mapped_item.
                          mapping_source.mapped_representation));
	WR2 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT'
          IN TYPEOF (SELF\mapped_item.mapping_target));
	WR3 : SIZEOF (QUERY (ato <* QUERY (si <* 
          USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM.ITEM') |
            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
              IN TYPEOF(si))) |
          NOT (SIZEOF( QUERY (dc <*
             USEDIN (ato, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                          'DRAUGHTING_CALLOUT.CONTENTS') |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
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;
WHERE
	WR1 : applies_to.product_definitional = TRUE;
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_dimensional_location
	SUBTYPE OF (dimensional_location);
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 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);
	items : SET [1:?] OF document_identifier_assigned_item;
	SELF\group_assignment.assigned_group : document_identifier;
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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document' )) = 1));
	WR3 : NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | prpc.name = 'document')) = 1));
	WR4 : NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 draughting_annotation_occurrence
	SUBTYPE OF (annotation_occurrence);
WHERE
	WR1 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_CURVE_OCCURRENCE'
            IN TYPEOF (SELF))) OR
    (SIZEOF (QUERY (sty <* SELF.styles |
       NOT ((SIZEOF (sty.styles) = 1)
         AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
                 IN TYPEOF (sty.styles[1]))) )) = 0);
	WR2 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE'
            IN TYPEOF (SELF))) OR    (SIZEOF (QUERY (sty <* SELF.styles |
      NOT ((SIZEOF (sty.styles) = 1)
        AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FILL_AREA_STYLE'
                IN TYPEOF (sty.styles[1]))) )) = 0);
	WR3 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                  'STYLED_ITEM.ITEM') |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
             'ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF (si)))) > 0))) = 0);
	WR4 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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]) *
                ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMBOL_STYLE',
                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NULL_STYLE']) = 1)) )) = 0);
	WR5 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL'
             IN TYPEOF(SELF.item)))) OR
         (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                   'DRAUGHTING_SYMBOL_REPRESENTATION',
                  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                  'DRAUGHTING_SUBFIGURE_REPRESENTATION'] *
          TYPEOF (SELF.item\mapped_item.mapping_source.
                  mapped_representation)) = 1);
	WR6 : (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
            IN TYPEOF (SELF))) OR
    (SIZEOF (QUERY (sty <* SELF.styles |
       NOT ((SIZEOF (sty.styles) = 1)
        AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_STYLE'
                IN TYPEOF (sty.styles[1]))) )) = 0);
	WR7 : (NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF))) OR
         (SIZEOF (TYPEOF(SELF.item) *
             ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL']) = 1);
	WR8 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'
             IN TYPEOF (SELF.item)))) OR    (SIZEOF (QUERY (tl <*
                   SELF.item\composite_text.collected_text |
             NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL' 
             IN TYPEOF (tl)) )) = 0);
	WR9 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL'
             IN TYPEOF (SELF.item)))) OR (SELF.item\text_literal.alignment 
             IN ['baseline left', 'baseline centre', 'baseline right']);
	WR10 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'
             IN TYPEOF (SELF.item)))) OR
         (SIZEOF (QUERY (tl <* QUERY (text <* SELF.
                  item\composite_text.collected_text
             |('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL' IN TYPEOF(text))) |
          NOT (tl\text_literal.alignment IN
         ['baseline left', 'baseline centre', 'baseline right']) )) = 0);
	WR11 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF(SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'
             IN TYPEOF (SELF.item))) OR check_text_alignment(SELF.item);
	WR12 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF(SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'
             IN TYPEOF (SELF.item))) OR check_text_font(SELF.item);
	WR13 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF(SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'
               IN TYPEOF (SELF.item)))) OR
         (SIZEOF (QUERY (tl <* QUERY (text <*
            SELF.item\composite_text.collected_text |
            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL' IN TYPEOF (text))) |
             NOT (SIZEOF (TYPEOF(tl) *
                  ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                   'TEXT_LITERAL_WITH_BLANKING_BOX',
                   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                   'TEXT_LITERAL_WITH_ASSOCIATED_CURVES']) = 0) )) = 0);
	WR14 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM.ITEM') |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_CURVE_OCCURRENCE'
            IN TYPEOF (si)) )) > 0) )) = 0);
	WR15 : (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (SELF)) AND
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM.ITEM') |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_CURVE_OCCURRENCE'
           IN TYPEOF (si)) )) > 0) )) = 0);
	WR16 : SIZEOF (QUERY (cs <* QUERY (sty <* SELF.styles |
      ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE' IN TYPEOF (sty.styles[1])))
      | NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_MEASURE_WITH_UNIT'
        IN TYPEOF (cs.styles[1]\curve_style.curve_width)) AND
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
      ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FILL_AREA_STYLE'
          IN TYPEOF (sty.styles[1]))) |
      NOT ((SIZEOF (QUERY (fs <* fas.styles[1]\fill_area_style.fill_styles
                    | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FILL_AREA_STYLE_TILES'
                       IN TYPEOF (fs)))) <= 1)
       AND (SIZEOF (QUERY (fst <* QUERY (fs <*
                           fas.styles[1]\fill_area_style.fill_styles |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
           ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FILL_AREA_STYLE' 
            IN TYPEOF (sty.styles[1]))) |
             NOT (SIZEOF (QUERY (fsh <* QUERY (fs <*
                          fas.styles[1]\fill_area_style.fill_styles |
             ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_STYLE' 
         IN TYPEOF(sty.styles[1]))) |
             NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                  'TEXT_STYLE_WITH_BOX_CHARACTERISTICS'
             IN TYPEOF (ts.styles[1])))) = 0;
	WR20 : SIZEOF (QUERY (ts <* QUERY (sty <* SELF.styles |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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
	SUPERTYPE OF ((ONEOF (datum_feature_callout, datum_target_callout, dimension_curve_directed_callout, draughting_elements, geometrical_tolerance_callout, leader_directed_callout, projection_directed_callout, structured_dimension_callout) ANDOR surface_condition_callout))
	SUBTYPE OF (geometric_representation_item);
	contents : SET [1:?] OF draughting_callout_element;
WHERE
	WR1 : (SIZEOF (QUERY (l_1 <* SELF\draughting_callout.contents |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_CURVE' IN (TYPEOF(l_1)))) = 0) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND
        (SIZEOF (QUERY (l_1 <* SELF\draughting_callout.contents |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(l_1)))) = 0) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND  
        (SIZEOF (QUERY (l_1 <* SELF\draughting_callout.contents |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(l_1)))) = 0) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_CURVE' IN TYPEOF(con))) |
              NOT (SIZEOF (QUERY (ldc <* USEDIN (l_c,
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DRAUGHTING_CALLOUT.CONTENTS') |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_CALLOUT'
              IN TYPEOF (ldc)))) <= 1)))=0;
	WR2 : NOT    ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT'
              IN TYPEOF(SELF)) OR
              (SIZEOF (QUERY (con <* SELF.contents |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE' IN
               TYPEOF (con)))) <= 2);
	WR3 : SIZEOF (QUERY (rc <* USEDIN (SELF,
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT_' +
              'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
               'DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF (rc)) AND
              (rc.name = 'primary') )) <= 1;
	WR4 : SIZEOF (QUERY (rc <* USEDIN (SELF,
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT_' +
              'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                'DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF (rc)) AND
                (rc.name = 'secondary') )) <= 1;
	WR5 : SIZEOF (QUERY (sec <* QUERY (rc <* USEDIN (SELF,
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT_' +
               'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                'DIMENSION_CALLOUT_RELATIONSHIP' IN TYPEOF (rc)) AND         
                (rc.name = 'secondary') ) |
         NOT (SIZEOF (QUERY (prim <* USEDIN (SELF,
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT_' +
               'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))) |
         NOT (
           SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_REPRESENTATION',
                    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_MODEL'] *
              TYPEOF (mi\mapped_item.mapping_source.
                      mapped_representation)) = 1
        ))) = 0;
	WR2 : SIZEOF (QUERY (smi <* QUERY (si <* QUERY (it <* SELF.items |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM' IN TYPEOF(it))) |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN
            TYPEOF(si\styled_item.item))) |
        (NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : shape_definition;
	SELF\item_identified_representation_usage.identified_item : draughting_model_item_association_select;
	SELF\item_identified_representation_usage.used_representation : draughting_model;
END_ENTITY;


ENTITY draughting_pre_defined_colour
	SUBTYPE OF (pre_defined_colour);
WHERE
	WR1 : SELF.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.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.name[1:8] = 'ISO 3098';
END_ENTITY;


ENTITY draughting_subfigure_representation
	SUBTYPE OF (symbol_representation);
WHERE
	WR1 : SIZEOF (QUERY (item <* SELF\representation.items |
         NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_OCCURRENCE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT']
               * TYPEOF (item)) = 1))) = 0;
	WR2 : SIZEOF (QUERY (item <* SELF\representation.items |
         SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_OCCURRENCE',
                  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT'] *
           TYPEOF (item)) = 1)) >= 1;
	WR3 : SIZEOF (QUERY (srm <* QUERY (rm <*
          USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                        'REPRESENTATION_MAP.MAPPED_REPRESENTATION') |
          ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMBOL_REPRESENTATION_MAP'
             IN TYPEOF(rm))) | 
            NOT (SIZEOF (QUERY (a_s <* QUERY (mi <* srm.map_usage |
            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(mi)))
          | NOT (SIZEOF (QUERY (aso <*
            USEDIN (a_s, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
                         'STYLED_ITEM.ITEM') |
          NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE'
            IN TYPEOF(aso)))) = 0))) = 0))) > 0;
	WR4 : NOT (acyclic_mapped_item_usage (SELF));
	WR5 : SIZEOF (SELF.context_of_items.representations_in_context) = 1;
END_ENTITY;


ENTITY draughting_symbol_representation
	SUBTYPE OF (symbol_representation);
UNIQUE
  UR1: SELF\representation.name;
WHERE
	WR1 : SIZEOF (QUERY (item <* SELF\representation.items |
         NOT (SIZEOF (TYPEOF (item) *
            ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_CURVE_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT']) = 1)
       )) = 0;
	WR2 : SIZEOF (QUERY (item <* SELF\representation.items |
         (SIZEOF (TYPEOF (item) *
            ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_CURVE_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE',
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE']) = 1)
       )) >= 1;
	WR3 : SIZEOF (QUERY (item <* SELF\representation.items |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE'
          IN TYPEOF (item))) = 0;
	WR4 : SIZEOF (QUERY (srm <* QUERY (rm <*
          USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                        'REPRESENTATION_MAP.MAPPED_REPRESENTATION') |
          ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMBOL_REPRESENTATION_MAP'
             IN TYPEOF(rm))) |
         (SIZEOF (QUERY (a_s <* QUERY (mi <* srm.map_usage |
           ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(mi))) |
         NOT (SIZEOF (QUERY(aso <*
             USEDIN(a_s, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                         'STYLED_ITEM.ITEM') |
             NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE'
                  IN TYPEOF(aso))
          )) = 0) )) = 0) )) > 0;
	WR5 : NOT (acyclic_mapped_item_usage (SELF));
	WR6 : 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_revision
	SUBTYPE OF (presentation_area);
	revision_identifier : identifier;
WHERE
	WR1 : SIZEOF( QUERY(item <* SELF\representation.items |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN (TYPEOF(item)))
       AND
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAWING_SHEET_REVISION'
       IN TYPEOF (SELF\representation_relationship.rep_1);
	WR3 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAWING_SHEET_REVISION' IN 
                  TYPEOF(SELF\area_in_set.area)) 
              AND
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAWING_REVISION' 
               IN TYPEOF (SELF\area_in_set.in_set));
END_ENTITY;


ENTITY edge
	SUPERTYPE OF (ONEOF (edge_curve, oriented_edge, subedge))
	SUBTYPE OF (topological_representation_item);
	edge_start : vertex;
	edge_end : vertex;
END_ENTITY;


ENTITY edge_based_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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' ] * TYPEOF (it)) = 1) )) = 0;
	WR2 : SIZEOF ( 
QUERY ( it <* SELF.items| ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_BASED_WIREFRAME_MODEL', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ] * TYPEOF (it)) = 1) )) >= 1;
	WR3 : SIZEOF ( 
QUERY ( ebwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF (edges)) )) = 0) )) = 0) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( ebwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (edges.edge_start)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (edges.edge_end))) )) = 0) )) = 0) )) = 0;
	WR6 : SIZEOF ( 
QUERY ( ebwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_variable_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 effectivity
	SUPERTYPE OF (ONEOF (serial_numbered_effectivity, dated_effectivity, lot_effectivity, time_interval_based_effectivity));
	id : identifier;
DERIVE
	description : text := get_description_value(SELF);
	name : label := get_name_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACETED_BREP',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] *
                   TYPEOF(it)) = 1))) = 0;
	WR2 : SIZEOF (QUERY (it <* SELF.items |
         SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP',
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) =1 )) > 0;
	WR3 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) |
           NOT (SIZEOF (QUERY (csh <* msb_shells(msb) |
            NOT (SIZEOF (QUERY(fcs <* csh.cfs_faces |
              NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE' IN TYPEOF(fcs)))) = 0
                 ))) = 0
                   ))) = 0;
	WR4 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_SURFACE' IN
                   TYPEOF(fcs\face_surface.face_geometry))
             ))) = 0
                 ))) = 0
                   ))) = 0;
	WR5 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                  NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN
            TYPEOF(oe.edge_element)))) = 0
                   ))) = 0
                 ))) = 0
               ))) = 0
             ))) = 0;
	WR6 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                 NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                   NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                 NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
            NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_start))
                AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN
                 TYPEOF(oe.edge_end))
            ))) = 0
              ))) = 0
               ))) = 0
                 ))) = 0
                   ))) = 0;
	WR8 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                   ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) |
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF
              (msb\manifold_solid_brep.outer)))
             = 0;
	WR10 : SIZEOF (QUERY (brv <* QUERY (it <* items |
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) |
          NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_BREP_SHAPE_REPRESENTATION' IN
             TYPEOF(mi\mapped_item.mapping_source.
                           mapped_representation)))) = 0;
	WR12 : SIZEOF (QUERY (msb <* QUERY (it <* SELF.items |
            'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)) |
           NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN
               TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND
                ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 energy_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 entity_assertion
	SUBTYPE OF (fact_type);
END_ENTITY;


ENTITY enum_reference_prefix
	SUBTYPE OF (descriptive_representation_item);
END_ENTITY;


ENTITY environment;
	syntactic_representation : generic_variable;
	semantics : variable_semantics;
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_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 exclusive_product_concept_feature_category
	SUBTYPE OF (product_concept_feature_category);
END_ENTITY;


ENTITY executed_action
	SUBTYPE OF (action);
END_ENTITY;


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


ENTITY explicit_procedural_geometric_representation_item_relationship
	SUBTYPE OF (explicit_procedural_representation_item_relationship);
	SELF\representation_item_relationship.related_representation_item : geometric_representation_item;
	SELF\representation_item_relationship.relating_representation_item : procedural_shape_representation_sequence;
WHERE
	WR1 : NOT (
    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROCEDURAL_REPRESENTATION' 
    IN TYPEOF(SELF\representation_relationship.rep_2))) AND 
    (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 expression
	ABSTRACT SUPERTYPE OF (ONEOF (numeric_expression, boolean_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 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_source;
	source_id : source_item;
DERIVE
	description : text := get_description_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.APPLIED_DOCUMENT_REFERENCE.ITEMS')| (adr.assigned_document.description = 'external size dimension specification') ));
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_marker
	SUBTYPE OF (externally_defined_symbol, pre_defined_marker);
END_ENTITY;


ENTITY externally_defined_picture_representation_item
	SUBTYPE OF (picture_representation_item);
INVERSE
	source: applied_external_identification_assignment FOR items;
WHERE
	WR1 : NOT (SELF\representation_item.name IN pre_defined_picture_representation_types);
END_ENTITY;


ENTITY externally_defined_representation_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_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 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(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE_ANGLE_MEASURE' 
         IN TYPEOF(first_trim_condition)) OR
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE_ANGLE_MEASURE' 
         IN TYPEOF(second_trim_condition)));
	WR2 : NOT ((('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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  
         (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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((('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_MEASURE' 
         IN TYPEOF(first_trim_condition)) AND
            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_surface
	SUBTYPE OF (face, geometric_representation_item);
	face_geometry : surface;
	same_sense : BOOLEAN;
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_SURFACE' IN TYPEOF(face_geometry));
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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACETED_BREP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' ] * TYPEOF (it)) = 1) )) = 0;
	WR2 : SIZEOF ( 
QUERY ( it <* items| ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACETED_BREP', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ] * TYPEOF (it)) = 1) )) > 0;
	WR3 : SIZEOF ( 
QUERY ( fbrep <* 
QUERY ( it <* items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE' IN TYPEOF (fcs)) AND (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN TYPEOF (fcs\face_surface.face_geometry)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF (bnds)) )) = 1) )) = 0) )) = 0) )) = 0;
	WR5 : SIZEOF ( 
QUERY ( msb <* 
QUERY ( it <* items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF (it)) )| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF (msb\manifold_solid_brep.outer)) )) = 0;
	WR6 : SIZEOF ( 
QUERY ( brv <* 
QUERY ( it <* items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION' IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation)) )) = 0;
END_ENTITY;


ENTITY fact_type
	SUBTYPE OF (property_definition);
END_ENTITY;


ENTITY fill_area_style
	SUBTYPE OF (founded_item);
	name : label;
	fill_styles : SET [1:?] OF fill_style_select;
WHERE
	WR1 : SIZEOF(QUERY(fill_style <* SELF.fill_styles |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE' IN TYPEOF (closed_curve))) OR 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE' IN TYPEOF (closed_curve)) OR 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE' IN TYPEOF (closed_curve)) OR 
        ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE' IN TYPEOF (closed_curve)) 
             AND (closed_curve\b_spline_curve.closed_curve = TRUE) ) OR 
        ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_CURVE' IN TYPEOF (closed_curve)) 
             AND (closed_curve\composite_curve.closed_curve = TRUE) ) OR 
        ( ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 flat_pattern_ply_representation_relationship
	SUBTYPE OF (shape_representation_relationship);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
END_ENTITY;


ENTITY force_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 (character_glyph_style_outline, character_glyph_style_stroke, curve_style, curve_style_font, curve_style_font_and_scaling, curve_style_font_pattern, 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 frequency_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 func
	SUBTYPE OF (compound_representation_item);
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 general_material_property
	SUBTYPE OF (general_property);
WHERE
	WR1 : SIZEOF( QUERY( gpa <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.BASE_DEFINITION') | 
        NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MATERIAL_PROPERTY' IN TYPEOF(gpa.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(USEDIN(derived_definition, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GENERAL_PROPERTY_ASSOCIATION.' + 'DERIVED_DEFINITION')) = 1;
	WR2 : derived_definition.name = base_definition.name;
END_ENTITY;


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


ENTITY generic_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_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_curve_set
	SUBTYPE OF (geometric_set);
WHERE
	WR1 : SIZEOF(QUERY(temp <* SELF\geometric_set.elements |
                            'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE' IN TYPEOF(temp))) = 0;
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.identified_item : geometric_representation_item;
	SELF\item_identified_representation_usage.used_representation : shape_representation;
END_ENTITY;


ENTITY geometric_model_element_relationship
	SUBTYPE OF (geometric_representation_item, representation_item_relationship);
	SELF\representation_item_relationship.related_representation_item : geometric_representation_item;
	SELF\representation_item_relationship.relating_representation_item : geometric_representation_item;
UNIQUE
	UR1 : relating_representation_item, 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
	SUBTYPE OF (representation_context);
	coordinate_space_dimension : dimension_count;
END_ENTITY;


ENTITY geometric_representation_item
	SUPERTYPE OF (ONEOF (point, direction, vector, placement, cartesian_transformation_operator, curve, surface, edge_curve, face_surface, poly_loop, vertex_point, solid_model, boolean_result, sphere, right_circular_cone, right_circular_cylinder, torus, block, right_angular_wedge, half_space_solid, shell_based_surface_model, face_based_surface_model, shell_based_wireframe_model, edge_based_wireframe_model, geometric_set, camera_model, camera_model_d3_multi_clipping_intersection, camera_model_d3_multi_clipping_union, light_source))
	SUBTYPE OF (representation_item);
DERIVE
	dim : dimension_count := dimension_of(SELF);
WHERE
	WR1 : SIZEOF (QUERY (using_rep <* using_representations (SELF) |
      NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	name : label;
	description : text;
	magnitude : measure_with_unit;
	toleranced_shape_aspect : shape_aspect;
WHERE
	WR1 : ('NUMBER' IN TYPEOF
       (magnitude\measure_with_unit.value_component)) AND
       (magnitude\measure_with_unit.value_component >= 0.0);
END_ENTITY;


ENTITY geometric_tolerance_relationship;
	name : label;
	description : text;
	relating_geometric_tolerance : geometric_tolerance;
	related_geometric_tolerance : geometric_tolerance;
END_ENTITY;


ENTITY geometric_tolerance_with_datum_reference
	SUBTYPE OF (geometric_tolerance);
	datum_system : SET [1:?] OF datum_reference;
END_ENTITY;


ENTITY geometric_tolerance_with_defined_unit
	SUBTYPE OF (geometric_tolerance);
	unit_size : measure_with_unit;
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 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) *
['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET',          
'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_2D',
            'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM']) = 1)
       )) = 0;
	WR3 : SIZEOF (QUERY (item <* SELF.items |
         SIZEOF (TYPEOF (item) *          
['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET',
            'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM']) = 1
       )) >= 1;
	WR4 : SIZEOF (QUERY (mi <* QUERY (item <* SELF.items |
     ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
           IN TYPEOF (item))) |
         NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
     ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET'
                IN TYPEOF (item))) |
         NOT (SIZEOF (QUERY (elem <* gcs\geometric_set.elements |
           NOT (SIZEOF (TYPEOF (elem) *
             ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_CURVE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_2D',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE',
              'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TRIMMED_CURVE']) =
               1)
         )) = 0)
       )) = 0;
	WR6 : SIZEOF (QUERY (gcs <* QUERY (item <* SELF.items |
     ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET'
                IN TYPEOF (item))) |
         NOT (SIZEOF (QUERY (crv <* 
           QUERY (elem <* gcs\geometric_set.elements |
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE'
                   IN TYPEOF (elem))) |
           NOT (valid_basis_curve_in_2d_wireframe
              (crv))
         )) = 0)
       )) = 0;
	WR7 : SIZEOF (QUERY (gcs <* QUERY (item <* SELF.items |         
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET'
                IN TYPEOF (item))) |
         NOT (SIZEOF (QUERY (pnt <*
           QUERY (elem <* gcs\geometric_set.elements |
             ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT'
                  IN TYPEOF(elem))) |
             NOT (SIZEOF (TYPEOF (pnt) *
               ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
	WR2 : SIZEOF(QUERY(it <* SELF.items | SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) = 1)) > 0;
	WR3 : SIZEOF(QUERY(mi <* QUERY(it <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) | NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET' IN TYPEOF(mr_it)))) > 0)))) = 0;
	WR4 : SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(pnt <* QUERY(gsel <* gs\geometric_set.elements | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT' IN TYPEOF(gsel)) | NOT (gbsf_check_point(pnt)))) = 0))) = 0;
	WR5 : SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(cv <* QUERY(gsel <* gs\geometric_set.elements | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE' IN TYPEOF(gsel)) | NOT (gbsf_check_curve(cv)))) = 0))) = 0;
	WR6 : SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | NOT (SIZEOF(QUERY(sf <* QUERY(gsel <* gs\geometric_set.elements | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE' IN TYPEOF(gsel)) | NOT (gbsf_check_surface(sf)))) = 0))) = 0;
	WR7 : SIZEOF(QUERY(gs <* QUERY(it <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it)) | SIZEOF(QUERY(gsel <* gs\geometric_set.elements | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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) * [ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ]) = 1) )) = 0;
	WR2 : SIZEOF ( 
QUERY ( it <* SELF.items| ( SIZEOF ( TYPEOF (it) * [ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ]) = 1) )) >= 1;
	WR3 : SIZEOF ( 
QUERY ( gcs <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( crv <* 
QUERY ( elem <* gcs\geometric_set.elements| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE' IN TYPEOF (elem)) )| NOT valid_geometrically_bounded_wf_curve(crv) )) = 0) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( gcs <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( pnts <* 
QUERY ( elem <* gcs\geometric_set.elements| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT' IN TYPEOF (elem)) )| NOT valid_geometrically_bounded_wf_point(pnts) )) = 0) )) = 0;
	WR5 : SIZEOF ( 
QUERY ( gcs <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( cnc <* 
QUERY ( elem <* gcs\geometric_set.elements| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC' IN TYPEOF (elem)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF (cnc\conic.position)) )) = 0) )) = 0;
	WR6 : SIZEOF ( 
QUERY ( gcs <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( pline <* 
QUERY ( elem <* gcs\geometric_set.elements| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' IN TYPEOF (elem)) )| NOT ( SIZEOF (pline\polyline.points) > 2) )) = 0) )) = 0;
	WR7 : SIZEOF ( 
QUERY ( mi <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION' IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation)) )) = 0;
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 ground_fact
	SUBTYPE OF (atomic_formula);
END_ENTITY;


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


ENTITY group_assignment
	ABSTRACT SUPERTYPE;
	assigned_group : group;
DERIVE
	role : object_role := get_role(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF ( i ) ) AND (
        i.name IN [ 'measuring method' , 'measuring position' ] ) )
        ) + SIZEOF ( QUERY ( i <* items | ( SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MEASURE_REPRESENTATION_ITEM' ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) ) =1 ) AND ( SIZEOF ( QUERY ( pdr
        <* USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) | SIZEOF ( QUERY ( gpa <* USEDIN (
        pdr. definition ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'GENERAL_PROPERTY_ASSOCIATION.'+
        'DERIVED_DEFINITION' ) | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'GENERAL_PROPERTY' IN TYPEOF ( gpa. base_definition ) ) AND
        ( gpa. base_definition.name ='surface_condition' ) ) ) =1 )
        ) =1 );
END_ENTITY;


ENTITY hidden_element_over_riding_styled_item
	SUBTYPE OF (context_dependent_over_riding_styled_item);
	SELF\styled_item.item : camera_image;
	SELF\context_dependent_over_riding_styled_item.style_context : LIST [1:1] OF presentation_view;
INVERSE
	container: SET [1:?] OF presentation_view FOR items;
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CAMERA_MODEL_D3_WITH_HLHSR' IN TYPEOF
                (SELF.item\mapped_item.mapping_source.mapping_origin);
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_role;
	name : label;
	description : OPTIONAL text;
END_ENTITY;


ENTITY illuminance_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 included_text_block
	SUBTYPE OF (mapped_item);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PACKAGE_PRODUCT_CONCEPT_FEATURE' IN TYPEOF ( SELF ) );
	WR2 : SIZEOF (QUERY
									( cfr <* USEDIN 
											( SELF ,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP.RELATING_PRODUCT_CONCEPT_FEATURE' ) 
											| 
											'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF( cfr ) 
									) 
								) + 
				 SIZEOF(QUERY
				 					( cfr <* USEDIN 
				 							(SELF , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP.RELATED_PRODUCT_CONCEPT_FEATURE' ) 
				 							| 
											'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF(cfr)
									)
								)= 0;
	WR3 : SELF.condition.conditional_operator.name = 'implication';
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);
WHERE
	WR1 : SIZEOF(QUERY(q <*
    SELF\indirectly_selected_elements.indirectly_picked_items
    | NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_REPRESENTATION_ITEM'
    IN TYPEOF(q)))) = 0;
END_ENTITY;


ENTITY inductance_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_usage_context_assignment
	SUBTYPE OF (product_definition_context);
	items : SET [1:?] OF instance_usage_context_select;
END_ENTITY;


ENTITY instanced_feature
	SUBTYPE OF (shape_aspect, shape_feature_definition);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION' IN
         TYPEOF(SELF\shape_aspect.of_shape.definition);
	WR2 : SELF\shape_aspect.product_definitional;
END_ENTITY;


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


ENTITY integer_representation_item
	SUBTYPE OF (representation_item, int_literal);
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_high : generic_expression := SELF\multiple_arity_generic_expression.operands[3];
	interval_item : generic_expression := SELF\multiple_arity_generic_expression.operands[2];
	interval_low : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
WHERE
	WR1 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXPRESSION' 
				IN TYPEOF(interval_low))
		AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXPRESSION' 
				IN TYPEOF(interval_item) )
		AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXPRESSION' 
				IN TYPEOF(interval_high));
	WR2 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION' 
				IN TYPEOF (SELF.interval_low)) 
			AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION'  
				IN TYPEOF (SELF.interval_high)) 
			AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION' 
				IN TYPEOF (SELF.interval_item))) 
		OR
		(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_EXPRESSION' 
				IN TYPEOF(SELF.interval_low)) 
			AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NUMERIC_EXPRESSION' 
				IN TYPEOF(SELF.interval_item)) 
			AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : represented_definition;
	used_representation : representation;
	identified_item : representation_item;
WHERE
	WR1 : SELF.used_representation IN using_representations(SELF.identified_item);
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 laminate_table
	SUPERTYPE OF (ONEOF (part_laminate_table, zone_structural_makeup))
	SUBTYPE OF (product_definition);
END_ENTITY;


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


ENTITY leader_curve
	SUBTYPE OF (annotation_curve_occurrence);
WHERE
	WR1 : SIZEOF( 
          QUERY(ldc <* USEDIN( SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                       'DRAUGHTING_CALLOUT.CONTENTS')
                   |   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_CURVE' IN TYPEOF (con)))=1;
END_ENTITY;


ENTITY leader_terminator
	SUBTYPE OF (terminator_symbol);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_CURVE' IN TYPEOF
        (SELF\terminator_symbol.annotated_curve);
END_ENTITY;


ENTITY length_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF)) OR ( SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 3);
	WR2 : SIZEOF ( 
QUERY ( sar <* USEDIN (SELF\geometric_tolerance.toleranced_shape_aspect, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')| (sar.name IN [ 'affected plane association', 'resulting intersection curve association' ]) )) = 1;
END_ENTITY;


ENTITY linear_dimension
	SUBTYPE OF (dimension_curve_directed_callout);
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_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 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 luminous_flux_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 magnetic_flux_density_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] *
                   TYPEOF(it)) = 1))) = 0;
	WR2 : SIZEOF (QUERY (it <* SELF.items |
         SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET',
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF(it)) =1 )) > 0;
	WR3 : SIZEOF (QUERY (mi <*  QUERY (it <* items |
                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) |
   NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN
             TYPEOF(mi\mapped_item.mapping_source.
                           mapped_representation)))) = 0;
	WR4 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
          NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OPEN_SHELL' IN TYPEOF(cfss)))) = 0;
	WR5 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
          NOT( (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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
              ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF(fac)))) = 0)
                    ))) = 0;
	WR6 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
               ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
            NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                  NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN
            TYPEOF(oe.edge_element)) OR
           ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBEDGE' IN
            TYPEOF(oe.edge_element)) ))) = 0
                   ))) = 0
                 ))) = 0
             ))) = 0;
	WR8 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
           ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
               NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                 NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
          NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF(oe.edge_start))
                AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN
                 TYPEOF(oe.edge_end))
            ))) = 0
              ))) = 0
               ))) = 0
                   ))) = 0;
	WR9 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
              ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
              ( NOT (SIZEOF(QUERY  (bnds <* fcs.bounds |
         NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP',
                'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP'] *
                   TYPEOF(bnds.bound)) = 1 )
                   )) = 0)
                 ))) = 0
             ))) = 0;
	WR10 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
              ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
              ( NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                 NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                   NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
              ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
               (NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                   ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN
            TYPEOF(sc_ag)))) = 0)))
               )) = 0
               ))) = 0
                   )))) = 0
                    ))) = 0;
	WR12 : SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) |
             NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces |
              ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(fcs)) AND
               (NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)) |
                NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list |
                   ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_SURFACE_MODEL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF (it)) = 1))) = 0;
	WR2 : SIZEOF (QUERY (it <* SELF.items |
       SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_SURFACE_MODEL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF (it)) = 1)) > 0;
	WR3 : SIZEOF (QUERY (mi <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) |
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_SURFACE_MODEL'
       IN TYPEOF (mr_it)))) > 0 )))) = 0;
	WR4 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
       NOT (SIZEOF (QUERY (sh <*
       sbsm\shell_based_surface_model.sbsm_boundary |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OPEN_SHELL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_CLOSED_SHELL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CLOSED_SHELL']
       * TYPEOF (sh)) = 1))) = 0))) = 0;
	WR5 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE' IN TYPEOF (fa)) )) = 0)))
       = 0))) = 0;
	WR6 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (bnds <* fa.bounds |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP']
       * TYPEOF (bnds.bound)) = 1))) = 0)))) = 0))) = 0))) = 0;
	WR8 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items|
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
       NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF 
       (oe.edge_element)))) = 0))) = 0)))) = 0))) = 0))) = 0;
	WR9 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe_cv <* QUERY (oe <* 
       elp_fbnds\path.edge_list |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF (oe.edge_element)) |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list|
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF
       (oe.edge_element.edge_start))
       AND
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN
       TYPEOF (oe.edge_element.edge_end))))) 
       = 0))) = 0)))) = 0))) = 0))) = 0;
	WR12 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
       NOT ((SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_SURFACE'] * TYPEOF
       (oe.edge_element.edge_start\vertex_point.vertex_geometry)) = 1)
       AND
       (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
       NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF
       (vlp_fbnds\vertex_loop.loop_vertex)))) = 0)))) = 0))) 
       = 0))) = 0;
	WR14 : SIZEOF (QUERY (sbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 mass_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CHARACTERIZED_OBJECT' IN
          TYPEOF(SELF\property_definition.definition)) OR
       (SIZEOF(bag_to_set(USEDIN(SELF ,
                     'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                     'PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) -
              QUERY(temp <* bag_to_set(USEDIN(SELF ,
                       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                       'PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) |
                       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 measure_qualification;
	name : label;
	description : text;
	qualified_measure : measure_with_unit;
	qualifiers : SET [1:?] OF value_qualifier;
WHERE
	WR1 : SIZEOF(QUERY(temp <* qualifiers |
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRECISION_QUALIFIER'
             IN TYPEOF(temp))) < 2;
	WR2 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'DRAUGHTING_MODEL' IN TYPEOF(rep_2)) OR 
       (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'DRAUGHTING_MODEL' IN TYPEOF(rep_1)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
	WR2 : NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_2)) OR 
       (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_1)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
	WR3 : NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_2)) OR 
       (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN TYPEOF(rep_1)) OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it1))
        OR
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (it1\mapped_item.mapping_source.mapped_representation)))) = 0;
	WR2 : SIZEOF(QUERY(pv <* QUERY(mi1 <* QUERY(it1 <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it1)) |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (mi1\mapped_item.mapping_source.mapped_representation)) |
        -- search in all presentation_views for axis2_placements and
        -- mapped_items and for the subtype of mapped_item
        -- camera_image_3d_with_scale; the latter shall reference
        -- a mechanical_design_geometric_presentation_representation;
        -- the supertype mapped_item shall reference presentation_view.
        NOT (SIZEOF(QUERY(it2 <* pv\mapped_item.mapping_source.
        mapped_representation\representation.items |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT'
        IN TYPEOF(it2))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it2)) AND NOT
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))) AND NOT (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (it2\mapped_item.mapping_source.mapped_representation)))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))
        AND NOT (
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'
        IN TYPEOF (it2\mapped_item.mapping_source.mapped_representation) ))
        ))) = 0))) = 0;
	WR3 : (SIZEOF(QUERY(ps <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') | ((ps.size\planar_extent.size_in_x <= 0)
        OR
        (ps.size\planar_extent.size_in_y <= 0)))) = 0)
        AND
        (SIZEOF(QUERY(ais <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AREA_IN_SET.AREA') |
        (SIZEOF(QUERY(ps <* USEDIN (ais, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') |
        ((ps.size\planar_extent.size_in_x <= 0)
        OR
        (ps.size\planar_extent.size_in_y <= 0)))) > 0))) = 0);
	WR4 : (SIZEOF(QUERY(ps <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') | 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AXIS2_PLACEMENT_2D' IN TYPEOF (ps.size.placement)))) = 1)
        AND
        (SIZEOF(QUERY(ps <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') | 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AXIS2_PLACEMENT_3D' IN TYPEOF (ps.size.placement)))) = 0)
        OR
        ((SIZEOF(QUERY(ais <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AREA_IN_SET.AREA') |
        (SIZEOF(QUERY(ps <* USEDIN (ais, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AXIS2_PLACEMENT_2D' IN TYPEOF (ps.size.placement)))) = 1))) = 1)
        AND
        (SIZEOF(QUERY(ais <* USEDIN (SELF,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AREA_IN_SET.AREA') |
        (SIZEOF(QUERY(ps <* USEDIN (ais, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SIZE.UNIT') |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it))) | NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SHAPE_REPRESENTATION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it))) |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(si\styled_item.item))) | NOT (
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(pss <* psa.styles | NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_STYLE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE']
        * TYPEOF(pss)) = 1))) = 0))) = 0))) = 0;
	WR4 : SIZEOF(QUERY(si <* QUERY(it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) |
        NOT (SIZEOF(QUERY(psbc <* QUERY(psa <* si\styled_item.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_STYLE_BY_CONTEXT' IN TYPEOF(psa)) | NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'REPRESENTATION_ITEM',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION']
        * TYPEOF(psbc\presentation_style_by_context.style_context))
        = 1))) = 0))) = 0;
	WR5 : SIZEOF(QUERY(si <* QUERY(it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ps <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_STYLE'
        IN TYPEOF(pss)) | NOT
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF (ps\point_style.marker_size))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(ps\point_style.marker_colour))
        = 1)))) = 0))) = 0))) = 0;
	WR6 : SIZEOF(QUERY(si <* QUERY(it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(cs <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF(pss)) | NOT((SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(cs\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF (cs\curve_style.curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) |
        NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_SIDE_STYLE' IN TYPEOF
        (ssu\surface_style_usage.style)))) = 0))) = 0))) = 0;
	WR8 : SIZEOF(QUERY(si <* QUERY(it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_PARAMETER_LINE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_CONTROL_GRID',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_SILHOUETTE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_SEGMENTATION_CURVE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_FILL_AREA',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_BOUNDARY']
        * TYPEOF(sses)) = 1))) = 0))) = 0))) = 0))) = 0;
	WR9 : SIZEOF(QUERY(si <* QUERY(it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sspl <* QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_PARAMETER_LINE' IN TYPEOF(sses)) |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF
        (sspl\surface_style_parameter_line.style_of_parameter_lines))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(sspl\surface_style_parameter_line.
        style_of_parameter_lines\curve_style.curve_colour)) = 1)
        AND (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sspl\surface_style_parameter_line.
        style_of_parameter_lines\curve_style.curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sscg <* QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_CONTROL_GRID' IN TYPEOF(sses)) |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (sscg\surface_style_control_grid.style_of_control_grid))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(sscg\surface_style_control_grid.
        style_of_control_grid\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF 
        (sscg\surface_style_control_grid.
        style_of_control_grid\curve_style.curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) |
        NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssh <* QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_SILHOUETTE' IN TYPEOF(sses)) |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (sssh\surface_style_silhouette.style_of_silhouette))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(sssh\surface_style_silhouette.
        style_of_silhouette\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sssh\surface_style_silhouette.style_of_silhouette\curve_style.
        curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(sssc <* QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_SEGMENTATION_CURVE' IN TYPEOF(sses)) |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF
        (sssc\surface_style_segmentation_curve.style_of_segmentation_curve))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve\curve_style.curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it)) | NOT (SIZEOF(QUERY(psa <* si\styled_item.styles |
        NOT (SIZEOF(QUERY(ssu <* QUERY(pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF(pss)) | NOT (SIZEOF(QUERY(ssbd <* QUERY(sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SURFACE_STYLE_BOUNDARY' IN TYPEOF(sses)) |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (ssbd\surface_style_boundary.style_of_boundary))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'DRAUGHTING_PRE_DEFINED_COLOUR']
        * TYPEOF(ssbd\surface_style_boundary.
        style_of_boundary\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'POSITIVE_LENGTH_MEASURE' IN TYPEOF (ssbd\surface_style_boundary.
        style_of_boundary\curve_style.curve_width))
        AND (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_FONT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_shaded_presentation_area
	SUBTYPE OF (presentation_area);
WHERE
	WR1 : SIZEOF (QUERY (it1 <* SELF.items |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT'
        IN TYPEOF (it1))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF (it1)) AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (it1\mapped_item.mapping_source.mapped_representation)))))) = 0;
	WR2 : SIZEOF (QUERY (pv <* QUERY (mi1 <* QUERY (it1 <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF (it1)) |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (mi1\mapped_item.mapping_source.mapped_representation)) |
        (* search in all presentation_views for axis2_placements and
           mapped_items and for the subtype of mapped_item,
           camera_image_3d_with_scale; the latter shall reference
           a mechanical_design_geometric_presentation_representation;
           the supertype mapped_item shall reference presentation_view. *)
        NOT (SIZEOF(QUERY(it2 <* pv\mapped_item.mapping_source.
        mapped_representation\representation.items |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT'
        IN TYPEOF(it2))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it2)) AND NOT
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))) AND NOT (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW'
        IN TYPEOF
        (it2\mapped_item.mapping_source.mapped_representation)))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(it2))
        AND NOT (
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION'
        IN TYPEOF (it2\mapped_item.mapping_source.mapped_representation) ))
        ))) = 0))) = 0;
	WR3 : (SIZEOF (QUERY(ps <* USEDIN (SELF, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'PRESENTATION_SIZE.UNIT') |
        NOT ((ps.size\planar_extent.size_in_x > 0) 
        AND (ps.size\planar_extent.size_in_y > 0)) )) = 0)
        AND
        (* check secondly for presentation_set, via area_in_set *)
        (SIZEOF (QUERY(pset <* QUERY(ais <* 
        USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'AREA_IN_SET.AREA') 
        | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SET' IN TYPEOF (ais.in_set)) |
        (* after having collected all presentation_set, check their sizes *)
        SIZEOF (QUERY(psize <* USEDIN(pset, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'PRESENTATION_SIZE.UNIT')
        | NOT ((psize.size\planar_extent.size_in_x > 0) 
        AND (psize.size\planar_extent.size_in_y > 0)) )) = 0)) = 0);
	WR4 : (SIZEOF(QUERY( psize <* USEDIN (SELF, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'PRESENTATION_SIZE.UNIT') 
        | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AXIS2_PLACEMENT_2D' 
        IN TYPEOF (psize.size.placement))) = 1)
        AND
        (* check secondly for presentation_set, via area_in_set *)
        (SIZEOF (QUERY(pset <* QUERY(ais <* 
        USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'AREA_IN_SET.AREA')
        | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRESENTATION_SET' IN TYPEOF (ais.in_set)) |
        (* after having collected all presentation_set, check their 
           dimension *)
        SIZEOF (QUERY(psize <* USEDIN(pset, 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'PRESENTATION_SIZE.UNIT')
        | NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
        'AXIS2_PLACEMENT_2D' 
        IN TYPEOF (psize.size.placement)) )) = 0)) = 0);
	WR5 : SIZEOF (QUERY (pv <* QUERY (mi1 <* QUERY (it1 <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' 
        IN TYPEOF (it1)) |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_VIEW' 
        IN TYPEOF 
        (mi1\mapped_item.mapping_source.mapped_representation)) |
        (* search in all presentation_views for 
           mapped_items and for the subtype of mapped_item,
           camera_image_3d_with_scale; the latter shall reference
           a camera_usage that shall have as its mapping_origin either
           camera_model_d3, camera_model_d3_with_hlhsr, or
           camera_model_with_light_sources. *)
        NOT (SIZEOF(QUERY(ci <* pv\mapped_item.mapping_source.
        mapped_representation\representation.items |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
         'CAMERA_IMAGE_3D_WITH_SCALE' IN TYPEOF(ci))
        AND
        (SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CAMERA_MODEL_D3',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CAMERA_MODEL_D3_WITH_HLHSR',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
WHERE
	WR1 : SIZEOF(QUERY(it <* SELF.items |
        NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CAMERA_MODEL_D3']
        * TYPEOF(it)) = 1))) = 0;
	WR2 : SIZEOF(QUERY(mi <* QUERY(it <* SELF.items |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(it))) | NOT (SIZEOF(
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SHAPE_REPRESENTATION',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION']
        * TYPEOF(mi\mapped_item.mapping_source.mapped_representation))
        = 1))) = 0;
	WR3 : SIZEOF(QUERY(smi <* QUERY(si <* QUERY(it <* SELF.items |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF(it))) |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'
        IN TYPEOF(si\styled_item.item))) | NOT (
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'SHAPE_REPRESENTATION' IN TYPEOF (smi\styled_item.
        item\mapped_item.mapping_source.mapped_representation))) )) = 0;
	WR4 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (pss <* psa.styles |
        NOT (SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_STYLE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE']
        *  TYPEOF (pss)) = 1))) = 0))) = 0))) = 0;
	WR5 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psbc <* QUERY (psa <* si\styled_item.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'PRESENTATION_STYLE_BY_CONTEXT' IN TYPEOF (psa))  |
        NOT (SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION_ITEM',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION']
        * TYPEOF (psbc\presentation_style_by_context.style_context)) = 1)))
        = 0))) = 0;
	WR6 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ps <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_STYLE'
        IN TYPEOF (pss)) |
        NOT (
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MARKER_TYPE'
        IN TYPEOF (ps\point_style.marker))
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (ps\point_style.marker_size))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (ps\point_style.marker_colour)) = 1)))) = 0))) = 0))) = 0;
	WR7 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (cs <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (pss)) |
        NOT (
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (cs\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (cs\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (cs\curve_style.curve_font)) = 1)))) = 0))) = 0))) = 0;
	WR8 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_SIDE_STYLE'
        IN TYPEOF (ssu\surface_style_usage.style)) )) = 0))) = 0 ))) = 0;
	WR9 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        NOT (SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_PARAMETER_LINE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_CONTROL_GRID',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_SILHOUETTE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_SEGMENTATION_CURVE',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_BOUNDARY',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_FILL_AREA',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_RENDERING'] * TYPEOF (sses)) = 1))) = 0))) = 0)))
        = 0))) = 0;
	WR10 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (ssfa <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_FILL_AREA'
        IN TYPEOF (sses)) |
        NOT (SIZEOF (QUERY (fss <*
        ssfa\surface_style_fill_area.fill_area.fill_styles |
        NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'FILL_AREA_STYLE_COLOUR' IN TYPEOF (fss))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (fss\fill_area_style_colour.fill_colour)) = 1)))) = 0))) = 0)))
        = 0))) = 0))) = 0;
	WR11 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (sspl <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_PARAMETER_LINE' IN TYPEOF (sses)) |
        NOT ((
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE' IN TYPEOF
        (sspl\surface_style_parameter_line.style_of_parameter_lines))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (sspl\surface_style_parameter_line.
        style_of_parameter_lines\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sspl\surface_style_parameter_line.
        style_of_parameter_lines\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (sspl\surface_style_parameter_line.
        style_of_parameter_lines\curve_style.curve_font)) = 1))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_RENDERING'
        IN TYPEOF
        (sspl\surface_style_parameter_line.style_of_parameter_lines))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	WR12 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (sscg <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_CONTROL_GRID' IN TYPEOF (sses)) |
        NOT ((
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (sscg\surface_style_control_grid.style_of_control_grid))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (sscg\surface_style_control_grid.
        style_of_control_grid\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sscg\surface_style_control_grid.
        style_of_control_grid\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (sscg\surface_style_control_grid.
        style_of_control_grid\curve_style.curve_font)) = 1))
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_RENDERING'
        IN TYPEOF (sscg\surface_style_control_grid.style_of_control_grid))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	WR13 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (sssh <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_SILHOUETTE' IN TYPEOF (sses)) |
        NOT ((
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (sssh\surface_style_silhouette.style_of_silhouette))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (sssh\surface_style_silhouette.
        style_of_silhouette\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sssh\surface_style_silhouette.
        style_of_silhouette\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (sssh\surface_style_silhouette.
        style_of_silhouette\curve_style.curve_font)) = 1)) 
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_RENDERING'
        IN TYPEOF (sssh\surface_style_silhouette.style_of_silhouette))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	WR14 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (sssc <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_SEGMENTATION_CURVE' IN TYPEOF (sses)) |
        NOT ((
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF
        (sssc\surface_style_segmentation_curve.style_of_segmentation_curve))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve\curve_style.curve_font)) = 1)) 
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_RENDERING'
        IN TYPEOF (sssc\surface_style_segmentation_curve.
        style_of_segmentation_curve))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	WR15 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (ssbd <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_BOUNDARY' IN TYPEOF (sses)) |
        NOT ((
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE'
        IN TYPEOF (ssbd\surface_style_boundary.style_of_boundary))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (ssbd\surface_style_boundary.
        style_of_boundary\curve_style.curve_colour)) = 1)
        AND
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF
        (ssbd\surface_style_boundary.
        style_of_boundary\curve_style.curve_width))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'CURVE_STYLE_FONT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_CURVE_FONT'] * TYPEOF
        (ssbd\surface_style_boundary.
        style_of_boundary\curve_style.curve_font)) = 1)) 
        OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_STYLE_RENDERING'
        IN TYPEOF (ssbd\surface_style_boundary.style_of_boundary))
        AND
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
	WR16 : SIZEOF (QUERY (si <* QUERY (it <* SELF.items |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM'
        IN TYPEOF (it)) |
        NOT (SIZEOF (QUERY (psa <* si\styled_item.styles |
        NOT (SIZEOF (QUERY (ssu <* QUERY (pss <* psa.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE'
        IN TYPEOF (pss)) |
        NOT (SIZEOF (QUERY (ssre <* QUERY (sses <*
        ssu\surface_style_usage.style\surface_side_style.styles |
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'SURFACE_STYLE_RENDERING' IN TYPEOF (sses)) |
        NOT
        (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COLOUR_RGB',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DRAUGHTING_PRE_DEFINED_COLOUR'] * TYPEOF
        (ssre\surface_style_rendering.surface_colour)) = 1)))
        = 0))) = 0))) = 0))) = 0;
END_ENTITY;


ENTITY min_and_major_ply_orientation_basis
	SUBTYPE OF (representation_item_relationship, geometric_representation_item);
	SELF\representation_item_relationship.related_representation_item : axis2_placement_3d;
	SELF\representation_item_relationship.relating_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 modified_geometric_tolerance
	SUBTYPE OF (geometric_tolerance);
	modifier : limit_condition;
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 moments_of_inertia_representation
	SUBTYPE OF (representation);
WHERE
	WR1 : (SIZEOF(SELF.items) = 1) AND 
 (SIZEOF( QUERY( i <* SELF.items | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'COMPOUND_REPRESENTATION_ITEM' IN TYPEOF(i)) AND 
  (i.name = 'moments of inertia matrix') )) = 1);
	WR2 : SIZEOF( QUERY( i <* SELF.items | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'COMPOUND_REPRESENTATION_ITEM' IN TYPEOF(i)) AND 
  ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS') |
 (ata\attribute_classification_assignment.role.name='primary') AND
 (ata\attribute_classification_assignment.attribute_name= SELF\attribute_value_assignment.attribute_name) AND 
 (ata\attribute_classification_assignment.assigned_class :=: translation_language) ))>0 )) =0;
END_ENTITY;


ENTITY multiple_arity_boolean_expression
	ABSTRACT SUPERTYPE
	SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
	SELF\multiple_arity_generic_expression.operands : LIST [2:?] OF boolean_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
	SUBTYPE OF (numeric_expression, multiple_arity_generic_expression);
	SELF\multiple_arity_generic_expression.operands : LIST [2:?] OF numeric_expression;
END_ENTITY;


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


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


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


ENTITY next_assembly_usage_occurrence
	SUBTYPE OF (assembly_component_usage);
END_ENTITY;


ENTITY non_manifold_surface_shape_representation
	SUBTYPE OF (shape_representation);
WHERE
	WR1 : SIZEOF (QUERY (it <* SELF.items |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_BASED_SURFACE_MODEL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D'] * TYPEOF (it)) = 1)))
       = 0;
	WR2 : SIZEOF (QUERY (it <* SELF.items |
       SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_BASED_SURFACE_MODEL',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM'] * TYPEOF (it)) = 1)) > 0;
	WR3 : SIZEOF (QUERY (mi <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) |
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_BASED_SURFACE_MODEL'
       IN TYPEOF (mr_it)))) > 0 )))) = 0;
	WR4 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_FACE'] * TYPEOF (fa)) = 1)))
       = 0))) = 0))) = 0;
	WR5 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE' IN TYPEOF (fa))) |
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_FACE' IN TYPEOF (fa))) |
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (bnds <* fa.bounds |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP']
       * TYPEOF (bnds.bound)) = 1))) = 0)))) = 0))) = 0))) = 0;
	WR8 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items|
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
       NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF 
       (oe.edge_element)))) = 0))) = 0)))) = 0))) = 0))) = 0;
	WR9 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe_cv <* QUERY (oe <* 
       elp_fbnds\path.edge_list |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF (oe.edge_element)) |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list|
       NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF
       (oe.edge_element.edge_start))
       AND
       ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN
       TYPEOF (oe.edge_element.edge_end))))) 
       = 0))) = 0)))) = 0))) = 0))) = 0;
	WR12 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
       NOT ((SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_SURFACE'] * TYPEOF
       (oe.edge_element.edge_start\vertex_point.vertex_geometry)) = 1)
       AND
       (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
       NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF
       (vlp_fbnds\vertex_loop.loop_vertex)))) = 0)))) = 0))) 
       = 0))) = 0;
	WR14 : SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ADVANCED_FACE' IN TYPEOF (fa))
       OR
       (SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
       NOT (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEGENERATE_PCURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_SURFACE'] * TYPEOF
       (vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry)) 
       = 1))) = 0)))) = 0))) = 0))) = 0;
END_ENTITY;


ENTITY null_representation_item
	SUBTYPE OF (representation_item);
END_ENTITY;


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


ENTITY object_role;
	name : label;
	description : OPTIONAL text;
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_shell
	SUBTYPE OF (connected_face_set);
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_end : vertex := boolean_choose (SELF.orientation,
                                            SELF.edge_element.edge_end,
                                            SELF.edge_element.edge_start);
	SELF\edge.edge_start : vertex := boolean_choose (SELF.orientation,
                                            SELF.edge_element.edge_start,
                                            SELF.edge_element.edge_end);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_FACE' IN TYPEOF (SELF.face_element));
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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ORIENTED_PATH' IN TYPEOF (SELF.path_element));
END_ENTITY;


ENTITY oriented_surface
	SUBTYPE OF (surface);
	orientation : BOOLEAN;
END_ENTITY;


ENTITY outer_boundary_curve
	SUBTYPE OF (boundary_curve);
END_ENTITY;


ENTITY over_riding_styled_item
	SUBTYPE OF (styled_item);
	over_ridden_style : styled_item;
END_ENTITY;


ENTITY package_product_concept_feature
	SUBTYPE OF (product_concept_feature);
WHERE
	WR1 : NOT ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONDITIONAL_CONCEPT_FEATURE' IN TYPEOF ( SELF ) );
	WR2 : SIZEOF ( QUERY 
									( 
										cfr <* USEDIN ( SELF , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP.' +'RELATING_PRODUCT_CONCEPT_FEATURE' ) 
										| 
										('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN TYPEOF (cfr ) ) 
										AND 
										( SIZEOF ( QUERY 
																( 
																	ipcf <* USEDIN ( cfr , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONDITIONAL_CONCEPT_FEATURE.' +	'CONDITION' ) 
																	| 
																	'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'INCLUSION_PRODUCT_CONCEPT_FEATURE' IN TYPEOF ( ipcf ) 
																)
															)= 1 
										)
									)
							)>0;
END_ENTITY;


ENTITY parabola
	SUBTYPE OF (conic);
	focal_dist : length_measure;
WHERE
	WR1 : focal_dist <> 0.0;
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 parallelism_tolerance
	SUBTYPE OF (geometric_tolerance_with_datum_reference);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) < 3;
END_ENTITY;


ENTITY parametric_representation_context
	SUBTYPE OF (representation_context);
END_ENTITY;


ENTITY part_laminate_table
	SUPERTYPE OF (ONEOF (composite_assembly_table, ply_laminate_table))
	SUBTYPE OF (laminate_table);
END_ENTITY;


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


ENTITY path
	SUPERTYPE OF (ONEOF (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 pcurve
	SUBTYPE OF (curve);
	basis_surface : surface;
	reference_to_curve : definitional_representation;
WHERE
	WR1 : SIZEOF(reference_to_curve\representation.items) = 1;
	WR2 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 percentage_laminate_definition
	SUBTYPE OF (product_definition);
WHERE
	WR1 : SIZEOF (QUERY (pdr <* USEDIN (SELF, 
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'PRODUCT_DEFINITION_RELATIONSHIP.' +
                             'RELATING_PRODUCT_DEFINITION') |
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
                             TYPEOF (pdr))) > 0;
END_ENTITY;


ENTITY percentage_laminate_table
	SUBTYPE OF (zone_structural_makeup);
END_ENTITY;


ENTITY percentage_ply_definition
	SUBTYPE OF (product_definition);
WHERE
	WR1 : SIZEOF (QUERY (pdr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
        'PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION') |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PERCENTAGE_LAMINATE_DEFINITION' 
        IN TYPEOF (pdr.related_product_definition)) AND
        (pdr.name = 'makeup and properties'))) = 0;
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);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 3;
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
	description : text := get_description_value(SELF);
	name : label := get_name_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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], 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 physical_breakdown_context
	SUBTYPE OF (breakdown_context);
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 | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM' IN TYPEOF(item))) = 1;
    WR2: SIZEOF (QUERY (se <* QUERY (item <* SELF.items | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STYLED_ITEM' IN TYPEOF (item))) 
         | NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PICTURE_REPRESENTATION_ITEM' 
                IN TYPEOF (se\styled_item.item)) )) = 0;
END_ENTITY;


ENTITY picture_representation_item
	ABSTRACT SUPERTYPE OF (ONEOF (externally_defined_picture_representation_item, predefined_picture_representation_item))
	SUBTYPE OF (bytes_representation_item);
END_ENTITY;


ENTITY placed_datum_target_feature
	SUBTYPE OF (datum_target);
DERIVE
	representation_associations : SET [0:?] OF property_definition_representation := get_shape_aspect_property_definition_representations(SELF);
WHERE
	WR1 : SELF.description IN ['point','line','rectangle','circle', 'circular line'];
	WR2 : SIZEOF (QUERY (pdr <* representation_associations | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_extent
	SUBTYPE OF (geometric_representation_item);
	size_in_x : length_measure;
	size_in_y : length_measure;
END_ENTITY;


ENTITY plane
	SUBTYPE OF (elementary_surface);
END_ENTITY;


ENTITY plane_angle_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_minus_tolerance;
	range : tolerance_method_definition;
	toleranced_dimension : dimensional_characteristic;
UNIQUE
	UR1 : toleranced_dimension;
END_ENTITY;


ENTITY ply_laminate_definition
	SUBTYPE OF (product_definition);
WHERE
	WR1 : SIZEOF (QUERY (pdr <* USEDIN (SELF, 
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'PRODUCT_DEFINITION_RELATIONSHIP.' +
                             'RELATING_PRODUCT_DEFINITION') |
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
                             TYPEOF (pdr))) = 1;
END_ENTITY;


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


ENTITY ply_laminate_table
	SUBTYPE OF (part_laminate_table);
END_ENTITY;


ENTITY point
	SUPERTYPE OF (ONEOF (cartesian_point, point_on_curve, point_on_surface, 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_on_curve
	SUBTYPE OF (point);
	basis_curve : curve;
	point_parameter : parameter_value;
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_path
	SUBTYPE OF (compound_representation_item, geometric_representation_item);
	SELF\compound_representation_item.item_element : point_path_members;
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 : marker_select;
	marker_size : size_select;
	marker_colour : colour;
END_ENTITY;


ENTITY polar_complex_number_literal
	SUBTYPE OF (generic_literal);
	radius : REAL;
	angle : REAL;
WHERE
	WR1 : radius >= 0;
	WR2 : { 0 <= angle < 2*PI };
END_ENTITY;


ENTITY poly_loop
	SUBTYPE OF (loop, geometric_representation_item);
	polygon : 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);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF)) OR ( SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 3);
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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_BOUNDED_SURFACE' IN 
    TYPEOF(sketch_basis)) AND NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN
    TYPEOF(sketch_basis\curve_bounded_surface.basis_surface)));
	WR2 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_SURFACE' IN TYPEOF(sketch_basis)) AND
    NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN TYPEOF(sketch_basis\face_surface.face_geometry)));
	WR3 : SIZEOF(QUERY(q <* auxiliary_elements | (SIZEOF(TYPEOF(q) * 
    ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT','AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE']) = 0))) = 0;
	WR4 : SIZEOF(QUERY(q <* auxiliary_elements | 
    q\geometric_representation_item.dim <> 3)) = 0;
END_ENTITY;


ENTITY power_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_colour
	SUBTYPE OF (pre_defined_item, colour);
END_ENTITY;


ENTITY pre_defined_curve_font
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY pre_defined_dimension_symbol
	SUBTYPE OF (pre_defined_symbol);
WHERE
	WR1 : SELF.name IN [ 'arc length' , 'conical taper' , 'counterbore' , 'countersink' , 'depth' , 'diameter' , 'plus minus' , 'radius' , 'slope' , 'spherical diameter' , 'spherical radius' , 'square'];
END_ENTITY;


ENTITY pre_defined_geometrical_tolerance_symbol
	SUBTYPE OF (pre_defined_symbol);
WHERE
	WR1 : SELF.name IN ['angularity' , 'basic dimension' , 'blanked datum reference' , 'circular runout' , 'circularity' , 'concentricity' , 'cylindricity' , 'datum target identification' , 'diameter' , 'filled datum reference' , 'flatness' , 'least material condition' , 'maximum material condition' , 'parallelism' , 'perpendicularity' , 'position' , 'profile of a line' , 'profile of a surface' , 'projected tolerance zone' , 'regardless of feature size' , 'straightness' , 'symmetry' , 'total runout' ];
END_ENTITY;


ENTITY pre_defined_item;
	name : label;
END_ENTITY;


ENTITY pre_defined_marker
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY pre_defined_point_marker_symbol
	SUBTYPE OF (pre_defined_marker, pre_defined_symbol);
WHERE
	WR1 : SELF.name IN ['asterisk','circle','dot','plus','square','triangle','x'];
END_ENTITY;


ENTITY pre_defined_surface_condition_symbol
	SUBTYPE OF (pre_defined_symbol);
WHERE
	WR1 : SELF.name IN ['000' , '010' , '020' , '030' , '040' , '050' , '060' , '070' , '001' , '011' , '021' , '031' , '041' , '051' , '061' , '071' , '100' , '110' , '120' , '130' , '140' , '150' , '160' , '170' , '101' , '111' , '121' , '131' , '141' , '151' , '161' , '171' , '200' , '210' , '220' , '230' , '240' , '250' , '260' , '270' , '201' , '211' , '221' , '231' , '241' , '251' , '261' , '271'];
END_ENTITY;


ENTITY pre_defined_surface_side_style
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY pre_defined_symbol
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY pre_defined_terminator_symbol
	SUBTYPE OF (pre_defined_symbol);
WHERE
	WR1 : SELF.name IN ['blanked arrow', 'blanked box', 'blanked dot', 'blanked triangle', 'dimension origin', 'filled arrow', 'filled box', 'filled dot', 'integral symbol', 'open arrow', 'slash', 'unfilled arrow', 'unfilled triangle', 'filled triangle'];
END_ENTITY;


ENTITY pre_defined_text_font
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY pre_defined_tile
	SUBTYPE OF (pre_defined_item);
END_ENTITY;


ENTITY precision_qualifier;
	precision_value : INTEGER;
END_ENTITY;


ENTITY predefined_picture_representation_item
	SUBTYPE OF (picture_representation_item);
WHERE
	WR1 : SELF\representation_item.name IN pre_defined_picture_representation_types;
END_ENTITY;


ENTITY presentation_area
	SUBTYPE OF (presentation_representation);
WHERE
	WR1 : ((SIZEOF (QUERY (ais <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                                 'AREA_IN_SET.AREA') | 
             SIZEOF (USEDIN (ais, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                  'PRESENTATION_SIZE.UNIT')) =1)) > 0) OR
            (SIZEOF (USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_AREA' IN TYPEOF (SELF))
           OR
           (SIZEOF (QUERY (prr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                                'REPRESENTATION_RELATIONSHIP.REP_2') | 
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_REPRESENTATION' IN
           TYPEOF (prr\representation_relationship.rep_1))) > 0)
           OR 
           (SIZEOF(QUERY( rm <* USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 
                                             'REPRESENTATION_MAP.'+ 
                                             'MAPPED_REPRESENTATION') | 
           SIZEOF(QUERY( mi <* USEDIN(rm, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
                                          'MAPPED_ITEM.'+
                                          'MAPPING_SOURCE') |   
           SIZEOF(QUERY( rep <* using_representations (mi) |                              
                                        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRESENTATION_REPRESENTATION'
           IN TYPEOF (SELF.unit)) AND
           item_in_context (SELF.size, 
                            SELF.unit\representation.context_of_items)
           )
           OR
           (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AREA_IN_SET'
           IN TYPEOF (SELF.unit)) AND
           (SIZEOF (QUERY ( ais <* SELF.unit\area_in_set.in_set.areas |
                NOT item_in_context (SELF.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 <* SELF.styles |
           NOT (SIZEOF (QUERY (style2 <* (SELF.styles - style1) |
           NOT ((TYPEOF (style1) <> TYPEOF (style2)) OR
             (SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
                       'SURFACE_STYLE_USAGE',
                       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
                       'EXTERNALLY_DEFINED_STYLE'] *
                     TYPEOF (style1)) = 1)
           ))) = 0
         ))) = 0;
	WR2 : SIZEOF (QUERY (style1 <* SELF.styles |
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE' IN
         TYPEOF(style1)
         )) <= 2;
	WR3 : SIZEOF (QUERY (style1 <* SELF.styles |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF (style1)) AND 
         (SIZEOF (QUERY (style2 <* (SELF.styles - style1) |
           ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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);
WHERE
	WR1 : SIZEOF(QUERY(q <* SELF\procedural_representation_sequence.elements
    | NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_REPRESENTATION_ITEM'
    IN TYPEOF(q)))) = 0;
END_ENTITY;


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


ENTITY product_category;
	name : label;
	description : OPTIONAL text;
DERIVE
	id : identifier := get_id_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GROUP_ASSIGNMENT.ASSIGNED_GROUP' ) 
										|
     								('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'APPLIED_GROUP_ASSIGNMENT' IN TYPEOF(aga)) 
     								AND
    								(
    									( aga.role.name <> 'specification category member' ) 
    									OR 
    									( SIZEOF(QUERY 
    															( 
    																i <* aga.items 
    																| 
    																('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'PRODUCT_CONCEPT_FEATURE' IN TYPEOF ( i ) ) 
    																AND 
    																NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'CONDITIONAL_CONCEPT_FEATURE' IN TYPEOF (i))
    															)
    													) <> SIZEOF (aga.items)
    									)
    								) 
       						) 
       				) =0;
END_ENTITY;


ENTITY product_concept_feature_category_usage
	SUBTYPE OF (group_assignment);
	items : SET [1:?] OF category_usage_item;
	SELF\group_assignment.assigned_group : product_concept_feature_category;
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_definition
	SUPERTYPE OF (ONEOF (composite_assembly_definition, composite_assembly_sequence_definition, laminate_table, percentage_laminate_definition, percentage_ply_definition, ply_laminate_definition, ply_laminate_sequence_definition, thickness_laminate_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_with_specified_source
	SUBTYPE OF (product_definition_formation);
	make_or_buy : source;
END_ENTITY;


ENTITY product_definition_group_assignment
	SUBTYPE OF (group_assignment);
	items : SET [1:1] OF product_definition_or_product_definition_relationship;
	SELF\group_assignment.assigned_group : product_definition_element_relationship;
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_relationship;
	id : identifier;
	name : label;
	description : OPTIONAL text;
	relating_product_definition : product_definition;
	related_product_definition : product_definition;
END_ENTITY;


ENTITY product_definition_shape
	SUBTYPE OF (property_definition);
UNIQUE
  UR1: SELF\property_definition.definition;
WHERE
	WR1 : SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CHARACTERIZED_PRODUCT_DEFINITION', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CHARACTERIZED_OBJECT'] * TYPEOF(SELF\property_definition.definition)) > 0;
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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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],
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION_USAGE');
END_ENTITY;


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


ENTITY product_identification
	SUBTYPE OF (configuration_item, characterized_object);
	SELF\configuration_item.item_concept : product_class;
WHERE
	WR1 : SIZEOF(QUERY 
		( cd <* USEDIN ( SELF ,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONFIGURATION_DESIGN.CONFIGURATION' ) 
		|
     	( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'PRODUCT_DEFINITION_FORMATION' IN TYPEOF ( cd. design ) ) 
     	AND 
    	( SIZEOF ( QUERY 
    	( 
    	prpc <* USEDIN ( cd. design\product_definition_formation.of_product , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') 
    	| 
        prpc. name IN ['part' , 'raw material' , 'tool'] ) ) >0
     	) 
     	) 
     	) <=1;
	WR2 : NOT ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'CONFIGURABLE_ITEM' IN TYPEOF( SELF ) ) 
			XOR ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'PRODUCT_SPECIFICATION' IN TYPEOF ( SELF ) );
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_related_product_category
	SUBTYPE OF (product_category);
	products : SET [1:?] OF product;
END_ENTITY;


ENTITY product_specification
	SUBTYPE OF (product_identification, configurable_item);
END_ENTITY;


ENTITY projected_zone_definition
	SUBTYPE OF (tolerance_zone_definition);
	projection_end : shape_aspect;
	projected_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 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 | 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(p_1))))=1;
	WR2 : SIZEOF(SELF\draughting_callout.contents) >=2;
END_ENTITY;


ENTITY promissory_usage_occurrence
	SUBTYPE OF (assembly_component_usage);
END_ENTITY;


ENTITY property_definition;
	name : label;
	description : OPTIONAL text;
	definition : characterized_definition;
DERIVE
	id : identifier := get_id_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
	WR2 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;


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


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


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


ENTITY quasi_uniform_curve
	SUBTYPE OF (b_spline_curve);
END_ENTITY;


ENTITY quasi_uniform_surface
	SUBTYPE OF (b_spline_surface);
END_ENTITY;


ENTITY radioactivity_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_CURVE' IN TYPEOF (con)))<=1;
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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_representation_item
	SUBTYPE OF (representation_item, slash_expression);
WHERE
	WR1 : SIZEOF( QUERY( operand <* SELF\binary_generic_expression.operands | 
        NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INT_LITERAL' IN TYPEOF(operand)))) = 0;
END_ENTITY;


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


ENTITY real_representation_item
	SUBTYPE OF (representation_item, real_literal);
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_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 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(basis_surface))
       AND  (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN TYPEOF(basis_surface)))) OR
      ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_OF_REVOLUTION' IN TYPEOF(basis_surface))
          OR (usense = (u2 > u1));
	WR4 : (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SPHERICAL_SURFACE' IN TYPEOF(basis_surface))
          OR
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 relative_event_occurrence
	SUBTYPE OF (event_occurrence);
	base_event : event_occurrence;
	offset : time_measure_with_unit;
END_ENTITY;


ENTITY rep_item_group
	SUBTYPE OF (group, representation_item);
WHERE
	WR1 : SIZEOF(USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS')) > 0;
	WR2 : SIZEOF(QUERY(r <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'REPRESENTATION.' + 'ITEMS') | r.name = 'group representation')) > 0;
	WR3 : SIZEOF(QUERY(ga <* USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GROUP_ASSIGNMENT.' + 'ASSIGNED_GROUP') | ga.role.name <> 'group membership')) = 0;
	WR4 : SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_REPRESENTATION_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'TOPOLOGICAL_REPRESENTATION_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'MAPPED_ITEM','AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'STYLED_ITEM'] * TYPEOF(SELF)) = 1;
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 representation;
	name : label;
	items : SET [1:?] OF representation_item;
	context_of_items : representation_context;
DERIVE
	description : text := get_description_value (SELF);
	id : identifier := get_id_value (SELF);
WHERE
	WR1 : SIZEOF (USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'ID_ATTRIBUTE.IDENTIFIED_ITEM'))
         <= 1;
	WR2 : SIZEOF (USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM'))
         <= 1;
END_ENTITY;


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


ENTITY representation_item
	SUPERTYPE OF (ONEOF (binary_representation_item, compound_representation_item, mapped_item, value_representation_item, mapped_item, styled_item, boolean_representation_item, date_representation_item, date_time_representation_item, integer_representation_item, logical_representation_item, rational_representation_item, real_representation_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(SELF.mapping_origin,
        SELF.mapped_representation.context_of_items);
END_ENTITY;


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


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


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


ENTITY requirement_assignment
	SUBTYPE OF (characterized_object, group);
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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_MEASURE' 
         IN TYPEOF(first_trim_condition)) 
         OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_MEASURE' 
         IN TYPEOF(second_trim_condition)));
	WR2 : NOT((('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE_ANGLE_MEASURE' 
         IN TYPEOF(first_trim_condition)) AND
            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE_ANGLE_MEASURE' 
         IN TYPEOF(second_trim_condition))) AND
         (first_trim_condition = second_trim_condition));
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.related_method : information_right;
	SELF\action_method_relationship.relating_method : information_usage_right;
DERIVE
	right_applied : information_right := SELF\action_method_relationship.related_method;
	right_usage : information_usage_right := SELF\action_method_relationship.relating_method;
END_ENTITY;


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


ENTITY roundness_tolerance
	SUBTYPE OF (geometric_tolerance);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(SELF.reference_surface)) AND
         (SELF.reference_surface\b_spline_surface.u_degree = 1);
	WR2 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF(SELF.directrix)) OR
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 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 satisfied_requirement
	SUBTYPE OF (group_assignment);
	items : SET [1:1] OF product_definition;
	SELF\group_assignment.assigned_group : satisfies_requirement;
END_ENTITY;


ENTITY satisfies_requirement
	SUBTYPE OF (group);
END_ENTITY;


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


ENTITY scalar_variable
	SUBTYPE OF (abstract_variable);
END_ENTITY;


ENTITY scattering_parameter
	SUBTYPE OF (polar_complex_number_literal);
WHERE
	WR1 : SIZEOF(TYPEOF(SELF) - (TYPEOF(SELF\polar_complex_number_literal ||
       SELF\scattering_parameter))) = 0;
END_ENTITY;


ENTITY sculptured_solid
	SUBTYPE OF (modified_solid);
	sculpturing_element : generalized_surface_select;
	positive_side : BOOLEAN;
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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN
           TYPEOF(SELF\surface_curve.associated_geometry[1]);
	WR4 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN
            TYPEOF(SELF\surface_curve.associated_geometry[2]);
END_ENTITY;


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


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


ENTITY security_classification_level;
	name : label;
END_ENTITY;


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


ENTITY shape_aspect;
	name : label;
	description : OPTIONAL text;
	of_shape : product_definition_shape;
	product_definitional : LOGICAL;
DERIVE
	id : identifier := get_id_value(SELF);
WHERE
	WR1 : SIZEOF(USEDIN(SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DERIVED_SHAPE_ASPECT' IN
TYPEOF
            (SELF\SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT);
END_ENTITY;


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


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


ENTITY shape_dimension_representation
	SUBTYPE OF (shape_representation);
WHERE
	WR1 : SIZEOF (QUERY (temp <* SELF\representation.items | 
    NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' 
        IN TYPEOF (temp)))) = 0;
	WR2 : SIZEOF (SELF\representation.items) <= 3;
	WR3 : SIZEOF (QUERY (pos_mri <* QUERY (real_mri <*
        SELF\representation.items | 'REAL' IN TYPEOF
        (real_mri\measure_with_unit.value_component) ) |        
     NOT  (pos_mri\measure_with_unit.value_component > 0.0 ))) = 0;
END_ENTITY;


ENTITY shape_feature_definition
	SUBTYPE OF (characterized_object);
END_ENTITY;


ENTITY shape_representation
	SUBTYPE OF (representation);
END_ENTITY;


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


ENTITY shape_representation_with_parameters
	SUBTYPE OF (shape_representation);
WHERE
	WR1 : SIZEOF( QUERY( i <* SELF.items | SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLACEMENT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM'] * TYPEOF(i)) = 1 )) = SIZEOF(SELF.items);
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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT_3D' ] * TYPEOF (it)) = 1) )) = 0;
	WR2 : SIZEOF ( 
QUERY ( it <* SELF.items| ( SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' ] * TYPEOF (it)) = 1) )) >= 1;
	WR3 : SIZEOF ( 
QUERY ( sbwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( eloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (wsb)) )| NOT ( SIZEOF ( 
QUERY ( el <* eloop\path.edge_list| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_CURVE' IN TYPEOF (el.edge_element)) )) = 0) )) = 0) )) = 0) )) = 0;
	WR4 : SIZEOF ( 
QUERY ( sbwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( eloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (wsb)) )| NOT ( SIZEOF ( 
QUERY ( pline_el <* 
QUERY ( el <* eloop\path.edge_list| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( eloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( eloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE_LOOP' IN TYPEOF (wsb)) )| NOT ( SIZEOF ( 
QUERY ( el <* eloop\path.edge_list| NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (el.edge_element.edge_start)) AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (el.edge_element.edge_end))) )) = 0) )) = 0) )) = 0) )) = 0;
	WR7 : SIZEOF ( 
QUERY ( sbwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( eloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( vloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_LOOP' IN TYPEOF (wsb)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (vloop\vertex_loop.loop_vertex)) )) = 0) )) = 0) )) = 0;
	WR9 : SIZEOF ( 
QUERY ( sbwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( ws <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN TYPEOF (sb)) )| NOT ( SIZEOF ( 
QUERY ( vloop <* 
QUERY ( wsb <* ws\wire_shell.wire_shell_extent| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( vs <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_SHELL' IN TYPEOF (sb)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_POINT' IN TYPEOF (vs\vertex_shell.vertex_shell_extent.loop_vertex)) )) = 0) )) = 0;
	WR11 : SIZEOF ( 
QUERY ( sbwm <* 
QUERY ( it <* SELF.items| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF (it)) )| NOT ( SIZEOF ( 
QUERY ( vs <* 
QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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| ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (it)) )| NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MASS_UNIT' IN TYPEOF(SELF)) AND
             (SIZEOF(USEDIN(SELF,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DERIVED_UNIT_ELEMENT.UNIT')) > 0)) OR
            (prefix = si_prefix.kilo);
END_ENTITY;


ENTITY simple_boolean_expression
	ABSTRACT SUPERTYPE
	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
	SUBTYPE OF (numeric_expression, simple_generic_expression);
END_ENTITY;


ENTITY slash_expression
	SUBTYPE OF (binary_numeric_expression);
END_ENTITY;


ENTITY smeared_material_definition
	SUBTYPE OF (zone_structural_makeup);
END_ENTITY;


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


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


ENTITY solid_curve_font
	SUBTYPE OF (pre_defined_curve_font);
END_ENTITY;


ENTITY solid_model
	SUPERTYPE OF (ONEOF (csg_solid, manifold_solid_brep, swept_face_solid, swept_area_solid, swept_disk_solid, solid_replica))
	SUBTYPE OF (geometric_representation_item);
END_ENTITY;


ENTITY solid_replica
	SUBTYPE OF (solid_model);
	parent_solid : solid_model;
	transformation : cartesian_transformation_operator_3d;
WHERE
	WR1 : acyclic_solid_replica(SELF, parent_solid);
	WR2 : parent_solid\geometric_representation_item.dim = 3;
END_ENTITY;


ENTITY solid_with_angle_based_chamfer
	SUBTYPE OF (solid_with_chamfered_edges);
	offset_distance : positive_length_measure;
	left_offset : BOOLEAN;
	offset_angle : positive_plane_angle_measure;
END_ENTITY;


ENTITY solid_with_chamfered_edges
	ABSTRACT SUPERTYPE OF (ONEOF (solid_with_single_offset_chamfer, solid_with_double_offset_chamfer, solid_with_angle_based_chamfer))
	SUBTYPE OF (edge_blended_solid);
END_ENTITY;


ENTITY solid_with_circular_pattern
	SUPERTYPE OF (solid_with_incomplete_circular_pattern)
	SUBTYPE OF (solid_with_shape_element_pattern);
	replicate_count : positive_integer;
	angular_spacing : plane_angle_measure;
	radial_alignment : BOOLEAN;
	reference_point : point;
END_ENTITY;


ENTITY solid_with_circular_pocket
	SUBTYPE OF (solid_with_pocket);
	pocket_radius : positive_length_measure;
WHERE
	WR1 : SELF\solid_with_pocket.floor_blend_radius <= pocket_radius;
END_ENTITY;


ENTITY solid_with_circular_protrusion
	SUBTYPE OF (solid_with_protrusion);
	protrusion_radius : positive_length_measure;
END_ENTITY;


ENTITY solid_with_conical_bottom_round_hole
	SUBTYPE OF (solid_with_stepped_round_hole);
	semi_apex_angle : positive_plane_angle_measure;
	tip_radius : non_negative_length_measure;
WHERE
	WR1 : tip_radius < 
          SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;


ENTITY solid_with_constant_radius_edge_blend
	SUBTYPE OF (edge_blended_solid);
	radius : positive_length_measure;
END_ENTITY;


ENTITY solid_with_curved_slot
	SUBTYPE OF (solid_with_slot);
	slot_centreline : bounded_curve;
END_ENTITY;


ENTITY solid_with_depression
	ABSTRACT SUPERTYPE OF ((solid_with_through_depression ANDOR ONEOF (solid_with_hole, solid_with_pocket, solid_with_slot, solid_with_groove)))
	SUBTYPE OF (modified_solid_with_placed_configuration);
	depth : positive_length_measure;
END_ENTITY;


ENTITY solid_with_double_offset_chamfer
	SUBTYPE OF (solid_with_chamfered_edges);
	left_offset_distance : positive_length_measure;
	right_offset_distance : positive_length_measure;
END_ENTITY;


ENTITY solid_with_flat_bottom_round_hole
	SUBTYPE OF (solid_with_stepped_round_hole);
	fillet_radius : non_negative_length_measure;
WHERE
	WR1 : fillet_radius < 
          SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;


ENTITY solid_with_general_pocket
	SUBTYPE OF (solid_with_pocket);
	profile : positioned_sketch;
	reference_point : point;
WHERE
	WR1 : SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_BOUNDED_SURFACE',
    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_BOUNDED_SURFACE',
    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION'
         IN TYPEOF(SELF));
END_ENTITY;


ENTITY solid_with_hole
	ABSTRACT SUPERTYPE OF (solid_with_stepped_round_hole)
	SUBTYPE OF (solid_with_depression);
END_ENTITY;


ENTITY solid_with_incomplete_circular_pattern
	SUBTYPE OF (solid_with_circular_pattern);
	omitted_instances : SET [1:?] OF positive_integer;
WHERE
	WR1 : SIZEOF(omitted_instances) <
         SELF\solid_with_circular_pattern.replicate_count;
	WR2 : SIZEOF(QUERY(q <* omitted_instances | q > 
         SELF\solid_with_circular_pattern.replicate_count)) = 0;
END_ENTITY;


ENTITY solid_with_incomplete_rectangular_pattern
	SUBTYPE OF (solid_with_rectangular_pattern);
	omitted_instances : SET [1:?] OF LIST [2:2] OF positive_integer;
WHERE
	WR1 : NOT([1,1] IN omitted_instances);
	WR2 : SIZEOF(omitted_instances) <
         ((SELF\solid_with_rectangular_pattern.row_count *
           SELF\solid_with_rectangular_pattern.column_count) - 1);
	WR3 : SIZEOF(QUERY(q <* omitted_instances |
         ((q[1] > SELF\solid_with_rectangular_pattern.row_count) OR
          (q[2] > SELF\solid_with_rectangular_pattern.column_count)))) = 0;
END_ENTITY;


ENTITY solid_with_pocket
	ABSTRACT SUPERTYPE OF (ONEOF (solid_with_rectangular_pocket, solid_with_circular_pocket, solid_with_general_pocket))
	SUBTYPE OF (solid_with_depression);
	floor_blend_radius : non_negative_length_measure;
	draft_angle : plane_angle_measure;
END_ENTITY;


ENTITY solid_with_protrusion
	ABSTRACT SUPERTYPE OF (ONEOF (solid_with_circular_protrusion, solid_with_rectangular_protrusion, solid_with_general_protrusion))
	SUBTYPE OF (modified_solid_with_placed_configuration);
	protrusion_height : positive_length_measure;
	protrusion_draft_angle : plane_angle_measure;
END_ENTITY;


ENTITY solid_with_rectangular_pattern
	SUPERTYPE OF (solid_with_incomplete_rectangular_pattern)
	SUBTYPE OF (solid_with_shape_element_pattern);
	row_count : positive_integer;
	column_count : positive_integer;
	row_spacing : length_measure;
	column_spacing : length_measure;
WHERE
	WR1 : (row_count * column_count) > 1;
END_ENTITY;


ENTITY solid_with_rectangular_pocket
	SUBTYPE OF (solid_with_pocket);
	pocket_length : positive_length_measure;
	pocket_width : positive_length_measure;
	corner_radius : non_negative_length_measure;
WHERE
	WR1 : (corner_radius < pocket_width/2) 
         AND (corner_radius < pocket_length/2);
END_ENTITY;


ENTITY solid_with_rectangular_protrusion
	SUBTYPE OF (solid_with_protrusion);
	protrusion_length : positive_length_measure;
	protrusion_width : positive_length_measure;
	protrusion_corner_radius : non_negative_length_measure;
WHERE
	WR1 : (protrusion_corner_radius <= protrusion_width/2) 
         AND (protrusion_corner_radius <= protrusion_length/2);
END_ENTITY;


ENTITY solid_with_shape_element_pattern
	ABSTRACT SUPERTYPE OF (ONEOF (solid_with_circular_pattern, solid_with_rectangular_pattern))
	SUBTYPE OF (modified_solid_with_placed_configuration);
	replicated_element : modified_solid_with_placed_configuration;
END_ENTITY;


ENTITY solid_with_single_offset_chamfer
	SUBTYPE OF (solid_with_chamfered_edges);
	offset_distance : positive_length_measure;
END_ENTITY;


ENTITY solid_with_slot
	ABSTRACT SUPERTYPE OF ((ONEOF (solid_with_trapezoidal_section_slot, solid_with_tee_section_slot) AND ONEOF (solid_with_straight_slot, solid_with_curved_slot)))
	SUBTYPE OF (solid_with_depression);
	slot_width : positive_length_measure;
	closed_ends : LIST [2:2] OF LOGICAL;
	end_exit_faces : LIST [2:2] OF SET [0:?] OF face_surface;
WHERE
	WR1 : NOT(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN
         TYPEOF(SELF)) AND (closed_ends = [FALSE,FALSE]));
	WR2 : NOT(((closed_ends[1] = TRUE) AND (SIZEOF(end_exit_faces[1]) <> 0))
         OR ((closed_ends[2] = TRUE) AND (SIZEOF(end_exit_faces[2]) <> 0)));
END_ENTITY;


ENTITY solid_with_spherical_bottom_round_hole
	SUBTYPE OF (solid_with_stepped_round_hole);
	sphere_radius : positive_length_measure;
WHERE
	WR1 : sphere_radius >= 
          SELF\solid_with_stepped_round_hole.segment_radii[segments];
END_ENTITY;


ENTITY solid_with_stepped_round_hole
	SUPERTYPE OF ((solid_with_stepped_round_hole_and_conical_transitions ANDOR ONEOF (solid_with_flat_bottom_round_hole, solid_with_conical_bottom_round_hole, solid_with_spherical_bottom_round_hole)))
	SUBTYPE OF (solid_with_hole);
	segments : positive_integer;
	segment_radii : LIST [1:segments] OF positive_length_measure;
	segment_depths : LIST [1:segments] OF positive_length_measure;
DERIVE
	SELF\solid_with_depression.depth : positive_length_measure := compute_total_depth(SELF);
WHERE
	WR1 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION'
       IN TYPEOF(SELF)) AND (SIZEOF(TYPEOF(SELF) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_FLAT_BOTTOM_ROUND_HOLE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_SPHERICAL_BOTTOM_ROUND_HOLE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_FLAT_BOTTOM_ROUND_HOLE']) 
       <> 0));
END_ENTITY;


ENTITY solid_with_stepped_round_hole_and_conical_transitions
	SUBTYPE OF (solid_with_stepped_round_hole);
	conical_transitions : SET [1:?] OF conical_stepped_hole_transition;
WHERE
	WR1 : SIZEOF (conical_transitions) <= 
         (SELF\solid_with_stepped_round_hole.segments + 1);
	WR2 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION'
         IN TYPEOF(SELF)) XOR (SIZEOF(conical_transitions) <= 
         SELF\solid_with_stepped_round_hole.segments);
	WR3 : validate_countersink_radii(SELF);
END_ENTITY;


ENTITY solid_with_straight_slot
	SUBTYPE OF (solid_with_slot);
	slot_length : positive_length_measure;
END_ENTITY;


ENTITY solid_with_tee_section_slot
	SUBTYPE OF (solid_with_slot);
	tee_section_width : positive_length_measure;
	collar_depth : positive_length_measure;
WHERE
	WR1 : collar_depth < SELF\solid_with_depression.depth;
	WR2 : tee_section_width > SELF\solid_with_slot.slot_width;
END_ENTITY;


ENTITY solid_with_through_depression
	SUBTYPE OF (solid_with_depression);
	exit_faces : SET [1:?] OF face_surface;
WHERE
	WR1 : SIZEOF(TYPEOF(SELF) *
         ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_HOLE',
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_POCKET',
          'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_SLOT']) = 1;
END_ENTITY;


ENTITY solid_with_trapezoidal_section_slot
	SUBTYPE OF (solid_with_slot);
	draft_angle : plane_angle_measure;
	floor_fillet_radius : non_negative_length_measure;
END_ENTITY;


ENTITY solid_with_variable_radius_edge_blend
	SUBTYPE OF (edge_blended_solid, 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 source_for_requirement
	SUBTYPE OF (group_assignment);
	items : SET [1:1] OF requirement_source_item;
	SELF\group_assignment.assigned_group : requirement_source;
END_ENTITY;


ENTITY sourced_requirement
	SUBTYPE OF (group_assignment);
	items : SET [1:1] OF product_definition;
	SELF\group_assignment.assigned_group : requirement_source;
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,
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.' +
       'RELATED_PRODUCT_DEFINITION') |
        pdr.relating_product_definition :=: 
        next_usage.relating_product_definition)) = 1);
	WR5 : SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE',
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_surface
	SUBTYPE OF (elementary_surface);
	radius : positive_length_measure;
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 straightness_tolerance
	SUBTYPE OF (geometric_tolerance);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
END_ENTITY;


ENTITY structured_dimension_callout
	SUBTYPE OF (draughting_callout);
WHERE
	WR1 : SIZEOF (TYPEOF (SELF) *
       ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DATUM_FEATURE_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DATUM_TARGET_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GEOMETRICAL_TOLERANCE_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LEADER_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT']) = 0;
	WR2 : SIZEOF (QUERY (ato <* QUERY (con <* SELF.contents |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF (con))) |
         (ato.name = 'dimension value')
       )) >= 1;
	WR4 : SIZEOF (QUERY (dcr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
         'DRAUGHTING_CALLOUT_RELATIONSHIP.' +
         'RELATING_DRAUGHTING_CALLOUT') |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
          'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF (dcr)) AND 
         (dcr.name = 'prefix') )) <= 1;
	WR5 : SIZEOF (QUERY (dcr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
         'DRAUGHTING_CALLOUT_RELATIONSHIP.' +
         'RELATING_DRAUGHTING_CALLOUT') |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
          'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF (dcr)) AND 
         (dcr.name = 'suffix') )) <= 1;
	WR6 : NOT((SIZEOF (QUERY (ato <* QUERY (con <* SELF.contents |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF(con)) ) |
         (ato.name = 'prefix text')
       )) > 0)) OR
       (SIZEOF (QUERY (dcr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                               'DRAUGHTING_CALLOUT_RELATIONSHIP.' +
                               'RELATING_DRAUGHTING_CALLOUT') |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
          'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF (dcr)) AND  
         (dcr.name = 'prefix') )) = 1);
	WR7 : NOT(SIZEOF (QUERY (ato <* QUERY (con <* SELF.contents |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'
             IN TYPEOF(con))) |
         (ato.name = 'suffix text')
       )) > 0) OR
       (SIZEOF (QUERY (dcr <* USEDIN (SELF, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                               'DRAUGHTING_CALLOUT_RELATIONSHIP.' +
                               'RELATING_DRAUGHTING_CALLOUT') |
         ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
          'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN TYPEOF (dcr)) AND    
            (dcr.name = 'suffix') )) = 1);
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 [1:?] OF presentation_style_assignment;
	item : representation_item;
WHERE
	WR1 : (SIZEOF(SELF.styles) = 1)
               XOR
         (SIZEOF(QUERY(pres_style <* SELF.styles |
         NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
              'PRESENTATION_STYLE_BY_CONTEXT' IN
         TYPEOF(pres_style))
         )) = 0);
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 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 (
         ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'ANNOTATION_CURVE_OCCURRENCE' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'ANNOTATION_SYMBOL_OCCURRENCE' ,
         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[1])) OR
                        (master_representation <> pcurve_s1);
	WR3 : ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[2])) OR
                        (master_representation <> pcurve_s2);
	WR4 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE' IN TYPEOF(directrix))) OR
          (reference_surface IN (directrix\surface_curve.basis_surface));
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_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_BOUNDED_SURFACE' 
                 IN TYPEOF(parent_surface)));
END_ENTITY;


ENTITY surface_profile_tolerance
	SUBTYPE OF (geometric_tolerance);
WHERE
	WR1 : NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF)) OR ( SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 3);
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 <* SELF.styles |
           SIZEOF(QUERY( style2 <* SELF.styles - style1 |
           TYPEOF(style1) = TYPEOF(style2)
           )) > 0
           )) = 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(SELF.direction_counts) = 1)
                        XOR
         (TYPEOF(SELF.direction_counts[1]) <>
          TYPEOF(SELF.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(SELF.properties) = 1)
                   XOR
         (TYPEOF(SELF.properties[1]) <> TYPEOF(SELF.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 (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MEASURE_REPRESENTATION_ITEM' ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'VALUE_RANGE' , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DESCRIPTIVE_REPRESENTATION_ITEM']* TYPEOF ( i ) ) <>1 ) )
        =0;
	WR2 : ( SIZEOF ( QUERY ( i <* SELF.items | 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF ( i ) ) ) =1 )
        AND ( SIZEOF ( QUERY ( i <* SELF.items | (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'DESCRIPTIVE_REPRESENTATION_ITEM' IN
        TYPEOF ( i ) ) AND ( i.name = 'measuring method' ) ) ) =1 );
	WR3 : SIZEOF ( QUERY ( i <* SELF.items | SIZEOF (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MEASURE_REPRESENTATION_ITEM' ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'VALUE_RANGE']* TYPEOF ( i ) ) =1 ) )
        >0;
	WR4 : ( SIZEOF ( USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'REPRESENTATION_RELATIONSHIP.'+
        'REP_1' ) ) <=1 ) AND ( SIZEOF ( USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'REPRESENTATION_RELATIONSHIP.'+
        'REP_2' ) ) =0 ) AND ( SIZEOF ( QUERY ( rr <* USEDIN ( SELF
        , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'REPRESENTATION_RELATIONSHIP.'+
        'REP_1' ) | rr. rep_2.name = 'measuring direction' ) ) =
        SIZEOF ( USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'REPRESENTATION_RELATIONSHIP.'+
        'REP_1' ) ) );
	WR5 : ( SIZEOF ( USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) ) =1 ) AND ( SIZEOF ( QUERY ( pdr
        <* USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) | SIZEOF ( QUERY ( gpa <* USEDIN (
        pdr. definition ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'GENERAL_PROPERTY_ASSOCIATION.'+
        'DERIVED_DEFINITION' ) | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'GENERAL_PROPERTY' IN TYPEOF ( gpa. base_definition ) ) AND
        ( gpa. base_definition.name ='surface_condition' ) ) ) =1 )
        ) =1 );
END_ENTITY;


ENTITY surfaced_open_shell
	SUBTYPE OF (open_shell);
WHERE
	WR1 : SIZEOF(QUERY(q <* SELF\connected_face_set.cfs_faces |
         NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN TYPEOF(swept_area.basis_surface);
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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLANE' IN TYPEOF(swept_face.face_geometry);
END_ENTITY;


ENTITY swept_surface
	SUPERTYPE OF (ONEOF (surface_of_linear_extrusion, surface_of_revolution))
	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;
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_shape_aspect
	SUBTYPE OF (shape_aspect);
INVERSE
	basis_relationships: SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
WHERE
	WR1 : SIZEOF (QUERY (x<*SELF\symmetric_shape_aspect.basis_relationships |
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CENTRE_OF_SYMMETRY' IN TYPEOF 
       (x\shape_aspect_relationship.related_shape_aspect)))>=1;
END_ENTITY;


ENTITY symmetry_tolerance
	SUBTYPE OF (geometric_tolerance_with_datum_reference);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 3;
END_ENTITY;


ENTITY table_representation_item
	SUBTYPE OF (compound_representation_item);
WHERE
	WR1 : SIZEOF(QUERY(itet <* SELF\compound_representation_item.item_element |
        NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MEASURE_REPRESENTATION_ITEM' ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'VALUE_RANGE']* TYPEOF ( i ) ) <>1 )) =0;
	WR2 : SIZEOF ( QUERY ( i <* SELF.items | name ='depth' ) ) <=1;
	WR3 : ( SIZEOF ( USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) ) =1 ) AND ( SIZEOF ( QUERY ( pdr
        <* USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) | SIZEOF ( QUERY ( gpa <* USEDIN (
        pdr. definition ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'GENERAL_PROPERTY_ASSOCIATION.'+
        'DERIVED_DEFINITION' ) | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'GENERAL_PROPERTY' IN TYPEOF ( gpa. base_definition ) ) AND
        ( gpa. base_definition.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 tangent
	SUBTYPE OF (derived_shape_aspect);
WHERE
	WR1 : SIZEOF (SELF\derived_shape_aspect.deriving_relationships)= 1;
END_ENTITY;


ENTITY terminator_symbol
	SUBTYPE OF (annotation_symbol_occurrence);
	annotated_curve : annotation_curve_occurrence;
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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT_CHARACTER',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DEFINED_CHARACTER_GLYPH',
                         'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_TEXT'] *
                 TYPEOF (item)) = 0)
         )) >= 1;
	WR2 : SIZEOF (
         QUERY (a2p <* 
           QUERY (item <* SELF\representation.items | 
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF (item)) |
           NOT ((SIZEOF (
             QUERY (at <* 
               QUERY (item <* SELF\representation.items | 
                  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 
                  'ANNOTATION_TEXT' IN TYPEOF (item)) | 
               (at\mapped_item.mapping_target :=: a2p))) >= 1) OR
           (SIZEOF (
             QUERY (atc <* 
               QUERY (item <* SELF\representation.items |
                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 <* SELF.characteristics |
           SIZEOF( QUERY( c2 <* SELF.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 thermal_resistance_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE' IN TYPEOF(base_element)) AND
    (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(base_element))));
	WR2 : offset1 <> offset2;
END_ENTITY;


ENTITY thickness_laminate_definition
	SUBTYPE OF (product_definition);
WHERE
	WR1 : SIZEOF (QUERY (pdr <* USEDIN (SELF, 
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'PRODUCT_DEFINITION_RELATIONSHIP.' +
                             'RELATING_PRODUCT_DEFINITION') |
                             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                             'NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
                             TYPEOF (pdr))) = 1;
END_ENTITY;


ENTITY thickness_laminate_table
	SUBTYPE OF (zone_structural_makeup);
END_ENTITY;


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


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


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


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


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


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


ENTITY time_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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
	lbvc : REAL := lower_bound\measure_with_unit.value_component;
	ubvc : REAL := upper_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 geometric_tolerance;
	form : tolerance_zone_form;
END_ENTITY;


ENTITY tolerance_zone_definition
	SUPERTYPE OF (ONEOF (projected_zone_definition, runout_zone_definition));
	zone : tolerance_zone;
	boundaries : SET [1:?] OF shape_aspect;
END_ENTITY;


ENTITY tolerance_zone_form;
	name : label;
END_ENTITY;


ENTITY topological_representation_item
	SUPERTYPE OF (ONEOF (vertex, edge, face_bound, face, vertex_shell, wire_shell, connected_edge_set, connected_face_set, (loop ANDOR path)))
	SUBTYPE OF (representation_item);
END_ENTITY;


ENTITY toroidal_surface
	SUBTYPE OF (elementary_surface);
	major_radius : positive_length_measure;
	minor_radius : positive_length_measure;
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);
WHERE
	WR1 : SIZEOF (SELF\geometric_tolerance_with_datum_reference.datum_system) <= 2;
END_ENTITY;


ENTITY track_blended_solid
	ABSTRACT SUPERTYPE OF (track_blended_solid_with_end_conditions)
	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) *
    ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_CONSTANT_RADIUS_EDGE_BLEND',
     'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_VARIABLE_RADIUS_EDGE_BLEND',
     'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SOLID_WITH_CHAMFERED_EDGES']) = 1;
	WR2 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX' IN TYPEOF(end_conditions[1]))
       AND ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX' IN TYPEOF(end_conditions[2])));
	WR3 : NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 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_generic_expression
	ABSTRACT SUPERTYPE
	SUBTYPE OF (generic_expression);
	operand : generic_expression;
END_ENTITY;


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


ENTITY uncertainty_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 uniform_curve
	SUBTYPE OF (b_spline_curve);
END_ENTITY;


ENTITY uniform_resource_identifier
	SUBTYPE OF (descriptive_representation_item);
END_ENTITY;


ENTITY uniform_surface
	SUBTYPE OF (b_spline_surface);
END_ENTITY;


ENTITY usage_association
	SUBTYPE OF (action_method_relationship);
	SELF\action_method_relationship.related_method : information_usage_right;
	SELF\action_method_relationship.relating_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_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);
WHERE
	WR1 : SIZEOF(QUERY(q <* 
    SELF\user_selected_elements.picked_items | NOT
    ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_REPRESENTATION_ITEM'
    IN TYPEOF(q)))) = 0;
END_ENTITY;


ENTITY value_range
	SUBTYPE OF (compound_representation_item);
WHERE
	WR1 : ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT'
        IN TYPEOF (rep.context_of_items)
        ))) = 0;
END_ENTITY;


ENTITY variable_semantics
	ABSTRACT SUPERTYPE;
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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 velocity_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 versioned_action_request;
	id : identifier;
	version : label;
	purpose : text;
	description : OPTIONAL text;
END_ENTITY;


ENTITY vertex
	SUBTYPE OF (topological_representation_item);
END_ENTITY;


ENTITY vertex_loop
	SUBTYPE OF (loop);
	loop_vertex : vertex;
END_ENTITY;


ENTITY vertex_point
	SUBTYPE OF (vertex, geometric_representation_item);
	vertex_geometry : point;
END_ENTITY;


ENTITY vertex_shell
	SUBTYPE OF (topological_representation_item);
	vertex_shell_extent : vertex_loop;
END_ENTITY;


ENTITY view_volume
	SUBTYPE OF (founded_item);
	projection_type : central_or_parallel;
	projection_point : cartesian_point;
	view_plane_distance : length_measure;
	front_plane_distance : length_measure;
	front_plane_clipping : BOOLEAN;
	back_plane_distance : length_measure;
	back_plane_clipping : BOOLEAN;
	view_volume_sides_clipping : BOOLEAN;
	view_window : planar_box;
END_ENTITY;


ENTITY visual_appearance_representation
	SUBTYPE OF (representation);
WHERE
	WR1 : ( {3<= SIZEOF ( SELF.items ) <=9} ) AND ( SIZEOF ( QUERY (
        i <* items | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (
        ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'MEASURE_REPRESENTATION_ITEM' ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'VALUE_RANGE']* TYPEOF ( i ) ) =1 )							
        AND ( i.name IN ['refraction index' , 'opacity'] ) ) 
        ) + SIZEOF ( QUERY ( i <* items | ( 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) ) =1 ) AND ( SIZEOF ( QUERY ( pdr
        <* USEDIN ( SELF ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'PROPERTY_DEFINITION_REPRESENTATION.'+
        'USED_REPRESENTATION' ) | SIZEOF ( QUERY ( gpa <* USEDIN (
        pdr. definition ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+'GENERAL_PROPERTY_ASSOCIATION.'+
        'DERIVED_DEFINITION' ) | ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+
        'GENERAL_PROPERTY' IN TYPEOF ( gpa. base_definition ) ) AND
        ( gpa. base_definition.name ='surface_condition' ) ) ) =1 )) =1 );
END_ENTITY;


ENTITY volume_measure_with_unit
	SUBTYPE OF (measure_with_unit);
WHERE
	WR1 : 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 week_of_year_and_day_date
	SUBTYPE OF (date);
	week_component : week_in_year_number;
	day_component : OPTIONAL day_in_week_number;
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 year_month
	SUBTYPE OF (date);
	month_component : month_in_year_number;
END_ENTITY;


ENTITY zone_structural_makeup
	SUPERTYPE OF (ONEOF ((smeared_material_definition AND thickness_laminate_table), (smeared_material_definition AND percentage_laminate_table), thickness_laminate_table, percentage_laminate_table, smeared_material_definition))
	SUBTYPE OF (laminate_table);
END_ENTITY;


RULE alternative_solution_requires_solution_definition FOR (product_definition_formation);
    LOCAL
      solution_versions: SET OF product_definition_formation := [];
    END_LOCAL;
    solution_versions :=  QUERY( pdf <* product_definition_formation |
	  SIZEOF( QUERY( prpc <* USEDIN(pdf.of_product, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF' + '.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | 
      prpc.name = 'alternative solution')) = 1);
WHERE
	WR1 : SIZEOF( QUERY( pdf <* solution_versions |
        SIZEOF( QUERY( pd <* USEDIN(pdf, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF' + '.PRODUCT_DEFINITION.FORMATION') | 
        pd.frame_of_reference.name = 'alternative definition')) <> 1))= 0;
END_RULE;

RULE application_protocol_definition_required FOR (application_context);

WHERE
	WR1 : SIZEOF( QUERY( ac <* application_context | 
              (SIZEOF (QUERY (apd <* USEDIN(ac,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.APPLICATION_PROTOCOL_DEFINITION.APPLICATION') | 
                apd.application_interpreted_model_schema_name = 'ap203_configuration_controlled_3d_design_of_mechanical_parts_and_assemblies' 
                )) > 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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS' ) | 
	    prpc.name =  'functionality' ) ) =  1 ) AND 
	    ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf ,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 , 
	    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS' ) | 
        prpc.name =  'conceptual design' ) ) =  1 ) AND 
        ( SIZEOF (QUERY ( pd <* USEDIN ( pdf , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION.FORMATION' ) | 
        pd.frame_of_reference.name =  'conceptual definition' ) ) <1) ) ) =  0;
END_RULE;

RULE compatible_dimension FOR (cartesian_point, direction, representation_context, geometric_representation_context);

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

RULE component_class_for_assembly_select FOR (composite_assembly_sequence_definition, next_assembly_usage_occurrence, product_related_product_category);
    LOCAL
      i,j,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 |
     ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF' + '.UNCERTAINTY_QUALIFIER' IN TYPEOF ( u1 ) ) AND 
	( SIZEOF ( QUERY ( u2 <* qri.qualifiers |
     ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS' ) | 
	    prpc.name =  'requirement' ) ) >0 ) AND 
        ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION.FORMATION') | 
	    pd.frame_of_reference.name = 'design constraint definition' ) ) <1 ) ) ) =  0;
END_RULE;

RULE draughting_model_items_constraint FOR (draughting_model);

WHERE
	WR1 : SIZEOF(QUERY(dm <* draughting_model |
        NOT(SIZEOF(QUERY(it1 <* dm\representation.items |
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_OCCURRENCE' IN TYPEOF(it1))
        AND
        NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'DRAUGHTING_ANNOTATION_OCCURRENCE' IN TYPEOF(it1)))
          )) = 0)
        )) = 0;
	WR2 : SIZEOF(QUERY(dm <* draughting_model |
        NOT(SIZEOF(QUERY(it1 <* dm\representation.items |
        (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_CALLOUT' IN TYPEOF(it1))
        AND
        NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DRAUGHTING_ELEMENTS' IN TYPEOF(it1)))
          )) = 0)
        )) = 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 , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MATERIAL_DESIGNATION.DEFINITIONS'))<>1
        )) = 0;
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 | 
	    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'KNOWN_SOURCE' IN TYPEOF(edc.source) );
WHERE
	WR1 : SIZEOF ( QUERY ( edgp <* known_sourced_properties | 
        ( SIZEOF ( QUERY ( edir <* USEDIN ( edgp, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'EXTERNALLY_DEFINED_ITEM_RELATIONSHIP.RELATING_ITEM' )| 
        ( edir.name =  'name scope' ) AND 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'EXTERNALLY_DEFINED_CLASS' IN  TYPEOF ( edir.related_item ) ) AND 
        ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | 
		( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'KNOWN_SOURCE' IN TYPEOF ( edgp.source ) ) AND
		( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'KNOWN_SOURCE' + '.NAME' = 'ISO 13584 library' ) );
WHERE
	WR1 : SIZEOF( QUERY( edgp <* plib_properties | 
		(SIZEOF( QUERY( edir <* USEDIN(edgp, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,j,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,j,k,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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'INCLUSION_PRODUCT_CONCEPT_FEATURE',
'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONDITIONAL_CONCEPT_FEATURE'] * TYPEOF(pcf)) = 0) AND 
(SIZEOF ( QUERY ( aga <* USEDIN ( pcf , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'APPLIED_GROUP_ASSIGNMENT.' + 'ITEMS' ) | 
( aga.role.name = 'specification category member' ) AND 
('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
	    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
	    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | 
	( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.' +
	'CONDITIONAL_OPERATOR' ) | 
		SIZEOF ( QUERY ( ccf <* USEDIN( cfrwc , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONDITIONAL_CONCEPT_FEATURE.CONDITION' ) | 
		NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CLASS' IN TYPEOF(gr\group_relationship.related_group)) OR 
  NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN TYPEOF(gr.related_group)) 
  OR NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION' ) | 
	    pdr.name = 'definition usage' ) ) <>1 ) AND 
        ( SIZEOF ( QUERY ( cd <* USEDIN ( pd , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CONFIGURATION_DESIGN.DESIGN' ) | 
        ( cd.name = 'occurrence usage definition' ) AND 
        ( NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PRODUCT_IDENTIFICATION' IN TYPEOF( cd.configuration ) ) ) ) ) <>1 ) ) ) = 0;
	WR3 : SIZEOF ( QUERY ( pd <* part_occurrences |  
        (SIZEOF ( QUERY ( cd <* USEDIN ( pd , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.'+ 'PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION' ) |
        ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +'PRODUCT_DEFINITION_USAGE' IN TYPEOF ( cd ) ) ) ) = 0 )AND
        ( SIZEOF ( USEDIN ( pd , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +'PROPERTY_DEFINITION.DEFINITION' ) |
        ( ppd.name ='occurrence quantity' ) AND 
        ( SIZEOF ( QUERY ( pdr <*USEDIN ( ppd , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | 
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +'PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.OCCURRENCE' ) | 
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,
       'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF' + '.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS') | 
	     prpc.name = 'alternative solution')) = 0 ) )) = 0;
END_RULE;

RULE stock_material_reference FOR (percentage_ply_definition, make_from_usage_option, product_related_product_category);
    LOCAL
      i,j,k :  INTEGER;
      dkuhr :  LOGICAL;
      nmfuo :  INTEGER;
      nprpc :  INTEGER;
      rp     :  product;
    END_LOCAL;
    dkuhr := TRUE;
    REPEAT i:= LOINDEX (percentage_ply_definition) TO
               HIINDEX (percentage_ply_definition);
      nmfuo := 0;  
      REPEAT j:= LOINDEX (make_from_usage_option) TO 
                 HIINDEX (make_from_usage_option);
        IF (percentage_ply_definition[i] = 
          make_from_usage_option[j].relating_product_definition) THEN
          rp := make_from_usage_option[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 
                ['anisotropic material', 'isotropic material', 'stock core',
                 '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 = 0) THEN
        dkuhr := FALSE;
        ESCAPE;
      END_IF;
    END_REPEAT;
WHERE
	WR1 : dkuhr;
END_RULE;

RULE styled_curve FOR (styled_item);

WHERE
	WR1 : SIZEOF( QUERY( si <* styled_item | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE' IN TYPEOF (si.item)) AND (SIZEOF (QUERY (psa <* si.styles | (SIZEOF (QUERY (cs <* psa.styles | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANGULARITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COAXIALITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONCENTRICITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CYLINDRICITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FLATNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE_PROFILE_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PARALLELISM_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PERPENDICULARITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITION_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ROUNDNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRAIGHTNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_PROFILE_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMMETRY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TOTAL_RUNOUT_TOLERANCE'] , 3)))) = 0;
END_RULE;

RULE subtype_exclusiveness_representation_item FOR (representation_item);

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

RULE subtype_mandatory_geometric_tolerance FOR (geometric_tolerance);

WHERE
	WR1 : SIZEOF(QUERY (gt <* geometric_tolerance | NOT (type_check_function(gt, ['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANGULARITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COAXIALITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONCENTRICITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CYLINDRICITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FLATNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE_PROFILE_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PARALLELISM_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PERPENDICULARITY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POSITION_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ROUNDNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRAIGHTNESS_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_PROFILE_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SYMMETRY_TOLERANCE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TOTAL_RUNOUT_TOLERANCE'] , 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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL.FONT')) = 0 )) = 0;
	WR2 : SIZEOF (QUERY (edtf <* externally_defined_text_font | SIZEOF (USEDIN (edtf, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TEXT_LITERAL.FONT')) = 0 )) = 0;
END_RULE;

RULE thickness_laminate_table_component_select FOR (thickness_laminate_definition, next_assembly_usage_occurrence, product_related_product_category);
    LOCAL
      i,j,k :  INTEGER;
      dkuhr :  LOGICAL;
      nnauo :  INTEGER;
      nprpc :  INTEGER;
      rp    :  product;
    END_LOCAL;
    dkuhr := TRUE;
    REPEAT i:= LOINDEX (thickness_laminate_definition) TO
               HIINDEX (thickness_laminate_definition);
      nnauo := 0;  
      REPEAT j:= LOINDEX (next_assembly_usage_occurrence) TO 
                 HIINDEX (next_assembly_usage_occurrence);
        IF (thickness_laminate_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', 'filament laminate', 'processed core'])) 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 <> 1) THEN
        dkuhr := FALSE;
        ESCAPE;
      END_IF;
    END_REPEAT;
WHERE
	WR1 : dkuhr;
END_RULE;

RULE validate_dependently_instantiable_entity_data_types FOR (action_method_role, annotation_text, attribute_value_role, auxiliary_geometric_representation_item, binary_numeric_expression, boolean_expression, bounded_curve, bounded_surface, cartesian_transformation_operator, comparison_expression, concept_feature_relationship, concept_feature_relationship_with_condition, connected_edge_set, document_usage_constraint, edge_blended_solid, effectivity_context_role, event_occurrence_role, explicit_procedural_representation_item_relationship, expression, founded_item, generic_expression, generic_variable, indirectly_selected_elements, interval_expression, literal_number, local_time, loop, modified_solid_with_placed_configuration, multiple_arity_boolean_expression, multiple_arity_generic_expression, multiple_arity_numeric_expression, numeric_expression, one_direction_repeat_factor, oriented_open_shell, oriented_path, positioned_sketch, procedural_representation, procedural_representation_sequence, product_definition_context_role, product_definition_effectivity, runout_zone_orientation, simple_boolean_expression, simple_generic_expression, simple_numeric_expression, 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, tolerance_zone_form, two_direction_repeat_factor, unary_generic_expression, unary_numeric_expression, user_selected_elements, variational_representation_item, view_volume);
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 + action_method_role + annotation_text + attribute_value_role + auxiliary_geometric_representation_item + binary_numeric_expression + boolean_expression + bounded_curve + bounded_surface + cartesian_transformation_operator + comparison_expression + concept_feature_relationship + concept_feature_relationship_with_condition + connected_edge_set + document_usage_constraint + edge_blended_solid + effectivity_context_role + event_occurrence_role + explicit_procedural_representation_item_relationship + expression + founded_item + generic_expression + generic_variable + indirectly_selected_elements + interval_expression + literal_number + local_time + loop + modified_solid_with_placed_configuration + multiple_arity_boolean_expression + multiple_arity_generic_expression + multiple_arity_numeric_expression + numeric_expression + one_direction_repeat_factor + oriented_open_shell + oriented_path + positioned_sketch + procedural_representation + procedural_representation_sequence + product_definition_context_role + product_definition_effectivity + runout_zone_orientation + simple_boolean_expression + simple_generic_expression + simple_numeric_expression + 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 + tolerance_zone_form + two_direction_repeat_factor + unary_generic_expression + unary_numeric_expression + user_selected_elements + variational_representation_item + view_volume;--<make a union of all implicit populations of the FOR-clause>
number_of_input_instances := SIZEOF(all_instances);
(* Collect all type strings of all FOR instances into one set. *)
REPEAT i:=1 TO number_of_input_instances;
  set_of_input_types := set_of_input_types + TYPEOF(all_instances[i]);
END_REPEAT;
WHERE
	WR1 : dependently_instantiated(all_instances, set_of_input_types,
                                previous_in_chain);
END_RULE;

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

IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIMPLE_GENERIC_EXPRESSION'
	IN TYPEOF (arg1)) 
THEN
	RETURN (TRUE);
END_IF;

IF arg1 IN arg2 
THEN 
	RETURN (FALSE);
END_IF;

IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.UNARY_GENERIC_EXPRESSION' 
	IN TYPEOF (arg1) 
THEN 
	RETURN 
	(acyclic(arg1\unary_generic_expression.operand,arg2+[arg1]));
END_IF;

IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 
'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 |
                          ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
                            ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ANNOTATION_TEXT',
                  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
  (* Return FALSE if the parent is the same curve_replica, otherwise,
   call function again with the parents own parent_curve.     *)
    ELSE
    RETURN(acyclic_curve_replica(rep,
               parent\curve_replica.parent_curve));
    END_IF;
END_FUNCTION;

FUNCTION acyclic_mapped_item_usage
	(rep: representation) : BOOLEAN;
  LOCAL
    items : SET OF representation_item;
  END_LOCAL;

  items := QUERY (item <* rep.items |
           'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM' IN TYPEOF (item));
  IF SIZEOF (items) = 0
  THEN 
    RETURN (FALSE);
  ELSE 
    REPEAT i := 1 TO HIINDEX (items);
      IF items[i]\mapped_item.mapping_source.mapped_representation :=: rep
      THEN 
        RETURN (TRUE);
      ELSE 
        RETURN (acyclic_mapped_item_usage(items[i]\
                  mapped_item.mapping_source.mapped_representation));
      END_IF;
    END_REPEAT;
  RETURN (FALSE);
  END_IF;
END_FUNCTION;

FUNCTION acyclic_mapped_representation
	(mi: mapped_item) : BOOLEAN;
    LOCAL
      rms : SET OF representation_map;
      mis : SET OF mapped_item;
      rs1, rs2 : SET OF representation;
    END_LOCAL;
 
    rs1 := using_representations(mi);
    rs2 := [];
    -- loop as long as there are elements in rs1
    REPEAT WHILE SIZEOF(rs1) > 0; 
      REPEAT i := 1 TO HIINDEX(rs1);
        -- Determine the set of representation_map that reference the parent_set
        rms := bag_to_set(USEDIN(rs1[i], 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
        IF SIZEOF(rms) > 0 THEN
          REPEAT j := 1 TO HIINDEX(rms);
            mis := bag_to_set(USEDIN(rms[i], 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE'));
            IF SIZEOF(mis) > 0 THEN
              REPEAT j := 1 TO HIINDEX(mis);
                -- check mis members for instance equal with mi. If so then there is a cycle
                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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
  (* Return FALSE if the parent is the same point_replica, otherwise,
   call function again with the parents own parent_pt.     *)
    ELSE RETURN(acyclic_point_replica(rep, parent\point_replica.parent_pt));
    END_IF;
END_FUNCTION;

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

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

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

    IF relation.rep_1 IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(r <* bag_to_set(USEDIN(relation.rep_1, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_solid_replica
	(rep: solid_replica; parent: solid_model) : BOOLEAN;
IF NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
  (* Return FALSE if the parent is the same solid_replica, otherwise,
   call function again with the parents own parent_solid.     *)
    ELSE RETURN(acyclic_solid_replica(rep,
                      parent\solid_replica.parent_solid));
    END_IF;
END_FUNCTION;

FUNCTION acyclic_surface_replica
	(rep: surface_replica; parent: surface) : BOOLEAN;
IF NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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);
  (* Return FALSE if the parent is the same surface_replica, otherwise,
   call function again with the parents own parent_surface.     *)
    ELSE RETURN(acyclic_surface_replica(rep,
                   parent\surface_replica.parent_surface));
    END_IF;
END_FUNCTION;

FUNCTION advanced_face_properties
	(testface: face) : BOOLEAN;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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  ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBFACE' IN TYPEOF(testface)) THEN
     RETURN(advanced_face_properties(testface\subface.parent_face));
   ELSE RETURN (FALSE);
END_IF;
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 associated_surface
	(arg: pcurve_or_surface) : surface;
   LOCAL
     surf : surface;
   END_LOCAL;
   
   IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF(arg) THEN
     surf := arg\pcurve.basis_surface;
   ELSE
     surf := arg;
   END_IF;
   RETURN(surf);
END_FUNCTION;

FUNCTION bag_to_set
	(the_bag: BAG [0:?] OF GENERIC: intype) : SET [0:?] 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, 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 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, 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 [0:?] OF STRING;
LOCAL
  category_assignments: BAG OF product_category;
  categories: SET OF STRING:=[];
END_LOCAL;
category_assignments := USEDIN(obj, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'CHANGE_REQUEST',
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'START_REQUEST'] *
                                 TYPEOF (x)) = 1))
                                 THEN RETURN(FALSE);
                               END_IF;
      'initiator'              : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'CHANGE_REQUEST',
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'START_REQUEST',
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'START_WORK',
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'CHANGE'] *
                                 TYPEOF (x)) = 1))
                                 THEN RETURN(FALSE);
                               END_IF;
      'creator'                : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'PRODUCT_DEFINITION_FORMATION',
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'PRODUCT_DEFINITION'] *
                                 TYPEOF (x)) = 1))
                                 THEN RETURN (FALSE);
                               END_IF;
      'part_supplier'          : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'PRODUCT_DEFINITION_FORMATION'
                                 IN TYPEOF (x)))
                                 THEN RETURN(FALSE);
                               END_IF;
      'design_supplier'        : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'PRODUCT_DEFINITION_FORMATION'
                                 IN TYPEOF (x)))
                                 THEN RETURN(FALSE);
                               END_IF;
      'design_owner'           : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT'
                                 IN TYPEOF (x)))
                                 THEN RETURN(FALSE);
                               END_IF;
      'configuration_manager'  : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' +
                                 'CONFIGURATION_ITEM'
                                 IN TYPEOF (x)))
                                 THEN RETURN(FALSE);
                               END_IF;
      'contractor'             : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONTRACT'
                                 IN TYPEOF (x)))
                                 THEN RETURN(FALSE);
                               END_IF;
      'classification_officer' : IF SIZEOF (e.items) <>
                                 SIZEOF (QUERY (x <* e.items |
                                 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 [0:?] OF  UNIQUE edge_curve) : BOOLEAN;
  LOCAL
    i           : INTEGER;
    next_vertex : vertex;
  END_LOCAL;

  -- first check whether there is only one edge in the list: in this
  -- case there is no connectivity to be checked.

  IF (SIZEOF(edges) = 1)
  THEN RETURN(TRUE);
  END_IF;

  -- otherwise, establish the matching vertices of edges 1 and 2 in 
  -- the list, and determine the vertex of edge 2 to which edge 3, 
  -- must be connected, if there are more than two edges in the list.

  IF ((edges[2].edge_start :=: edges[1].edge_end)
    XOR (edges[2].edge_start :=: edges[1].edge_start))
  THEN next_vertex := edges[2].edge_end;
  ELSE 
    IF ((edges[2].edge_end :=: edges[1].edge_end)
      XOR (edges[2].edge_end :=: edges[1].edge_start))
    THEN next_vertex := edges[2].edge_start;
    ELSE RETURN(FALSE); -- no match between any vertices of edges 1 and 2 
    END_IF;
  END_IF;

  -- exit if there are only two edges and they are connected

  IF (SIZEOF(edges) = 2)
  THEN RETURN(TRUE);
  END_IF;

  -- otherwise, check that any remaining edges are connected in list order.

  REPEAT i := 3 TO HIINDEX(edges);
    IF (edges[i].edge_start :=: next_vertex)
    THEN next_vertex := edges[i].edge_end;
    ELSE
      IF (edges[i].edge_end :=: next_vertex)
      THEN next_vertex := edges[i].edge_start;
      ELSE RETURN(FALSE); -- no match is found.
      END_IF;
    END_IF; 
  END_REPEAT;
  RETURN(TRUE);
END_FUNCTION;

FUNCTION check_text_alignment
	(ct: composite_text) : BOOLEAN;
  LOCAL
    a : SET OF text_alignment := [];
  END_LOCAL;

  -- create a set of all the alignments
  REPEAT i := 1 TO HIINDEX (ct.collected_text);
    a := a + [ct.collected_text[i]\text_literal.alignment];
  END_REPEAT;

  -- if there is more than one element in the set
  -- then not all alignments were the same
  RETURN (SIZEOF(a) = 1);
END_FUNCTION;

FUNCTION check_text_font
	(ct: composite_text) : BOOLEAN;
  LOCAL
    f : SET OF font_select := [];
  END_LOCAL;

  -- build a set of all the fonts
  REPEAT i := 1 TO HIINDEX (ct.collected_text);
    f := f + [ct.collected_text[i]\text_literal.font];
  END_REPEAT;

  -- if there is more than one element in the set
  -- then not all fonts were the same
  RETURN (SIZEOF(f) <= 1);
END_FUNCTION;

FUNCTION class_assignment_is_valid
	(aia: applied_classification_assignment) : BOOLEAN;
LOCAL
  item: classification_item;
  role: classification_role;
END_LOCAL;

role:= aia\classification_assignment.role;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CLASS_SYSTEM_ITEM'] * TYPEOF(item))=0) THEN
-- item invalid if item does not belong to the types that may have a class_system
	RETURN(FALSE);
    END_IF;
  END_REPEAT;
END_IF;

IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'CLASSIFIED_ITEM'] * TYPEOF(item))=0) THEN
-- item invalid if item does not belong to the types that may have a characterized_class
	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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PRODUCT_DEFINITION_FORMATION', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 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('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN 
           TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
        (NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE' IN 
           TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
        (NOT('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OPEN_SHELL' IN
                     TYPEOF(m.sbsm_boundary[j])) AND
        (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CLOSED_SHELL' IN
           TYPEOF(m.sbsm_boundary[j]))))
     THEN
       result := FALSE;
       RETURN(result);
       (* A surface model is composed of OPEN_ and CLOSED_SHELLs. *)
     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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.WIRE_SHELL' IN
                    TYPEOF(m.sbwm_boundary[j])) AND
        (NOT ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VERTEX_SHELL' IN
                      TYPEOF(m.sbwm_boundary[j]))))
     THEN
       result := FALSE;
       RETURN(result);
       (* A wireframe model is composed of WIRE_ and VERTEX_SHELLs *)
     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, 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_rectangular_composite_surface
	(s: rectangular_composite_surface) : BOOLEAN;
REPEAT i := 1 TO s.n_u;
       REPEAT j := 1 TO s.n_v;
         IF NOT (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF
                    (s.segments[i][j].parent_surface)) OR
                 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 cross_product
	(arg1: direction; arg2: direction) : vector;
  LOCAL
    mag    : REAL;
    res    : direction;
    v1,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 | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i)) 
  AND (i\representation_item.name = 'significant number of digits')) )) = 1) OR 
((SIZEOF(QUERY ( i <* agg | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND 
  (i\representation_item.name = 'lower limit')) )) = 1) AND 
(SIZEOF( QUERY ( i <* agg | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND 
  (i\representation_item.name = 'plus minus tolerance value')) )) = 1) OR 
((SIZEOF(QUERY ( i <* agg | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(i)) AND (
  i\representation_item.name = 'lower tolerance value')) )) = 1) AND 
(SIZEOF( QUERY ( i <* agg | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)) )) <= 1) AND 
(SIZEOF(QUERY ( i <* agg | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(i)) )) = 
  SIZEOF(QUERY ( i <* agg | (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 dependently_instantiated
	(set_of_input_instances: SET [0:?] OF GENERIC: igen; set_of_input_types: SET [0:?] OF STRING; previous_in_chain: LIST [0:?] OF GENERIC: cgen) : BOOLEAN;
LOCAL
  number_of_input_instances     : INTEGER;
  number_of_referring_instances : INTEGER;
  bag_of_referring_instances    : BAG OF GENERIC:igen := [];
  dependently_instantiated_flag : BOOLEAN;
  previous_in_chain_plus        : LIST OF GENERIC:cgen := [];
  result                        : BOOLEAN := true;
  set_of_types                  : SET OF STRING := [];
END_LOCAL;

IF EXISTS(set_of_input_instances) THEN
  number_of_input_instances := SIZEOF(set_of_input_instances);
  (* Add the declared type of bag_of_referring_instances to the set of
     types of the REFERENCEd instances for the subset comparison later.
   *)
  set_of_input_types := set_of_input_types + 'GENERIC';
  REPEAT i:=1 TO number_of_input_instances;
    (* Determine all references to the current input instance. *)
    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;
        (* Determine the type strings of the current referencing instance.
         *)
        set_of_types := TYPEOF(bag_of_referring_instances[j]);
        (* If the referencing instance is of one of the types of the
           only dependently instantiable select items, the current input
           instance may still be invalidly instantiated.
           Otherwise it is OK, and the next input instance is tested.
         *)
        IF set_of_types <= set_of_input_types THEN -- subset operator
          (* The referring instance is of one of the restricted types.
             However, it may itself be referred to by a valid instance;
             then also the current instance would be valid.
             Thus, call this function recursively with the referring
             instance as input.
             To avoid an infinite loop in case a set of instances
             reference each other in a closed loop, test first whether
             the current referencing instance is in the list of
             previously processed chain members.
           *)
          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; -- dependently instantiated; next input instance
            ELSE
              (* Not dependently instantiated: go to next referring
              instance. *)
              SKIP;
            END_IF;
          END_IF;
        ELSE
          dependently_instantiated_flag := true;
          ESCAPE; -- dependently instantiated; take next input instance
        END_IF;
      END_REPEAT;
      IF NOT dependently_instantiated_flag THEN
        RETURN(false);
      END_IF;
    ELSE
      RETURN(false); -- not referenced at all => invalidly instantiated
    END_IF;
  END_REPEAT;
ELSE
  RETURN(false); -- no input
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.0) OR (mag_v2 = 0.0)) THEN
      theta := 0.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_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DERIVED_UNIT' IN TYPEOF(x) THEN
      REPEAT i := LOINDEX(x\derived_unit.elements) TO HIINDEX(x\derived_unit.elements);
        result.length_exponent := result.length_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.length_exponent);
        result.mass_exponent := result.mass_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.mass_exponent);
        result.time_exponent := result.time_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.time_exponent);
        result.electric_current_exponent := result.electric_current_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.electric_current_exponent);
        result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.thermodynamic_temperature_exponent);
        result.amount_of_substance_exponent := result.amount_of_substance_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.amount_of_substance_exponent);
        result.luminous_intensity_exponent := result.luminous_intensity_exponent + 
        (x\derived_unit.elements[i]\derived_unit_element.exponent * 
         x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.luminous_intensity_exponent);
      END_REPEAT;
    ELSE
      result := x\named_unit.dimensions;
    END_IF;
    RETURN (result);
END_FUNCTION;

FUNCTION dimension_of
	(item: geometric_representation_item) : dimension_count;
  LOCAL
    x   : SET OF representation;
    y   : representation_context;
    dim : dimension_count;
  END_LOCAL;
  -- For cartesian_point, direction, or vector dimension is determined by
  -- counting components.
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF(item) THEN
       dim := SIZEOF(item\cartesian_point.coordinates);
       RETURN(dim);
    END_IF;
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIRECTION' IN TYPEOF(item) THEN
       dim := SIZEOF(item\direction.direction_ratios);
       RETURN(dim);
    END_IF;
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VECTOR' IN TYPEOF(item) THEN
       dim := SIZEOF(item\vector.orientation\direction.direction_ratios);
       RETURN(dim);
    END_IF;
  -- For all other types of geometric_representation_item dim is obtained
  -- via context.
  -- Find the set of representation in which the item is used. 

  x := using_representations(item);

  -- Determines the dimension_count of the 
  -- geometric_representation_context. Note that the 
  -- RULE compatible_dimension ensures that the context_of_items
  -- is of type geometric_representation_context and has
  -- the same dimension_count for all values of x.
  -- The SET x is non-empty since this is required by WR1 of
  -- representation_item.
    y := x[1].context_of_items;
    dim := y\geometric_representation_context.coordinate_space_dimension;
    RETURN (dim);
END_FUNCTION;

FUNCTION dimensions_for_si_unit
	(n: si_unit_name) : dimensional_exponents;
CASE n OF 
      metre:
        RETURN (dimensional_exponents(1.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, 1.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 dot_product
	(arg1: direction; arg2: direction) : REAL;
   LOCAL
     scalar : REAL;
     vec1, vec2: direction;
     ndim : INTEGER;
   END_LOCAL;
   
   IF NOT EXISTS (arg1) OR NOT EXISTS (arg2) THEN
     scalar := ?;
     (* When function is called with invalid data an indeterminate result
     is returned *)
   ELSE
     IF (arg1.dim <> arg2.dim) THEN
       scalar := ?;
     (* When function is called with invalid data an indeterminate result
     is returned *)
     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 edge_reversed
	(an_edge: edge) : oriented_edge;
   LOCAL
     the_reverse : oriented_edge;
   END_LOCAL;

   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 external_version_assignment_is_valid
	(aia: applied_external_identification_assignment) : BOOLEAN;
    LOCAL
      item: identification_item;
      role: identification_role;
    END_LOCAL;
      role:= aia.role;
      IF role.name='version' THEN
        REPEAT i:=LOINDEX(aia.items) TO HIINDEX(aia.items);
          item:= aia.items[i];
          IF (SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'EXTERNALLY_VERSIONED_ITEM']*TYPEOF(item))=0) THEN
            -- item invalid if item does not belong to versionable types
	        RETURN(FALSE);
          END_IF;
        END_REPEAT;
        RETURN(TRUE);
      ELSE		-- case where aia does not convey a version id
        RETURN(TRUE);
      END_IF;
END_FUNCTION;

FUNCTION face_bound_reversed
	(a_face_bound: face_bound) : face_bound;
   LOCAL
     the_reverse : face_bound ;
   END_LOCAL;
   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 gbsf_check_curve
	(cv: representation_item) : BOOLEAN;
IF SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_CURVE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN
    RETURN (FALSE);
  END_IF;
  IF SIZEOF(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TRIMMED_CURVE'] * TYPEOF(cv)) = 1 THEN
    RETURN (TRUE);
  ELSE
    IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv) THEN
          RETURN (gbsf_check_curve(cv\curve_replica.parent_curve));
        ELSE
          IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' IN TYPEOF(cv\offset_curve_3d.basis_curve)))) THEN
            RETURN (gbsf_check_curve(cv\offset_curve_3d.basis_curve));
          ELSE
            IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' IN TYPEOF(cv) THEN
                IF (SIZEOF(cv\polyline.points) >= 3) THEN
                  RETURN (TRUE);
                END_IF;
              ELSE
                IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt) THEN
    RETURN (TRUE);
  ELSE
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE' IN TYPEOF(pnt) THEN
      RETURN (gbsf_check_curve(pnt\point_on_curve.basis_curve));
    ELSE
      IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_SURFACE' IN TYPEOF(pnt) THEN
        RETURN (gbsf_check_surface(pnt\point_on_surface.basis_surface));
      ELSE
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SPHERICAL_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TOROIDAL_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_BOUNDED_SURFACE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.RECTANGULAR_TRIMMED_SURFACE'] * TYPEOF(sf)) = 1 THEN
      RETURN (TRUE);
    ELSE
      IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_REPLICA' IN TYPEOF(sf) THEN
            RETURN (gbsf_check_surface(sf\surface_replica.parent_surface));
          ELSE
            IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PCURVE' IN TYPEOF (c) THEN
    surfs := [c\pcurve.basis_surface];
  ELSE
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF (c) THEN
   (* For a composite_curve_on_surface the basis_surface is the intersection
    of the basis_surfaces of all the segments. *)
     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_description_value
	(obj: description_attribute_select) : text;
    LOCAL
      description_bag : BAG OF description_attribute := (USEDIN(obj, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_id_value
	(obj: id_attribute_select) : identifier;
    LOCAL
      id_bag : BAG OF id_attribute := (USEDIN(obj, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'ID_ATTRIBUTE.' + 'IDENTIFIED_ITEM'));
    END_LOCAL;

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

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

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

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

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

FUNCTION get_shape_aspect_property_definition_representations
	(s_a_instance: shape_aspect) : SET [0:?] 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, 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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], 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.' + 'PROPERTY_DEFINITION_REPRESENTATION.' + 'DEFINITION') |
'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN TYPEOF(pdr)));
END_REPEAT;
RETURN (pdr_set);
END_FUNCTION;

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

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

IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INT_LITERAL' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REAL_LITERAL' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (is_int_expr(arg\unary_numeric_expression.operand));
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (is_int_expr(arg\unary_numeric_expression.operand)); 
END_IF;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COS_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SQUARE_ROOT_FUNCTION' 
								IN TYPEOF(arg))
THEN 
	RETURN (FALSE);
END_IF;
IF 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MULT_EXPRESSION' 
								IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAXIMUM_FUNCTION'
								IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg))
THEN 
	RETURN(TRUE);	
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 	
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg) 
THEN 
	IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INT_VALUE_FUNCTION' 
								IN TYPEOF(arg) 
	THEN 
		RETURN (TRUE); 
	ELSE 
		RETURN (FALSE); 
	END_IF;
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INTEGER_DEFINED_FUNCTION' 
								IN TYPEOF(arg)
THEN 
	RETURN(TRUE) ;
END_IF;
IF'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REAL_DEFINED_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN(FALSE) ;
END_IF ;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOOLEAN_DEFINED_FUNCTION' 
								IN TYPEOF(arg)
THEN 
	RETURN(FALSE) ;
END_IF ;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_DEFINED_FUNCTION' 
								IN TYPEOF(arg)
THEN 
	RETURN (FALSE) ;
END_IF ;

RETURN (FALSE);
END_FUNCTION;

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

IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIMPLE_NUMERIC_EXPRESSION' 
								IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SQL_MAPPABLE_DEFINED_FUNCTION' 
								IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (is_SQL_mappable(arg\unary_numeric_expression.operand)); 
END_IF;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SQUARE_ROOT_FUNCTION' 
								IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LENGTH_FUNCTION' 
								IN TYPEOF(arg))
THEN 
	RETURN (FALSE);
END_IF;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) 
		OR('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) 
		OR('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MAXIMUM_FUNCTION' 
								IN TYPEOF(arg)) 
		OR('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg)) 
		OR('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POWER_EXPRESSION' 
								IN TYPEOF(arg))
THEN 
	RETURN (FALSE); 	
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIMPLE_BOOLEAN_EXPRESSION' 
								IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NOT_EXPRESSION' IN TYPEOF (arg) 
THEN 
	RETURN (is_SQL_mappable (arg\UNARY_GENERIC_EXPRESSION.OPERAND));
END_IF;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ODD_FUNCTION'IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.XOR_EXPRESSION' 
								IN TYPEOF (arg)) 
THEN	
	RETURN (FALSE);
END_IF;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.AND_EXPRESSION' IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_EQUAL' IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_GREATER' 
								IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_GREATER_EQUAL'
								IN TYPEOF (arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_LESS' 
								IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_LESS_EQUAL' 
								IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.COMPARISON_NOT_EQUAL' 
								IN TYPEOF (arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.NUMERIC_DEFINED_FUNCTION' 
								IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOOLEAN_DEFINED_FUNCTION' 
								IN TYPEOF(arg))
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.STRING_DEFINED_FUNCTION' 
								IN TYPEOF(arg))  
THEN 
		RETURN (FALSE) ;
END_IF;

IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SIMPLE_STRING_EXPRESSION' 
								IN TYPEOF(ARG) 
THEN 
	RETURN (TRUE);
END_IF;
IF 	('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.INDEX_EXPRESSION' IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SUBSTRING_EXPRESSION' 
								IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONCAT_EXPRESSION' 
								IN TYPEOF(arg)) 
		OR ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FORMAT_FUNCTION' 
								IN TYPEOF(arg)) 
THEN 
	RETURN (FALSE);
END_IF;

	RETURN (FALSE);
END_FUNCTION;

FUNCTION item_in_context
	(item: representation_item; cntxt: representation_context) : BOOLEAN;
    LOCAL
      y : BAG OF representation_item;
    END_LOCAL;
    -- If there is one or more representation using both the item
    -- and cntxt return true.
    IF SIZEOF(USEDIN(item,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION.ITEMS')
      * cntxt.representations_in_context) > 0 THEN
      RETURN (TRUE);
      -- Determine the bag of representation_items that reference
      -- item
      ELSE y := QUERY(z <* USEDIN (item , '') |
             'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z));
        -- Ensure that the bag is not empty
        IF SIZEOF(y) > 0 THEN
        -- For each element in the bag
        REPEAT i := 1 TO HIINDEX(y);
          -- Check to see it is an item in the input cntxt.
          IF item_in_context(y[i], cntxt) THEN
            RETURN (TRUE);
          END_IF;
        END_REPEAT;
      END_IF;
    END_IF;
    -- Return false when all possible branches have been checked
    -- with no success.
    RETURN (FALSE);
END_FUNCTION;

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

FUNCTION list_face_loops
	(f: face) : LIST [0:?] OF loop;
   LOCAL
     loops : LIST[0:?] OF loop := [];
   END_LOCAL;
   
   REPEAT i := 1 TO SIZEOF(f.bounds);
     loops := loops +(f.bounds[i].bound);
   END_REPEAT;
      
   RETURN(loops);
END_FUNCTION;

FUNCTION list_of_topology_reversed
	(a_list: list_of_reversible_topology_item) : list_of_reversible_topology_item;
   LOCAL
     the_reverse : list_of_reversible_topology_item;
   END_LOCAL;
    
   the_reverse := [];
   REPEAT i := 1 TO SIZEOF (a_list);
     the_reverse := topology_reversed (a_list [i]) + the_reverse;
   END_REPEAT;
  
   RETURN (the_reverse);
END_FUNCTION;

FUNCTION list_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 [0:?] 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 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 := ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLY_LOOP' IN TYPEOF(l[1]));
    REPEAT i := 2 TO SIZEOF(l);
      IF(('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_CURVE',
  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
  'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN
  RETURN(FALSE);
END_IF;

(* b_spline_curves shall not self-intersect
 *)
IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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

  (* conics and lines are valid curve types
   *)
  IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE'] 
    * TYPEOF (cv)) = 1 THEN
    RETURN(TRUE);
  ELSE

    (* a curve_replica shall reference a valid curve
     *)
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv) THEN
      RETURN (msf_curve_check(cv\curve_replica.parent_curve)); 
    ELSE 
 
      (* an offset_curve_3d shall not self-intersect and
         shall reference a valid curve; a polyline is not a
         valid basis_curve
       *)
      IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' IN TYPEOF
        (cv\offset_curve_3d.basis_curve)))) THEN
        RETURN (msf_curve_check(cv\offset_curve_3d.basis_curve)); 
      ELSE 
 
        (* a pcurve shall reference a valid curve and a valid
           basis_surface
         *)
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 
 
          (* a surface_curve references a curve_3d and one or
             two pcurves or one or two surfaces or one of
             each; all of these references shall be valid
           *)
          IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv) THEN 

            (* if the curve reference is correct, check also the rest
             *)
            IF msf_curve_check(cv\surface_curve.curve_3d) THEN
              REPEAT i := 1 TO SIZEOF
              (cv\surface_curve.associated_geometry);

                (* do for one or two associated_geometrys:
                 *)
                IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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

            (* a polyline shall have at least 3 points
             *)
            IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf) THEN
    RETURN(TRUE);
  ELSE 

    (* a swept_surface shall have a valid sweeping curve
     *)
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_SURFACE' IN TYPEOF (surf) THEN 
      RETURN (msf_curve_check(surf\swept_surface.swept_curve));  
    ELSE 
 
      (* an offset_surface shall not self-intersect and shall
         reference a valid surface
       *)
      IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 
 
        (* a surface_replica shall have a valid parent surface
         *)
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf) THEN 
          RETURN(msf_surface_check(surf\surface_replica.parent_surface)); 
        ELSE

          (* a b_spline_surface shall not self-intersect
           *)
          IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.BOUNDED_CURVE',
   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA',
   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1
 THEN RETURN(FALSE);
 ELSE

  (* b_spline_curves shall not self-intersect
   *)
  IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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

    (* conics and lines are valid curve types
     *)
    IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC',
    'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE'] * TYPEOF (cv)) = 1 THEN
      RETURN(TRUE);
    ELSE

      (* a curve_replica shall reference a valid curve
       *)
      IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv) THEN
        RETURN (nmsf_curve_check(cv\curve_replica.parent_curve)); 
      ELSE 
 
        (* an offset_curve_3d shall not self-intersect and
           shall reference a valid curve; a polyline is not a
           valid basis_curve
         *)
        IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' IN TYPEOF
          (cv\offset_curve_3d.basis_curve)))) THEN
          RETURN (nmsf_curve_check(cv\offset_curve_3d.basis_curve)); 
        ELSE 
 
          (* a pcurve shall reference a valid curve and a valid
             basis_surface
           *)
          IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 
 
            (* a surface_curve references a curve_3d and one or
               two pcurves or one or two surfaces or one of
               each; all of these references shall be valid
             *)
            IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv) THEN 

              (* if the curve reference is correct, check also the rest
               *)
              IF nmsf_curve_check(cv\surface_curve.curve_3d) THEN
                REPEAT i := 1 TO SIZEOF
                (cv\surface_curve.associated_geometry);

                  (* do for one or two associated_geometrys:
                   *)
                  IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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

              (* a polyline shall have at least 3 points 
               *)
              IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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;
IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf) THEN
    RETURN(TRUE);
  ELSE 

    (* a swept_surface shall have a valid sweeping curve
     *)
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SWEPT_SURFACE' IN TYPEOF (surf) THEN 
      RETURN (nmsf_curve_check(surf\swept_surface.swept_curve));  
    ELSE 
 
      (* an offset_surface shall not self-intersect and shall
         reference a valid surface
       *)
      IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 
 
        (* a surface_replica shall have a valid parent surface
         *)
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf) THEN 
          RETURN(nmsf_surface_check(surf\surface_replica.parent_surface)); 
        ELSE

          (* a b_spline_surface shall not self-intersect
           *)
          IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 normalise
	(arg: vector_or_direction) : vector_or_direction;
    LOCAL
      ndim   : INTEGER;
      v      : direction;
      result : vector_or_direction;
      vec    : vector;
      mag    : REAL;
    END_LOCAL;
    
    IF NOT EXISTS (arg) THEN
      result := ?;
  (* When function is called with invalid data a NULL result is returned *)
    ELSE
      ndim := arg.dim;
      IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VECTOR' IN TYPEOF(arg) THEN
        BEGIN
              v := dummy_gri || direction(arg\vector.orientation.direction_ratios);
          IF arg.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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 open_shell_reversed
	(a_shell: open_shell) : oriented_open_shell;
   LOCAL
     the_reverse : oriented_open_shell;
   END_LOCAL;
   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VECTOR' IN TYPEOF (vec) THEN
        v   := dummy_gri || direction(vec\vector.orientation.direction_ratios);
        mag := scalar * vec.magnitude;
      ELSE
        v   := dummy_gri || direction(vec.direction_ratios);
        mag := scalar;
      END_IF;
      IF (mag < 0.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 shell_reversed
	(a_shell: shell) : shell;
IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OPEN_SHELL' IN TYPEOF (a_shell) ) THEN
     RETURN (open_shell_reversed (a_shell));
   ELSE
     IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CLOSED_SHELL' IN TYPEOF (a_shell) ) THEN
       RETURN (closed_shell_reversed (a_shell));
     ELSE
       RETURN (?);
     END_IF;
   END_IF;
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 ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.EDGE' IN TYPEOF (an_item)) THEN
     RETURN (edge_reversed (an_item));
   END_IF;

   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PATH' IN TYPEOF (an_item)) THEN
     RETURN (path_reversed (an_item));
   END_IF;

   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE_BOUND' IN TYPEOF (an_item)) THEN
     RETURN (face_bound_reversed (an_item));
   END_IF;
  
   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FACE' IN TYPEOF (an_item)) THEN
     RETURN (face_reversed (an_item));
   END_IF;

   IF ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 [0:?] OF STRING; criterion: INTEGER) : LOGICAL;
IF ((NOT EXISTS(the_type)) OR (NOT ({0 <= criterion <= 3})) OR (SIZEOF(sub_names) = 0)) THEN
      RETURN (UNKNOWN);
    ELSE
      CASE criterion OF 
        0:
          RETURN (SIZEOF(sub_names * TYPEOF(the_type)) > 0);
        1:
          RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 0);
        2:
          RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 1);
        3:
          RETURN (SIZEOF(sub_names * TYPEOF(the_type)) <= 1);
      END_CASE;
    END_IF;
END_FUNCTION;

FUNCTION using_items
	(item: founded_item_select; checked_items: SET [0:?] OF founded_item_select) : SET [0:?] OF founded_item_select;
    LOCAL
      new_check_items    : SET OF founded_item_select;
      result_items       : SET OF founded_item_select;
      next_items         : SET OF founded_item_select;
    END_LOCAL;
    result_items := [];
    new_check_items := checked_items + item;
    -- Find the set of representation_items or founded_items
    -- in which item is used directly.
    next_items := QUERY(z <* bag_to_set( USEDIN(item , '')) |
      ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z)) OR
      ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.FOUNDED_ITEM'        IN TYPEOF(z)));
    -- If the set of next_items is not empty;
    IF SIZEOF(next_items) > 0 THEN
      -- For each element in the set, find the using_items recursively
      REPEAT i := 1 TO HIINDEX(next_items);
        -- Check for loop in data model, i.e. one of the next_items
        -- occurred earlier in the set of check_items;
        IF NOT(next_items[i] IN new_check_items) THEN
          result_items := result_items + next_items[i] +
                          using_items(next_items[i],new_check_items);
        END_IF;
      END_REPEAT;
    END_IF;
    -- return the set of representation_items or founded_items
    -- in which the input item is used directly and indirectly.
    RETURN (result_items);
END_FUNCTION;

FUNCTION using_representations
	(item: founded_item_select) : SET [0:?] OF representation;
    LOCAL
      results            : SET OF representation;
      result_bag         : BAG OF representation;
      intermediate_items : SET OF founded_item_select;
    END_LOCAL;
    -- Find the representations in which the item is used and add to the
    -- results set.
    results := [];
    result_bag := USEDIN(item,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION.ITEMS');
    IF SIZEOF(result_bag) > 0 THEN
      REPEAT i := 1 TO HIINDEX(result_bag);
        results := results + result_bag[i];
      END_REPEAT;
    END_IF;
    -- Find all representation_items or founded_items
    -- by which item is referenced directly or indirectly.
    intermediate_items := using_items(item,[]);
    -- If the set of intermediate items is not empty;
    IF SIZEOF(intermediate_items) > 0 THEN
      -- For each element in the set, add the
      -- representations of that element.
      REPEAT i := 1 TO HIINDEX(intermediate_items);
        result_bag := USEDIN(intermediate_items[i],
                      'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.REPRESENTATION.ITEMS');
        IF SIZEOF(result_bag) > 0 THEN
          REPEAT j := 1 TO HIINDEX(result_bag);
            results := results + result_bag[j];
          END_REPEAT;
        END_IF;
      END_REPEAT;
    END_IF;
    -- Return the set of representation in which the input item is
    -- used directly and indirectly (through intervening
    -- representation_items or founded items).
    RETURN (results);
END_FUNCTION;

FUNCTION valid_basis_curve_in_2d_wireframe
	(crv: curve) : BOOLEAN;
IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE',
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE',
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE',
               'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE'] * 
               TYPEOF (crv)) = 1
    THEN RETURN (TRUE);
  ELSE
    -- if the curve is a trimmed_curve
    IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TRIMMED_CURVE') 
    IN TYPEOF (crv)) THEN
      -- if a line, parabola, or hyperbola is being trimmed, then valid
      IF SIZEOF (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE',
                   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PARABOLA',
                   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.HYPERBOLA'] *
           TYPEOF(crv\trimmed_curve.basis_curve)) = 1
        THEN RETURN (TRUE);
      -- otherwise, recursively check basis_curve
      ELSE RETURN (valid_basis_curve_in_2d_wireframe
                         (crv\trimmed_curve.basis_curve));
      END_IF;
    ELSE
      -- recursively check the offset_curve basis curve
      IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_2D') 
      IN TYPEOF (crv))
        THEN RETURN (valid_basis_curve_in_2d_wireframe
                           (crv\offset_curve_2d.basis_curve));
      ELSE
        -- recursively check the curve_replica parent curve
        IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA') 
        IN TYPEOF (crv))
          THEN RETURN (valid_basis_curve_in_2d_wireframe
                         (crv\curve_replica.parent_curve));
        ELSE
          -- recursively check the composite_curve segments
          IF (('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_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 |
('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
TYPEOF(rep)));


IF (SIZEOF( QUERY( srwp <* parameter_representations |
          (SIZEOF( QUERY( i <* srwp.items |
          (i.name='orientation') AND
          ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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': 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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM',
		   'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM',
		'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM',
		'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM',
 		'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.ELLIPSE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CIRCLE' ] * TYPEOF (crv)) = 1 THEN 
 RETURN (TRUE);
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.TRIMMED_CURVE' IN TYPEOF (crv) THEN 
 IF SIZEOF ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.PARABOLA', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF (crv) THEN 
 RETURN (valid_geometrically_bounded_wf_curve(crv\offset_curve_3d.basis_curve));
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA' IN TYPEOF (crv) THEN 
 RETURN (valid_geometrically_bounded_wf_curve(crv\curve_replica.parent_curve));
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF (pnt) THEN 
 RETURN (TRUE);
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POINT_ON_CURVE' IN TYPEOF (pnt) THEN 
 RETURN (valid_geometrically_bounded_wf_curve(pnt\point_on_curve.basis_curve));
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ,'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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] , 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 (['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' ,
      'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
	  ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF ( i ) ) AND
 	  ( i.name = 'selection control' )))> 1) THEN
	  RETURN(FALSE);
    END_IF; --the selection control is not specified then the quantity shall be a qualified_representation_item or a value_range
    IF (SIZEOF ( QUERY ( i <* selected_representation\representation.items |
      ( 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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(['AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.QUALIFIED_REPRESENTATION_ITEM' ,
      'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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, 1.0, 0.0, 0.0, 0.0 ) THEN
        RETURN (FALSE);
      END_IF;
    END_IF;
    IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 ([ 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.LINE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CONIC', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.B_SPLINE_CURVE', 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.POLYLINE' ] * TYPEOF (crv)) = 1 THEN 
 RETURN (TRUE);
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CURVE_REPLICA' IN TYPEOF (crv) THEN 
 RETURN (valid_wireframe_edge_curve(crv\curve_replica.parent_curve));
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.CARTESIAN_POINT' IN TYPEOF (pnt) THEN 
 RETURN (TRUE);
 ELSE 
 IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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_countersink_radii
	(cskhole: solid_with_stepped_round_hole_and_conical_transitions) : BOOLEAN;
  LOCAL
    i,j             : INTEGER;
    n               : INTEGER := 1 +
                        cskhole\solid_with_stepped_round_hole.segments;
    smaller, larger : positive_length_measure;
  END_LOCAL;

  REPEAT i := 1 TO SIZEOF(cskhole.conical_transitions);

  -- First check whether transition i applies to the entry of the hole or 
  -- the exit of a through hole - those cases only need to be checked for 
  -- the sign of the cone apex angle.

  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

  -- For all remaining transitions, check that the cone base radius 
  -- lies in the range of validity.


      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 value_range_aggregate_rep_item
	(agg: AGGREGATE OF representation_item) : BOOLEAN;
BEGIN 
  IF (SIZEOF(QUERY(i1 <* agg | ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 | (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF
        (i1)))) = 2) OR
        (SIZEOF(QUERY (i2 <* agg | (
        'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_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 |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (i1)) AND
        (SIZEOF (QUERY (i2 <* agg |
        ('AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (i2)) AND
        (i1 :<>: i2) AND (i1\measure_with_unit.unit_component :=: i2\measure_with_unit.unit_component))) = 1))) = 2)
      THEN
        RETURN (TRUE);
      ELSE
        RETURN (FALSE);
      END_IF;
    END;
END_FUNCTION;

FUNCTION vector_difference
	(arg1: vector_or_direction; arg2: vector_or_direction) : vector;
    LOCAL
      result          : vector;
      res, vec1, vec2 : direction;
      mag, mag1, mag2 : REAL;
      ndim            : INTEGER;
    END_LOCAL;
 
    IF ((NOT EXISTS (arg1)) OR (NOT EXISTS (arg2))) OR (arg1.dim <> arg2.dim)
        THEN
      RETURN (?) ;
     ELSE
      BEGIN
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VECTOR' IN TYPEOF(arg1) THEN
          mag1 := arg1.magnitude;
          vec1 := arg1\vector.orientation;
        ELSE
          mag1 := 1.0;
          vec1 := arg1;
        END_IF;
        IF 'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF.VECTOR' IN TYPEOF(arg2) THEN
          mag2 := arg2.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;

END_SCHEMA; 

