]> OCCT Git - occt-copy.git/commitdiff
0031481: Data Exchange - provide parser of STEP EXPRESS schema for generation of...
authorabv <abv@opencascade.com>
Wed, 1 Apr 2020 22:21:08 +0000 (01:21 +0300)
committerskl <skl@opencascade.com>
Mon, 7 Dec 2020 09:01:19 +0000 (12:01 +0300)
Integration of ExpToCas tool ported to modern state of OCCT:
- new package Express and toolkit TKExpress for EXPRESS data structures and OCCT class generator
- executable ExpToCasExe including lax/yacc parsers, for parsing a Part 21 file and generating classes

Off-topic: genproj.tcl is improved to
- deal correctly with FILES files containing CRLF end-of-lines
- generate one project per executable unit (instead of one project per cxx file); note that this matches behaviour of CMake generator

77 files changed:
adm/MODULES
adm/UDLIST
adm/genproj.tcl
src/ExpToCasExe/CMakeLists.txt [new file with mode: 0644]
src/ExpToCasExe/EXTERNLIB [new file with mode: 0644]
src/ExpToCasExe/ExpToCasExe.cxx [new file with mode: 0644]
src/ExpToCasExe/FILES [new file with mode: 0644]
src/ExpToCasExe/ap242.exp [new file with mode: 0644]
src/ExpToCasExe/expformat.l [new file with mode: 0644]
src/ExpToCasExe/explist.l [new file with mode: 0644]
src/ExpToCasExe/expparse.cxx [new file with mode: 0644]
src/ExpToCasExe/expparse.h [new file with mode: 0644]
src/ExpToCasExe/expscan.cxx [new file with mode: 0644]
src/ExpToCasExe/exptocas.h [new file with mode: 0644]
src/ExpToCasExe/exptocas.l [new file with mode: 0644]
src/ExpToCasExe/exptocas.y [new file with mode: 0644]
src/ExpToCasExe/lex.yy.c [new file with mode: 0644]
src/ExpToCasExe/mkexpformat [new file with mode: 0644]
src/ExpToCasExe/mkexplist [new file with mode: 0644]
src/ExpToCasExe/mkparser [new file with mode: 0644]
src/ExpToCasExe/mkscanner [new file with mode: 0644]
src/ExpToCasExe/occt_step_entities.lst [new file with mode: 0644]
src/ExpToCasExe/readme.txt [new file with mode: 0644]
src/Express/Express.cxx [new file with mode: 0644]
src/Express/Express.hxx [new file with mode: 0644]
src/Express/Express_Alias.cxx [new file with mode: 0644]
src/Express/Express_Alias.hxx [new file with mode: 0644]
src/Express/Express_Array.hxx [new file with mode: 0644]
src/Express/Express_Bag.hxx [new file with mode: 0644]
src/Express/Express_Boolean.cxx [new file with mode: 0644]
src/Express/Express_Boolean.hxx [new file with mode: 0644]
src/Express/Express_ComplexType.cxx [new file with mode: 0644]
src/Express/Express_ComplexType.hxx [new file with mode: 0644]
src/Express/Express_DataMapOfAsciiStringItem.hxx [new file with mode: 0644]
src/Express/Express_Entity.cxx [new file with mode: 0644]
src/Express/Express_Entity.hxx [new file with mode: 0644]
src/Express/Express_Enum.cxx [new file with mode: 0644]
src/Express/Express_Enum.hxx [new file with mode: 0644]
src/Express/Express_Field.cxx [new file with mode: 0644]
src/Express/Express_Field.hxx [new file with mode: 0644]
src/Express/Express_HSequenceOfEntity.hxx [new file with mode: 0644]
src/Express/Express_HSequenceOfField.hxx [new file with mode: 0644]
src/Express/Express_HSequenceOfItem.hxx [new file with mode: 0644]
src/Express/Express_Integer.cxx [new file with mode: 0644]
src/Express/Express_Integer.hxx [new file with mode: 0644]
src/Express/Express_Item.cxx [new file with mode: 0644]
src/Express/Express_Item.hxx [new file with mode: 0644]
src/Express/Express_List.hxx [new file with mode: 0644]
src/Express/Express_Logical.cxx [new file with mode: 0644]
src/Express/Express_Logical.hxx [new file with mode: 0644]
src/Express/Express_NamedType.cxx [new file with mode: 0644]
src/Express/Express_NamedType.hxx [new file with mode: 0644]
src/Express/Express_Number.hxx [new file with mode: 0644]
src/Express/Express_PredefinedType.cxx [new file with mode: 0644]
src/Express/Express_PredefinedType.hxx [new file with mode: 0644]
src/Express/Express_Real.cxx [new file with mode: 0644]
src/Express/Express_Real.hxx [new file with mode: 0644]
src/Express/Express_Reference.cxx [new file with mode: 0644]
src/Express/Express_Reference.hxx [new file with mode: 0644]
src/Express/Express_Schema.cxx [new file with mode: 0644]
src/Express/Express_Schema.hxx [new file with mode: 0644]
src/Express/Express_Select.cxx [new file with mode: 0644]
src/Express/Express_Select.hxx [new file with mode: 0644]
src/Express/Express_SequenceOfEntity.hxx [new file with mode: 0644]
src/Express/Express_SequenceOfField.hxx [new file with mode: 0644]
src/Express/Express_SequenceOfItem.hxx [new file with mode: 0644]
src/Express/Express_Set.hxx [new file with mode: 0644]
src/Express/Express_String.cxx [new file with mode: 0644]
src/Express/Express_String.hxx [new file with mode: 0644]
src/Express/Express_Type.cxx [new file with mode: 0644]
src/Express/Express_Type.hxx [new file with mode: 0644]
src/Express/FILES [new file with mode: 0644]
src/OS/DataExchange.tcl
src/TKExpress/CMakeLists.txt [new file with mode: 0644]
src/TKExpress/EXTERNLIB [new file with mode: 0644]
src/TKExpress/FILES [new file with mode: 0644]
src/TKExpress/PACKAGES [new file with mode: 0644]

index 2ec6ef3029daaa1905d5a2897f2fd6887e3f037b..36fb6fcad0b160c5c02446f605f5ec95128c4fc2 100644 (file)
@@ -3,5 +3,5 @@ ModelingData TKG2d TKG3d TKGeomBase TKBRep
 ModelingAlgorithms TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing
 Visualization TKService TKV3d TKOpenGl TKMeshVS TKIVtk TKD3DHost
 ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
-DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh
+DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKExpress ExpToCasExe
 Draw TKDraw TKTopTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
index 9952c018092c4e7f1b05405d71b8ed9266132966..09aad25698f9e840a0ddfb2d74ebe3da961af2a0 100644 (file)
@@ -465,3 +465,6 @@ n TreeModel
 n View
 n ViewControl
 n VInspector
+n Express
+t TKExpress
+x ExpToCasExe
index d3a5c8a9333c4d103d274dd95b2069478a88c1b3..d3bef7f1d1f0e88eb6e378be77a304ca7f9b060f 100644 (file)
@@ -85,7 +85,7 @@ proc _get_used_files { pk theSrcDir {inc true} {src true} } {
   set index -1
   foreach line $FILES {
     incr index
-    if {$inc && ([regexp {([^:\s]*\.[hgl]xx)$} $line dummy name] || [regexp {([^:\s]*\.h)$} $line dummy name]) && [file exists $pk_path/$name]} {
+    if {$inc && ([regexp {([^:\s]*\.[hgl]xx)\r?$} $line dummy name] || [regexp {([^:\s]*\.h)\r?$} $line dummy name]) && [file exists $pk_path/$name]} {
       lappend lret "pubinclude $name $pk_path/$name"
       continue
     }
@@ -1228,28 +1228,31 @@ proc osutils:convertModules { theModules theSrcDir theSourceDirOther theProjects
       lappend aProjectsInModule($aModule) $aToolKit
       lappend aDependencies [LibToLink $aToolKit $theSrcDir $theSourceDirOther]
     }
-    # executables, assume one project per cxx file...
+    # executables, assume one project per unit...
     foreach aUnit [OS:executable ${aModule}] {
+      set aPrjName $aUnit
       set aUnitLoc $aUnit
-      set src_files [_get_used_files $aUnit $theSrcDir false]
-      set aSrcFiles {}
-      foreach s $src_files {
-        regexp {source ([^\s]+)} $s dummy name
-        lappend aSrcFiles $name
-      }
-      foreach aSrcFile $aSrcFiles {
-        set aFileExtension [file extension $aSrcFile]
-        if { $aFileExtension == ".cxx" } {
-          set aPrjName [file rootname $aSrcFile]
+#      set src_files [_get_used_files $aUnit $theSrcDir false]
+#      set aSrcFiles {}
+#      foreach s $src_files {
+#        regexp {source ([^\s]+)} $s dummy name
+#        lappend aSrcFiles $name
+#      }
+
+#      foreach aSrcFile $aSrcFiles {
+#        set aFileExtension [file extension $aSrcFile]
+#        if { $aFileExtension == ".cxx" } {
+#          set aPrjName [file rootname $aSrcFile]
           lappend aProjects $aPrjName
           lappend aProjectsInModule($aModule) $aPrjName
           if {[file isdirectory $path/$theSrcDir/$aUnitLoc]} {
-            lappend aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile] $theSrcDir $theSourceDirOther]
+            lappend aDependencies [LibToLinkX $aUnitLoc $aPrjName $theSrcDir $theSourceDirOther]
           } else {
+            puts "Error: cannot find executable unit $path/$theSrcDir/$aUnitLoc"
             lappend aDependencies {}
           }
-        }
-      }
+#        }
+#      }
     }
   }
 }
@@ -2082,10 +2085,11 @@ proc osutils:tk:execfiles { theFiles theOutDir theCommand thePrefix theExtension
 # Generate Visual Studio project file for executable
 proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir theSourceDirOther } {
   set aVcFiles {}
-  foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
+#  foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
     set aProjTmpl [osutils:vcproj:readtemplate $theVcVer $isUWP 1]
 
-    set aProjName [file rootname [file tail $f]]
+    set aProjName $theToolKit
+#    set aProjName [file rootname [file tail $f]]
     set l_compilable [osutils:compilable wnt]
     regsub -all -- {__XQTNAM__} $aProjTmpl $aProjName aProjTmpl
 
@@ -2111,25 +2115,31 @@ proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
 
     set aFilesSection ""
     set aVcFilesCxx(units) ""
-       set aVcFilesHxx(units) ""
+    set aVcFilesHxx(units) ""
+
+#puts "$theToolKit -> [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir]"
 
-    if { ![info exists written([file tail $f])] } {
-      set written([file tail $f]) 1
+#    if { ![info exists written([file tail $f])] } {
+#      set written([file tail $f]) 1
 
       if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
-        append aFilesSection [osutils:vcxproj:cxxfile $f "" 3]
         if { ! [info exists aVcFilesCxx($theToolKit)] } { lappend aVcFilesCxx(units) $theToolKit }
-        lappend aVcFilesCxx($theToolKit) $f
+        foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
+          append aFilesSection [osutils:vcxproj:cxxfile $f "" 3]
+          lappend aVcFilesCxx($theToolKit) $f
+        }
       } else {
         append aFilesSection "\t\t\t<Filter\n"
         append aFilesSection "\t\t\t\tName=\"$theToolKit\"\n"
         append aFilesSection "\t\t\t\t>\n"
-        append aFilesSection [osutils:vcproj:file $theVcVer $f ""]
+        foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
+          append aFilesSection [osutils:vcproj:file $theVcVer $f ""]
+        }
         append aFilesSection "\t\t\t</Filter>"
       }
-    } else {
-      puts "Warning : in vcproj there are more than one occurrences for [file tail $f]"
-    }
+#    } else {
+#      puts "Warning : in vcproj there are more than one occurences for [file tail $f]"
+#    }
     #puts "$aProjTmpl $aFilesSection"
     set anIncPaths "..\\..\\..\\inc"
     regsub -all -- {__TKINC__}  $aProjTmpl $anIncPaths    aProjTmpl
@@ -2172,7 +2182,7 @@ proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
 
       lappend aVcFiles "$aCommonSettingsFile"
     }
-  }
+#  }
   return $aVcFiles
 }
 
@@ -3574,7 +3584,7 @@ proc osutils:checksrcfiles { theUnit theSrcDir} {
 
   if {[file exists "${anUnitAbsPath}/FILES"]} {
     set aFilesFile [open "${anUnitAbsPath}/FILES" rb]
-    set aFilesFileList [split [read ${aFilesFile}] "\n"]
+    set aFilesFileList [split [regsub -all "\r" [read ${aFilesFile}] ""] "\n"]
     close ${aFilesFile}
 
     set aFilesFileList [lsearch -inline -all -not -exact ${aFilesFileList} ""]
diff --git a/src/ExpToCasExe/CMakeLists.txt b/src/ExpToCasExe/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d8184db
--- /dev/null
@@ -0,0 +1,5 @@
+project(ExpToCasExe)
+
+set (EXECUTABLE_PROJECT ON)
+OCCT_INCLUDE_CMAKE_FILE (adm/cmake/occt_toolkit)
+unset (EXECUTABLE_PROJECT)
diff --git a/src/ExpToCasExe/EXTERNLIB b/src/ExpToCasExe/EXTERNLIB
new file mode 100644 (file)
index 0000000..9a5a7e5
--- /dev/null
@@ -0,0 +1,2 @@
+TKernel
+TKExpress
diff --git a/src/ExpToCasExe/ExpToCasExe.cxx b/src/ExpToCasExe/ExpToCasExe.cxx
new file mode 100644 (file)
index 0000000..a717fc0
--- /dev/null
@@ -0,0 +1,222 @@
+// Created:    Mon Nov  1 12:50:27 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <TCollection_HAsciiString.hxx>
+#include <TColStd_SequenceOfInteger.hxx>
+
+#include <Express_Schema.hxx>
+#include <Express_Item.hxx>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning (disable:4267)
+#pragma warning (disable:4706)
+#endif
+
+Handle(Express_Schema) ec_parse ( FILE *fin ); // interface to parser
+
+// Load list of (class name, package name) from the file
+// Package names and optional mark flag are set to items in the schema
+static Standard_Boolean LoadList (const char file[], const Handle(Express_Schema) schema,
+                                 const Standard_Boolean mark)
+{
+  FILE *fd_pack = fopen ( file, "r" );
+  if ( ! fd_pack ) {
+    std::cout << "Warning: cannot open " << file << std::endl;
+    return Standard_False;
+  }
+
+  std::cout << "Loading " << file << "..";
+  char string[200];
+  while ( fgets ( string, 199, fd_pack ) ) {
+    char *s = string, *name=0;
+    Standard_Integer ind = 0;
+    while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+    if ( ! *s ) continue;
+    name = s;
+    name[ind] = '\0';
+    Handle(Express_Item) item = schema->Item ( name, Standard_True );
+    if ( item.IsNull() ) continue; // silently skip any class name not in schema
+    s += ind + 1;
+    while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+    if ( ! *s ) continue;
+    s[ind] = '\0';
+    Handle(TCollection_HAsciiString) pack = new TCollection_HAsciiString ( s );
+    if ( ! item->GetPackageName().IsNull() && item->GetPackageName()->IsDifferent ( pack ) ) {
+      std::cout << "\nWarning: Package is redefined for item " << name << std::endl;
+    }
+    item->SetPackageName ( pack );
+    if ( mark ) item->SetMark ( Standard_True );
+    //gka ----------------------------------------------
+    //filling additional field shortname for item  
+    //and setting flags marked presence of methods Check and FillShared.
+    //fields in the text file situate in the next way:
+    //name package_name  shortname check_flag(0 or 1) fillshared_flag(0 or 1) 
+    
+    s += ind + 1;
+    Handle(TCollection_HAsciiString) shortname = new TCollection_HAsciiString;
+    Standard_Boolean hasShortName = Standard_False;
+    while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+    if ( ! *s ) continue;
+    s[ind] = '\0';
+    //set CheckFlag or shortname
+    if(*s == '0' || *s == '1') {
+      Standard_Boolean hasCheck = (*s == '0' ? Standard_False : Standard_True);
+      item->SetCheckFlag(hasCheck);
+    }
+    else {
+      if(*s != '-')
+        shortname->SetValue(1,s);
+      if(shortname->Length() >0)
+      item->SetShortName(shortname);
+      hasShortName = Standard_True;
+    }
+    
+    s += ind + 1;
+    //set FillSharedFlag or shortname
+    while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+    if ( ! *s ) continue;
+    s[ind] = '\0';
+    if(!hasShortName) {
+      if(*s == '0' || *s == '1') {
+        Standard_Boolean hasFillShared = (*s == '0' ? Standard_False : Standard_True);
+        item->SetFillSharedFlag(hasFillShared);
+      }
+      else {
+        if(*s != '-')
+          shortname->SetValue(1,s);
+        if(shortname->Length() >0)
+          item->SetShortName(shortname);
+        hasShortName = Standard_True;
+      }
+      
+      s += ind + 1;
+      //set short name
+      while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+      if ( ! *s ) continue;
+      s[ind] = '\0';
+    }
+    if(!hasShortName) {
+      if(*s != '-')
+        shortname->SetValue(1,s);
+      if(shortname->Length() >0)
+        item->SetShortName(shortname);
+      
+      s += ind + 1;
+      //set Category
+      while ( *s && ! ( ind = strcspn ( s, " \t\r\n" ) ) ) s++;
+      if ( ! *s ) continue;
+      s[ind] = '\0';
+    }
+    Handle(TCollection_HAsciiString) category = new TCollection_HAsciiString;
+    category->SetValue(1,s);
+    if(category->Length()>0)
+      item->SetCategory(category);
+    //-----------------------------------------------------
+    
+    
+  }
+  std::cout << " Done" << std::endl;
+  
+  fclose ( fd_pack );
+  return Standard_True;
+}
+
+// MAIN program
+Standard_Integer main ( const Standard_Integer argc, const char *argv[] )
+{
+  if ( argc <2 ) {
+    std::cout << "EXPRESS -> CASCADE/XSTEP classes generator 3.0" << std::endl;
+    std::cout << "Use: ExpToCas <schema.exp> [<create.lst> [<packaging.lst> [start_index]]]" << std::endl;
+    std::cout << "Where: " << std::endl;
+    std::cout << "- schema.exp is a file with EXPRESS schema " << std::endl;
+    std::cout << "- create.lst is a file with list of types to generate (all if none)" << std::endl;
+    std::cout << "  (or \"-\" for creating all entities in the schema)" << std::endl;
+    std::cout << "- packaging.lst is a file with classes distribution per package" << std::endl;
+    std::cout << "  in the form of the list (one item per line) \"<TypeName> <Package>\"" << std::endl;
+    std::cout << "  If package not defined for some type, \"StepStep\" assumed" << std::endl;
+    std::cout << "- start_index - a first number for auxiliary generated files with data" << std::endl;
+    std::cout << "  to copy into StepAP214_Protocol.cxx, RWStepAP214_GeneralModule.cxx and RWStepAP214_ReadWriteModule.cxx" << std::endl;
+    return 0;
+  }
+  
+  //=================================
+  // Step 1: parsing EXPRESS file
+  // open schema file
+  FILE *fin = fopen ( argv[1], "rt" );
+  if ( ! fin ) {
+    std::cout << "Error: Cannot open " << argv[1] << std::endl;
+    return 0;
+  }
+  
+  // parse
+  std::cout << "Starting parsing " << argv[1] << std::endl;
+  Handle(Express_Schema) schema = ec_parse ( fin );
+  fclose ( fin );
+
+  if ( schema.IsNull() ) {
+    std::cout << "Error: Parsing finished with no result" << std::endl;
+    return 0;
+  }
+  else std::cout << "Schema " << schema->Name()->ToCString() << " successfully parsed" << std::endl;
+
+  //=================================
+  // Step 2: Prepare data for creating classes
+  
+  // load packaging information
+  if ( argc >3 ) {
+    if ( ! LoadList ( argv[3], schema, Standard_False ) ) return 0;
+  }
+  
+  // load list of classes to generate
+  TColStd_SequenceOfInteger seq;
+  if ( argc >2 ) {
+    if ( argv[2][0] =='-' ) { // set mark for all items
+      for ( Standard_Integer num=1; num <= schema->NbItems(); num++ )
+       schema->Item ( num )->SetMark(Standard_True);
+    }
+    else if ( ! LoadList ( argv[2], schema, Standard_True ) ) return 0;
+  }
+
+  Standard_Integer anIndex = -1;
+  if (argc > 4)
+    anIndex = atoi(argv[4]);
+
+  //=================================
+  // Step 3: Iterate by items and generate classes
+
+  std::cout << "Total " << schema->NbItems() << " items" << std::endl;
+  Standard_Boolean done = Standard_False;
+  Standard_Integer nbgen = 0;
+  Express_Item::SetIndex(anIndex);
+  do {
+    done = Standard_False;
+    for ( Standard_Integer num=1; num <= schema->NbItems(); num++ ) {
+      if ( ! schema->Item ( num )->GetMark() ) continue;
+      nbgen += schema->Item ( num )->Generate();
+      done = Standard_True;
+//      std::cout << num << ": " << schema->Item(num)->CPPName()->ToCString() << std::endl;
+    }
+  } while ( done );
+//  std::cout << "Finished; total " << nbgen << " classes generated" << std::endl;
+  return 1;
+}
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
diff --git a/src/ExpToCasExe/FILES b/src/ExpToCasExe/FILES
new file mode 100644 (file)
index 0000000..4d257e4
--- /dev/null
@@ -0,0 +1,7 @@
+exptocas.h
+expparse.h
+mkscanner
+mkparser
+ExpToCasExe.cxx
+expscan.cxx
+expparse.cxx
diff --git a/src/ExpToCasExe/ap242.exp b/src/ExpToCasExe/ap242.exp
new file mode 100644 (file)
index 0000000..994d350
--- /dev/null
@@ -0,0 +1,49554 @@
+(*
+   $Id: mim_lf.exp,v 1.101 2019/07/01 16:42:01 kevin Exp $
+   ISO TC184/SC4/WG12 N10517 - ISO/TS 10303-442 AP242 managed model based 3d engineering - EXPRESS MIM Long form
+   Supersedes ISO TC184/SC4/WG3 N10384
+*)
+
+-- -*- Mode: Express -*-
+
+(* ===================================================================================== *)
+(* Long form schema generated by The EXPRESS Data Manager  compiler version 9.8.9B 20130507 *)
+(* Sat Jun 08 15:16:30 2019 *)
+(* The schema is converted from ISO10303 P11-2003 to ISO10303 P11-1994 *)
+(* ===================================================================================== *)
+
+(* Pretty Printed by Express Engine
+      5.0.21 (GIT eeng-5.0.21)
+      Steel Bank CL 1.4.16 (64-bits)
+
+     eengine --pretty
+       -mode mim_longform
+       -schema mim_lf.exp
+   Line Width: 120
+   Commandline:
+     eengine --pretty
+       -mode mim_longform
+       -schema mim_lf.exp
+*)
+
+(* File: /Users/klt/Desktop/mim_lf.exp *)
+(* 1 Schema: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF *)
+
+(*  Interfaces:                 0 *)
+(*  Constants:                 29 *)
+(*  Types:                    449 *)
+(*  Entities:               2,118 *)
+(*  Subtype_Constraints:        0 *)
+(*  Functions:                316 *)
+(*  Rules:                     55 *)
+(*  Procedures:                 0 *)
+
+SCHEMA automotive_design;
+
+TYPE a3m_accuracy_type_name = ENUMERATION OF
+  (atna_others,
+   atns_area_measure,
+   atns_length_measure,
+   atns_others,
+   atns_plane_angle_measure,
+   atns_volume_measure);
+END_TYPE;
+
+TYPE a3m_detected_difference_type_name = ENUMERATION OF
+  (ddna_a3ms_inspected_equivalence_element_select,
+   ddna_assembly_component_usage,
+   ddna_binary_assembly_constraint,
+   ddna_cartesian_point,
+   ddna_context_dependent_shape_representation,
+   ddna_count_measure,
+   ddna_multi_level_reference_designator,
+   ddna_no_element,
+   ddna_others,
+   ddna_volume_measure,
+   ddns_area_measure,
+   ddns_cartesian_point,
+   ddns_connected_face_set,
+   ddns_count_measure,
+   ddns_edge,
+   ddns_face,
+   ddns_five_count_measure,
+   ddns_four_count_measure,
+   ddns_length_measure,
+   ddns_no_element,
+   ddns_others,
+   ddns_point_on_curve,
+   ddns_point_on_surface,
+   ddns_several_edges,
+   ddns_several_faces,
+   ddns_three_count_measure,
+   ddns_two_cartesian_points,
+   ddns_two_count_measure,
+   ddns_volume_measure);
+END_TYPE;
+
+TYPE a3m_element_type_name = ENUMERATION OF
+  (etna_others,
+   etna_product_definition_or_reference,
+   etna_shape_representation,
+   etns_connected_edge_set,
+   etns_connected_face_set,
+   etns_external_representation_item,
+   etns_manifold_solid_brep,
+   etns_others,
+   etns_point_cloud_dataset,
+   etns_shell_based_surface_model,
+   etns_shell_based_wireframe_model,
+   etns_vertex_point);
+END_TYPE;
+
+TYPE a3m_equivalence_assessment_specification_select = SELECT 
+  (a3m_equivalence_assessment_by_logical_test,
+   a3m_equivalence_assessment_by_numerical_test);
+END_TYPE;
+
+TYPE a3m_measured_data_type_name = ENUMERATION OF
+  (mdna_boolean_value,
+   mdna_context_dependent_measure,
+   mdna_length_measure,
+   mdna_length_measure_and_context_dependent_measure,
+   mdna_others,
+   mdna_plane_angle_measure,
+   mdna_volume_measure,
+   mdns_area_measure,
+   mdns_boolean_value,
+   mdns_length_measure,
+   mdns_others,
+   mdns_plane_angle_measure,
+   mdns_volume_measure);
+END_TYPE;
+
+TYPE a3ma_accuracy_type_name = a3m_accuracy_type_name;
+END_TYPE;
+
+TYPE a3ma_detected_difference_type_name = a3m_detected_difference_type_name;
+END_TYPE;
+
+TYPE a3ma_element_type_name = a3m_element_type_name;
+END_TYPE;
+
+TYPE a3ma_measured_data_type_name = a3m_measured_data_type_name;
+END_TYPE;
+
+TYPE a3ms_accuracy_type_name = a3m_accuracy_type_name;
+END_TYPE;
+
+TYPE a3ms_detected_difference_type_name = a3m_detected_difference_type_name;
+END_TYPE;
+
+TYPE a3ms_element_type_name = a3m_element_type_name;
+END_TYPE;
+
+TYPE a3ms_inspected_equivalence_element_select = inspected_equivalence_element_select;
+END_TYPE;
+
+TYPE a3ms_measured_data_type_name = a3m_measured_data_type_name;
+END_TYPE;
+
+TYPE absorbed_dose_measure = REAL;
+END_TYPE;
+
+TYPE acceleration_measure = REAL;
+END_TYPE;
+
+TYPE accuracy_associated_target_select = SELECT 
+  (a3m_equivalence_criteria_representation,
+   a3m_equivalence_criterion,
+   a3m_equivalence_inspection_result_representation,
+   data_equivalence_inspection_result);
+END_TYPE;
+
+TYPE action_items = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_date_and_time_assignment,
+   applied_date_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_state_observed_assignment,
+   applied_state_type_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_status,
+   ascribable_state,
+   ascribable_state_relationship,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   breakdown_of,
+   calendar_date,
+   certification,
+   certification_item,
+   change_group,
+   characterized_class,
+   characterized_object,
+   class,
+   classification_item,
+   class_system,
+   condition,
+   conditional_effectivity,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   date_and_time,
+   date_and_time_assignment,
+   date_assignment,
+   dimensional_location,
+   dimensional_size,
+   directed_action_assignment,
+   directed_dimensional_location,
+   document_file,
+   document_reference_item,
+   document_relationship,
+   document_type,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   evaluated_characteristic,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   event_occurrence,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   hierarchical_interface_connection,
+   identification_assignment_relationship,
+   inclusion_product_concept_feature,
+   identification_item,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design,
+   interface_connector_occurrence,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_definition_for,
+   interface_specification_version,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   presentation_area,
+   process_operation,
+   process_plan,
+   product,
+   product_category,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_element_relationship,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_definition_usage,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   product_process_plan,
+   product_related_product_category,
+   product_relationship,
+   property_definition,
+   property_definition_relationship,
+   property_definition_representation,
+   representation,
+   representation_item,
+   representation_relationship,
+   requirement_assigned_item,
+   requirement_assignment,
+   requirement_for_action_resource,
+   resource_property,
+   retention,
+   rule_set,
+   security_classification,
+   security_classification_level,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_representation,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   usage_association,
+   validation,
+   value_representation_item,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE action_method_items = SELECT 
+  (action,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_request_solution,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   breakdown_of,
+   condition,
+   configuration_design,
+   configuration_item,
+   contract,
+   contract_assignment,
+   date_and_time,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   externally_defined_general_property,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   hierarchical_interface_connection,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   material_designation_characterization,
+   measure_representation_item,
+   organization,
+   organizational_address,
+   organizational_project,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   product,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_design_version_to_individual,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   property_definition,
+   property_definition_representation,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_view_definition_relationship,
+   state_observed,
+   state_type,
+   state_type_relationship,
+   structured_message,
+   validation,
+   value_representation_item,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE action_request_item = SELECT 
+  (action,
+   action_method,
+   action_property,
+   action_relationship,
+   alternate_product_relationship,
+   assembly_component_usage_substitute,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   executed_action,
+   general_property,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_project,
+   person,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_identification,
+   property_definition,
+   resource_property,
+   shape_aspect,
+   shape_representation,
+   versioned_action_request);
+END_TYPE;
+
+TYPE actuated_direction = ENUMERATION OF
+  (bidirectional,
+   positive_only,
+   negative_only,
+   not_actuated);
+END_TYPE;
+
+TYPE ahead_or_behind = ENUMERATION OF
+  (ahead,
+   exact,
+   behind);
+END_TYPE;
+
+TYPE amount_of_substance_measure = REAL;
+END_TYPE;
+
+TYPE analysed_item = SELECT 
+  (action_property_representation,
+   alternate_product_relationship,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   evidence,
+   interface_connection,
+   interface_connector_occurrence,
+   organization,
+   organizational_project_relationship,
+   organization_relationship,
+   product,
+   product_concept,
+   product_definition,
+   product_definition_context,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_group_relationship,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   requirement_assignment,
+   state_observed,
+   state_observed_assignment,
+   state_observed_role,
+   state_type,
+   validation,
+   verification,
+   verification_relationship);
+END_TYPE;
+
+TYPE angle_direction_reference_select = SELECT 
+  (curve,
+   direction,
+   point_path);
+END_TYPE;
+
+TYPE angle_direction_reference_with_a2p3d_select = SELECT 
+  (angle_direction_reference_select,
+   axis2_placement_3d);
+END_TYPE;
+
+TYPE angle_relator = ENUMERATION OF
+  (equal,
+   large,
+   small);
+END_TYPE;
+
+TYPE angular_deviation = positive_plane_angle_measure;
+END_TYPE;
+
+TYPE annotation_placeholder_occurrence_role = ENUMERATION OF
+  (annotation_text,
+   gps_data);
+END_TYPE;
+
+TYPE annotation_plane_element = SELECT 
+  (draughting_callout,
+   styled_item);
+END_TYPE;
+
+TYPE annotation_representation_select = SELECT 
+  (draughting_model,
+   presentation_area,
+   presentation_view,
+   symbol_representation);
+END_TYPE;
+
+TYPE annotation_symbol_occurrence_item = SELECT 
+  (annotation_symbol,
+   defined_symbol);
+END_TYPE;
+
+TYPE annotation_text_occurrence_item = SELECT 
+  (annotation_text,
+   annotation_text_character,
+   composite_text,
+   defined_character_glyph,
+   text_literal);
+END_TYPE;
+
+TYPE ap242_assignment_object_select = assignment_object_select;
+END_TYPE;
+
+TYPE approval_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_request_solution,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   assembly_component_usage_substitute,
+   breakdown_of,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   date,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action,
+   directed_action_assignment,
+   document,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_general_property,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   inclusion_product_concept_feature,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_definition,
+   interface_connector_design,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_connector_version,
+   interface_definition_for,
+   interface_specification_definition,
+   interface_specification_version,
+   in_zone,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   package_product_concept_feature,
+   person_and_organization,
+   presentation_area,
+   process_plan,
+   product,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_definition_usage,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   security_classification,
+   shape_aspect_relationship,
+   shape_representation,
+   structured_message,
+   validation,
+   value_representation_item,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE approved_item = SELECT 
+  (certification,
+   change,
+   change_request,
+   configuration_effectivity,
+   configuration_item,
+   contract,
+   product,
+   security_classification,
+   start_request,
+   start_work);
+END_TYPE;
+
+TYPE area_measure = REAL;
+END_TYPE;
+
+TYPE area_or_view = SELECT 
+  (presentation_area,
+   presentation_view);
+END_TYPE;
+
+TYPE area_unit_type = ENUMERATION OF
+  (circular,
+   cylindrical,
+   rectangular,
+   spherical,
+   square);
+END_TYPE;
+
+TYPE assignment_object_select = SELECT 
+  (action_property,
+   action_property_representation,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   breakdown_of,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   frozen_assignment,
+   material_designation_characterization,
+   organizational_address,
+   person_and_organization_address,
+   product_concept_feature_association,
+   product_concept_feature_category_usage,
+   property_definition,
+   property_definition_representation,
+   requirement_assignment,
+   requirement_for_action_resource);
+END_TYPE;
+
+TYPE atom_based_value = SELECT 
+  (maths_atom);
+END_TYPE;
+
+TYPE attribute_classification_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   action_request_solution,
+   action_request_status,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   approval,
+   approval_person_organization,
+   approval_relationship,
+   approval_status,
+   certification,
+   context_dependent_unit,
+   contract,
+   date_and_time_assignment,
+   date_assignment,
+   derived_unit,
+   descriptive_representation_item,
+   document_file,
+   document_relationship,
+   effectivity,
+   envelope,
+   envelope_relationship,
+   event_occurrence_relationship,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_definition,
+   interface_definition_connection,
+   interface_specification_definition,
+   language,
+   measure_representation_item,
+   measure_with_unit,
+   message_relationship,
+   named_unit,
+   organizational_address,
+   organizational_project_relationship,
+   organization_relationship,
+   person_and_organization,
+   person_and_organization_address,
+   product,
+   product_category,
+   product_concept,
+   product_concept_context,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   property_definition,
+   property_definition_relationship,
+   property_definition_representation,
+   representation,
+   representation_context,
+   representation_item,
+   security_classification,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   time_interval_relationship,
+   uncertainty_measure_with_unit,
+   usage_association,
+   versioned_action_request);
+END_TYPE;
+
+TYPE attribute_identifier = identifier;
+WHERE
+  WR1: validate_attribute_id(SELF);
+END_TYPE;
+
+TYPE attribute_language_item = SELECT 
+  (action,
+   action_method,
+   action_method_relationship,
+   actuated_kinematic_pair,
+   alternate_product_relationship,
+   application_context,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_certification_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_security_classification_assignment,
+   approval,
+   approval_relationship,
+   approval_status,
+   assembly_component_usage_substitute,
+   attribute_value_assignment,
+   certification,
+   certification_type,
+   configuration_design,
+   configuration_item,
+   contract,
+   data_environment,
+   date_role,
+   date_time_role,
+   descriptive_representation_item,
+   document_relationship,
+   document_usage_role,
+   draughting_title,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   event_occurrence,
+   evidence,
+   external_source,
+   general_property,
+   general_property_relationship,
+   geometric_representation_item,
+   geometric_tolerance,
+   group,
+   group_relationship,
+   identification_role,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   kinematic_pair,
+   make_from_usage_option,
+   mapped_item,
+   message_relationship,
+   multi_language_attribute_assignment,
+   name_assignment,
+   object_role,
+   organizational_project,
+   organizational_project_relationship,
+   organizational_project_role,
+   organization_relationship,
+   organization_role,
+   person_and_organization,
+   person_and_organization_role,
+   presentation_layer_assignment,
+   process_product_association,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_relationship,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_shape,
+   product_definition_substitute,
+   product_group,
+   product_group_relationship,
+   product_related_product_category,
+   property_definition,
+   property_definition_relationship,
+   representation,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   resource_requirement_type,
+   security_classification,
+   security_classification_assignment,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_representation,
+   state_observed,
+   state_observed_relationship,
+   state_type,
+   state_type_relationship,
+   structured_message,
+   styled_item,
+   time_interval_role,
+   topological_representation_item,
+   uncertainty_measure_with_unit,
+   uncertainty_qualifier,
+   usage_association,
+   validation,
+   verification,
+   versioned_action_request,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE attribute_select = SELECT 
+  (product_group_context,
+   product_group_purpose);
+END_TYPE;
+
+TYPE attribute_type = SELECT 
+  (label,
+   text);
+END_TYPE;
+
+TYPE axial_geometry_constraint_element = SELECT 
+  (circle,
+   conical_surface,
+   cylindrical_surface,
+   line,
+   plane,
+   point,
+   revolved_area_solid,
+   revolved_face_solid,
+   right_circular_cone,
+   right_circular_cylinder,
+   sphere,
+   spherical_surface,
+   surface_of_revolution,
+   toroidal_surface,
+   torus);
+END_TYPE;
+
+TYPE axis2_placement = SELECT 
+  (axis2_placement_2d,
+   axis2_placement_3d);
+END_TYPE;
+
+TYPE b_spline_curve_form = ENUMERATION OF
+  (polyline_form,
+   circular_arc,
+   elliptic_arc,
+   parabolic_arc,
+   hyperbolic_arc,
+   unspecified);
+END_TYPE;
+
+TYPE b_spline_or_composite_curve_select = SELECT 
+  (b_spline_curve,
+   composite_curve);
+END_TYPE;
+
+TYPE b_spline_or_rectangular_composite_surface_select = SELECT 
+  (b_spline_surface,
+   rectangular_composite_surface);
+END_TYPE;
+
+TYPE b_spline_surface_form = ENUMERATION OF
+  (plane_surf,
+   cylindrical_surf,
+   conical_surf,
+   spherical_surf,
+   toroidal_surf,
+   surf_of_revolution,
+   ruled_surf,
+   generalised_cone,
+   quadric_surf,
+   surf_of_linear_extrusion,
+   unspecified);
+END_TYPE;
+
+TYPE base_solid_select = SELECT
+  (solid_model,
+   csg_primitive,
+   boolean_result);
+WHERE
+   WR1: NOT('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D' IN TYPEOF(SELF));
+END_TYPE;
+
+TYPE basis_11_direction_member = SELECT 
+  (cartesian_11,
+   curve_11,
+   cylindrical_11,
+   point_array,
+   polar_11,
+   user_defined_11);
+END_TYPE;
+
+TYPE blend_end_condition_select = SELECT 
+  (edge_curve,
+   point_on_curve,
+   vertex);
+END_TYPE;
+
+TYPE blend_radius_variation_type = ENUMERATION OF
+  (linear_blend,
+   cubic_blend,
+   unspecified_blend);
+END_TYPE;
+
+TYPE boolean_operand = SELECT 
+  (boolean_result,
+   csg_primitive,
+   half_space_2d,
+   half_space_solid,
+   solid_model);
+END_TYPE;
+
+TYPE boolean_operand_2d = SELECT 
+  (boolean_result_2d,
+   bounded_primitive_2d);
+END_TYPE;
+
+TYPE boolean_operator = ENUMERATION OF
+  (union,
+   intersection,
+   difference);
+END_TYPE;
+
+TYPE boolean_value = BOOLEAN;
+END_TYPE;
+
+TYPE bounded_primitive_2d = SELECT 
+  (area_with_outer_boundary,
+   circular_area,
+   elliptic_area,
+   path_area_with_parameters,
+   polygonal_area,
+   rectangular_area);
+END_TYPE;
+
+TYPE box_characteristic_select = SELECT 
+  (box_height,
+   box_rotate_angle,
+   box_slant_angle,
+   box_width);
+END_TYPE;
+
+TYPE box_height = positive_ratio_measure;
+END_TYPE;
+
+TYPE box_rotate_angle = plane_angle_measure;
+END_TYPE;
+
+TYPE box_slant_angle = plane_angle_measure;
+END_TYPE;
+
+TYPE box_width = positive_ratio_measure;
+END_TYPE;
+
+TYPE camera_model_d3_multi_clipping_intersection_select = SELECT 
+  (camera_model_d3_multi_clipping_union,
+   plane);
+END_TYPE;
+
+TYPE camera_model_d3_multi_clipping_union_select = SELECT 
+  (camera_model_d3_multi_clipping_intersection,
+   plane);
+END_TYPE;
+
+TYPE capacitance_measure = REAL;
+END_TYPE;
+
+TYPE category_usage_item = SELECT 
+  (product_class);
+END_TYPE;
+
+TYPE cc_classified_item = SELECT 
+  (assembly_component_usage,
+   product_definition_formation);
+END_TYPE;
+
+TYPE cc_person_organization_item = SELECT 
+  (change,
+   change_request,
+   configuration_item,
+   contract,
+   product,
+   product_definition,
+   product_definition_formation,
+   security_classification,
+   start_request,
+   start_work);
+END_TYPE;
+
+TYPE cc_specified_item = SELECT 
+  (product_definition,
+   shape_aspect);
+END_TYPE;
+
+TYPE celsius_temperature_measure = REAL;
+END_TYPE;
+
+TYPE central_or_parallel = ENUMERATION OF
+  (central,
+   parallel);
+END_TYPE;
+
+TYPE certification_item = SELECT 
+  (action_method,
+   alternate_product_relationship,
+   analysis_assignment,
+   applied_action_method_assignment,
+   assembly_component_usage,
+   evidence,
+   executed_action,
+   interface_connection,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_specification_version,
+   make_from_usage_option,
+   organizational_project,
+   product,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_definition_relationship,
+   product_group,
+   product_group_relationship,
+   product_identification,
+   product_relationship,
+   requirement_view_definition_relationship);
+END_TYPE;
+
+TYPE certified_item = SELECT 
+  (supplied_part_relationship);
+END_TYPE;
+
+TYPE chained_representation_link = SELECT 
+  (mapped_item,
+   representation_context,
+   representation_relationship);
+END_TYPE;
+
+TYPE change_management_object = SELECT 
+  (action,
+   action_items,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   breakdown_of,
+   class,
+   condition,
+   conditional_effectivity,
+   configuration_effectivity,
+   contract,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   effectivity,
+   event_occurrence,
+   exclusive_product_concept_feature_category,
+   frozen_assignment,
+   general_property_relationship,
+   inclusion_product_concept_feature,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   process_operation,
+   process_plan,
+   product,
+   product_class,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_identification,
+   product_process_plan,
+   project_item,
+   property_definition,
+   property_definition_representation,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_view_definition_relationship,
+   value_representation_item);
+END_TYPE;
+
+TYPE change_relationship_select = SELECT 
+  (action_relationship,
+   alternative_solution_relationship,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   shape_aspect_relationship);
+END_TYPE;
+
+TYPE change_request_item = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE character_spacing_select = SELECT 
+  (descriptive_measure,
+   length_measure,
+   measure_with_unit,
+   ratio_measure);
+END_TYPE;
+
+TYPE character_style_select = SELECT 
+  (character_glyph_style_outline,
+   character_glyph_style_stroke,
+   text_style_for_defined_font);
+END_TYPE;
+
+TYPE characterized_action_definition = SELECT 
+  (action,
+   action_method,
+   action_method_relationship,
+   action_relationship);
+END_TYPE;
+
+TYPE characterized_definition = SELECT 
+  (characterized_item,
+   characterized_object,
+   characterized_product_definition,
+   shape_definition);
+END_TYPE;
+
+TYPE characterized_item = SELECT 
+  (dimensional_size,
+   geometric_tolerance,
+   item_identified_representation_usage);
+END_TYPE;
+
+TYPE characterized_material_property = SELECT 
+  (material_property_representation,
+   product_material_composition_relationship);
+END_TYPE;
+
+TYPE characterized_product_composition_value = SELECT 
+  (measure_with_unit);
+END_TYPE;
+
+TYPE characterized_product_definition = SELECT 
+  (product_definition,
+   product_definition_occurrence,
+   product_definition_relationship,
+   product_definition_relationship_relationship);
+END_TYPE;
+
+TYPE characterized_property_representation = SELECT 
+  (action_property_representation,
+   dimensional_characteristic_representation,
+   property_definition_representation,
+   resource_property_representation);
+END_TYPE;
+
+TYPE characterized_resource_definition = SELECT 
+  (action_resource,
+   action_resource_relationship,
+   action_resource_requirement);
+END_TYPE;
+
+TYPE chordal_deviation = positive_length_measure;
+END_TYPE;
+
+TYPE class_usage_effectivity_context_item = SELECT 
+  (product_definition);
+END_TYPE;
+
+TYPE classification_item = SELECT 
+  (action,
+   action_directive,
+   action_directive_relationship,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   action_request_solution,
+   action_request_status,
+   action_resource,
+   action_resource_relationship,
+   address,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment_relationship,
+   applied_contract_assignment,
+   applied_date_and_time_assignment,
+   applied_date_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_external_identification_assignment_relationship,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_person_organization,
+   approval_relationship,
+   approval_status,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   attribute_language_assignment,
+   breakdown_context,
+   breakdown_element_realization,
+   breakdown_of,
+   calendar_date,
+   certification,
+   change_element_sequence,
+   change_group,
+   characterized_class,
+   characterized_object,
+   class,
+   classified_item,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   context_dependent_unit,
+   contract,
+   contract_relationship,
+   conversion_based_unit,
+   date_and_time,
+   date_and_time_assignment,
+   date_assignment,
+   definitional_representation_relationship,
+   derived_unit,
+   descriptive_representation_item,
+   directed_action,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   document_type,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   executed_action,
+   feature_definition,
+   general_feature,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment,
+   identification_assignment_relationship,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_definition_connection,
+   interface_definition_for,
+   in_zone,
+   language,
+   link_motion_relationship,
+   local_time,
+   location,
+   location_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_qualification,
+   measure_representation_item,
+   measure_with_unit,
+   message_relationship,
+   multi_language_attribute_assignment,
+   named_unit,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   plus_minus_tolerance,
+   process_operation,
+   process_plan,
+   process_product_association,
+   product,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_concept_relationship,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_usage,
+   product_definition_usage_relationship,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_context,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   retention,
+   satisfies_requirement,
+   security_classification,
+   security_classification_level,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_feature_definition_relationship,
+   state_definition_to_state_assignment_relationship,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_observed_role,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   time_interval_relationship,
+   type_qualifier,
+   uncertainty_measure_with_unit,
+   usage_association,
+   validation,
+   verification,
+   versioned_action_request,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE classified_item = SELECT 
+  (product,
+   product_definition,
+   product_definition_formation);
+END_TYPE;
+
+TYPE closed_or_open_shell_select = SELECT 
+  (closed_shell,
+   open_shell);
+END_TYPE;
+
+TYPE colour_type_enum = ENUMERATION OF
+  (rgb8,
+   rgbt8);
+END_TYPE;
+
+TYPE common_datum_list = LIST[2:?] OF datum_reference_element;
+WHERE
+  WR1: SIZEOF( QUERY(dre <* SELF | dre\shape_aspect.of_shape <> SELF[1]\shape_aspect.of_shape)) = 0;
+END_TYPE; 
+
+TYPE compound_inner_area_boundary = SELECT 
+  (set_inner_area_boundary);
+END_TYPE;
+
+TYPE compound_item_definition = SELECT 
+  (list_representation_item,
+   set_representation_item);
+END_TYPE;
+
+TYPE conductance_measure = REAL;
+END_TYPE;
+
+TYPE configuration_design_item = SELECT 
+  (product_definition,
+   product_definition_formation,
+   product_definition_occurrence);
+END_TYPE;
+
+TYPE configured_effectivity_context_item = SELECT 
+  (product_concept_feature_association);
+END_TYPE;
+
+TYPE configured_effectivity_item = SELECT 
+  (action_relationship,
+   process_plan,
+   product_definition,
+   product_process_plan);
+END_TYPE;
+
+TYPE connected_edge_with_length_set_items = SELECT 
+  (connected_edge_set,
+   path,
+   vertex_on_edge);
+END_TYPE;
+
+TYPE constraint_group_member = SELECT 
+  (explicit_constraint,
+   simultaneous_constraint_group);
+END_TYPE;
+
+TYPE constructive_geometry_representation_or_shape_representation = SELECT 
+  (constructive_geometry_representation,
+   shape_representation);
+END_TYPE;
+
+TYPE context_dependent_measure = REAL;
+END_TYPE;
+
+TYPE contract_item = SELECT 
+  (action_directive,
+   action_method,
+   action_method_relationship,
+   alternate_product_relationship,
+   applied_action_method_assignment,
+   applied_classification_assignment,
+   applied_description_text_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   directed_action,
+   drawing_revision,
+   executed_action,
+   information_usage_right,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design,
+   organization,
+   organizational_project,
+   person_and_organization,
+   product,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_group,
+   product_group_relationship,
+   product_identification,
+   requirement_assignment,
+   requirement_source,
+   security_classification,
+   structured_message,
+   validation,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE contracted_item = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE count_measure = NUMBER;
+END_TYPE;
+
+TYPE csg_2d_area_select = SELECT 
+  (axis2_placement_2d,
+   csg_primitive_solid_2d);
+END_TYPE;
+
+TYPE csg_2d_shape_select = SELECT 
+  (axis2_placement_2d,
+   csg_solid_2d,
+   mapped_item);
+END_TYPE;
+
+TYPE csg_primitive = SELECT 
+  (block,
+   bounded_primitive_2d,
+   cyclide_segment_solid,
+   eccentric_cone,
+   ellipsoid,
+   faceted_primitive,
+   rectangular_pyramid,
+   right_angular_wedge,
+   right_circular_cone,
+   right_circular_cylinder,
+   sphere,
+   torus);
+END_TYPE;
+
+TYPE csg_select = SELECT 
+  (boolean_result,
+   csg_primitive);
+END_TYPE;
+
+TYPE csg_select_2d = SELECT 
+  (boolean_result_2d,
+   bounded_primitive_2d);
+END_TYPE;
+
+TYPE current_element_assignment_select = SELECT 
+  (add_element,
+   modify_element);
+END_TYPE;
+
+TYPE curve_font_or_scaled_curve_font_select = SELECT 
+  (curve_style_font_and_scaling,
+   curve_style_font_select);
+END_TYPE;
+
+TYPE curve_on_surface = SELECT 
+  (composite_curve_on_surface,
+   pcurve,
+   surface_curve);
+END_TYPE;
+
+TYPE curve_or_annotation_curve_occurrence = SELECT 
+  (annotation_curve_occurrence,
+   curve);
+END_TYPE;
+
+TYPE curve_or_curve_set = SELECT 
+  (curve,
+   geometric_curve_set);
+END_TYPE;
+
+TYPE curve_or_render = SELECT 
+  (curve_style,
+   curve_style_rendering);
+END_TYPE;
+
+TYPE curve_or_surface_constraint_element = SELECT 
+  (curve,
+   surface);
+END_TYPE;
+
+TYPE curve_style_font_select = SELECT 
+  (curve_style_font,
+   externally_defined_curve_font,
+   pre_defined_curve_font);
+END_TYPE;
+
+TYPE curves_or_area = ENUMERATION OF
+  (curves,
+   area);
+END_TYPE;
+
+TYPE date_and_time_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_usage_right,
+   approval,
+   approval_person_organization,
+   approval_status,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   data_equivalence_definition,
+   data_quality_definition,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action,
+   document,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_definition_connection,
+   interface_definition_for,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   person,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   property_definition,
+   property_definition_representation,
+   representation,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   rule_action,
+   security_classification,
+   security_classification_level,
+   shape_representation,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   validation,
+   verification,
+   verification_relationship,
+   versioned_action_request);
+END_TYPE;
+
+TYPE date_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_usage_right,
+   approval,
+   approval_person_organization,
+   approval_status,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   data_equivalence_definition,
+   data_quality_definition,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action,
+   document,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_definition_connection,
+   interface_definition_for,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   person,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   property_definition,
+   property_definition_representation,
+   representation,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   security_classification,
+   security_classification_level,
+   shape_representation,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   validation,
+   verification,
+   verification_relationship,
+   versioned_action_request);
+END_TYPE;
+
+TYPE date_time_item = SELECT 
+  (approval_person_organization,
+   certification,
+   change,
+   change_request,
+   contract,
+   product_definition,
+   security_classification,
+   start_request,
+   start_work);
+END_TYPE;
+
+TYPE date_time_or_event_occurrence = SELECT 
+  (date_time_select,
+   event_occurrence);
+END_TYPE;
+
+TYPE date_time_select = SELECT 
+  (date,
+   date_and_time,
+   local_time);
+END_TYPE;
+
+TYPE datum_or_common_datum = SELECT 
+  (common_datum_list,
+   datum);
+END_TYPE;
+
+TYPE datum_reference_modifier = SELECT 
+  (datum_reference_modifier_with_value,
+   simple_datum_reference_modifier);
+END_TYPE;
+
+TYPE datum_reference_modifier_type = ENUMERATION OF
+  (circular_or_cylindrical,
+   distance,
+   projected,
+   spherical);
+END_TYPE;
+
+TYPE datum_system_or_reference = SELECT 
+  (datum_reference,
+   datum_system);
+END_TYPE;
+
+TYPE day_in_month_number = INTEGER;
+WHERE
+  WR1: {1 <= SELF <= 31};
+END_TYPE;
+
+TYPE day_in_week_number = INTEGER;
+WHERE
+  WR1: { 1 <= SELF <= 7 };
+END_TYPE;
+
+TYPE day_in_year_number = INTEGER;
+WHERE
+  WR1: {1 <= SELF <= 366};
+END_TYPE;
+
+TYPE defined_glyph_select = SELECT 
+  (externally_defined_character_glyph,
+   pre_defined_character_glyph);
+END_TYPE;
+
+TYPE defined_symbol_select = SELECT 
+  (externally_defined_symbol,
+   pre_defined_symbol);
+END_TYPE;
+
+TYPE derived_property_select = SELECT 
+  (action_property,
+   dimensional_location,
+   dimensional_size,
+   geometric_tolerance,
+   property_definition,
+   resource_property);
+END_TYPE;
+
+TYPE description_attribute_select = SELECT 
+  (action_request_solution,
+   application_context,
+   approval_role,
+   configuration_design,
+   context_dependent_shape_representation,
+   date_role,
+   date_time_role,
+   effectivity,
+   external_source,
+   organizational_project,
+   organization_role,
+   person_and_organization,
+   person_and_organization_role,
+   property_definition_representation,
+   representation);
+END_TYPE;
+
+TYPE description_item = SELECT 
+  (action,
+   action_directive,
+   action_directive_relationship,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   address,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   analysis_representation_context,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_classification_assignment_relationship,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_external_identification_assignment_relationship,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_location_assignment,
+   applied_location_representation_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_state_observed_assignment,
+   applied_state_type_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_relationship,
+   ascribable_state,
+   ascribable_state_relationship,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   breakdown_element_group_assignment,
+   certification,
+   change_element_sequence,
+   change_group,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   contract,
+   contract_relationship,
+   data_environment,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   exclusive_product_concept_feature_category,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   geometric_item_specific_usage,
+   global_uncertainty_assigned_context,
+   global_unit_assigned_context,
+   group,
+   group_relationship,
+   location,
+   location_relationship,
+   material_designation_characterization,
+   measure_qualification,
+   measure_with_unit,
+   message_relationship,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   organization_type,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   process_operation,
+   process_plan,
+   process_product_association,
+   product,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_concept_relationship,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_definition_usage,
+   product_definition_usage_relationship,
+   product_group_membership,
+   product_group_relationship,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_context,
+   representation_item,
+   representation_relationship,
+   requirement_for_action_resource,
+   retention,
+   satisfies_requirement,
+   security_classification,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_feature_definition,
+   shape_feature_definition_relationship,
+   state_definition_to_state_assignment_relationship,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_observed_role,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   state_type_role,
+   structured_message,
+   time_interval,
+   time_interval_relationship,
+   uncertainty_measure_with_unit,
+   uncertainty_qualifier,
+   usage_association,
+   verification_relationship,
+   versioned_action_request,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE descriptive_measure = STRING;
+END_TYPE;
+
+TYPE detailed_report_style_type = ENUMERATION OF
+  (inspected_element,
+   defective_element);
+END_TYPE;
+
+TYPE detailed_report_type = ENUMERATION OF
+  (measured_element,
+   inferior_quality_element);
+END_TYPE;
+
+TYPE dimension_count = INTEGER;
+WHERE
+  WR1: SELF > 0;
+END_TYPE;
+
+TYPE dimension_extent_usage = ENUMERATION OF
+  (origin,
+   target);
+END_TYPE;
+
+TYPE dimensional_characteristic = SELECT 
+  (dimensional_location,
+   dimensional_size);
+END_TYPE;
+
+TYPE directed_tolerance_zone_type = ENUMERATION OF
+  (perpendicular,
+   parallel,
+   including);
+END_TYPE;
+
+TYPE direction_count_select = SELECT 
+  (u_direction_count,
+   v_direction_count);
+END_TYPE;
+
+TYPE document_identifier_assigned_item = SELECT 
+  (document);
+END_TYPE;
+
+TYPE document_reference_item = SELECT 
+  (action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_person_organization,
+   approval_relationship,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   breakdown_context,
+   breakdown_of,
+   certification,
+   change_group,
+   characterized_class,
+   characterized_object,
+   class,
+   class_system,
+   condition,
+   configuration_design,
+   configuration_item,
+   contract,
+   contract_relationship,
+   date_and_time_assignment,
+   date_assignment,
+   descriptive_representation_item,
+   dimensional_size,
+   directed_action_assignment,
+   document_relationship,
+   effectivity,
+   effectivity_relationship,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_conditioned_data_quality_criterion,
+   externally_defined_dimension_definition,
+   externally_defined_item,
+   feature_definition,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_definition_connection,
+   in_zone,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   presentation_area,
+   process_plan,
+   product,
+   product_category,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_process,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_definition_usage,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_process_plan,
+   product_related_product_category,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_requirement_type,
+   retention,
+   rule_set,
+   security_classification,
+   shape_aspect,
+   shape_aspect_relationship,
+   state_observed,
+   state_type,
+   structured_message,
+   time_interval,
+   time_interval_relationship,
+   usage_association,
+   validation,
+   value_representation_item,
+   verification,
+   verification_relationship,
+   versioned_action_request);
+END_TYPE;
+
+TYPE dose_equivalent_measure = REAL;
+END_TYPE;
+
+TYPE draughting_callout_element = SELECT 
+  (annotation_curve_occurrence,
+   annotation_fill_area_occurrence,
+   annotation_placeholder_occurrence,
+   annotation_symbol_occurrence,
+   annotation_text_occurrence,
+   tessellated_annotation_occurrence);
+END_TYPE;
+
+TYPE draughting_model_item_association_select = SELECT 
+  (annotation_occurrence,
+   draughting_callout);
+END_TYPE;
+
+TYPE draughting_model_item_definition = SELECT 
+  (angularity_tolerance,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_date_and_time_assignment,
+   applied_date_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_group_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_name_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   circular_runout_tolerance,
+   coaxiality_tolerance,
+   concentricity_tolerance,
+   cylindricity_tolerance,
+   dimensional_location,
+   dimensional_size,
+   flatness_tolerance,
+   geometric_tolerance,
+   geometric_tolerance_with_datum_reference,
+   geometric_tolerance_with_defined_area_unit,
+   geometric_tolerance_with_defined_unit,
+   geometric_tolerance_with_maximum_tolerance,
+   geometric_tolerance_with_modifiers,
+   line_profile_tolerance,
+   modified_geometric_tolerance,
+   parallelism_tolerance,
+   perpendicularity_tolerance,
+   position_tolerance,
+   product_definition_relationship,
+   product_definition_shape,
+   property_definition,
+   roundness_tolerance,
+   shape_aspect,
+   shape_aspect_relationship,
+   straightness_tolerance,
+   surface_profile_tolerance,
+   symmetry_tolerance,
+   total_runout_tolerance,
+   unequally_disposed_geometric_tolerance);
+END_TYPE;
+
+TYPE draughting_model_item_select = SELECT 
+  (axis2_placement,
+   camera_model,
+   draughting_callout,
+   mapped_item,
+   styled_item);
+END_TYPE;
+
+TYPE draughting_subfigure_representation_item = SELECT 
+  (annotation_occurrence,
+   axis2_placement,
+   draughting_callout);
+END_TYPE;
+
+TYPE draughting_symbol_representation_item = SELECT 
+  (annotation_curve_occurrence,
+   annotation_fill_area_occurrence,
+   annotation_symbol_occurrence,
+   annotation_text_occurrence,
+   axis2_placement);
+END_TYPE;
+
+TYPE draughting_titled_item = SELECT 
+  (drawing_revision,
+   drawing_sheet_revision);
+END_TYPE;
+
+TYPE edge_or_curve = SELECT 
+  (curve,
+   edge);
+END_TYPE;
+
+TYPE effectivity_item = SELECT 
+  (action,
+   action_directive,
+   action_directive_relationship,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   alternative_solution_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment_relationship,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_external_identification_assignment_relationship,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval_relationship,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   breakdown_of,
+   class,
+   class_system,
+   condition,
+   conditional_effectivity,
+   configuration_design,
+   configuration_item,
+   configuration_item_relationship,
+   configured_effectivity_assignment,
+   contract,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   draughting_model,
+   drawing_revision,
+   effectivity_relationship,
+   event_occurrence_relationship,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_general_property,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   group,
+   identification_assignment_relationship,
+   inclusion_product_concept_feature,
+   interface_connection,
+   interface_connector_design_to_planned,
+   interface_connector_design_to_realized,
+   interface_connector_occurrence,
+   interface_connector_planned_to_realized,
+   interface_definition_for,
+   in_zone,
+   link_motion_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   multi_language_attribute_assignment,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   package_product_concept_feature,
+   person_and_organization,
+   person_and_organization_address,
+   presentation_area,
+   process_operation,
+   process_plan,
+   product,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_concept_relationship,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_definition_usage,
+   product_definition_usage_relationship,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   security_classification,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_representation,
+   structured_message,
+   time_interval_relationship,
+   usage_association,
+   validation,
+   value_representation_item,
+   verification,
+   verification_relationship,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE electric_charge_measure = REAL;
+END_TYPE;
+
+TYPE electric_current_measure = REAL;
+END_TYPE;
+
+TYPE electric_potential_measure = REAL;
+END_TYPE;
+
+TYPE elementary_function_enumerators = ENUMERATION OF
+  (ef_and,
+   ef_or,
+   ef_not,
+   ef_xor,
+   ef_negate_i,
+   ef_add_i,
+   ef_subtract_i,
+   ef_multiply_i,
+   ef_divide_i,
+   ef_mod_i,
+   ef_exponentiate_i,
+   ef_eq_i,
+   ef_ne_i,
+   ef_gt_i,
+   ef_lt_i,
+   ef_ge_i,
+   ef_le_i,
+   ef_abs_i,
+   ef_max_i,
+   ef_min_i,
+   ef_if_i,
+   ef_negate_r,
+   ef_reciprocal_r,
+   ef_add_r,
+   ef_subtract_r,
+   ef_multiply_r,
+   ef_divide_r,
+   ef_mod_r,
+   ef_exponentiate_r,
+   ef_exponentiate_ri,
+   ef_eq_r,
+   ef_ne_r,
+   ef_gt_r,
+   ef_lt_r,
+   ef_ge_r,
+   ef_le_r,
+   ef_abs_r,
+   ef_max_r,
+   ef_min_r,
+   ef_acos_r,
+   ef_asin_r,
+   ef_atan2_r,
+   ef_cos_r,
+   ef_exp_r,
+   ef_ln_r,
+   ef_log2_r,
+   ef_log10_r,
+   ef_sin_r,
+   ef_sqrt_r,
+   ef_tan_r,
+   ef_if_r,
+   ef_form_c,
+   ef_rpart_c,
+   ef_ipart_c,
+   ef_negate_c,
+   ef_reciprocal_c,
+   ef_add_c,
+   ef_subtract_c,
+   ef_multiply_c,
+   ef_divide_c,
+   ef_exponentiate_c,
+   ef_exponentiate_ci,
+   ef_eq_c,
+   ef_ne_c,
+   ef_conjugate_c,
+   ef_abs_c,
+   ef_arg_c,
+   ef_cos_c,
+   ef_exp_c,
+   ef_ln_c,
+   ef_sin_c,
+   ef_sqrt_c,
+   ef_tan_c,
+   ef_if_c,
+   ef_subscript_s,
+   ef_eq_s,
+   ef_ne_s,
+   ef_gt_s,
+   ef_lt_s,
+   ef_ge_s,
+   ef_le_s,
+   ef_subsequence_s,
+   ef_concat_s,
+   ef_size_s,
+   ef_format,
+   ef_value,
+   ef_like,
+   ef_if_s,
+   ef_subscript_b,
+   ef_eq_b,
+   ef_ne_b,
+   ef_gt_b,
+   ef_lt_b,
+   ef_ge_b,
+   ef_le_b,
+   ef_subsequence_b,
+   ef_concat_b,
+   ef_size_b,
+   ef_if_b,
+   ef_subscript_t,
+   ef_eq_t,
+   ef_ne_t,
+   ef_concat_t,
+   ef_size_t,
+   ef_entuple,
+   ef_detuple,
+   ef_insert,
+   ef_remove,
+   ef_if_t,
+   ef_sum_it,
+   ef_product_it,
+   ef_add_it,
+   ef_subtract_it,
+   ef_scalar_mult_it,
+   ef_dot_prod_it,
+   ef_sum_rt,
+   ef_product_rt,
+   ef_add_rt,
+   ef_subtract_rt,
+   ef_scalar_mult_rt,
+   ef_dot_prod_rt,
+   ef_norm_rt,
+   ef_sum_ct,
+   ef_product_ct,
+   ef_add_ct,
+   ef_subtract_ct,
+   ef_scalar_mult_ct,
+   ef_dot_prod_ct,
+   ef_norm_ct,
+   ef_if,
+   ef_ensemble,
+   ef_member_of);
+END_TYPE;
+
+TYPE elementary_space_enumerators = ENUMERATION OF
+  (es_numbers,
+   es_complex_numbers,
+   es_reals,
+   es_integers,
+   es_logicals,
+   es_booleans,
+   es_strings,
+   es_binarys,
+   es_maths_spaces,
+   es_maths_functions,
+   es_generics);
+END_TYPE;
+
+TYPE energy_measure = REAL;
+END_TYPE;
+
+TYPE equivalence_detected_difference_select = SELECT 
+  (a3ms_inspected_equivalence_element_select,
+   area_measure,
+   assembly_component_usage,
+   binary_assembly_constraint,
+   cartesian_point,
+   connected_face_set,
+   context_dependent_shape_representation,
+   count_measure,
+   edge,
+   face,
+   length_measure,
+   multi_level_reference_designator,
+   point_on_curve,
+   point_on_surface,
+   volume_measure);
+END_TYPE;
+
+TYPE equivalence_measured_value_select = SELECT 
+  (a3ma_length_measure_and_context_dependent_measure_pair,
+   area_measure,
+   boolean_value,
+   context_dependent_measure,
+   length_measure,
+   plane_angle_measure,
+   volume_measure);
+END_TYPE;
+
+TYPE equivalence_product_data_select = SELECT 
+  (product_definition_or_reference,
+   product_definition_relationship);
+END_TYPE;
+
+TYPE event_occurrence_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_request_solution,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_classification_assignment,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   draughting_model,
+   drawing_revision,
+   executed_action,
+   general_organizational_data_select,
+   general_property,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_project,
+   organization_relationship,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   property_definition,
+   requirement_for_action_resource,
+   resource_property,
+   security_classification_level,
+   shape_representation);
+END_TYPE;
+
+TYPE evidence_item = SELECT 
+  (action_property,
+   action_property_representation,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   date_and_time_assignment,
+   date_assignment,
+   measure_representation_item,
+   person,
+   person_and_organization,
+   product,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_context,
+   representation_item,
+   state_type,
+   structured_message,
+   validation,
+   value_representation_item,
+   verification);
+END_TYPE;
+
+TYPE expression_extension_select = SELECT 
+  (expression_extension_numeric,
+   expression_extension_string);
+END_TYPE;
+
+TYPE extension_options = ENUMERATION OF
+  (eo_none,
+   eo_cont,
+   eo_cont_right,
+   eo_cont_left);
+END_TYPE;
+
+TYPE external_identification_item = SELECT 
+  (action_directive,
+   action_method,
+   action_method_relationship,
+   action_relationship,
+   action_request_status,
+   address,
+   analysis_model,
+   analysis_representation_context,
+   applied_action_method_assignment,
+   applied_classification_assignment,
+   applied_external_identification_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   approval,
+   approval_person_organization,
+   approval_status,
+   assembly_bond_definition,
+   assembly_joint,
+   assembly_component_usage,
+   breakdown_context,
+   certification,
+   class,
+   composite_curve,
+   condition,
+   configuration_effectivity,
+   contract,
+   curve,
+   date_and_time_assignment,
+   date_assignment,
+   derived_unit,
+   document_file,
+   effectivity,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   event_occurrence,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_class,
+   externally_defined_context_dependent_unit,
+   externally_defined_conversion_based_unit,
+   externally_defined_general_property,
+   externally_defined_representation_item,
+   external_source,
+   general_property,
+   generic_product_definition_reference,
+   group,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_definition,
+   interface_connector_occurrence,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_definition_for,
+   interface_specification_definition,
+   interface_specification_version,
+   loop,
+   material_designation,
+   named_unit,
+   organization,
+   organizational_address,
+   organizational_project,
+   oriented_surface,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   point_on_curve,
+   precision_qualifier,
+   process_operation,
+   process_plan,
+   product,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_concept_feature_category,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_group,
+   product_identification,
+   product_process_plan,
+   product_specification,
+   property_definition,
+   representation,
+   representation_item,
+   requirement_source,
+   satisfies_requirement,
+   security_classification,
+   shape_representation,
+   state_observed,
+   state_type,
+   structured_message,
+   surface,
+   time_interval,
+   trimmed_curve,
+   type_qualifier,
+   uncertainty_qualifier,
+   validation,
+   verification,
+   versioned_action_request,
+   vertex_point);
+END_TYPE;
+
+TYPE face_or_surface = SELECT 
+  (face,
+   surface);
+END_TYPE;
+
+TYPE fill_area_style_tile_shape_select = SELECT 
+  (externally_defined_tile,
+   fill_area_style_tile_coloured_region,
+   fill_area_style_tile_curve_with_style,
+   fill_area_style_tile_symbol_with_style,
+   pre_defined_tile);
+END_TYPE;
+
+TYPE fill_style_select = SELECT 
+  (externally_defined_hatch_style,
+   externally_defined_tile_style,
+   fill_area_style_colour,
+   fill_area_style_hatching,
+   fill_area_style_tiles,
+   texture_style_specification);
+END_TYPE;
+
+TYPE font_select = SELECT 
+  (externally_defined_text_font,
+   pre_defined_text_font,
+   text_font);
+END_TYPE;
+
+TYPE force_measure = REAL;
+END_TYPE;
+
+TYPE founded_item_select = SELECT 
+  (founded_item,
+   representation_item);
+END_TYPE;
+
+TYPE frequency_measure = REAL;
+END_TYPE;
+
+TYPE general_organizational_data_select = SELECT 
+  (action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_person_organization,
+   approval_relationship,
+   approval_status,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   breakdown_element_group_assignment,
+   breakdown_element_realization,
+   breakdown_of,
+   certification,
+   characterized_product_concept_feature,
+   characterized_product_concept_feature_category,
+   class,
+   class_system,
+   condition,
+   conditional_concept_feature,
+   conditional_effectivity,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   date_and_time_assignment,
+   date_assignment,
+   directed_action_assignment,
+   document_file,
+   drawing_revision,
+   drawing_sheet_revision,
+   effectivity,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   frozen_assignment,
+   general_property,
+   general_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   inclusion_product_concept_feature,
+   information_usage_right,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   presentation_area,
+   process_operation,
+   process_plan,
+   product,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_definition_usage,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   representation_item,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   requirement_view_definition_relationship,
+   security_classification,
+   shape_representation,
+   value_representation_item,
+   versioned_action_request);
+END_TYPE;
+
+TYPE generalized_surface_select = SELECT 
+  (face_surface,
+   surface,
+   surfaced_open_shell);
+END_TYPE;
+
+TYPE generic_property_definition_select = SELECT 
+  (action_property,
+   dimensional_location,
+   dimensional_size,
+   property_definition,
+   resource_property);
+END_TYPE;
+
+TYPE geometric_constraint_element = SELECT 
+  (curve,
+   direction,
+   point,
+   surface,
+   vector);
+END_TYPE;
+
+TYPE geometric_item_specific_usage_select = SELECT 
+  (shape_aspect,
+   shape_aspect_relationship);
+END_TYPE;
+
+TYPE geometric_model_item = SELECT 
+  (connected_face_set,
+   edge_loop,
+   geometric_representation_item);
+END_TYPE;
+
+TYPE geometric_set_select = SELECT 
+  (annotation_text,
+   curve,
+   placement,
+   planar_box,
+   point,
+   surface);
+END_TYPE;
+
+TYPE geometric_tolerance_auxiliary_classification_enum = ENUMERATION OF
+  (all_over,
+   unless_otherwise_specified);
+END_TYPE;
+
+TYPE geometric_tolerance_modifier = ENUMERATION OF
+  (any_cross_section,
+   associated_least_square_feature,
+   associated_maximum_inscribed_feature,
+   associated_minimum_inscribed_feature,
+   associated_minmax_feature,
+   associated_tangent_feature,
+   circle_a,
+   common_zone,
+   each_radial_element,
+   free_state,
+   least_material_requirement,
+   line_element,
+   major_diameter,
+   maximum_material_requirement,
+   minor_diameter,
+   not_convex,
+   peak_height,
+   pitch_diameter,
+   reciprocity_requirement,
+   reference_least_square_feature_with_external_material_constraint,
+   reference_least_square_feature_with_internal_material_constraint,
+   reference_least_square_feature_without_constraint,
+   reference_maximum_inscribed_feature,
+   reference_minimax_feature_with_external_material_constraint,
+   reference_minimax_feature_with_internal_material_constraint,
+   reference_minimax_feature_without_constraint,
+   reference_minimum_circumscribed_feature,
+   separate_requirement,
+   standard_deviation,
+   statistical_tolerance,
+   tangent_plane,
+   total_range_deviations,
+   united_feature,
+   valley_depth);
+END_TYPE;
+
+TYPE geometric_tolerance_target = SELECT 
+  (dimensional_location,
+   dimensional_size,
+   product_definition_shape,
+   shape_aspect);
+END_TYPE;
+
+TYPE gps_filtration_specification_target = SELECT 
+  (geometric_tolerance);
+END_TYPE;
+
+TYPE gps_filtration_type = SELECT 
+  (geometric_tolerance_modifier);
+END_TYPE;
+
+TYPE groupable_item = SELECT (
+   address,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_attribute_classification_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_group_assignment,
+   applied_identification_assignment,
+   applied_location_assignment,
+   applied_location_representation_assignment,
+   applied_name_assignment,
+   applied_organization_assignment,
+   applied_organization_type_assignment,
+   applied_organizational_project_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   approval,
+   approval_person_organization,
+   approval_relationship,
+   approval_status,
+   ascribable_state,
+   ascribable_state_relationship,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   attribute_language_assignment,
+   breakdown_element_group_assignment,
+   calendar_date,
+   certification,
+   component_feature,
+   configuration_design,
+   configuration_item,
+   configuration_item_relationship,
+   context_dependent_shape_representation,
+   contract,
+   contract_relationship,
+   coordinated_universal_time_offset,
+   date_and_time,
+   date_and_time_assignment,
+   date_assignment,
+   derived_unit,
+   derived_unit_element,
+   description_text,
+   document_file,
+   document_relationship,
+   effectivity,
+   effectivity_relationship,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   external_source,
+   general_property,
+   general_property_relationship,
+   geometric_item_specific_usage,
+   geometric_representation_item,
+   group_relationship,
+   instanced_feature,
+   interface_connector_definition,
+   interface_definition_connection,
+   interface_definition_for,
+   item_defined_transformation,
+   local_time,
+   mapped_item,
+   measure_qualification,
+   measure_with_unit,
+   multi_language_attribute_assignment,
+   named_unit,
+   organization,
+   organization_relationship,
+   organization_type,
+   organizational_project,
+   organizational_project_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   precision_qualifier,
+   product,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_group_membership,
+   product_group_relationship,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   replicate_feature,
+   representation,
+   representation_context,
+   representation_item,
+   representation_relationship,
+   representation_relationship_with_transformation,
+   security_classification,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_representation_relationship,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_observed_role,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   styled_item,
+   time_interval,
+   time_interval_assignment,
+   time_interval_relationship,
+   time_interval_role,
+   topological_representation_item,
+   transition_feature,
+   type_qualifier,
+   uncertainty_qualifier,
+   verification_relationship,
+   versioned_action_request);
+   WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP' IN TYPEOF(SELF));
+END_TYPE; 
+
+TYPE hour_in_day = INTEGER;
+WHERE
+  WR1: { 0 <= SELF < 24 };
+END_TYPE;
+
+TYPE id_attribute_select = SELECT 
+  (action,
+   address,
+   application_context,
+   ascribable_state_relationship,
+   dimensional_size,
+   geometric_tolerance,
+   group,
+   organizational_project,
+   product_category,
+   property_definition,
+   representation,
+   shape_aspect,
+   shape_aspect_relationship,
+   topological_representation_item);
+END_TYPE;
+
+TYPE identification_item = SELECT 
+  (action,
+   action_directive,
+   action_directive_relationship,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   address,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   analysis_assignment,
+   analysis_representation_context,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment_relationship,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_external_identification_assignment_relationship,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_relationship,
+   approval_status,
+   ascribable_state,
+   ascribable_state_relationship,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   breakdown_element_realization,
+   breakdown_of,
+   certification,
+   change_group,
+   characterized_class,
+   class,
+   class_system,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   contract,
+   contract_relationship,
+   date_and_time_assignment,
+   date_assignment,
+   degenerate_pcurve,
+   dimensional_size,
+   dimensional_size_with_path,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   document_type,
+   draughting_model,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_definition,
+   interface_connector_design,
+   interface_connector_occurrence,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_definition_for,
+   interface_specification_definition,
+   interface_specification_version,
+   link_motion_relationship,
+   material_designation,
+   material_designation_characterization,
+   measure_representation_item,
+   mechanical_design_geometric_presentation_representation,
+   message_relationship,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organization_relationship,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   point_on_surface,
+   presentation_area,
+   process_operation,
+   process_plan,
+   product,
+   product_category,
+   product_class,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_concept_feature_category,
+   product_concept_relationship,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_definition_relationship,
+   product_definition_usage,
+   product_definition_usage_relationship,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_relationship,
+   property_definition_representation,
+   representation,
+   representation_context,
+   representation_relationship,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   retention,
+   rule_set,
+   satisfies_requirement,
+   security_classification,
+   security_classification_level,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_feature_definition,
+   shape_feature_definition_relationship,
+   shape_representation,
+   state_definition_to_state_assignment_relationship,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   time_interval,
+   time_interval_relationship,
+   usage_association,
+   validation,
+   verification,
+   verification_relationship,
+   versioned_action_request,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE identifier = STRING;
+END_TYPE;
+
+TYPE idrm_marked_item = SELECT 
+  (document_file,
+   product_definition);
+END_TYPE;
+
+TYPE illuminance_measure = REAL;
+END_TYPE;
+
+TYPE inductance_measure = REAL;
+END_TYPE;
+
+TYPE input_selector = positive_integer;
+END_TYPE;
+
+TYPE inspected_ecdq_element_select = inspected_element_select;
+WHERE
+  wr1 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_COMPOSITE_CURVE_SELECT' IN TYPEOF(SELF));
+  wr2 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT' IN TYPEOF(SELF));
+  wr3 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_OR_OPEN_SHELL_SELECT' IN TYPEOF(SELF));
+  wr4 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN TYPEOF(SELF));
+  wr5 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF));
+  wr6 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(SELF));
+  wr7 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(SELF));
+  wr8 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(SELF));
+  wr9 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(SELF));
+  wr10 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(SELF));
+  wr11 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(SELF));
+  wr12 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(SELF));
+  wr13 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(SELF));
+  wr14 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN TYPEOF(SELF));
+END_TYPE;
+
+TYPE inspected_element_select = SELECT 
+  (assembly_component_usage,
+   axis2_placement_3d,
+   b_spline_or_composite_curve_select,
+   b_spline_or_rectangular_composite_surface_select,
+   cartesian_transformation_operator_3d,
+   closed_or_open_shell_select,
+   connected_face_set,
+   curve,
+   direction,
+   edge_curve,
+   edge_loop,
+   face_surface,
+   global_uncertainty_assigned_context,
+   global_unit_assigned_context,
+   group,
+   manifold_solid_brep,
+   placement,
+   point,
+   presentation_layer_assignment,
+   representation_item,
+   styled_item,
+   surface,
+   vertex_point);
+END_TYPE;
+
+TYPE inspected_equivalence_element_select = SELECT 
+  (connected_edge_set,
+   connected_face_set,
+   externally_defined_representation_item,
+   manifold_solid_brep,
+   point_cloud_dataset,
+   product_definition_or_reference,
+   shape_representation,
+   shell_based_surface_model,
+   shell_based_wireframe_model,
+   vertex_point);
+END_TYPE;
+
+TYPE inspected_shape_element_select = inspected_element_select;
+WHERE
+  wr1 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(SELF));
+  wr2 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF));
+  wr3 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_TRANSFORMATION_OPERATOR_3D' IN TYPEOF(SELF));
+  wr4 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT' IN TYPEOF(SELF));
+  wr5 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(SELF));
+  wr6 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP' IN TYPEOF(SELF));
+  wr7 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT' IN TYPEOF(SELF));
+  wr8 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(SELF));
+  wr9 : NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(SELF));
+END_TYPE;
+
+TYPE instance_usage_context_select = SELECT 
+  (process_product_association,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_definition_usage);
+END_TYPE;
+
+TYPE internal_or_reflected_shape_aspect = SELECT 
+  (identifier,
+   shape_aspect);
+END_TYPE;
+
+TYPE interpolation_type = ENUMERATION OF
+  (undefined_interpolation_type,
+   discontinuous_interpolation_type,
+   synchronous_interpolation_type,
+   linear_interpolation_type);
+END_TYPE;
+
+TYPE invisibility_context = SELECT 
+  (draughting_model,
+   presentation_representation,
+   presentation_set);
+END_TYPE;
+
+TYPE invisible_item = SELECT 
+  (draughting_callout,
+   presentation_layer_assignment,
+   representation,
+   styled_item);
+END_TYPE;
+
+TYPE ir_usage_item = action_items;
+END_TYPE;
+
+TYPE item_identified_representation_usage_definition = SELECT 
+  (applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_date_and_time_assignment,
+   applied_date_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_group_assignment,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_name_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   characterized_object,
+   dimensional_size,
+   geometric_tolerance,
+   product_definition_relationship,
+   property_definition,
+   represented_definition);
+END_TYPE;
+
+TYPE item_identified_representation_usage_select = SELECT 
+  (list_representation_item,
+   representation_item,
+   set_representation_item);
+END_TYPE;
+
+TYPE kinematic_analysis_definition = SELECT 
+  (interpolated_configuration_sequence,
+   prescribed_path);
+END_TYPE;
+
+TYPE kinematic_link_representation_items = SELECT 
+  (curve,
+   point,
+   rigid_placement,
+   surface);
+END_TYPE;
+
+TYPE kinematic_result = SELECT 
+  (interpolated_configuration_sequence,
+   resulting_path);
+END_TYPE;
+
+TYPE kinematic_topology_representation_select = SELECT 
+  (kinematic_topology_directed_structure,
+   kinematic_topology_network_structure,
+   kinematic_topology_structure);
+END_TYPE;
+
+TYPE knot_type = ENUMERATION OF
+  (uniform_knots,
+   quasi_uniform_knots,
+   piecewise_bezier_knots,
+   unspecified);
+END_TYPE;
+
+TYPE label = STRING;
+END_TYPE;
+
+TYPE layered_item = SELECT 
+  (presentation_representation,
+   representation_item);
+END_TYPE;
+
+TYPE length_measure = REAL;
+END_TYPE;
+
+TYPE length_or_plane_angle_measure_with_unit_select = SELECT 
+  (length_measure_with_unit,
+   plane_angle_measure_with_unit);
+END_TYPE;
+
+TYPE length_to_height_ratio = ratio_measure;
+END_TYPE;
+
+TYPE limit_condition = ENUMERATION OF
+  (maximum_material_condition,
+   least_material_condition,
+   regardless_of_feature_size);
+END_TYPE;
+
+TYPE linear_geometry_constraint_element = SELECT 
+  (direction,
+   line,
+   plane,
+   vector);
+END_TYPE;
+
+TYPE linearly_independent_enum = ENUMERATION OF
+  (independent,
+   not_independent,
+   not_tested);
+END_TYPE;
+
+TYPE link_or_shape_representation = SELECT 
+  (kinematic_link_representation,
+   shape_representation);
+END_TYPE;
+
+TYPE list_item_defined_transformation = LIST [2 : ?] OF item_defined_transformation;
+END_TYPE;
+
+TYPE list_of_reversible_topology_item = LIST [0 : ?] OF reversible_topology_item;
+END_TYPE;
+
+TYPE list_representation_item = LIST [1 : ?] OF representation_item;
+END_TYPE;
+
+TYPE locally_refined_spline_type_enum = ENUMERATION OF
+  (analysis_suitable_t_spline,
+   hierarchical_b_spline,
+   lr_b_spline,
+   semi_standard_t_spline,
+   standard_t_spline);
+END_TYPE;
+
+TYPE location_in_aggregate_item = LIST [1 : ?] OF integer_representation_item;
+END_TYPE;
+
+TYPE location_item = SELECT 
+  (assembly_component_usage,
+   document_file,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   organization,
+   organizational_project,
+   organization_type,
+   person,
+   person_and_organization,
+   product,
+   product_definition,
+   product_definition_formation,
+   product_definition_relationship,
+   product_group);
+END_TYPE;
+
+TYPE location_of_extreme_value_select = SELECT 
+  (boundary_curve_of_b_spline_or_rectangular_composite_surface,
+   b_spline_curve_knot_locator,
+   b_spline_curve_segment,
+   b_spline_surface_knot_locator,
+   b_spline_surface_patch,
+   b_spline_surface_strip,
+   composite_curve_transition_locator,
+   face_bound,
+   inspected_shape_element_select,
+   oriented_edge,
+   point_on_edge_curve,
+   point_on_face_surface,
+   rectangular_composite_surface_transition_locator,
+   subedge,
+   subface);
+END_TYPE;
+
+TYPE location_representation_item = SELECT 
+  (organizational_address,
+   person_and_organization_address,
+   product,
+   product_definition_formation);
+END_TYPE;
+
+TYPE lower_upper = ENUMERATION OF
+  (lower,
+   upper);
+END_TYPE;
+
+TYPE luminous_flux_measure = REAL;
+END_TYPE;
+
+TYPE luminous_intensity_measure = REAL;
+END_TYPE;
+
+TYPE machining_feature_definition = SELECT 
+  (boss,
+   compound_feature,
+   externally_defined_feature_definition,
+   flat_face,
+   gear,
+   marking,
+   outer_round,
+   outside_profile,
+   pocket,
+   protrusion,
+   removal_volume,
+   replicate_feature,
+   revolved_profile,
+   rib_top,
+   round_hole,
+   rounded_end,
+   spherical_cap,
+   step,
+   slot,
+   thread,
+   turned_knurl);
+END_TYPE;
+
+TYPE magnetic_flux_density_measure = REAL;
+END_TYPE;
+
+TYPE magnetic_flux_measure = REAL;
+END_TYPE;
+
+TYPE marker_select = SELECT 
+  (marker_type,
+   pre_defined_marker);
+END_TYPE;
+
+TYPE marker_type = ENUMERATION OF
+  (dot,
+   x,
+   plus,
+   asterisk,
+   ring,
+   square,
+   triangle);
+END_TYPE;
+
+TYPE mass_measure = REAL;
+END_TYPE;
+
+TYPE maths_atom = SELECT 
+  (maths_enum_atom,
+   maths_simple_atom);
+END_TYPE;
+
+TYPE maths_boolean = BOOLEAN;
+END_TYPE;
+
+TYPE maths_enum_atom = SELECT 
+  (elementary_function_enumerators,
+   elementary_space_enumerators,
+   extension_options,
+   lower_upper,
+   open_closed,
+   ordering_type,
+   repackage_options,
+   space_constraint_type,
+   symmetry_type);
+END_TYPE;
+
+TYPE maths_expression = SELECT 
+  (atom_based_value,
+   generic_expression,
+   maths_tuple);
+END_TYPE;
+
+TYPE maths_function_select = SELECT 
+  (elementary_function_enumerators,
+   maths_function);
+END_TYPE;
+
+TYPE maths_integer = INTEGER;
+END_TYPE;
+
+TYPE maths_logical = LOGICAL;
+END_TYPE;
+
+TYPE maths_number = NUMBER;
+END_TYPE;
+
+TYPE maths_real = REAL;
+END_TYPE;
+
+TYPE maths_simple_atom = SELECT 
+  (maths_boolean,
+   maths_integer,
+   maths_logical,
+   maths_number,
+   maths_real,
+   maths_string);
+END_TYPE;
+
+TYPE maths_space_or_function = SELECT 
+  (maths_function,
+   maths_space);
+END_TYPE;
+
+TYPE maths_string = STRING;
+END_TYPE;
+
+TYPE maths_tuple = LIST [0 : ?] OF maths_value;
+END_TYPE;
+
+TYPE maths_value = SELECT
+  (atom_based_value,
+   maths_tuple,
+   generic_expression);
+WHERE
+  constancy: NOT ('GENERIC_EXPRESSION' IN stripped_typeof(SELF)) OR
+             expression_is_constant(SELF);
+END_TYPE;
+
+TYPE maximum_edge_length = positive_length_measure;
+END_TYPE;
+
+TYPE measure_value = SELECT 
+  (absorbed_dose_measure,
+   acceleration_measure,
+   amount_of_substance_measure,
+   area_measure,
+   capacitance_measure,
+   celsius_temperature_measure,
+   conductance_measure,
+   context_dependent_measure,
+   count_measure,
+   descriptive_measure,
+   dose_equivalent_measure,
+   electric_charge_measure,
+   electric_current_measure,
+   electric_potential_measure,
+   energy_measure,
+   force_measure,
+   frequency_measure,
+   illuminance_measure,
+   inductance_measure,
+   length_measure,
+   luminous_flux_measure,
+   luminous_intensity_measure,
+   magnetic_flux_density_measure,
+   magnetic_flux_measure,
+   mass_measure,
+   non_negative_length_measure,
+   numeric_measure,
+   parameter_value,
+   plane_angle_measure,
+   positive_length_measure,
+   positive_plane_angle_measure,
+   positive_ratio_measure,
+   power_measure,
+   pressure_measure,
+   radioactivity_measure,
+   ratio_measure,
+   resistance_measure,
+   solid_angle_measure,
+   thermodynamic_temperature_measure,
+   time_measure,
+   velocity_measure,
+   volume_measure);
+END_TYPE;
+
+TYPE measured_value_select = SELECT 
+  (boolean_value,
+   measure_value,
+   plane_angle_and_length_pair,
+   plane_angle_and_ratio_pair);
+END_TYPE;
+
+TYPE mechanical_design_and_draughting_relationship_select = SELECT 
+  (draughting_model,
+   mechanical_design_geometric_presentation_representation,
+   mechanical_design_presentation_representation_with_draughting,
+   mechanical_design_shaded_presentation_representation,
+   shape_representation);
+END_TYPE;
+
+TYPE mechanical_design_geometric_presentation_area_items = SELECT 
+  (axis2_placement,
+   mapped_item);
+END_TYPE;
+
+TYPE mechanical_design_geometric_presentation_representation_items = SELECT 
+  (axis2_placement,
+   camera_model_d3,
+   mapped_item,
+   styled_item);
+END_TYPE;
+
+TYPE mechanical_design_shaded_presentation_area_items = SELECT 
+  (axis2_placement,
+   mapped_item);
+END_TYPE;
+
+TYPE mechanical_design_shaded_presentation_representation_items = SELECT 
+  (axis2_placement,
+   camera_model_d3,
+   mapped_item,
+   styled_item);
+END_TYPE;
+
+TYPE message = STRING;
+END_TYPE;
+
+TYPE minute_in_hour = INTEGER;
+WHERE
+  WR1: { 0 <= SELF <= 59 };
+END_TYPE;
+
+TYPE month_in_year_number = INTEGER;
+WHERE
+  WR1: { 1 <= SELF <= 12 };
+END_TYPE;
+
+TYPE multi_language_attribute_item = SELECT 
+  (action,
+   action_directive,
+   action_directive_relationship,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   action_relationship,
+   actuated_kinematic_pair,
+   alternate_product_relationship,
+   alternative_solution_relationship,
+   analysis_assignment,
+   analysis_representation_context,
+   application_context,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_action_request_assignment,
+   applied_approval_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment_relationship,
+   applied_contract_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_external_identification_assignment,
+   applied_external_identification_assignment_relationship,
+   applied_identification_assignment,
+   applied_ineffectivity_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_time_interval_assignment,
+   applied_usage_right,
+   approval,
+   approval_relationship,
+   approval_status,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   assignment_object_relationship,
+   attribute_value_assignment,
+   breakdown_context,
+   breakdown_element_realization,
+   breakdown_of,
+   certification,
+   certification_type,
+   change_element_sequence,
+   change_group,
+   class,
+   colour,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configuration_item_relationship,
+   contract,
+   contract_relationship,
+   data_environment,
+   date_role,
+   date_time_role,
+   descriptive_representation_item,
+   directed_action_assignment,
+   document_file,
+   document_relationship,
+   document_usage_role,
+   draughting_title,
+   effectivity,
+   effectivity_relationship,
+   envelope,
+   envelope_relationship,
+   evaluated_characteristic,
+   event_occurrence,
+   event_occurrence_relationship,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_class,
+   external_source,
+   general_property,
+   general_property_relationship,
+   generic_property_relationship,
+   geometric_representation_item,
+   geometric_tolerance,
+   global_uncertainty_assigned_context,
+   global_unit_assigned_context,
+   group,
+   group_relationship,
+   identification_assignment_relationship,
+   identification_role,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   in_zone,
+   kinematic_pair,
+   link_motion_relationship,
+   make_from_usage_option,
+   mapped_item,
+   material_designation_characterization,
+   measure_qualification,
+   measure_with_unit,
+   message_relationship,
+   name_assignment,
+   object_role,
+   organization,
+   organizational_address,
+   organizational_project,
+   organizational_project_relationship,
+   organizational_project_role,
+   organization_relationship,
+   organization_role,
+   package_product_concept_feature,
+   person,
+   person_and_organization,
+   person_and_organization_address,
+   person_and_organization_role,
+   presentation_layer_assignment,
+   process_operation,
+   process_plan,
+   process_product_association,
+   product,
+   product_concept,
+   product_concept_context,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_concept_relationship,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_shape,
+   product_definition_substitute,
+   product_definition_usage,
+   product_definition_usage_relationship,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_group,
+   product_group_relationship,
+   product_identification,
+   product_process_plan,
+   product_related_product_category,
+   product_relationship,
+   product_specification,
+   property_definition,
+   property_definition_relationship,
+   property_definition_representation,
+   qualitative_uncertainty,
+   representation,
+   representation_context,
+   representation_item,
+   representation_relationship,
+   representation_relationship_with_transformation,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   resource_requirement_type,
+   retention,
+   satisfies_requirement,
+   security_classification,
+   security_classification_assignment,
+   shape_aspect,
+   shape_aspect_relationship,
+   shape_feature_definition,
+   shape_feature_definition_relationship,
+   shape_representation,
+   state_definition_to_state_assignment_relationship,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   styled_item,
+   time_interval,
+   time_interval_relationship,
+   time_interval_role,
+   topological_representation_item,
+   uncertainty_measure_with_unit,
+   uncertainty_qualifier,
+   usage_association,
+   validation,
+   verification,
+   verification_relationship,
+   versioned_action_request,
+   versioned_action_request_relationship);
+END_TYPE;
+
+TYPE multi_or_next_assembly_usage_occurrence = SELECT 
+  (multi_level_reference_designator,
+   next_assembly_usage_occurrence);
+END_TYPE;
+
+TYPE name_attribute_select = SELECT 
+  (action_request_solution,
+   address,
+   configuration_design,
+   context_dependent_shape_representation,
+   derived_unit,
+   effectivity,
+   person_and_organization,
+   product_definition,
+   product_definition_substitute,
+   property_definition_representation);
+END_TYPE;
+
+TYPE name_item = SELECT 
+  (applied_action_assignment,
+   applied_action_method_assignment,
+   assembly_component_usage,
+   external_class_library,
+   group,
+   group_relationship,
+   product,
+   product_definition);
+END_TYPE;
+
+TYPE non_negative_length_measure = length_measure;
+WHERE
+  WR1: SELF >= 0.0;
+END_TYPE;
+
+TYPE non_negative_real = REAL;
+WHERE
+  WR1: 0.0 <= SELF;
+END_TYPE;
+
+TYPE nonnegative_integer = INTEGER;
+WHERE 
+nonnegativity: SELF >= 0;
+END_TYPE;
+
+TYPE null_style = ENUMERATION OF
+  (null);
+END_TYPE;
+
+TYPE numeric_measure = NUMBER;
+END_TYPE;
+
+TYPE one_or_two = positive_integer;
+WHERE in_range: (SELF = 1) OR (SELF = 2);
+END_TYPE;
+
+TYPE open_closed = ENUMERATION OF
+  (open,
+   closed);
+END_TYPE;
+
+TYPE ordering_type = ENUMERATION OF
+  (by_rows,
+   by_columns);
+END_TYPE;
+
+TYPE organization_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   approval,
+   approval_status,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   data_equivalence_definition,
+   data_quality_definition,
+   date_and_time_assignment,
+   date_assignment,
+   document_file,
+   document_type,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   information_right,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   rule_action,
+   satisfies_requirement,
+   security_classification,
+   security_classification_level,
+   shape_representation,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   validation,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE organization_type_item = SELECT 
+  (organization);
+END_TYPE;
+
+TYPE orientation_basis_select = SELECT 
+  (axis2_placement_3d,
+   min_and_major_ply_orientation_basis);
+END_TYPE;
+
+TYPE oriented_tolerance_zone_type = ENUMERATION OF
+  (perpendicular,
+   parallel,
+   angular);
+END_TYPE;
+
+TYPE parallel_offset_type = ENUMERATION OF
+  (curve_2d_offset,
+   curve_3d_offset,
+   surface_offset);
+END_TYPE;
+
+TYPE parameter_value = REAL;
+END_TYPE;
+
+TYPE path_or_composite_curve = SELECT 
+  (composite_curve,
+   path);
+END_TYPE;
+
+TYPE pcurve_or_surface = SELECT 
+  (pcurve,
+   surface);
+END_TYPE;
+
+TYPE person_and_organization_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_certification_assignment,
+   applied_classification_assignment,
+   applied_contract_assignment,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_effectivity_assignment,
+   applied_event_occurrence_assignment,
+   applied_identification_assignment,
+   applied_organizational_project_assignment,
+   applied_organization_assignment,
+   applied_person_and_organization_assignment,
+   applied_security_classification_assignment,
+   approval,
+   approval_status,
+   ascribable_state,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   data_equivalence_definition,
+   data_quality_definition,
+   date_and_time_assignment,
+   date_assignment,
+   document_file,
+   document_type,
+   draughting_model,
+   drawing_revision,
+   effectivity,
+   envelope,
+   event_occurrence,
+   evidence,
+   executed_action,
+   general_property,
+   general_property_relationship,
+   information_usage_right,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organization,
+   organizational_address,
+   organizational_project,
+   organization_relationship,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_context,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   requirement_assignment,
+   requirement_for_action_resource,
+   requirement_source,
+   resource_property,
+   rule_action,
+   security_classification,
+   security_classification_level,
+   shape_representation,
+   state_observed,
+   state_observed_assignment,
+   state_observed_relationship,
+   state_type,
+   state_type_assignment,
+   state_type_relationship,
+   structured_message,
+   validation,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE person_organization_select = SELECT 
+  (organization,
+   person,
+   person_and_organization);
+END_TYPE;
+
+TYPE picture_representation_item_select = SELECT 
+  (axis2_placement_2d,
+   planar_box,
+   styled_item);
+END_TYPE;
+
+TYPE planar_curve_select = SELECT
+  (line,
+   conic,
+   trimmed_curve,
+   pcurve,
+   surface_curve);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+  WR2: check_curve_planarity(SELF);
+END_TYPE;
+
+TYPE plane_angle_measure = REAL;
+END_TYPE;
+
+TYPE plane_or_planar_box = SELECT 
+  (planar_box,
+   plane);
+END_TYPE;
+
+TYPE point_and_vector_member = SELECT 
+  (direction,
+   point);
+END_TYPE;
+
+TYPE point_and_vector_members = LIST [2 : 3] OF point_and_vector_member;
+END_TYPE;
+
+TYPE point_array_members = LIST [1 : ?] OF point_and_vector;
+END_TYPE;
+
+TYPE point_cloud_set_or_superset = SELECT 
+  (point_cloud_dataset,
+   point_cloud_superdataset);
+END_TYPE;
+
+TYPE point_curve_or_surface_constraint_element = SELECT 
+  (curve,
+   point,
+   surface);
+END_TYPE;
+
+TYPE point_path_members = LIST [1 : ?] OF point_and_vector;
+END_TYPE;
+
+TYPE point_placement_shape_representation_item = SELECT 
+  (axis2_placement_3d,
+   compound_representation_item,
+   mapped_item);
+END_TYPE;
+
+TYPE positive_integer = nonnegative_integer;
+WHERE positivity: SELF > 0;
+END_TYPE;
+
+TYPE positive_length_measure = non_negative_length_measure;
+WHERE
+  WR1: SELF > 0.0;
+END_TYPE;
+
+TYPE positive_plane_angle_measure = plane_angle_measure;
+WHERE
+  WR1: SELF > 0.0;
+END_TYPE;
+
+TYPE positive_ratio_measure = ratio_measure;
+WHERE
+  WR1: SELF > 0.0;
+END_TYPE;
+
+TYPE power_measure = REAL;
+END_TYPE;
+
+TYPE preferred_ordering = ENUMERATION OF
+  (extremity_order,
+   detected_order);
+END_TYPE;
+
+TYPE preferred_report_ordering = ENUMERATION OF
+  (in_notable_order,
+   in_detected_order);
+END_TYPE;
+
+TYPE preferred_surface_curve_representation = ENUMERATION OF
+  (curve_3d,
+   pcurve_s1,
+   pcurve_s2);
+END_TYPE;
+
+TYPE presentable_text = STRING;
+WHERE
+  WR1: control_characters_free(SELF);
+END_TYPE;
+
+TYPE presentation_representation_select = SELECT 
+  (presentation_representation,
+   presentation_set);
+END_TYPE;
+
+TYPE presentation_size_assignment_select = SELECT 
+  (area_in_set,
+   presentation_area,
+   presentation_view);
+END_TYPE;
+
+TYPE presentation_style_select = SELECT 
+  (curve_style,
+   externally_defined_style,
+   fill_area_style,
+   null_style,
+   point_style,
+   surface_style_usage,
+   symbol_style,
+   texture_style_tessellation_specification,
+   text_style);
+END_TYPE;
+
+TYPE presented_item_select = SELECT 
+  (action,
+   action_method,
+   action_relationship,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_category,
+   product_definition,
+   product_definition_formation,
+   product_definition_relationship);
+END_TYPE;
+
+TYPE pressure_measure = REAL;
+END_TYPE;
+
+TYPE previous_element_assignment_select = SELECT 
+  (delete_element,
+   modify_element);
+END_TYPE;
+
+TYPE product_definition_occurrence_or_reference = SELECT 
+  (product_definition_occurrence,
+   product_definition_occurrence_reference);
+END_TYPE;
+
+TYPE product_definition_or_assembly_relationship = SELECT 
+  (assembly_component_usage,
+   product_definition);
+END_TYPE;
+
+TYPE product_definition_or_breakdown_element_usage = SELECT 
+  (product,
+   product_definition,
+   product_definition_formation,
+   product_definition_usage);
+END_TYPE;
+
+TYPE product_definition_or_product_definition_relationship = SELECT 
+  (interface_connector_occurrence,
+   product,
+   product_definition,
+   product_definition_usage,
+   product_group);
+END_TYPE;
+
+TYPE product_definition_or_reference = SELECT 
+  (generic_product_definition_reference,
+   product_definition,
+   product_definition_occurrence);
+END_TYPE;
+
+TYPE product_definition_or_reference_or_occurrence = product_definition_or_reference;
+END_TYPE;
+
+TYPE product_or_formation_or_definition = SELECT 
+  (product,
+   product_definition,
+   product_definition_formation);
+END_TYPE;
+
+TYPE product_select = SELECT 
+  (product,
+   product_concept,
+   product_definition_formation,
+   product_group);
+END_TYPE;
+
+TYPE product_space = SELECT 
+  (uniform_product_space);
+END_TYPE;
+
+TYPE project_item = SELECT 
+  (action_method,
+   action_method_relationship,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   assembly_component_usage,
+   configuration_item,
+   executed_action,
+   measure_representation_item,
+   product,
+   product_concept,
+   product_definition,
+   product_definition_formation,
+   product_definition_occurrence,
+   product_definition_occurrence_reference,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   property_definition_representation,
+   representation,
+   representation_item,
+   value_representation_item);
+END_TYPE;
+
+TYPE property_or_shape_select = SELECT 
+  (property_definition,
+   shape_definition);
+END_TYPE;
+
+TYPE property_variable_rep_select = SELECT 
+  (dimensional_size,
+   representation);
+END_TYPE;
+
+TYPE radial_geometry_constraint_element = SELECT 
+  (circle,
+   conical_surface,
+   cylindrical_surface,
+   right_circular_cone,
+   right_circular_cylinder,
+   sphere,
+   spherical_surface);
+END_TYPE;
+
+TYPE radioactivity_measure = REAL;
+END_TYPE;
+
+TYPE ratio_measure = REAL;
+END_TYPE;
+
+TYPE real_interval = SELECT
+  (real_interval_from_min,
+   real_interval_to_max,
+   finite_real_interval,
+   elementary_space);
+WHERE
+  WR1: NOT ('ELEMENTARY_SPACE' IN stripped_typeof(SELF)) OR
+    (SELF\elementary_space.space_id = es_reals);
+END_TYPE;
+
+TYPE rendering_properties_select = SELECT 
+  (surface_style_reflectance_ambient,
+   surface_style_transparent);
+END_TYPE;
+
+TYPE repackage_options = ENUMERATION OF
+  (ro_nochange,
+   ro_wrap_as_tuple,
+   ro_unwrap_tuple);
+END_TYPE;
+
+TYPE representation_or_representation_reference = SELECT 
+  (representation,
+   representation_reference);
+END_TYPE;
+
+TYPE representation_proxy_select = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE representative_value_type = ENUMERATION OF
+  (average_value,
+   max_value,
+   min_value,
+   min_max_value);
+END_TYPE;
+
+TYPE represented_definition = SELECT 
+  (general_property,
+   property_definition,
+   property_definition_relationship,
+   shape_aspect,
+   shape_aspect_relationship);
+END_TYPE;
+
+TYPE requirement_assigned_item = SELECT 
+  (action_method,
+   alternate_product_relationship,
+   applied_action_method_assignment,
+   applied_state_observed_assignment,
+   applied_state_type_assignment,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   characterized_object,
+   configuration_item,
+   descriptive_representation_item,
+   dimensional_location,
+   dimensional_size,
+   geometric_tolerance,
+   interface_connector_occurrence,
+   organizational_project,
+   product,
+   product_class,
+   product_definition,
+   product_definition_formation,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_group,
+   product_group_membership,
+   quantified_assembly_component_usage,
+   representation,
+   shape_aspect,
+   state_observed,
+   state_type,
+   validation,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE requirement_satisfaction_item = SELECT 
+  (requirement_assigned_item);
+END_TYPE;
+
+TYPE requirement_source_item = SELECT 
+  (action_method,
+   applied_action_method_assignment,
+   applied_state_observed_assignment,
+   applied_state_type_assignment,
+   characterized_object,
+   contract,
+   dimensional_location,
+   dimensional_size,
+   executed_action,
+   geometric_tolerance,
+   group,
+   group_relationship,
+   interface_connector_occurrence,
+   organization,
+   organizational_project,
+   person_and_organization,
+   product,
+   product_definition,
+   product_definition_formation,
+   product_definition_relationship,
+   shape_aspect,
+   state_observed,
+   state_type,
+   validation,
+   verification);
+END_TYPE;
+
+TYPE resistance_measure = REAL;
+END_TYPE;
+
+TYPE reversible_topology = SELECT 
+  (list_of_reversible_topology_item,
+   reversible_topology_item,
+   set_of_reversible_topology_item);
+END_TYPE;
+
+TYPE reversible_topology_item = SELECT 
+  (closed_shell,
+   edge,
+   face,
+   face_bound,
+   open_shell,
+   path);
+END_TYPE;
+
+TYPE rigid_placement = SELECT 
+  (axis2_placement_3d,
+   su_parameters);
+END_TYPE;
+
+TYPE role_select = SELECT 
+  (action_assignment,
+   action_request_assignment,
+   approval_assignment,
+   approval_date_time,
+   certification_assignment,
+   contract_assignment,
+   directed_action_assignment,
+   document_reference,
+   effectivity_assignment,
+   group_assignment,
+   name_assignment,
+   security_classification_assignment);
+END_TYPE;
+
+TYPE rule_superseded_item = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE same_as_item = SELECT 
+  (address,
+   applied_external_identification_assignment,
+   approval,
+   approval_status,
+   attribute_language_assignment,
+   calendar_date,
+   certification,
+   contract,
+   coordinated_universal_time_offset,
+   date_and_time,
+   derived_unit,
+   derived_unit_element,
+   event_occurrence,
+   external_source,
+   general_property,
+   information_right,
+   information_usage_right,
+   language,
+   local_time,
+   measure_with_unit,
+   named_unit,
+   organization,
+   person,
+   product_definition_context,
+   representation_context,
+   requirement_source,
+   security_classification,
+   time_interval,
+   usage_association);
+END_TYPE;
+
+TYPE second_in_minute = REAL;
+WHERE
+  WR1: { 0 <= SELF < 60.0 };
+END_TYPE;
+
+TYPE security_classification_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_method_relationship,
+   action_property,
+   action_property_representation,
+   applied_action_assignment,
+   applied_action_method_assignment,
+   applied_classification_assignment,
+   applied_description_text_assignment,
+   applied_description_text_assignment_relationship,
+   applied_document_reference,
+   applied_document_usage_constraint_assignment,
+   applied_external_identification_assignment,
+   applied_identification_assignment,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   class_system,
+   conditional_effectivity,
+   configuration_design,
+   configuration_effectivity,
+   configured_effectivity_assignment,
+   document,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   envelope,
+   evaluated_characteristic_of_product_as_individual_test_result,
+   evidence,
+   exclusive_product_concept_feature_category,
+   executed_action,
+   externally_defined_general_property,
+   general_property,
+   group,
+   identification_assignment_relationship,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_design,
+   interface_connector_occurrence,
+   interface_definition_connection,
+   interface_definition_for,
+   make_from_usage_option,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_project,
+   package_product_concept_feature,
+   presentation_area,
+   process_plan,
+   product,
+   product_class,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_category,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_definition_usage,
+   product_design_to_individual,
+   product_design_version_to_individual,
+   product_group,
+   product_group_membership,
+   product_group_relationship,
+   product_identification,
+   product_process_plan,
+   product_relationship,
+   property_definition,
+   property_definition_representation,
+   representation,
+   requirement_assignment,
+   requirement_source,
+   requirement_view_definition_relationship,
+   resource_property,
+   shape_representation,
+   structured_message,
+   validation,
+   verification,
+   versioned_action_request);
+END_TYPE;
+
+TYPE set_inner_area_boundary = SET [1 : ?] OF bounded_primitive_2d;
+END_TYPE;
+
+TYPE set_item_defined_transformation = SET [2 : ?] OF item_defined_transformation;
+END_TYPE;
+
+TYPE set_of_reversible_topology_item = SET [0 : ?] OF reversible_topology_item;
+END_TYPE;
+
+TYPE set_representation_item = SET [1 : ?] OF representation_item;
+END_TYPE;
+
+TYPE shading_curve_method = ENUMERATION OF
+  (constant_colour,
+   linear_colour);
+END_TYPE;
+
+TYPE shading_surface_method = ENUMERATION OF
+  (constant_shading,
+   colour_shading,
+   dot_shading,
+   normal_shading);
+END_TYPE;
+
+TYPE shape_aspect_or_characterized_object = SELECT 
+  (characterized_object,
+   shape_aspect);
+END_TYPE;
+
+TYPE shape_data_quality_assessment_specification_select = SELECT 
+  (shape_data_quality_assessment_by_logical_test,
+   shape_data_quality_assessment_by_numerical_test);
+END_TYPE;
+
+TYPE shape_data_quality_value_limit_type_select = SELECT 
+  (shape_data_quality_value_limit,
+   shape_data_quality_value_range);
+END_TYPE;
+
+TYPE shape_definition = SELECT 
+  (product_definition_shape,
+   shape_aspect,
+   shape_aspect_relationship);
+END_TYPE;
+
+TYPE shape_dimension_representation_item = SELECT 
+  (compound_representation_item,
+   descriptive_representation_item,
+   measure_representation_item,
+   placement);
+END_TYPE;
+
+TYPE shape_model = SELECT 
+  (constructive_geometry_representation,
+   shape_representation);
+END_TYPE;
+
+TYPE shape_representation_item = SELECT 
+  (geometric_representation_item,
+   topological_representation_item);
+END_TYPE;
+
+TYPE shape_representation_with_parameters_items = SELECT 
+  (descriptive_representation_item,
+   direction,
+   measure_representation_item,
+   placement);
+END_TYPE;
+
+TYPE shell = SELECT 
+  (closed_shell,
+   open_shell,
+   vertex_shell,
+   wire_shell);
+END_TYPE;
+
+TYPE si_prefix = ENUMERATION OF
+  (exa,
+   peta,
+   tera,
+   giga,
+   mega,
+   kilo,
+   hecto,
+   deca,
+   deci,
+   centi,
+   milli,
+   micro,
+   nano,
+   pico,
+   femto,
+   atto);
+END_TYPE;
+
+TYPE si_unit_name = ENUMERATION OF
+  (metre,
+   gram,
+   second,
+   ampere,
+   kelvin,
+   mole,
+   candela,
+   radian,
+   steradian,
+   hertz,
+   newton,
+   pascal,
+   joule,
+   watt,
+   coulomb,
+   volt,
+   farad,
+   ohm,
+   siemens,
+   weber,
+   tesla,
+   henry,
+   degree_celsius,
+   lumen,
+   lux,
+   becquerel,
+   gray,
+   sievert);
+END_TYPE;
+
+TYPE simple_datum_reference_modifier = ENUMERATION OF
+  (any_cross_section,
+   any_longitudinal_section,
+   basic,
+   contacting_feature,
+   degree_of_freedom_constraint_u,
+   degree_of_freedom_constraint_v,
+   degree_of_freedom_constraint_w,
+   degree_of_freedom_constraint_x,
+   degree_of_freedom_constraint_y,
+   degree_of_freedom_constraint_z,
+   distance_variable,
+   free_state,
+   least_material_requirement,
+   line,
+   major_diameter,
+   maximum_material_requirement,
+   minor_diameter,
+   orientation,
+   pitch_diameter,
+   plane,
+   point,
+   translation);
+END_TYPE;
+
+TYPE size_select = SELECT 
+  (descriptive_measure,
+   measure_with_unit,
+   positive_length_measure);
+END_TYPE;
+
+TYPE sketch_basis_select = SELECT 
+  (curve_bounded_surface,
+   face_surface,
+   planar_curve_select);
+END_TYPE;
+
+TYPE sketch_element_select = SELECT (
+   curve,
+   point);
+   WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+END_TYPE;
+
+TYPE sketch_type_select = SELECT 
+  (neutral_sketch_representation,
+   positioned_sketch,
+   subsketch);
+END_TYPE;
+
+TYPE solid_angle_measure = REAL;
+END_TYPE;
+
+TYPE source = ENUMERATION OF
+  (made,
+   bought,
+   not_known);
+END_TYPE;
+
+TYPE source_item = SELECT 
+  (identifier,
+   message);
+END_TYPE;
+
+TYPE space_constraint_type = ENUMERATION OF
+  (sc_equal,
+   sc_subspace,
+   sc_member);
+END_TYPE;
+
+TYPE spatial_rotation = SELECT 
+  (rotation_about_direction,
+   ypr_rotation);
+END_TYPE;
+
+TYPE specified_item = SELECT 
+  (drawing_revision);
+END_TYPE;
+
+TYPE spherical_pair_select = SELECT 
+  (spherical_pair,
+   spherical_pair_with_pin);
+END_TYPE;
+
+TYPE spline_knot_values = LIST [2: ?] OF REAL; 
+WHERE 
+WR1 :   increasing_values_in_list(SELF);
+END_TYPE;
+
+TYPE start_request_item = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE state_observed_of_item = SELECT 
+  (alternate_product_relationship,
+   applied_action_method_assignment,
+   applied_external_identification_assignment,
+   approval,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   attachment_slot_design_to_planned,
+   attachment_slot_design_to_realized,
+   attachment_slot_on_product,
+   attachment_slot_planned_to_realized,
+   breakdown_element_group_assignment,
+   breakdown_element_usage,
+   certification,
+   configuration_item,
+   contract,
+   document_file,
+   evidence,
+   final_solution,
+   group,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_definition,
+   interface_connector_design,
+   interface_connector_occurrence,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_specification_definition,
+   interface_specification_version,
+   organization,
+   organizational_project,
+   person_and_organization,
+   product,
+   product_category,
+   product_concept,
+   product_definition,
+   product_definition_formation,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_in_attachment_slot,
+   security_classification,
+   structured_message,
+   validation,
+   verification);
+END_TYPE;
+
+TYPE state_type_of_item = SELECT 
+  (action_method,
+   alternate_product_relationship,
+   applied_action_method_assignment,
+   applied_external_identification_assignment,
+   approval,
+   assembly_component_usage,
+   assembly_component_usage_substitute,
+   attachment_slot_design_to_planned,
+   attachment_slot_design_to_realized,
+   attachment_slot_on_product,
+   attachment_slot_planned_to_realized,
+   breakdown_element_group_assignment,
+   breakdown_element_usage,
+   certification,
+   configuration_item,
+   contract,
+   document_file,
+   evidence,
+   final_solution,
+   interface_connection,
+   interface_connector_as_planned,
+   interface_connector_as_realized,
+   interface_connector_definition,
+   interface_connector_design,
+   interface_connector_occurrence,
+   interface_connector_version,
+   interface_definition_connection,
+   interface_specification_definition,
+   interface_specification_version,
+   organization,
+   organizational_project,
+   person_and_organization,
+   product,
+   product_category,
+   product_concept,
+   product_definition,
+   product_definition_formation,
+   product_definition_group_assignment,
+   product_definition_relationship,
+   product_group,
+   product_in_attachment_slot,
+   security_classification,
+   validation,
+   verification);
+END_TYPE;
+
+TYPE statistical_value_type = ENUMERATION OF
+  (number_of_inspected_instances,
+   number_of_quality_defects_detected);
+END_TYPE;
+
+TYPE string_representation_item_select = SELECT 
+  (descriptive_representation_item,
+   included_text_block,
+   structured_text_composition);
+END_TYPE;
+
+TYPE style_context_select = SELECT 
+  (context_dependent_shape_representation,
+   group,
+   presentation_layer_assignment,
+   presentation_set,
+   representation,
+   representation_item,
+   representation_relationship);
+END_TYPE;
+
+TYPE styled_item_target = SELECT 
+  (geometric_representation_item,
+   mapped_item,
+   representation_or_representation_reference,
+   topological_representation_item);
+END_TYPE;
+
+TYPE summary_report_style_type = ENUMERATION OF
+  (conclusion,
+   number_of_defects,
+   number_of_inspections);
+END_TYPE;
+
+TYPE summary_report_type = ENUMERATION OF
+  (unspecified,
+   conclusion_only,
+   number_of_quality_defects,
+   number_of_inspections_and_conclusion,
+   full_statistics);
+END_TYPE;
+
+TYPE supported_item = SELECT 
+  (action,
+   action_directive,
+   action_method);
+END_TYPE;
+
+TYPE surface_boundary_type = ENUMERATION OF
+  (u_parameter_min,
+   v_parameter_min,
+   u_parameter_max,
+   v_parameter_max);
+END_TYPE;
+
+TYPE surface_model = SELECT 
+  (face_based_surface_model,
+   shell_based_surface_model);
+END_TYPE;
+
+TYPE surface_or_solid_model = SELECT 
+  (solid_model,
+   surface_model);
+END_TYPE;
+
+TYPE surface_side = ENUMERATION OF
+  (positive,
+   negative,
+   both);
+END_TYPE;
+
+TYPE surface_side_style_select = SELECT 
+  (pre_defined_surface_side_style,
+   surface_side_style);
+END_TYPE;
+
+TYPE surface_style_element_select = SELECT 
+  (surface_style_boundary,
+   surface_style_control_grid,
+   surface_style_fill_area,
+   surface_style_parameter_line,
+   surface_style_rendering,
+   surface_style_segmentation_curve,
+   surface_style_silhouette);
+END_TYPE;
+
+TYPE swept_surface_or_solid = SELECT 
+  (swept_area_solid,
+   swept_face_solid,
+   swept_surface);
+END_TYPE;
+
+TYPE symbol_style_select = SELECT 
+  (symbol_colour);
+END_TYPE;
+
+TYPE symmetry_type = ENUMERATION OF
+  (identity,
+   skew,
+   hermitian,
+   skew_hermitian);
+END_TYPE;
+
+TYPE tangent_contact_type = ENUMERATION OF
+  (point_contact,
+   curve_contact,
+   surface_contact);
+END_TYPE;
+
+TYPE target_annotated_3d_model_select = SELECT 
+  (shape_representation_relationship);
+END_TYPE;
+
+TYPE tessellated_edge_or_vertex = SELECT 
+  (tessellated_edge,
+   tessellated_vertex);
+END_TYPE;
+
+TYPE tessellated_facet_long_short_edge_ratio = ratio_measure;
+END_TYPE;
+
+TYPE tessellated_surface_item = SELECT 
+  (tessellated_face,
+   tessellated_shell,
+   tessellated_solid,
+   tessellated_surface_set);
+END_TYPE;
+
+TYPE tessellation_accuracy_parameter_item = SELECT 
+  (angular_deviation,
+   chordal_deviation,
+   length_to_height_ratio,
+   maximum_edge_length,
+   tessellated_facet_long_short_edge_ratio);
+END_TYPE;
+
+TYPE text = STRING;
+END_TYPE;
+
+TYPE text_alignment = label;
+END_TYPE;
+
+TYPE text_delineation = label;
+END_TYPE;
+
+TYPE text_or_character = SELECT 
+  (annotation_text,
+   annotation_text_character,
+   composite_text,
+   defined_character_glyph,
+   text_literal);
+END_TYPE;
+
+TYPE text_path = ENUMERATION OF
+  (left,
+   right,
+   up,
+   down);
+END_TYPE;
+
+TYPE text_string_representation_item = SELECT 
+  (annotation_text,
+   annotation_text_character,
+   axis2_placement,
+   composite_text,
+   defined_character_glyph,
+   text_literal);
+END_TYPE;
+
+TYPE texture_file_type = ENUMERATION OF
+  (jpeg,
+   png,
+   gif,
+   tiff,
+   bmp,
+   dds,
+   tga,
+   other);
+END_TYPE;
+
+TYPE thermodynamic_temperature_measure = REAL;
+END_TYPE;
+
+TYPE time_interval_item = SELECT 
+  (action,
+   action_directive,
+   action_method,
+   action_property,
+   action_relationship,
+   action_request_solution,
+   alternate_product_relationship,
+   analysis_assignment,
+   applied_action_assignment,
+   applied_classification_assignment,
+   applied_person_and_organization_assignment,
+   approval_status,
+   assembly_component_usage_substitute,
+   certification,
+   class,
+   class_system,
+   configuration_design,
+   configuration_effectivity,
+   configuration_item,
+   configured_effectivity_assignment,
+   contract,
+   document_file,
+   draughting_model,
+   drawing_revision,
+   evidence,
+   executed_action,
+   general_property,
+   material_designation,
+   mechanical_design_geometric_presentation_representation,
+   organizational_project,
+   organization_relationship,
+   person_and_organization,
+   presentation_area,
+   product,
+   product_concept,
+   product_concept_feature,
+   product_concept_feature_association,
+   product_concept_feature_category,
+   product_concept_feature_category_usage,
+   product_definition,
+   product_definition_formation,
+   product_definition_formation_relationship,
+   product_definition_relationship,
+   product_definition_substitute,
+   property_definition,
+   requirement_for_action_resource,
+   resource_property,
+   security_classification,
+   security_classification_level,
+   shape_representation,
+   time_interval_based_effectivity,
+   validation,
+   verification,
+   verification_relationship,
+   versioned_action_request);
+END_TYPE;
+
+TYPE time_measure = REAL;
+END_TYPE;
+
+TYPE tolerance_method_definition = SELECT 
+  (limits_and_fits,
+   tolerance_value);
+END_TYPE;
+
+TYPE tolerance_value_or_limits_and_fits = SELECT 
+  (limits_and_fits,
+   tolerance_value);
+END_TYPE;
+
+TYPE tolerance_zone_target = SELECT 
+  (dimensional_location,
+   dimensional_size,
+   general_datum_reference,
+   geometric_tolerance);
+END_TYPE;
+
+TYPE transformation = SELECT 
+  (functionally_defined_transformation,
+   item_defined_transformation,
+   list_item_defined_transformation,
+   set_item_defined_transformation);
+END_TYPE;
+
+TYPE transition_code = ENUMERATION OF
+  (discontinuous,
+   continuous,
+   cont_same_gradient,
+   cont_same_gradient_same_curvature);
+END_TYPE;
+
+TYPE trim_condition_select = SELECT 
+  (generalized_surface_select,
+   length_measure,
+   plane_angle_measure,
+   solid_model);
+END_TYPE;
+
+TYPE trim_intent = ENUMERATION OF
+  (blind,
+   offset,
+   through_all,
+   unspecified,
+   up_to_next);
+END_TYPE;
+
+TYPE trimming_preference = ENUMERATION OF
+  (cartesian,
+   parameter,
+   unspecified);
+END_TYPE;
+
+TYPE trimming_select = SELECT 
+  (cartesian_point,
+   parameter_value);
+END_TYPE;
+
+TYPE tuple_space = SELECT 
+  (extended_tuple_space,
+   product_space);
+END_TYPE;
+
+TYPE u_direction_count = INTEGER;
+WHERE
+  WR1: SELF > 1;
+END_TYPE;
+
+TYPE u_or_v_parameter = ENUMERATION OF
+  (u_parameter,
+   v_parameter);
+END_TYPE;
+
+TYPE unit = SELECT 
+  (derived_unit,
+   named_unit);
+END_TYPE;
+
+TYPE unsigned_8_bit_integer = INTEGER;
+WHERE
+  WR1: {0 <= SELF <= 255};
+END_TYPE;
+
+TYPE used_equivalence_representation_select = SELECT 
+  (data_equivalence_criteria_representation,
+   data_equivalence_inspection_result_representation);
+END_TYPE;
+
+TYPE used_quality_representation_select = SELECT 
+  (data_quality_criteria_representation,
+   data_quality_inspection_result_representation);
+END_TYPE;
+
+TYPE v_direction_count = INTEGER;
+WHERE
+  WR1: SELF > 1;
+END_TYPE;
+
+TYPE validation_criteria_or_results_select = SELECT 
+  (data_equivalence_definition_representation_relationship);
+END_TYPE;
+
+TYPE value_format_type = identifier;
+WHERE
+      WR1: LENGTH(SELF) <= 80; 
+END_TYPE; -- value_format_type
+
+TYPE value_qualifier = SELECT 
+  (maths_value_precision_qualifier,
+   precision_qualifier,
+   type_qualifier,
+   uncertainty_qualifier,
+   value_format_type_qualifier);
+END_TYPE;
+
+TYPE vector_or_direction = SELECT 
+  (direction,
+   vector);
+END_TYPE;
+
+TYPE velocity_measure = REAL;
+END_TYPE;
+
+TYPE volume_measure = REAL;
+END_TYPE;
+
+TYPE week_in_year_number = INTEGER;
+WHERE
+  WR1: { 1 <= SELF <= 53 };
+END_TYPE;
+
+TYPE work_item = SELECT 
+  (product_definition_formation);
+END_TYPE;
+
+TYPE year_number = INTEGER;
+WHERE
+  WR1: (SELF > 1581);
+END_TYPE;
+
+TYPE ypr_enumeration = ENUMERATION OF
+  (yaw,
+   pitch,
+   roll);
+END_TYPE;
+
+TYPE ypr_rotation = ARRAY [ypr_index(yaw) : ypr_index(roll)] OF plane_angle_measure;
+END_TYPE;
+
+TYPE zero_or_one = nonnegative_integer;
+WHERE in_range: (SELF = 0) OR (SELF = 1);
+END_TYPE;
+
+ENTITY a3m_equivalence_accuracy_association;
+  id                 : identifier;
+  name               : label;
+  description        : OPTIONAL text;
+  specific_accuracy  : shape_measurement_accuracy;
+  equivalence_target : accuracy_associated_target_select;
+END_ENTITY;
+
+ENTITY a3m_equivalence_assessment_by_logical_test
+  SUBTYPE OF (data_equivalence_assessment_specification);
+END_ENTITY;
+
+ENTITY a3m_equivalence_assessment_by_numerical_test
+  SUBTYPE OF (data_equivalence_assessment_specification);
+  threshold : shape_data_quality_value_limit_type_select;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criteria_representation
+  SUBTYPE OF (data_equivalence_criteria_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION' IN TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion
+  ABSTRACT SUPERTYPE OF (a3m_equivalence_criterion_with_specified_elements)
+  SUBTYPE OF (data_equivalence_criterion, data_equivalence_inspection_requirement);
+  assessment_specification  : a3m_equivalence_assessment_specification_select;
+  comparing_element_types   : LIST [1 : ?] OF a3m_element_type_name;
+  compared_element_types    : LIST [1 : ?] OF a3m_element_type_name;
+  measured_data_type        : a3m_measured_data_type_name;
+  detected_difference_types : LIST [0 : ?] OF a3m_detected_difference_type_name;
+  accuracy_types            : LIST [0 : ?] OF a3m_accuracy_type_name;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) =
+       0;
+  WR2: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_INSPECTION_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+  WR3: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION_INSPECTION_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_for_assembly
+  ABSTRACT SUPERTYPE OF (ONEOF(a3m_equivalence_criterion_of_assembly_data_structure,
+                               a3m_equivalence_criterion_of_detailed_assembly_data_content,
+                               a3m_equivalence_criterion_of_component_property_difference,
+                               a3m_equivalence_criterion_of_representative_assembly_property_value))
+  SUBTYPE OF (a3m_equivalence_criterion);
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : ?] OF a3ma_element_type_name;
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : ?] OF a3ma_element_type_name;
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : ?] OF a3ma_detected_difference_type_name;
+DERIVE
+  SELF\a3m_equivalence_criterion.accuracy_types : LIST [0 : 0] OF a3ma_accuracy_type_name := [];
+WHERE
+  WR1: a3ma_validate_accuracy_types(SELF, SELF);
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_for_shape
+  ABSTRACT SUPERTYPE OF (ONEOF(a3m_equivalence_criterion_of_detailed_shape_data_content,
+                               a3m_equivalence_criterion_of_representative_shape_property_value,
+                               a3m_equivalence_criterion_of_shape_data_structure))
+  SUBTYPE OF (a3m_equivalence_criterion);
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : ?] OF a3ms_element_type_name;
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : ?] OF a3ms_element_type_name;
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : ?] OF a3ms_detected_difference_type_name;
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : ?] OF a3ms_accuracy_type_name;
+WHERE
+  WR1: a3ms_validate_accuracy_types(SELF, SELF);
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_assembly_data_structure
+  ABSTRACT SUPERTYPE OF (ONEOF(different_component_identification_via_multi_level_reference, mismatch_of_component,
+                               missing_assembly_constraint, missing_component))
+  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+  SELF\a3m_equivalence_criterion.compared_element_types  : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_component_property_difference
+  ABSTRACT SUPERTYPE OF (different_component_shape)
+  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type : a3ma_measured_data_type_name := mdna_boolean_value;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_detailed_assembly_data_content
+  ABSTRACT SUPERTYPE OF (ONEOF(different_angle_of_assembly_constraint, different_assembly_constraint_type,
+                               different_component_type, different_length_of_assembly_constraint,
+                               different_placement_of_component))
+  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+  SELF\a3m_equivalence_criterion.compared_element_types  : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_detailed_shape_data_content
+  ABSTRACT SUPERTYPE OF (ONEOF(different_surface_normal, mismatch_of_arcwise_connected_curves,
+                               mismatch_of_arcwise_connected_surfaces, mismatch_of_arcwise_connected_surfaces_boundary,
+                               mismatch_of_points, mismatch_of_point_cloud_and_related_geometry,
+                               mismatch_of_underlying_edge_geometry, mismatch_of_underlying_face_geometry))
+  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_representative_assembly_property_value
+  ABSTRACT SUPERTYPE OF (ONEOF(different_assembly_centroid, different_assembly_centroid_using_notional_solid,
+                               different_assembly_volume, different_number_of_components))
+  SUBTYPE OF (a3m_equivalence_criterion_for_assembly);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+  SELF\a3m_equivalence_criterion.compared_element_types  : LIST [1 : 1] OF a3ma_element_type_name := [etna_product_definition_or_reference];
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_representative_shape_property_value
+  ABSTRACT SUPERTYPE OF (ONEOF(different_bounding_box, different_centroid, different_curve_length,
+                               different_number_of_closed_shell, different_number_of_geometric_elements,
+                               different_number_of_geometric_elements_wireframe_model,
+                               different_number_of_topological_elements,
+                               different_number_of_topological_elements_wireframe_model, different_surface_area,
+                               different_volume))
+  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types : LIST [1 : ?] OF a3m_element_type_name := SELF\a3m_equivalence_criterion.compared_element_types;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_of_shape_data_structure
+  ABSTRACT SUPERTYPE OF (ONEOF(mismatch_of_edges, mismatch_of_faces, missing_edge, missing_face))
+  SUBTYPE OF (a3m_equivalence_criterion_for_shape);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types : LIST [1 : ?] OF a3m_element_type_name := SELF\a3m_equivalence_criterion.compared_element_types;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_report_item_with_measured_value
+  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
+  representative_measured_value : equivalence_measured_value_select;
+  value_type                    : representative_value_type;
+END_ENTITY;
+
+ENTITY a3m_equivalence_criterion_with_specified_elements
+  SUBTYPE OF (a3m_equivalence_criterion);
+  comparing_specified_elements : SET [1 : ?] OF inspected_equivalence_element_select;
+  compared_specified_elements  : SET [1 : ?] OF inspected_equivalence_element_select;
+END_ENTITY;
+
+ENTITY a3m_equivalence_inspection_instance_report_item
+  SUBTYPE OF (data_equivalence_inspection_instance_report_item);
+  measured_value_for_inspected_element : equivalence_measured_value_select;
+END_ENTITY;
+
+ENTITY a3m_equivalence_inspection_requirement_with_values
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (data_equivalence_inspection_requirement);
+  applied_values : SET [1 : ?] OF measure_representation_item;
+END_ENTITY;
+
+ENTITY a3m_equivalence_inspection_result_representation
+  SUBTYPE OF (data_equivalence_inspection_result_representation);
+END_ENTITY;
+
+ENTITY a3m_equivalence_inspection_result_representation_for_assembly
+  SUBTYPE OF (a3m_equivalence_inspection_result_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MS_EQUIVALENCE_INSPECTION_RESULT' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY a3m_equivalence_inspection_result_representation_for_shape
+  SUBTYPE OF (a3m_equivalence_inspection_result_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MA_EQUIVALENCE_INSPECTION_RESULT' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY a3m_equivalence_summary_report_request_with_representative_value
+  SUBTYPE OF (data_equivalence_report_request);
+  report_request_type : representative_value_type;
+END_ENTITY;
+
+ENTITY a3m_inspected_model_and_inspection_result_relationship;
+  inspected_model    : target_annotated_3d_model_select;
+  equivalence_result : a3m_equivalence_inspection_result_representation;
+END_ENTITY;
+
+ENTITY a3ma_assembly_and_shape_criteria_relationship
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : different_component_shape;
+  SELF\representation_item_relationship.related_representation_item  : a3m_equivalence_criterion_for_shape;
+END_ENTITY;
+
+ENTITY a3ma_equivalence_criterion_assessment_threshold_relationship
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : different_placement_of_component;
+  SELF\representation_item_relationship.related_representation_item  : shape_data_quality_lower_value_limit;
+END_ENTITY;
+
+ENTITY a3ma_equivalence_inspection_result
+  SUBTYPE OF (data_equivalence_inspection_result);
+  SELF\data_equivalence_inspection_result.criterion_inspected : a3m_equivalence_criterion_for_assembly;
+WHERE
+  WR1: a3ma_validate_accuracy_types(SELF, SELF\data_equivalence_inspection_result.criterion_inspected);
+  WR2: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ma_validate_element_types(re,
+                                                       SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+  WR3: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ma_validate_detected_difference_types(re,
+                                                                   SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+  WR4: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ma_validate_measured_type(re,
+                                                       SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+END_ENTITY;
+
+ENTITY a3ma_length_measure_and_context_dependent_measure_pair
+  SUBTYPE OF (compound_representation_item);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIST_REPRESENTATION_ITEM' IN
+       TYPEOF(SELF\compound_representation_item.item_element);
+  WR2: SIZEOF(SELF\compound_representation_item.item_element) = 2;
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+       TYPEOF(SELF\compound_representation_item.item_element[1]);
+  WR4: SIZEOF(QUERY(vri
+                    <* [SELF\compound_representation_item.item_element[1]]
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+                      TYPEOF(vri.value_component))) =
+       1;
+  WR5: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+       TYPEOF(SELF\compound_representation_item.item_element[2]);
+  WR6: SIZEOF(QUERY(vri
+                    <* [SELF\compound_representation_item.item_element[2]]
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN
+                      TYPEOF(vri.value_component))) =
+       1;
+END_ENTITY;
+
+ENTITY a3ms_equivalence_criterion_with_specified_elements
+  SUBTYPE OF (a3m_equivalence_criterion_for_shape, a3m_equivalence_criterion_with_specified_elements);
+  SELF\a3m_equivalence_criterion_with_specified_elements.comparing_specified_elements : SET [1 : ?] OF a3ms_inspected_equivalence_element_select;
+  SELF\a3m_equivalence_criterion_with_specified_elements.compared_specified_elements  : SET [1 : ?] OF a3ms_inspected_equivalence_element_select;
+WHERE
+  WR1: (a3ms_get_element_type(SELF.comparing_specified_elements) = etns_external_representation_item) OR
+       (a3ms_get_element_type(SELF.comparing_specified_elements) IN
+        SELF\a3m_equivalence_criterion_for_shape.comparing_element_types);
+  WR2: (a3ms_get_element_type(SELF.compared_specified_elements) = etns_external_representation_item) OR
+       (a3ms_get_element_type(SELF.compared_specified_elements) IN
+        SELF\a3m_equivalence_criterion_for_shape.compared_element_types);
+END_ENTITY;
+
+ENTITY a3ms_equivalence_inspection_result
+  SUBTYPE OF (data_equivalence_inspection_result);
+  SELF\data_equivalence_inspection_result.criterion_inspected : a3m_equivalence_criterion_for_shape;
+WHERE
+  WR1: a3ms_validate_accuracy_types(SELF, SELF\data_equivalence_inspection_result.criterion_inspected);
+  WR2: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ms_validate_element_types(re,
+                                                       SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+  WR3: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ms_validate_detected_difference_types(re,
+                                                                   SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+  WR4: SIZEOF(QUERY(re
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_REPORT.INSPECTION_RESULT'))
+                    | NOT (a3ms_validate_measured_type(re,
+                                                       SELF\data_equivalence_inspection_result.criterion_inspected)))) =
+       0;
+END_ENTITY;
+
+ENTITY abrupt_change_of_surface_normal
+  SUBTYPE OF (geometry_with_local_irregularity);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  small_vector_tolerance                                     : length_measure;
+  test_point_distance_tolerance                              : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY abs_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY absorbed_dose_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABSORBED_DOSE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY absorbed_dose_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.gray);
+END_ENTITY;
+
+ENTITY abstract_variable
+  SUBTYPE OF (property_definition, property_definition_representation, representation, representation_item);
+END_ENTITY;
+
+ENTITY abstracted_expression_function
+  SUBTYPE OF (maths_function, quantifier_expression);
+DERIVE
+  SELF\quantifier_expression.variables : LIST [1 : ?] OF UNIQUE generic_variable := remove_first(SELF\multiple_arity_generic_expression.operands);
+  expr                                 : generic_expression                      := SELF\multiple_arity_generic_expression.operands[1];
+WHERE
+  WR1: SIZEOF(QUERY(operand <* SELF\multiple_arity_generic_expression.operands | NOT (has_values_space(operand)))) = 0;
+END_ENTITY;
+
+ENTITY acceleration_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACCELERATION_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY acceleration_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(1.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0);
+END_ENTITY;
+
+ENTITY acos_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY action;
+  name          : label;
+  description   : OPTIONAL text;
+  chosen_method : action_method;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY action_actual
+  SUBTYPE OF (executed_action);
+END_ENTITY;
+
+ENTITY action_assignment
+  ABSTRACT SUPERTYPE OF ((ONEOF(applied_usage_right, applied_action_assignment)));
+  assigned_action : action;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY action_directive;
+  name        : label;
+  description : OPTIONAL text;
+  analysis    : text;
+  comment     : text;
+  requests    : SET [1 : ?] OF versioned_action_request;
+END_ENTITY;
+
+ENTITY action_directive_relationship;
+  name          : label;
+  description   : OPTIONAL STRING;
+  relating      : action_directive;
+  related       : action_directive;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_action_directive_relationship(SELF, [related],
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY action_happening
+  SUBTYPE OF (action_relationship);
+END_ENTITY;
+
+ENTITY action_method;
+  name        : label;
+  description : OPTIONAL text;
+  consequence : text;
+  purpose     : text;
+END_ENTITY;
+
+ENTITY action_method_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_action_method : action_method;
+  role                   : action_method_role;
+END_ENTITY;
+
+ENTITY action_method_relationship;
+  name            : label;
+  description     : OPTIONAL text;
+  relating_method : action_method;
+  related_method  : action_method;
+END_ENTITY;
+
+ENTITY action_method_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY action_property;
+  name        : label;
+  description : text;
+  definition  : characterized_action_definition;
+END_ENTITY;
+
+ENTITY action_property_representation;
+  name           : label;
+  description    : text;
+  property       : action_property;
+  representation : representation;
+END_ENTITY;
+
+ENTITY action_relationship;
+  name            : label;
+  description     : OPTIONAL text;
+  relating_action : action;
+  related_action  : action;
+END_ENTITY;
+
+ENTITY action_request_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_action_request : versioned_action_request;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY action_request_solution;
+  method  : action_method;
+  request : versioned_action_request;
+DERIVE
+  description : text  := get_description_value(SELF);
+  name        : label := get_name_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY action_request_status;
+  status           : label;
+  assigned_request : versioned_action_request;
+END_ENTITY;
+
+ENTITY action_resource;
+  name        : label;
+  description : OPTIONAL text;
+  usage       : SET [1 : ?] OF supported_item;
+  kind        : action_resource_type;
+END_ENTITY;
+
+ENTITY action_resource_relationship;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_resource : action_resource;
+  related_resource  : action_resource;
+END_ENTITY;
+
+ENTITY action_resource_requirement;
+  name        : label;
+  description : text;
+  kind        : resource_requirement_type;
+  operations  : SET [1 : ?] OF characterized_action_definition;
+END_ENTITY;
+
+ENTITY action_resource_type;
+  name : label;
+END_ENTITY;
+
+ENTITY action_status;
+  status          : label;
+  assigned_action : executed_action;
+END_ENTITY;
+
+ENTITY actuated_kinematic_pair
+  SUBTYPE OF (kinematic_pair);
+  t_x : OPTIONAL actuated_direction;
+  t_y : OPTIONAL actuated_direction;
+  t_z : OPTIONAL actuated_direction;
+  r_x : OPTIONAL actuated_direction;
+  r_y : OPTIONAL actuated_direction;
+  r_z : OPTIONAL actuated_direction;
+END_ENTITY;
+
+ENTITY add_element
+  SUBTYPE OF (change_element);
+END_ENTITY;
+
+ENTITY additive_manufacturing_build_plate_relationship
+  SUBTYPE OF (additive_manufacturing_setup_relationship);
+END_ENTITY;
+
+ENTITY additive_manufacturing_setup
+  SUBTYPE OF (product);
+END_ENTITY;
+
+ENTITY additive_manufacturing_setup_relationship
+  ABSTRACT SUPERTYPE OF (ONEOF(additive_manufacturing_build_plate_relationship,
+                               additive_manufacturing_support_structure_geometry_relationship,
+                               additive_manufacturing_setup_workpiece_relationship))
+  SUBTYPE OF (next_assembly_usage_occurrence);
+END_ENTITY;
+
+ENTITY additive_manufacturing_setup_workpiece_relationship
+  SUBTYPE OF (additive_manufacturing_setup_relationship);
+END_ENTITY;
+
+ENTITY additive_manufacturing_support_structure_geometry_relationship
+  SUBTYPE OF (additive_manufacturing_setup_relationship);
+END_ENTITY;
+
+ENTITY address;
+  internal_location       : OPTIONAL label;
+  street_number           : OPTIONAL label;
+  street                  : OPTIONAL label;
+  postal_box              : OPTIONAL label;
+  town                    : OPTIONAL label;
+  region                  : OPTIONAL label;
+  postal_code             : OPTIONAL label;
+  country                 : OPTIONAL label;
+  facsimile_number        : OPTIONAL label;
+  telephone_number        : OPTIONAL label;
+  electronic_mail_address : OPTIONAL label;
+  telex_number            : OPTIONAL label;
+DERIVE
+  name : label      := get_name_value(SELF);
+  url  : identifier := get_id_value(SELF);
+WHERE
+  WR1: EXISTS(internal_location) OR EXISTS(street_number) OR EXISTS(street) OR EXISTS(postal_box) OR EXISTS(town) OR
+       EXISTS(region) OR EXISTS(postal_code) OR EXISTS(country) OR EXISTS(facsimile_number) OR
+       EXISTS(telephone_number) OR EXISTS(electronic_mail_address) OR EXISTS(telex_number);
+END_ENTITY;
+
+ENTITY advanced_brep_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                              TYPEOF(it)) =
+                       1))) >
+       0;
+  WR3: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                   TYPEOF(fcs)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)))
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN
+                       TYPEOF(msb\manifold_solid_brep.outer)))) =
+       0;
+  WR5: SIZEOF(QUERY(brv
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_BREP_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+END_ENTITY;
+
+ENTITY advanced_face
+  SUBTYPE OF (face_surface);
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE'] *
+              TYPEOF(face_geometry)) =
+       1;
+  WR2: SIZEOF(QUERY(elp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                    | NOT (SIZEOF(QUERY(oe
+                                        <* elp_fbnds.bound\path.edge_list
+                                        | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                               TYPEOF(oe\oriented_edge.edge_element)))) =
+                           0))) =
+       0;
+  WR3: SIZEOF(QUERY(elp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                    | NOT (SIZEOF(QUERY(oe
+                                        <* elp_fbnds.bound\path.edge_list
+                                        | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] *
+                                                      TYPEOF(oe.edge_element\edge_curve.edge_geometry)) =
+                                               1))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(elp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                    | NOT (SIZEOF(QUERY(oe
+                                        <* elp_fbnds.bound\path.edge_list
+                                        | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                 TYPEOF(oe\edge.edge_start)) AND
+                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN
+                                                 TYPEOF(oe\edge.edge_start\vertex_point.vertex_geometry))) AND
+                                               (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                 TYPEOF(oe\edge.edge_end)) AND
+                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN
+                                                 TYPEOF(oe\edge.edge_end\vertex_point.vertex_geometry)))))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(elp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(elp_fbnds.bound)))) =
+       0;
+  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(face_geometry)) OR
+           (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] *
+                   TYPEOF(face_geometry\swept_surface.swept_curve)) =
+            1);
+  WR7: SIZEOF(QUERY(vlp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN TYPEOF(bnds.bound)))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                            TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND
+                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN
+                            TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex\vertex_point.vertex_geometry))))) =
+       0;
+  WR8: SIZEOF(QUERY(bnd
+                    <* bounds
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] *
+                                  TYPEOF(bnd.bound)) =
+                           1))) =
+       0;
+  WR9: SIZEOF(QUERY(elp_fbnds
+                    <* QUERY(bnds
+                             <* bounds
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                    | NOT (SIZEOF(QUERY(oe
+                                        <* elp_fbnds.bound\path.edge_list
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN
+                                           TYPEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry)) AND
+                                          NOT (SIZEOF(QUERY(sc_ag
+                                                            <* oe.edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                                                                   TYPEOF(sc_ag)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(face_geometry)) OR
+             (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                   TYPEOF(face_geometry\swept_surface.swept_curve)) OR
+                  (SIZEOF(face_geometry\swept_surface.swept_curve\polyline.points) >= 3))) AND
+        (SIZEOF(QUERY(elp_fbnds
+                      <* QUERY(bnds
+                               <* bounds
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN TYPEOF(bnds.bound)))
+                      | NOT (SIZEOF(QUERY(oe
+                                          <* elp_fbnds.bound\path.edge_list
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                             TYPEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry)) AND
+                                            NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >=
+                                                 3))) =
+                             0))) =
+         0);
+END_ENTITY;
+
+ENTITY agc_with_dimension
+  SUBTYPE OF (angle_geometric_constraint);
+  angle_value : plane_angle_measure;
+END_ENTITY;
+
+ENTITY aggregate_id_attribute;
+  attribute_value : identifier;
+  identified_item : SET [1 : ?] OF id_attribute_select;
+END_ENTITY;
+
+ENTITY all_around_shape_aspect
+  SUBTYPE OF (continuous_shape_aspect);
+END_ENTITY;
+
+ENTITY alternate_product_relationship;
+  name       : label;
+  definition : OPTIONAL text;
+  alternate  : product;
+  base       : product;
+  basis      : text;
+UNIQUE
+  UR1: alternate, base;
+WHERE
+  WR1: alternate :<>: base;
+END_ENTITY;
+
+ENTITY alternative_solution_relationship
+  SUBTYPE OF (product_definition_formation_relationship);
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_alternative_solution_relationship(SELF,
+                                                 [SELF\product_definition_formation_relationship.related_product_definition_formation],
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ALTERNATIVE_SOLUTION_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY amount_of_substance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AMOUNT_OF_SUBSTANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY amount_of_substance_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 1.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY analysis_assignment
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY analysis_item
+  SUBTYPE OF (group_assignment);
+  items                                : SET [1 : 1] OF analysed_item;
+  SELF\group_assignment.assigned_group : analysis_assignment;
+END_ENTITY;
+
+ENTITY analysis_model
+  SUBTYPE OF (representation);
+  SELF\representation.context_of_items : analysis_representation_context;
+END_ENTITY;
+
+ENTITY analysis_representation_context
+  SUBTYPE OF (representation_context);
+END_ENTITY;
+
+ENTITY and_expression
+  SUBTYPE OF (multiple_arity_boolean_expression);
+END_ENTITY;
+
+ENTITY angle_assembly_constraint_with_dimension
+  SUBTYPE OF (binary_assembly_constraint, agc_with_dimension);
+END_ENTITY;
+
+ENTITY angle_direction_reference
+  SUBTYPE OF (representation_item_relationship, geometric_representation_item);
+  SELF\representation_item_relationship.relating_representation_item : orientation_basis_select;
+  SELF\representation_item_relationship.related_representation_item  : angle_direction_reference_select;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MIN_AND_MAJOR_PLY_ORIENTATION_BASIS' IN
+        TYPEOF(relating_representation_item)) OR
+       NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_PATH' IN TYPEOF(related_representation_item)) AND
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+            TYPEOF(relating_representation_item));
+END_ENTITY;
+
+ENTITY angle_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF linear_geometry_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF linear_geometry_constraint_element;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND
+        (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
+END_ENTITY;
+
+ENTITY angular_dimension
+  SUBTYPE OF (dimension_curve_directed_callout);
+END_ENTITY;
+
+ENTITY angular_location
+  SUBTYPE OF (dimensional_location);
+  angle_selection : angle_relator;
+END_ENTITY;
+
+ENTITY angular_size
+  SUBTYPE OF (dimensional_size);
+  angle_selection : angle_relator;
+END_ENTITY;
+
+ENTITY angularity_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY annotation_curve_occurrence
+  SUPERTYPE OF ((ONEOF(leader_curve, projection_curve)))
+  SUBTYPE OF (annotation_occurrence);
+  SELF\styled_item.item : curve_or_curve_set;
+END_ENTITY;
+
+ENTITY annotation_fill_area
+  SUBTYPE OF (geometric_representation_item);
+  boundaries : SET [1 : ?] OF curve;
+WHERE
+  WR1: (SELF\geometric_representation_item.dim = 3) OR
+       (SIZEOF(QUERY(curve
+                     <* boundaries
+                     | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN TYPEOF(curve)) OR
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE' IN TYPEOF(curve)) OR
+                            (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(curve)) AND
+                             (curve\b_spline_curve.closed_curve = true)) OR
+                            (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(curve)) AND
+                             (curve\composite_curve.closed_curve = true)) OR
+                            (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(curve)) AND
+                             (curve\polyline.points[LOINDEX(curve\polyline.points)] =
+                              curve\polyline.points[HIINDEX(curve\polyline.points)]))))) =
+        0);
+END_ENTITY;
+
+ENTITY annotation_fill_area_occurrence
+  SUBTYPE OF (annotation_occurrence);
+  fill_style_target     : point;
+  SELF\styled_item.item : annotation_fill_area;
+END_ENTITY;
+
+ENTITY annotation_occurrence
+  SUPERTYPE OF ((ONEOF(annotation_point_occurrence, annotation_curve_occurrence, annotation_fill_area_occurrence,
+                       annotation_text_occurrence, annotation_symbol_occurrence)) ANDOR
+                (ONEOF(annotation_curve_occurrence, annotation_fill_area_occurrence, annotation_plane,
+                       annotation_symbol_occurrence, annotation_text_occurrence)))
+  SUBTYPE OF (styled_item);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+  WR2: SIZEOF(QUERY(reps
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_REPRESENTATION_SELECT' IN
+                           TYPEOF(reps)))) =
+       0;
+END_ENTITY;
+
+ENTITY annotation_occurrence_associativity
+  SUBTYPE OF (annotation_occurrence_relationship);
+WHERE
+  WR1: SIZEOF(TYPEOF(SELF.related_annotation_occurrence) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE']) =
+       1;
+END_ENTITY;
+
+ENTITY annotation_occurrence_relationship;
+  name                           : label;
+  description                    : text;
+  relating_annotation_occurrence : annotation_occurrence;
+  related_annotation_occurrence  : annotation_occurrence;
+END_ENTITY;
+
+ENTITY annotation_placeholder_occurrence
+  SUBTYPE OF (annotation_occurrence, geometric_representation_item);
+  SELF\styled_item.item : geometric_set;
+  role                  : annotation_placeholder_occurrence_role;
+  line_spacing          : positive_length_measure;
+INVERSE
+  the_callout                                             : draughting_callout FOR contents;
+  the_draughting_model_item_association_with_placeholders : SET [0:1] OF draughting_model_item_association_with_placeholder FOR annotation_placeholder;
+WHERE
+  WR1: md_valid_content_in_geometric_set_for_placeholder(item);
+  WR2: NOT (role = annotation_placeholder_occurrence_role.gps_data) OR
+           ((SIZEOF(the_draughting_model_item_association_with_placeholders) = 1) AND
+            md_pmi_name_and_type_correlation(SELF));
+END_ENTITY;
+
+ENTITY annotation_plane
+  SUBTYPE OF (annotation_occurrence, geometric_representation_item);
+  elements              : OPTIONAL SET [1 : ?] OF annotation_plane_element;
+  SELF\styled_item.item : plane_or_planar_box;
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+            TYPEOF(SELF\styled_item.item\planar_box.placement));
+  WR3: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(SELF\styled_item.item)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+         TYPEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles[1]))) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(SELF\styled_item.item)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN
+         TYPEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles[1])));
+  WR4: (SIZEOF(SELF\styled_item.styles) = 1) AND
+       (SIZEOF(SELF\styled_item.styles[1]\presentation_style_assignment.styles) = 1);
+END_ENTITY;
+
+ENTITY annotation_point_occurrence
+  SUBTYPE OF (annotation_occurrence);
+  SELF\styled_item.item : point;
+END_ENTITY;
+
+ENTITY annotation_subfigure_occurrence
+  SUBTYPE OF (annotation_symbol_occurrence);
+WHERE
+  WR1: SIZEOF(QUERY(sty <* SELF.styles | NOT (SIZEOF(sty.styles) = 1))) = 0;
+  WR2: SIZEOF(QUERY(sty
+                    <* SELF.styles
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NULL_STYLE' IN TYPEOF(sty.styles[1])))) =
+       0;
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(SELF.item));
+  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SUBFIGURE_REPRESENTATION' IN
+        TYPEOF(SELF.item\mapped_item.mapping_source.mapped_representation));
+END_ENTITY;
+
+ENTITY annotation_symbol
+  SUBTYPE OF (mapped_item);
+  SELF\mapped_item.mapping_source : symbol_representation_map;
+  SELF\mapped_item.mapping_target : symbol_target;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY annotation_symbol_occurrence
+  SUBTYPE OF (annotation_occurrence);
+  SELF\styled_item.item : annotation_symbol_occurrence_item;
+END_ENTITY;
+
+ENTITY annotation_text
+  SUBTYPE OF (mapped_item);
+  SELF\mapped_item.mapping_target : axis2_placement;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STRING_REPRESENTATION' IN
+       TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY annotation_text_character
+  SUBTYPE OF (mapped_item);
+  alignment                       : text_alignment;
+  SELF\mapped_item.mapping_target : axis2_placement;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTER_GLYPH_SYMBOL' IN
+       TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY annotation_text_occurrence
+  SUBTYPE OF (annotation_occurrence);
+  SELF\styled_item.item : annotation_text_occurrence_item;
+END_ENTITY;
+
+ENTITY ap242_assignment_object_relationship
+  SUBTYPE OF (assignment_object_relationship);
+  SELF\assignment_object_relationship.related  : ap242_assignment_object_select;
+  SELF\assignment_object_relationship.relating : ap242_assignment_object_select;
+END_ENTITY;
+
+ENTITY apex
+  SUBTYPE OF (derived_shape_aspect);
+END_ENTITY;
+
+ENTITY application_context;
+  application : label;
+DERIVE
+  description : text       := get_description_value(SELF);
+  id          : identifier := get_id_value(SELF);
+INVERSE
+  context_elements : SET [1:?] OF application_context_element FOR frame_of_reference;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY application_context_element
+  SUPERTYPE OF (ONEOF(product_concept_context, product_context, product_definition_context));
+  name               : label;
+  frame_of_reference : application_context;
+END_ENTITY;
+
+ENTITY application_protocol_definition;
+  status                                    : label;
+  application_interpreted_model_schema_name : label;
+  application_protocol_year                 : year_number;
+  application                               : application_context;
+END_ENTITY;
+
+ENTITY applied_action_assignment
+  SUBTYPE OF (action_assignment);
+  items : SET [1 : ?] OF action_items;
+END_ENTITY;
+
+ENTITY applied_action_method_assignment
+  SUBTYPE OF (action_method_assignment);
+  items : SET [1 : ?] OF action_method_items;
+END_ENTITY;
+
+ENTITY applied_action_request_assignment
+  SUBTYPE OF (action_request_assignment);
+  items : SET [1 : ?] OF action_request_item;
+END_ENTITY;
+
+ENTITY applied_approval_assignment
+  SUBTYPE OF (approval_assignment);
+  items : SET [1 : ?] OF approval_item;
+END_ENTITY;
+
+ENTITY applied_area
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT ({2 <= SIZEOF(impl_rep.used_representation.items) <= 3})))) =
+                             0)))) =
+        0);
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | (SIZEOF(QUERY(pdr
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                       TYPEOF(pdr.used_representation)) AND
+                                      (SIZEOF(QUERY(srwp_i
+                                                    <* pdr.used_representation.items
+                                                    | NOT (srwp_i.name IN
+                                                           ['orientation','effective length','maximum length']))) >
+                                       0))) =
+                       0))) =
+       0;
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'effective length')))) =
+                                                  1)))) =
+                             0)))) <=
+        1);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'maximum length')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY applied_attribute_classification_assignment
+  SUBTYPE OF (attribute_classification_assignment);
+  SELF\attribute_classification_assignment.assigned_class : class;
+  items                                                   : SET [1 : ?] OF attribute_classification_item;
+END_ENTITY;
+
+ENTITY applied_certification_assignment
+  SUBTYPE OF (certification_assignment);
+  items : SET [1 : ?] OF certification_item;
+END_ENTITY;
+
+ENTITY applied_classification_assignment
+  SUBTYPE OF (classification_assignment);
+  items : SET [1 : ?] OF classification_item;
+END_ENTITY;
+
+ENTITY applied_classification_assignment_relationship
+  SUBTYPE OF (classification_assignment_relationship);
+  SELF\classification_assignment_relationship.related  : applied_classification_assignment;
+  SELF\classification_assignment_relationship.relating : applied_classification_assignment;
+END_ENTITY;
+
+ENTITY applied_contract_assignment
+  SUBTYPE OF (contract_assignment);
+  items : SET [1 : ?] OF contract_item;
+END_ENTITY;
+
+ENTITY applied_date_and_time_assignment
+  SUBTYPE OF (date_and_time_assignment);
+  items : SET [1 : ?] OF date_and_time_item;
+END_ENTITY;
+
+ENTITY applied_date_assignment
+  SUBTYPE OF (date_assignment);
+  items : SET [1 : ?] OF date_item;
+END_ENTITY;
+
+ENTITY applied_description_text_assignment
+  SUBTYPE OF (description_text_assignment);
+  items : SET [1 : ?] OF description_item;
+END_ENTITY;
+
+ENTITY applied_description_text_assignment_relationship
+  SUBTYPE OF (description_text_assignment_relationship);
+  SELF\description_text_assignment_relationship.related  : applied_description_text_assignment;
+  SELF\description_text_assignment_relationship.relating : applied_description_text_assignment;
+END_ENTITY;
+
+ENTITY applied_directed_action_assignment
+  SUBTYPE OF (directed_action_assignment);
+  items : SET [1 : ?] OF action_request_item;
+END_ENTITY;
+
+ENTITY applied_document_reference
+  SUBTYPE OF (document_reference);
+  items : SET [1 : ?] OF document_reference_item;
+END_ENTITY;
+
+ENTITY applied_document_usage_constraint_assignment
+  SUBTYPE OF (document_usage_constraint_assignment);
+  items : SET [1 : ?] OF document_reference_item;
+END_ENTITY;
+
+ENTITY applied_effectivity_assignment
+  SUBTYPE OF (effectivity_assignment);
+  items : SET [1 : ?] OF effectivity_item;
+END_ENTITY;
+
+ENTITY applied_event_occurrence_assignment
+  SUBTYPE OF (event_occurrence_assignment);
+  items : SET [1 : ?] OF event_occurrence_item;
+END_ENTITY;
+
+ENTITY applied_external_identification_assignment
+  SUBTYPE OF (external_identification_assignment);
+  items : SET [1 : ?] OF external_identification_item;
+END_ENTITY;
+
+ENTITY applied_external_identification_assignment_relationship
+  SUBTYPE OF (external_identification_assignment_relationship);
+  SELF\external_identification_assignment_relationship.related  : applied_external_identification_assignment;
+  SELF\external_identification_assignment_relationship.relating : applied_external_identification_assignment;
+END_ENTITY;
+
+ENTITY applied_group_assignment
+  SUBTYPE OF (group_assignment);
+  items : SET [1 : ?] OF groupable_item;
+END_ENTITY;
+
+ENTITY applied_identification_assignment
+  SUBTYPE OF (identification_assignment);
+  items : SET [1 : ?] OF identification_item;
+END_ENTITY;
+
+ENTITY applied_ineffectivity_assignment
+  SUBTYPE OF (effectivity_assignment);
+  items : SET [1 : ?] OF effectivity_item;
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOT_EFFECTIVITY',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SERIAL_NUMBERED_EFFECTIVITY',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_EFFECTIVITY'] *
+              TYPEOF(SELF.assigned_effectivity)) =
+       0;
+END_ENTITY;
+
+ENTITY applied_location_assignment
+  SUBTYPE OF (location_assignment);
+  items : SET [1 : ?] OF location_item;
+END_ENTITY;
+
+ENTITY applied_location_representation_assignment
+  SUBTYPE OF (location_representation_assignment);
+  items : SET [1 : ?] OF location_representation_item;
+END_ENTITY;
+
+ENTITY applied_name_assignment
+  SUBTYPE OF (name_assignment);
+  item : name_item;
+END_ENTITY;
+
+ENTITY applied_organization_assignment
+  SUBTYPE OF (organization_assignment);
+  items : SET [1 : ?] OF organization_item;
+END_ENTITY;
+
+ENTITY applied_organization_type_assignment
+  SUBTYPE OF (organization_type_assignment);
+  items : SET [1 : ?] OF organization_type_item;
+END_ENTITY;
+
+ENTITY applied_organizational_project_assignment
+  SUBTYPE OF (organizational_project_assignment);
+  items : SET [1 : ?] OF project_item;
+END_ENTITY;
+
+ENTITY applied_person_and_organization_assignment
+  SUBTYPE OF (person_and_organization_assignment);
+  items : SET [1 : ?] OF person_and_organization_item;
+END_ENTITY;
+
+ENTITY applied_presented_item
+  SUBTYPE OF (presented_item);
+  items : SET [1 : ?] OF presented_item_select;
+END_ENTITY;
+
+ENTITY applied_security_classification_assignment
+  SUBTYPE OF (security_classification_assignment);
+  items : SET [1 : ?] OF security_classification_item;
+END_ENTITY;
+
+ENTITY applied_state_observed_assignment
+  SUBTYPE OF (state_observed_assignment);
+  items : SET [1 : ?] OF state_observed_of_item;
+END_ENTITY;
+
+ENTITY applied_state_type_assignment
+  SUBTYPE OF (state_type_assignment);
+  items : SET [1 : ?] OF state_type_of_item;
+END_ENTITY;
+
+ENTITY applied_time_interval_assignment
+  SUBTYPE OF (time_interval_assignment);
+  items : SET [0 : ?] OF time_interval_item;
+END_ENTITY;
+
+ENTITY applied_usage_right
+  SUBTYPE OF (action_assignment);
+  items : SET [1 : ?] OF ir_usage_item;
+END_ENTITY;
+
+ENTITY approval;
+  status : approval_status;
+  level  : label;
+END_ENTITY;
+
+ENTITY approval_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_approval : approval;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY approval_date_time;
+  date_time      : date_time_select;
+  dated_approval : approval;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY approval_person_organization;
+  person_organization : person_organization_select;
+  authorized_approval : approval;
+  role                : approval_role;
+END_ENTITY;
+
+ENTITY approval_relationship;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_approval : approval;
+  related_approval  : approval;
+END_ENTITY;
+
+ENTITY approval_role;
+  role : label;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY approval_status;
+  name : label;
+END_ENTITY;
+
+ENTITY area_in_set;
+  area   : presentation_area;
+  in_set : presentation_set;
+END_ENTITY;
+
+ENTITY area_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY area_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+END_ENTITY;
+
+ENTITY area_with_outer_boundary
+  SUBTYPE OF (half_space_2d);
+  SELF\half_space_2d.base_curve : composite_curve;
+WHERE
+  WR1: base_curve\composite_curve.closed_curve = true;
+END_ENTITY;
+
+ENTITY array_placement_group
+  SUPERTYPE OF (ONEOF(linear_array_placement_group_component, rectangular_array_placement_group_component))
+  SUBTYPE OF (assembly_group_component);
+END_ENTITY;
+
+ENTITY ascribable_state;
+  name                    : label;
+  description             : OPTIONAL text;
+  pertaining_state_type   : state_type;
+  ascribed_state_observed : state_observed;
+END_ENTITY;
+
+ENTITY ascribable_state_relationship;
+  name                      : label;
+  description               : OPTIONAL text;
+  relating_ascribable_state : ascribable_state;
+  related_ascribable_state  : ascribable_state;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY asin_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY assembly_bond_definition
+    SUBTYPE OF ( shape_aspect );
+    UNIQUE
+      ur1 : SELF\shape_aspect.name;
+END_ENTITY;
+
+ENTITY assembly_joint
+  SUBTYPE OF (component_feature_joint);
+WHERE
+  WR1: acyclic_shape_aspect_relationship(SELF, [SELF\shape_aspect_relationship.related_shape_aspect],
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_JOINT');
+END_ENTITY;
+
+ENTITY component_mating_constraint_condition
+    SUBTYPE OF ( shape_aspect );
+    UNIQUE
+      ur1 : SELF\shape_aspect.name, SELF\shape_aspect.of_shape;
+END_ENTITY;
+
+ENTITY connection_zone_based_assembly_joint
+    SUBTYPE OF ( assembly_joint );
+END_ENTITY;
+
+ENTITY assembly_component
+  SUBTYPE OF (component_definition, product_definition_shape);
+DERIVE
+  SELF\property_definition.definition : assembly_component := SELF;
+WHERE
+  WR1: NOT EXISTS(SELF\property_definition.description);
+END_ENTITY;
+
+ENTITY assembly_component_usage
+  SUPERTYPE OF (quantified_assembly_component_usage ANDOR
+                ONEOF(multi_level_reference_designator, next_assembly_usage_occurrence, promissory_usage_occurrence,
+                      specified_higher_usage_occurrence))
+  SUBTYPE OF (product_definition_usage);
+  reference_designator : OPTIONAL identifier;
+END_ENTITY;
+
+ENTITY assembly_component_usage_substitute;
+  name       : label;
+  definition : OPTIONAL text;
+  base       : assembly_component_usage;
+  substitute : assembly_component_usage;
+UNIQUE
+  UR1: base, substitute;
+WHERE
+  WR1: base.relating_product_definition :=: substitute.relating_product_definition;
+  WR2: base :<>: substitute;
+END_ENTITY;
+
+ENTITY assembly_geometric_constraint
+  ABSTRACT SUPERTYPE OF (ONEOF(binary_assembly_constraint, fixed_constituent_assembly_constraint))
+  SUBTYPE OF (explicit_constraint);
+END_ENTITY;
+
+ENTITY assembly_group_component
+  SUBTYPE OF (assembly_component);
+END_ENTITY;
+
+ENTITY assembly_group_component_definition_placement_link
+  SUBTYPE OF (product_definition, product_definition_relationship);
+  SELF\product_definition_relationship.relating_product_definition : assembly_component;
+  SELF\product_definition_relationship.related_product_definition  : assembly_component;
+WHERE
+  WR1: SELF\product_definition_relationship.related_product_definition :<>:
+       SELF\product_definition_relationship.relating_product_definition;
+  WR2: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition],
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_GROUP_COMPONENT_DEFINITION_PLACEMENT_LINK');
+END_ENTITY;
+
+ENTITY assembly_shape_constraint
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY assembly_shape_constraint_item_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : assembly_shape_constraint;
+END_ENTITY;
+
+ENTITY assembly_shape_joint
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY assembly_shape_joint_item_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : assembly_shape_joint;
+END_ENTITY;
+
+ENTITY assigned_analysis
+  SUBTYPE OF (group_assignment);
+  items                                : SET [1 : 1] OF product_definition_formation;
+  SELF\group_assignment.assigned_group : analysis_assignment;
+END_ENTITY;
+
+ENTITY assigned_requirement
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : requirement_assignment;
+  items                                : SET [1 : 1] OF product_definition;
+END_ENTITY;
+
+ENTITY assignment_object_relationship;
+  id            : OPTIONAL identifier;
+  description   : OPTIONAL text;
+  relating      : assignment_object_select;
+  related       : assignment_object_select;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_assignment_object_relationship(SELF, [related],
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSIGNMENT_OBJECT_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY atan_function
+  SUBTYPE OF (binary_function_call);
+END_ENTITY;
+
+ENTITY atom_based_literal
+  SUBTYPE OF (generic_literal);
+  lit_value : atom_based_value;
+END_ENTITY;
+
+ENTITY atomic_formula
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY attachment_slot_as_planned
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY attachment_slot_as_realized
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY attachment_slot_design
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY attachment_slot_design_to_planned
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_design;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : attachment_slot_as_planned;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY attachment_slot_design_to_realized
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_design;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : attachment_slot_as_realized;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY attachment_slot_on_product
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY attachment_slot_planned_to_realized
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : attachment_slot_as_planned;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : attachment_slot_as_realized;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY attribute_assertion
+  SUBTYPE OF (fact_type, property_definition_representation, representation);
+END_ENTITY;
+
+ENTITY attribute_classification_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_class : group;
+  attribute_name : label;
+  role           : classification_role;
+END_ENTITY;
+
+ENTITY attribute_language_assignment
+  SUBTYPE OF (attribute_classification_assignment);
+  SELF\attribute_classification_assignment.assigned_class : language;
+  items                                                   : SET [1 : ?] OF attribute_language_item;
+WHERE
+  WR1: SELF\attribute_classification_assignment.role.name IN ['primary','translated'];
+  WR2: SELF\attribute_classification_assignment.attribute_name <> '';
+END_ENTITY;
+
+ENTITY attribute_value_assignment
+  ABSTRACT SUPERTYPE;
+  attribute_name  : label;
+  attribute_value : attribute_type;
+  role            : attribute_value_role;
+END_ENTITY;
+
+ENTITY attribute_value_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY auxiliary_geometric_representation_item
+  SUBTYPE OF (geometric_representation_item, variational_representation_item);
+END_ENTITY;
+
+ENTITY axis1_placement
+  SUBTYPE OF (placement);
+  axis : OPTIONAL direction;
+DERIVE
+  z : direction := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0]));
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY axis2_placement_2d
+  SUBTYPE OF (placement);
+  ref_direction : OPTIONAL direction;
+DERIVE
+  p : LIST [2 : 2] OF direction := build_2axes(ref_direction);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY axis2_placement_3d
+  SUBTYPE OF (placement);
+  axis          : OPTIONAL direction;
+  ref_direction : OPTIONAL direction;
+DERIVE
+  p : LIST [3 : 3] OF direction := build_axes(axis, ref_direction);
+WHERE
+  WR1: SELF\placement.location.dim = 3;
+  WR2: (NOT (EXISTS(axis))) OR (axis.dim = 3);
+  WR3: (NOT (EXISTS(ref_direction))) OR (ref_direction.dim = 3);
+  WR4: (NOT (EXISTS(axis))) OR (NOT (EXISTS(ref_direction))) OR (cross_product(axis, ref_direction).magnitude > 0.0);
+END_ENTITY;
+
+ENTITY b_spline_basis
+  SUBTYPE OF (maths_function, generic_literal);
+  degree         : nonnegative_integer;
+  repeated_knots : LIST [2 : ?] OF REAL;
+DERIVE
+  order     : positive_integer := degree + 1;
+  num_basis : positive_integer := SIZEOF(repeated_knots) - order;
+WHERE
+  WR1: num_basis >= order;
+  WR2: nondecreasing(repeated_knots);
+  WR3: repeated_knots[order] < repeated_knots[num_basis + 1];
+END_ENTITY;
+
+ENTITY b_spline_curve
+  SUPERTYPE OF (ONEOF(uniform_curve, b_spline_curve_with_knots, quasi_uniform_curve, bezier_curve) ANDOR
+                rational_b_spline_curve)
+  SUBTYPE OF (bounded_curve);
+  degree              : INTEGER;
+  control_points_list : LIST [2 : ?] OF cartesian_point;
+  curve_form          : b_spline_curve_form;
+  closed_curve        : LOGICAL;
+  self_intersect      : LOGICAL;
+DERIVE
+  upper_index_on_control_points : INTEGER                                                      := (SIZEOF(control_points_list) -
+                                                                                                   1);
+  control_points                : ARRAY [0 : upper_index_on_control_points] OF cartesian_point := list_to_array(control_points_list,
+                                                                                                                0,
+                                                                                                                upper_index_on_control_points);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_CURVE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_CURVE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_CURVE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY b_spline_curve_knot_locator
+  SUBTYPE OF (founded_item);
+  basis_curve : b_spline_curve;
+  knot_index  : INTEGER;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY b_spline_curve_segment
+  SUBTYPE OF (founded_item);
+  basis_curve      : b_spline_curve;
+  start_knot_index : INTEGER;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY b_spline_curve_with_knots
+  SUBTYPE OF (b_spline_curve);
+  knot_multiplicities : LIST [2 : ?] OF INTEGER;
+  knots               : LIST [2 : ?] OF parameter_value;
+  knot_spec           : knot_type;
+DERIVE
+  upper_index_on_knots : INTEGER := SIZEOF(knots);
+WHERE
+  WR1: constraints_param_b_spline(degree, upper_index_on_knots, upper_index_on_control_points, knot_multiplicities,
+                                  knots);
+  WR2: SIZEOF(knot_multiplicities) = upper_index_on_knots;
+END_ENTITY;
+
+ENTITY b_spline_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  basis                                 : LIST [1 : ?] OF b_spline_basis;
+DERIVE
+  coef : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: function_is_table(coef);
+  WR2: (space_dimension(coef.range) = 1) AND (number_superspace_of(factor1(coef.range)) = the_reals);
+  WR3: SIZEOF(basis) <= SIZEOF(shape_of_array(coef));
+  WR4: compare_basis_and_coef(basis, coef);
+END_ENTITY;
+
+ENTITY b_spline_surface
+  SUPERTYPE OF (ONEOF(b_spline_surface_with_knots, uniform_surface, quasi_uniform_surface, bezier_surface) ANDOR
+                rational_b_spline_surface)
+  SUBTYPE OF (bounded_surface);
+  u_degree            : INTEGER;
+  v_degree            : INTEGER;
+  control_points_list : LIST [2 : ?] OF LIST [2 : ?] OF cartesian_point;
+  surface_form        : b_spline_surface_form;
+  u_closed            : LOGICAL;
+  v_closed            : LOGICAL;
+  self_intersect      : LOGICAL;
+DERIVE
+  u_upper        : INTEGER                                                       := SIZEOF(control_points_list) - 1;
+  v_upper        : INTEGER                                                       := SIZEOF(control_points_list[1]) - 1;
+  control_points : ARRAY [0 : u_upper] OF ARRAY [0 : v_upper] OF cartesian_point := make_array_of_array(control_points_list,
+                                                                                                        0, u_upper, 0,
+                                                                                                        v_upper);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_SURFACE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_SURFACE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY b_spline_surface_knot_locator
+  SUBTYPE OF (founded_item);
+  basis_surface     : b_spline_surface;
+  knot_index        : INTEGER;
+  surface_parameter : u_or_v_parameter;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY b_spline_surface_patch
+  SUBTYPE OF (founded_item);
+  basis_surface      : b_spline_surface;
+  u_start_knot_index : INTEGER;
+  v_start_knot_index : INTEGER;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY b_spline_surface_strip
+  SUBTYPE OF (founded_item);
+  basis_surface     : b_spline_surface;
+  start_knot_index  : INTEGER;
+  surface_parameter : u_or_v_parameter;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY b_spline_surface_with_knots
+  SUBTYPE OF (b_spline_surface);
+  u_multiplicities : LIST [2 : ?] OF INTEGER;
+  v_multiplicities : LIST [2 : ?] OF INTEGER;
+  u_knots          : LIST [2 : ?] OF parameter_value;
+  v_knots          : LIST [2 : ?] OF parameter_value;
+  knot_spec        : knot_type;
+DERIVE
+  knot_u_upper : INTEGER := SIZEOF(u_knots);
+  knot_v_upper : INTEGER := SIZEOF(v_knots);
+WHERE
+  WR1: constraints_param_b_spline(SELF\b_spline_surface.u_degree, knot_u_upper, SELF\b_spline_surface.u_upper,
+                                  u_multiplicities, u_knots);
+  WR2: constraints_param_b_spline(SELF\b_spline_surface.v_degree, knot_v_upper, SELF\b_spline_surface.v_upper,
+                                  v_multiplicities, v_knots);
+  WR3: SIZEOF(u_multiplicities) = knot_u_upper;
+  WR4: SIZEOF(v_multiplicities) = knot_v_upper;
+END_ENTITY;
+
+ENTITY b_spline_volume
+  SUPERTYPE OF (ONEOF(b_spline_volume_with_knots, uniform_volume, quasi_uniform_volume, bezier_volume) ANDOR
+                rational_b_spline_volume)
+  SUBTYPE OF (volume);
+  u_degree            : INTEGER;
+  v_degree            : INTEGER;
+  w_degree            : INTEGER;
+  control_points_list : LIST [2 : ?] OF LIST [2 : ?] OF LIST [2 : ?] OF cartesian_point;
+DERIVE
+  u_upper        : INTEGER                                                                              := SIZEOF(control_points_list) -
+                                                                                                           1;
+  v_upper        : INTEGER                                                                              := SIZEOF(control_points_list[1]) -
+                                                                                                           1;
+  w_upper        : INTEGER                                                                              := SIZEOF(control_points_list[1][1]) -
+                                                                                                           1;
+  control_points : ARRAY [0 : u_upper] OF ARRAY [0 : v_upper] OF ARRAY [0 : w_upper] OF cartesian_point := make_array_of_array_of_array(control_points_list,
+                                                                                                                                        0,
+                                                                                                                                        u_upper,
+                                                                                                                                        0,
+                                                                                                                                        v_upper,
+                                                                                                                                        0,
+                                                                                                                                        w_upper);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEZIER_VOLUME' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNIFORM_VOLUME' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUASI_UNIFORM_VOLUME' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_VOLUME_WITH_KNOTS' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY b_spline_volume_with_knots
+  SUBTYPE OF (b_spline_volume);
+  u_multiplicities : LIST [2 : ?] OF INTEGER;
+  v_multiplicities : LIST [2 : ?] OF INTEGER;
+  w_multiplicities : LIST [2 : ?] OF INTEGER;
+  u_knots          : LIST [2 : ?] OF parameter_value;
+  v_knots          : LIST [2 : ?] OF parameter_value;
+  w_knots          : LIST [2 : ?] OF parameter_value;
+DERIVE
+  knot_u_upper : INTEGER := SIZEOF(u_knots);
+  knot_v_upper : INTEGER := SIZEOF(v_knots);
+  knot_w_upper : INTEGER := SIZEOF(w_knots);
+WHERE
+  WR1: constraints_param_b_spline(SELF\b_spline_volume.u_degree, knot_u_upper, SELF\b_spline_volume.u_upper,
+                                  u_multiplicities, u_knots);
+  WR2: constraints_param_b_spline(SELF\b_spline_volume.v_degree, knot_v_upper, SELF\b_spline_volume.v_upper,
+                                  v_multiplicities, v_knots);
+  WR3: constraints_param_b_spline(SELF\b_spline_volume.w_degree, knot_w_upper, SELF\b_spline_volume.w_upper,
+                                  w_multiplicities, w_knots);
+  WR4: SIZEOF(u_multiplicities) = knot_u_upper;
+  WR5: SIZEOF(v_multiplicities) = knot_v_upper;
+  WR6: SIZEOF(w_multiplicities) = knot_w_upper;
+END_ENTITY;
+
+ENTITY back_chaining_rule
+  SUBTYPE OF (rule_definition);
+END_ENTITY;
+
+ENTITY back_chaining_rule_body
+  SUBTYPE OF (property_definition, property_definition_representation, representation);
+END_ENTITY;
+
+ENTITY background_colour
+  SUBTYPE OF (colour);
+  presentation : area_or_view;
+UNIQUE
+  UR1: presentation;
+END_ENTITY;
+
+ENTITY banded_matrix
+  SUBTYPE OF (linearized_table_function);
+  default_entry : maths_value;
+  below         : INTEGER;
+  above         : INTEGER;
+  order         : ordering_type;
+WHERE
+  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
+  WR2: -below <= above;
+  WR3: member_of(default_entry, factor1(SELF\linearized_table_function.source.range));
+END_ENTITY;
+
+ENTITY barring_hole
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'hole profile') AND (sa.description = 'closed profile occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'profile usage') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                              TYPEOF(sar.relating_shape_aspect)) =
+                                       1))) =
+                       1))) =
+       1;
+  WR2: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'barring profile') AND (sa.description = 'closed profile occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'profile usage'))) =
+                       1))) =
+       1;
+  WR3: (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation))) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       {1 <= SIZEOF(pdr.used_representation.items) <= 2})) =
+        1);
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | NOT (i.name IN ['orientation','base radius']))) >
+                       0))) =
+       0;
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'base radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) <>
+                       1))) =
+       0;
+END_ENTITY;
+
+ENTITY basic_sparse_matrix
+  SUBTYPE OF (explicit_table_function, multiple_arity_generic_expression);
+  SELF\multiple_arity_generic_expression.operands : LIST [3 : 3] OF maths_function;
+  default_entry                                   : maths_value;
+  order                                           : ordering_type;
+DERIVE
+  index : maths_function := SELF\multiple_arity_generic_expression.operands[1];
+  loc   : maths_function := SELF\multiple_arity_generic_expression.operands[2];
+  val   : maths_function := SELF\multiple_arity_generic_expression.operands[3];
+WHERE
+  WR1: function_is_1d_table(index);
+  WR2: function_is_1d_table(loc);
+  WR3: function_is_1d_table(val);
+  WR4: check_sparse_index_domain(index.domain, index_base, shape, order);
+  WR5: check_sparse_index_to_loc(index.range, loc.domain);
+  WR6: loc.domain = val.domain;
+  WR7: check_sparse_loc_range(loc.range, index_base, shape, order);
+  WR8: member_of(default_entry, val.range);
+END_ENTITY;
+
+ENTITY bead
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation))) <=
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(pdr.used_representation.items) > 2))) =
+        0);
+  WR2: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | NOT (i.name IN ['orientation','base radius']))) >
+                       0))) =
+       0;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'base radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) >
+                       1))) =
+       0;
+  WR4: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'sweep path') AND (sa.description = 'path feature component occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'path feature component usage') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1))) =
+       1;
+  WR5: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'bead profile') AND (sa.description = 'open profile occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'profile usage') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE'] *
+                                              TYPEOF(sar.relating_shape_aspect)) =
+                                       1))) =
+                       1))) =
+       1;
+  WR6: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'end condition') AND (sa.description = 'bead end occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.name = 'bead end usage') AND (sar.description = 'starting') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD_END' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1))) =
+       1;
+  WR7: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'end condition') AND (sa.description = 'bead end occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.name = 'bead end usage') AND (sar.description = 'ending') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD_END' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1))) =
+       1;
+END_ENTITY;
+
+ENTITY bead_end
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['linear','open','radiused'];
+  WR3: (SELF.description <> 'linear') XOR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)))) >
+        0);
+  WR4: (SELF.description <> 'linear') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(pdr.used_representation.items) = 2))) =
+        1);
+  WR5: (SELF.description <> 'linear') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'end length') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) =
+        1);
+  WR6: (SELF.description <> 'linear') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'end shape') AND
+                                       (i\descriptive_representation_item.description IN ['straight','tapered']) AND
+                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                        TYPEOF(i)))) =
+                        1))) =
+        1);
+  WR7: SIZEOF(QUERY(sar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                       TYPEOF(sar)) AND
+                      (sar.name = 'bead end usage') AND (sar.description IN ['starting','ending']) AND
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEAD' IN
+                       TYPEOF(sar.related_shape_aspect.of_shape.definition)) AND
+                      (sar.related_shape_aspect.of_shape.definition\characterized_object.name = 'end condition') AND
+                      (sar.related_shape_aspect.of_shape.definition\characterized_object.description =
+                       'bead end occurrence'))) =
+       1;
+END_ENTITY;
+
+ENTITY between_shape_aspect
+  SUBTYPE OF (continuous_shape_aspect);
+WHERE
+  WR1: SIZEOF(QUERY(sar
+                    <* SELF\composite_shape_aspect.component_relationships
+                    | sar\shape_aspect_relationship.name = 'start feature')) =
+       1;
+  WR2: SIZEOF(QUERY(sar
+                    <* SELF\composite_shape_aspect.component_relationships
+                    | sar\shape_aspect_relationship.name = 'end feature')) =
+       1;
+END_ENTITY;
+
+ENTITY beveled_sheet_representation
+  SUBTYPE OF (shape_representation);
+END_ENTITY;
+
+ENTITY bezier_curve
+  SUBTYPE OF (b_spline_curve);
+END_ENTITY;
+
+ENTITY bezier_surface
+  SUBTYPE OF (b_spline_surface);
+END_ENTITY;
+
+ENTITY bezier_volume
+  SUBTYPE OF (b_spline_volume);
+END_ENTITY;
+
+ENTITY binary_assembly_constraint
+  ABSTRACT SUPERTYPE OF (ONEOF(parallel_assembly_constraint, surface_distance_assembly_constraint_with_dimension,
+                               angle_assembly_constraint_with_dimension, perpendicular_assembly_constraint,
+                               incidence_assembly_constraint, coaxial_assembly_constraint, tangent_assembly_constraint))
+  SUBTYPE OF (assembly_geometric_constraint, representation_relationship_with_transformation);
+  SELF\representation_relationship.rep_1 : representative_shape_representation;
+  SELF\representation_relationship.rep_2 : representative_shape_representation;
+WHERE
+  WR1: (SELF\explicit_constraint.constrained_elements[1]\geometric_representation_item.dim = 3) AND
+       (SELF\explicit_constraint.reference_elements[1]\geometric_representation_item.dim = 3);
+  WR2: (SELF\representation_relationship.rep_1 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND
+       (SELF\representation_relationship.rep_2 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
+  WR3: (SIZEOF(SELF\explicit_constraint.constrained_elements) = 1) AND
+       (SIZEOF(SELF\explicit_constraint.reference_elements) = 1);
+  WR4: (SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1 =
+        SELF\explicit_constraint.reference_elements[1]) AND
+       (SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2 =
+        SELF\explicit_constraint.constrained_elements[1]);
+END_ENTITY;
+
+ENTITY binary_boolean_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(xor_expression, equals_expression))
+  SUBTYPE OF (boolean_expression, binary_generic_expression);
+END_ENTITY;
+
+ENTITY binary_function_call
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY binary_generic_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (generic_expression);
+  operands : LIST [2 : 2] OF generic_expression;
+END_ENTITY;
+
+ENTITY binary_numeric_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(minus_expression, div_expression, mod_expression, slash_expression, power_expression,
+                               binary_function_call))
+  SUBTYPE OF (numeric_expression, binary_generic_expression);
+  SELF\binary_generic_expression.operands : LIST [2 : 2] OF numeric_expression;
+END_ENTITY;
+
+ENTITY block
+  SUBTYPE OF (geometric_representation_item);
+  position : axis2_placement_3d;
+  x        : positive_length_measure;
+  y        : positive_length_measure;
+  z        : positive_length_measure;
+END_ENTITY;
+
+ENTITY block_volume
+  SUBTYPE OF (volume);
+  position : axis2_placement_3d;
+  x        : positive_length_measure;
+  y        : positive_length_measure;
+  z        : positive_length_measure;
+END_ENTITY;
+
+ENTITY boolean_defined_function
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (defined_function, boolean_expression);
+END_ENTITY;
+
+ENTITY boolean_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(simple_boolean_expression, unary_boolean_expression, binary_boolean_expression,
+                               multiple_arity_boolean_expression, comparison_expression, interval_expression,
+                               boolean_defined_function))
+  SUBTYPE OF (expression);
+END_ENTITY;
+
+ENTITY boolean_literal
+  SUBTYPE OF (simple_boolean_expression, generic_literal);
+  the_value : BOOLEAN;
+END_ENTITY;
+
+ENTITY boolean_representation_item
+  SUBTYPE OF (representation_item, boolean_literal);
+END_ENTITY;
+
+ENTITY boolean_result
+  SUBTYPE OF (geometric_representation_item);
+  operator       : boolean_operator;
+  first_operand  : boolean_operand;
+  second_operand : boolean_operand;
+END_ENTITY;
+
+ENTITY boolean_result_2d
+  SUBTYPE OF (boolean_result);
+  SELF\boolean_result.first_operand  : boolean_operand_2d;
+  SELF\boolean_result.second_operand : boolean_operand_2d;
+END_ENTITY;
+
+ENTITY boolean_variable
+  SUBTYPE OF (simple_boolean_expression, variable);
+END_ENTITY;
+
+ENTITY boss
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SELF\characterized_object.description IN ['circular','complex','rectangular'];
+  WR2: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                               TYPEOF(pd))
+                    | NOT (SIZEOF(QUERY(sa_occ
+                                        <* USEDIN(pds,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                        | (sa_occ.description = 'boss height occurrence') AND
+                                          (SIZEOF(QUERY(sdr
+                                                        <* QUERY(sar
+                                                                 <* USEDIN(sa_occ,
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                 | (sar.description =
+                                                                    'path feature component usage') AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                    TYPEOF(sar)))
+                                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                           TYPEOF(sdr.relating_shape_aspect)) AND
+                                                          (sdr.relating_shape_aspect.description = 'linear') AND
+                                                          (sdr.name = 'boss height'))) =
+                                           1))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     ({1 <= SIZEOF(pdr.used_representation.items) <= 2}))) =
+                      1)) =
+       1;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR
+                                                     (srwp_i.name = 'fillet radius'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'fillet radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+  WR6: (NOT (SELF\characterized_object.description = 'circular')) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (sa_occ.description = 'circular profile occurrence') AND
+                                           (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN
+                                                           TYPEOF(sdr.relating_shape_aspect))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR7: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd)))
+                    | (NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | ((sa_occ.description = 'top condition occurrence') AND
+                                            (SIZEOF(QUERY(fcr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | ((sar.description = 'boss top usage') AND
+                                                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                       TYPEOF(sar))))
+                                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS_TOP' IN
+                                                              TYPEOF(fcr.relating_shape_aspect))))) =
+                                             1)))) =
+                            1)))) =
+       0;
+  WR8: (NOT (SELF\characterized_object.description = 'circular')) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (sa_occ.description = 'change in diameter occurrence') AND
+                                           (SIZEOF(QUERY(fcr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'taper usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                             TYPEOF(fcr.related_shape_aspect)) AND
+                                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN
+                                                             TYPEOF(fcr.relating_shape_aspect))))) =
+                                            1))) <=
+                            1))) =
+        0);
+  WR9: (NOT (SELF\characterized_object.description = 'complex')) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (sa_occ.description = 'enclosed boundary occurrence') AND
+                                           (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                                                  TYPEOF(sdr.relating_shape_aspect)) =
+                                                           1)) =
+                                            1))) =
+                            1))) =
+        0);
+  WR10: (NOT (SELF\characterized_object.description IN ['complex','rectangular'])) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description = 'change in boundary occurrence') AND
+                                            (SIZEOF(QUERY(fcr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                   | (sar.description = 'taper usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                              TYPEOF(fcr.related_shape_aspect)) AND
+                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN
+                                                              TYPEOF(fcr.relating_shape_aspect)) AND
+                                                             (fcr.related_shape_aspect.description IN
+                                                              ['angle taper','directed taper'])))) =
+                                             1))) <=
+                             1))) =
+         0);
+  WR11: (NOT (SELF\characterized_object.description = 'rectangular')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description = 'rectangular profile occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | (sar.description = 'profile usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN
+                                                            TYPEOF(sdr.relating_shape_aspect))) =
+                                             1))) =
+                             1))) =
+         0);
+  WR12: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (pdr.used_representation.name = 'maximum feature limit'))) >=
+        0;
+END_ENTITY;
+
+ENTITY boss_top
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SELF.description IN ['planar','complex']);
+  WR3: ((NOT (SELF.description = 'planar')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION') IN
+                                              TYPEOF(pdr.used_representation)))) =
+                              1)))) =
+         0));
+  WR4: ((NOT (SELF.description = 'planar')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION') IN
+                                              TYPEOF(pdr.used_representation)))) =
+                              1)))) =
+         0));
+  WR5: (NOT (SELF.description = 'complex')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION') IN
+                                            TYPEOF(pdr.used_representation))) =
+                             1)))) =
+        0);
+  WR6: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | ((sar.description = 'boss top usage') AND
+                                 (sar.name IN ['boss height start','boss height end'])) AND
+                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                 TYPEOF(sar)))
+                     | ((fcr.related_shape_aspect.description = 'top condition occurrence') AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS' IN
+                         TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS_TOP' IN
+                         TYPEOF(fcr.relating_shape_aspect))))) >=
+        1);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) <=
+                             1)))) =
+        0);
+  WR8: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR9: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'top radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY bound_parameter_environment
+  SUBTYPE OF (environment);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_VARIATIONAL_PARAMETER' IN
+        TYPEOF(SELF\environment.syntactic_representation)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_ATTRIBUTE_REFERENCE' IN
+        TYPEOF(SELF\environment.semantics));
+END_ENTITY;
+
+ENTITY bound_variable_semantics
+  SUBTYPE OF (variable_semantics);
+END_ENTITY;
+
+ENTITY bound_variational_parameter
+  SUBTYPE OF (variational_parameter);
+DERIVE
+  SELF\variational_parameter.parameter_current_value : maths_value := ?;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_PARAMETER_ENVIRONMENT' IN
+       TYPEOF(SELF\generic_variable.interpretation);
+END_ENTITY;
+
+ENTITY boundary_curve
+  SUBTYPE OF (composite_curve_on_surface);
+WHERE
+  WR1: SELF\composite_curve.closed_curve;
+END_ENTITY;
+
+ENTITY boundary_curve_of_b_spline_or_rectangular_composite_surface
+  SUBTYPE OF (founded_item);
+  basis_surface : b_spline_or_rectangular_composite_surface_select;
+  boundary_type : surface_boundary_type;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY bounded_curve
+  SUPERTYPE OF (ONEOF(polyline, b_spline_curve, trimmed_curve, bounded_pcurve, bounded_surface_curve, composite_curve,
+                      locally_refined_spline_curve))
+  SUBTYPE OF (curve);
+END_ENTITY;
+
+ENTITY bounded_pcurve
+  SUBTYPE OF (pcurve, bounded_curve);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN
+        TYPEOF(SELF\pcurve.reference_to_curve.items[1]));
+END_ENTITY;
+
+ENTITY bounded_surface
+  SUPERTYPE OF (ONEOF(b_spline_surface, rectangular_trimmed_surface, curve_bounded_surface,
+                      rectangular_composite_surface, locally_refined_spline_surface))
+  SUBTYPE OF (surface);
+END_ENTITY;
+
+ENTITY bounded_surface_curve
+  SUBTYPE OF (surface_curve, bounded_curve);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN TYPEOF(SELF\surface_curve.curve_3d));
+END_ENTITY;
+
+ENTITY box_domain
+  SUBTYPE OF (founded_item);
+  corner  : cartesian_point;
+  xlength : positive_length_measure;
+  ylength : positive_length_measure;
+  zlength : positive_length_measure;
+WHERE
+  WR1: SIZEOF(QUERY(item
+                    <* USEDIN(SELF, '')
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOXED_HALF_SPACE' IN TYPEOF(item)))) =
+       0;
+END_ENTITY;
+
+ENTITY boxed_half_space
+  SUBTYPE OF (half_space_solid);
+  enclosure : box_domain;
+END_ENTITY;
+
+ENTITY breakdown_context
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY breakdown_element_group_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_definition_element_relationship;
+  items                                : SET [1 : 1] OF product_definition_or_breakdown_element_usage;
+END_ENTITY;
+
+ENTITY breakdown_element_realization
+  SUBTYPE OF (characterized_object, product_definition_element_relationship);
+END_ENTITY;
+
+ENTITY breakdown_element_usage
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY breakdown_of
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY brep_with_voids
+  SUBTYPE OF (manifold_solid_brep);
+  voids : SET [1 : ?] OF oriented_closed_shell;
+END_ENTITY;
+
+ENTITY calendar_date
+  SUBTYPE OF (date);
+  day_component   : day_in_month_number;
+  month_component : month_in_year_number;
+WHERE
+  WR1: valid_calendar_date(SELF);
+END_ENTITY;
+
+ENTITY camera_image
+  SUPERTYPE OF (ONEOF(camera_image_2d_with_scale, camera_image_3d_with_scale))
+  SUBTYPE OF (mapped_item);
+  SELF\mapped_item.mapping_source : camera_usage;
+  SELF\mapped_item.mapping_target : planar_box;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY camera_image_2d_with_scale
+  SUBTYPE OF (camera_image);
+DERIVE
+  scale : positive_ratio_measure := (SELF\mapped_item.mapping_target\planar_extent.size_in_x) /
+                                    (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window\planar_extent.size_in_x);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D2' IN
+        TYPEOF(SELF\mapped_item.mapping_source.mapping_origin));
+  WR2: aspect_ratio(SELF\mapped_item.mapping_target) =
+       aspect_ratio(SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window);
+  WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window_clipping;
+END_ENTITY;
+
+ENTITY camera_image_3d_with_scale
+  SUBTYPE OF (camera_image);
+DERIVE
+  scale : positive_ratio_measure := ((SELF\mapped_item.mapping_target\planar_extent.size_in_x) /
+                                     (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_x));
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3' IN
+        TYPEOF(SELF\mapped_item.mapping_source.mapping_origin));
+  WR2: aspect_ratio(SELF\mapped_item.mapping_target) =
+       aspect_ratio(SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window);
+  WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.front_plane_clipping AND
+       SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_volume_sides_clipping;
+  WR4: (SELF\mapped_item.mapping_target\planar_extent.size_in_x > 0) AND
+       (SELF\mapped_item.mapping_target\planar_extent.size_in_y > 0);
+  WR5: (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_x >
+        0) AND
+       (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.perspective_of_volume.view_window.size_in_y > 0);
+  WR6: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+        TYPEOF(SELF\mapped_item.mapping_target\planar_box.placement)) AND
+       NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+            TYPEOF(SELF\mapped_item.mapping_target\planar_box.placement));
+END_ENTITY;
+
+ENTITY camera_model
+  ABSTRACT SUPERTYPE OF (ONEOF(camera_model_d2, camera_model_d3))
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: (SIZEOF(USEDIN(SELF,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION.TRANSFORM_ITEM_1')) +
+        SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPING_ORIGIN'))) >
+       0;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')) = 0;
+END_ENTITY;
+
+ENTITY camera_model_d2
+  SUBTYPE OF (camera_model);
+  view_window          : planar_box;
+  view_window_clipping : BOOLEAN;
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY camera_model_d3
+  SUBTYPE OF (camera_model);
+  view_reference_system : axis2_placement_3d;
+  perspective_of_volume : view_volume;
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY camera_model_d3_multi_clipping
+  SUBTYPE OF (camera_model_d3);
+  shape_clipping : SET [1 : ?] OF camera_model_d3_multi_clipping_intersection_select;
+END_ENTITY;
+
+ENTITY camera_model_d3_multi_clipping_intersection
+  SUBTYPE OF (geometric_representation_item);
+  shape_clipping : SET [2 : ?] OF camera_model_d3_multi_clipping_intersection_select;
+END_ENTITY;
+
+ENTITY camera_model_d3_multi_clipping_union
+  SUBTYPE OF (geometric_representation_item);
+  shape_clipping : SET [2 : ?] OF camera_model_d3_multi_clipping_union_select;
+END_ENTITY;
+
+ENTITY camera_model_d3_with_hlhsr
+  SUBTYPE OF (camera_model_d3);
+  hidden_line_surface_removal : BOOLEAN;
+END_ENTITY;
+
+ENTITY camera_model_with_light_sources
+  SUBTYPE OF (camera_model_d3);
+  sources : SET [1 : ?] OF light_source;
+END_ENTITY;
+
+ENTITY camera_usage
+  SUBTYPE OF (representation_map);
+  SELF\representation_map.mapping_origin : camera_model;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN
+            TYPEOF(SELF\representation_map.mapped_representation));
+END_ENTITY;
+
+ENTITY capacitance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAPACITANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY capacitance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.farad);
+END_ENTITY;
+
+ENTITY cartesian_11
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY cartesian_complex_number_region
+  SUBTYPE OF (maths_space, generic_literal);
+  real_constraint : real_interval;
+  imag_constraint : real_interval;
+WHERE
+  WR1: min_exists(real_constraint) OR max_exists(real_constraint) OR min_exists(imag_constraint) OR
+       max_exists(imag_constraint);
+END_ENTITY;
+
+ENTITY cartesian_point
+  SUPERTYPE OF (ONEOF(cylindrical_point, polar_point, spherical_point))
+  SUBTYPE OF (point);
+  coordinates : LIST [1 : 3] OF length_measure;
+END_ENTITY;
+
+ENTITY cartesian_transformation_operator
+  SUPERTYPE OF (ONEOF(cartesian_transformation_operator_2d, cartesian_transformation_operator_3d))
+  SUBTYPE OF (geometric_representation_item, functionally_defined_transformation);
+  axis1        : OPTIONAL direction;
+  axis2        : OPTIONAL direction;
+  local_origin : cartesian_point;
+  scale        : OPTIONAL REAL;
+DERIVE
+  scl : REAL := NVL(scale, 1.0);
+WHERE
+  WR1: scl > 0.0;
+END_ENTITY;
+
+ENTITY cartesian_transformation_operator_2d
+  SUBTYPE OF (cartesian_transformation_operator);
+DERIVE
+  u : LIST [2 : 2] OF direction := base_axis(2, SELF\cartesian_transformation_operator.axis1,
+                                             SELF\cartesian_transformation_operator.axis2, ?);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY cartesian_transformation_operator_3d
+  SUBTYPE OF (cartesian_transformation_operator);
+  axis3 : OPTIONAL direction;
+DERIVE
+  u : LIST [3 : 3] OF direction := base_axis(3, SELF\cartesian_transformation_operator.axis1,
+                                             SELF\cartesian_transformation_operator.axis2, axis3);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY cc_design_approval
+  SUBTYPE OF (approval_assignment);
+  items : SET [1 : ?] OF approved_item;
+END_ENTITY;
+
+ENTITY cc_design_certification
+  SUBTYPE OF (certification_assignment);
+  items : SET [1 : ?] OF certified_item;
+END_ENTITY;
+
+ENTITY cc_design_contract
+  SUBTYPE OF (contract_assignment);
+  items : SET [1 : ?] OF contracted_item;
+END_ENTITY;
+
+ENTITY cc_design_date_and_time_assignment
+  SUBTYPE OF (date_and_time_assignment);
+  items : SET [1 : ?] OF date_time_item;
+END_ENTITY;
+
+ENTITY cc_design_person_and_organization_assignment
+  SUBTYPE OF (person_and_organization_assignment);
+  items : SET [1 : ?] OF cc_person_organization_item;
+WHERE
+  WR1: cc_design_person_and_organization_correlation(SELF);
+END_ENTITY;
+
+ENTITY cc_design_security_classification
+  SUBTYPE OF (security_classification_assignment);
+  items : SET [1 : ?] OF cc_classified_item;
+END_ENTITY;
+
+ENTITY cc_design_specification_reference
+  SUBTYPE OF (document_reference);
+  items : SET [1 : ?] OF cc_specified_item;
+END_ENTITY;
+
+ENTITY cdgc_with_dimension
+  SUBTYPE OF (curve_distance_geometric_constraint);
+  distance_value : non_negative_length_measure;
+END_ENTITY;
+
+ENTITY celsius_temperature_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THERMODYNAMIC_TEMPERATURE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY centre_of_symmetry
+  SUBTYPE OF (derived_shape_aspect);
+END_ENTITY;
+
+ENTITY certification;
+  name    : label;
+  purpose : text;
+  kind    : certification_type;
+END_ENTITY;
+
+ENTITY certification_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_certification : certification;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY certification_type;
+  description : label;
+END_ENTITY;
+
+ENTITY chain_based_geometric_item_specific_usage
+  SUBTYPE OF (geometric_item_specific_usage, chain_based_item_identified_representation_usage);
+END_ENTITY;
+
+ENTITY chain_based_item_identified_representation_usage
+  SUBTYPE OF (item_identified_representation_usage);
+  nodes           : LIST [2 : ?] OF UNIQUE representation;
+  undirected_link : LIST [1 : ?] OF chained_representation_link;
+DERIVE
+  root          : representation                              := nodes[1];
+  directed_link : LIST [1 : ?] OF representation_relationship := get_directed_link(nodes, undirected_link);
+  leaf          : representation                              := SELF\item_identified_representation_usage.used_representation;
+WHERE
+  WR1: EXISTS(directed_link);
+END_ENTITY;
+
+ENTITY chamfer
+  SUBTYPE OF (transition_feature);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'chamfer face')))) <=
+                             1)))) =
+        0);
+  WR2: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                 TYPEOF(sar)))
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN
+                         TYPEOF(fcr.related_shape_aspect)) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN
+                         TYPEOF(fcr.relating_shape_aspect)) AND
+                        (fcr.related_shape_aspect.description = 'first offset')))) =
+        1);
+  WR3: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                 TYPEOF(sar)))
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN
+                         TYPEOF(fcr.related_shape_aspect)) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN
+                         TYPEOF(fcr.relating_shape_aspect)) AND
+                        (fcr.related_shape_aspect.description = 'second offset')))) =
+        1);
+END_ENTITY;
+
+ENTITY chamfer_offset
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: (SELF.description IN ['first offset','second offset']);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR4: ((NOT (SELF.description = 'first offset')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'offset amount')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR5: ((NOT (SELF.description = 'first offset')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                               TYPEOF(pdr.used_representation)) AND
+                                              (pdr.used_representation.name = 'first face shape')))) <=
+                              1)))) =
+         0));
+  WR6: ((NOT (SELF.description = 'second offset')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'offset amount')) OR
+                                                                   ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'offset angle'))))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT (SELF.description = 'second offset')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                               TYPEOF(pdr.used_representation)) AND
+                                              (pdr.used_representation.name = 'second face shape')))) <=
+                              1)))) =
+         0));
+  WR8: (SIZEOF(QUERY(sdr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                 TYPEOF(sar)))
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER' IN
+                         TYPEOF(sdr.relating_shape_aspect)) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER_OFFSET' IN
+                         TYPEOF(sdr.related_shape_aspect))))) =
+        1);
+END_ENTITY;
+
+ENTITY change
+  SUBTYPE OF (action_assignment);
+  items : SET [1 : ?] OF work_item;
+END_ENTITY;
+
+ENTITY change_composition_relationship
+  SUBTYPE OF (group_relationship);
+  SELF\group_relationship.relating_group : change_group;
+  SELF\group_relationship.related_group  : change_element;
+DERIVE
+  composition : change_group   := SELF\group_relationship.relating_group;
+  element     : change_element := SELF\group_relationship.related_group;
+END_ENTITY;
+
+ENTITY change_element
+  ABSTRACT SUPERTYPE OF (ONEOF(modify_element, delete_element, add_element))
+  SUBTYPE OF (group, characterized_object);
+END_ENTITY;
+
+ENTITY change_element_sequence
+  SUBTYPE OF (group_relationship);
+  SELF\group_relationship.relating_group : change_element;
+  SELF\group_relationship.related_group  : change_element;
+DERIVE
+  next     : change_element := SELF\group_relationship.related_group;
+  previous : change_element := SELF\group_relationship.relating_group;
+END_ENTITY;
+
+ENTITY change_group
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY change_group_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : change_group;
+  item                                 : change_relationship_select;
+END_ENTITY;
+
+ENTITY change_request
+  SUBTYPE OF (action_request_assignment);
+  items : SET [1 : ?] OF change_request_item;
+END_ENTITY;
+
+ENTITY character_glyph_font_usage;
+  character : generic_character_glyph_symbol;
+  font      : text_font;
+END_ENTITY;
+
+ENTITY character_glyph_style_outline
+  SUBTYPE OF (founded_item);
+  outline_style : curve_style;
+END_ENTITY;
+
+ENTITY character_glyph_style_stroke
+  SUBTYPE OF (founded_item);
+  stroke_style : curve_style;
+END_ENTITY;
+
+ENTITY character_glyph_symbol
+  SUBTYPE OF (generic_character_glyph_symbol);
+  character_box  : planar_extent;
+  baseline_ratio : ratio_measure;
+DERIVE
+  box_height : length_measure := character_box.size_in_y;
+WHERE
+  WR1: {0.0 <= baseline_ratio <= 1.0};
+  WR2: item_in_context(character_box, SELF\representation.context_of_items);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(box_height);
+END_ENTITY;
+
+ENTITY character_glyph_symbol_outline
+  SUBTYPE OF (character_glyph_symbol);
+  outlines : SET [1 : ?] OF annotation_fill_area;
+WHERE
+  WR1: outlines <= SELF\representation.items;
+END_ENTITY;
+
+ENTITY character_glyph_symbol_stroke
+  SUBTYPE OF (character_glyph_symbol);
+  strokes : SET [1 : ?] OF curve;
+WHERE
+  WR1: strokes <= SELF\representation.items;
+END_ENTITY;
+
+ENTITY characteristic_data_column_header
+  SUBTYPE OF (general_property);
+END_ENTITY;
+
+ENTITY characteristic_data_column_header_link
+  SUBTYPE OF (general_property_relationship);
+END_ENTITY;
+
+ENTITY characteristic_data_table_header
+  SUBTYPE OF (general_property);
+END_ENTITY;
+
+ENTITY characteristic_data_table_header_decomposition
+  SUBTYPE OF (general_property_relationship);
+END_ENTITY;
+
+ENTITY characteristic_type
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY characterized_chain_based_item_within_representation
+  SUBTYPE OF (characterized_item_within_representation);
+  nodes           : LIST [2 : ?] OF UNIQUE representation;
+  undirected_link : LIST [1 : ?] OF chained_representation_link;
+DERIVE
+  root          : representation                              := nodes[1];
+  directed_link : LIST [1 : ?] OF representation_relationship := get_directed_link(nodes, undirected_link);
+  leaf          : representation                              := SELF\characterized_item_within_representation.rep;
+WHERE
+  WR1: EXISTS(directed_link);
+END_ENTITY;
+
+ENTITY characterized_class
+  SUBTYPE OF (characterized_object, class);
+END_ENTITY;
+
+ENTITY characterized_item_within_representation
+  SUBTYPE OF (characterized_object);
+  item : representation_item;
+  rep  : representation;
+UNIQUE
+  UR1: item, rep;
+WHERE
+  WR1: rep IN using_representations(item);
+END_ENTITY;
+
+ENTITY characterized_location_object
+  SUBTYPE OF (characterized_object, location);
+END_ENTITY;
+
+ENTITY characterized_object;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY characterized_object_relationship;
+  name            : label;
+  description     : OPTIONAL text;
+  relating_object : characterized_object;
+  related_object  : characterized_object;
+END_ENTITY;
+
+ENTITY characterized_product_concept_feature
+  SUBTYPE OF (product_concept_feature, characterized_object);
+END_ENTITY;
+
+ENTITY characterized_product_concept_feature_category
+  SUBTYPE OF (product_concept_feature_category, characterized_object);
+END_ENTITY;
+
+ENTITY characterized_representation
+  SUBTYPE OF (representation, characterized_object);
+DERIVE
+  SELF\characterized_object.name        : label := SELF\representation.name;
+  SELF\characterized_object.description : text  := SELF\representation.description;
+END_ENTITY;
+
+ENTITY circle
+  SUBTYPE OF (conic);
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY circular_area
+  SUBTYPE OF (primitive_2d);
+  centre : cartesian_point;
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY circular_closed_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | NOT (SIZEOF(QUERY(it
+                                                              <* impl_rep.used_representation.items
+                                                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                  TYPEOF(it)) AND
+                                                                 (it.name = 'orientation')))) =
+                                                 1))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'diameter')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY circular_involute
+  SUBTYPE OF (curve);
+  position    : axis2_placement;
+  base_radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY circular_path
+  SUBTYPE OF (path_node);
+  via_point : cartesian_point;
+END_ENTITY;
+
+ENTITY circular_pattern
+  SUBTYPE OF (replicate_feature);
+WHERE
+  WR1: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                    | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                              TYPEOF(sdr.related_shape_aspect)))) =
+                                              1)))) <=
+                             3)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND
+                                                  (SIZEOF(impl_rep.used_representation.items) <= 5))))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'diameter')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'base feature rotation')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                   TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                  (it.name = 'number of features')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'angular spacing')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR8: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY circular_runout_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY class
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY class_by_extension
+  SUBTYPE OF (class);
+END_ENTITY;
+
+ENTITY class_by_intension
+  SUBTYPE OF (class);
+END_ENTITY;
+
+ENTITY class_system
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY class_usage_effectivity_context_assignment
+  SUBTYPE OF (effectivity_context_assignment);
+  items : SET [1 : ?] OF class_usage_effectivity_context_item;
+WHERE
+  WR1: SELF.role.name = 'class usage influence';
+  WR2: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)))) =
+       0;
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EFFECTIVITY_ASSIGNMENT' IN
+        TYPEOF(SELF.assigned_effectivity_assignment)) AND
+       (SIZEOF(TYPEOF(SELF.assigned_effectivity_assignment.assigned_effectivity)) = 1) AND
+       (SELF.assigned_effectivity_assignment.assigned_effectivity.id = 'class usage') AND
+       (SIZEOF(QUERY(i
+                     <* SELF.assigned_effectivity_assignment\applied_effectivity_assignment.items
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE' IN
+                            TYPEOF(i)))) =
+        0);
+END_ENTITY;
+
+ENTITY classification_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_class : group;
+  role           : classification_role;
+END_ENTITY;
+
+ENTITY classification_assignment_relationship;
+  id            : OPTIONAL identifier;
+  description   : OPTIONAL text;
+  relating      : classification_assignment;
+  related       : classification_assignment;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_classification_assignment_relationship(SELF, [related],
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFICATION_ASSIGNMENT_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY classification_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY clgc_with_dimension
+  SUBTYPE OF (curve_length_geometric_constraint);
+  length_value : positive_length_measure;
+END_ENTITY;
+
+ENTITY closed_curve_style_parameters
+  SUBTYPE OF (curve_style_parameters_representation);
+END_ENTITY;
+
+ENTITY closed_path_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+END_ENTITY;
+
+ENTITY closed_shell
+  SUBTYPE OF (connected_face_set);
+END_ENTITY;
+
+ENTITY clothoid
+  SUBTYPE OF (curve);
+  position          : axis2_placement;
+  clothoid_constant : length_measure;
+END_ENTITY;
+
+ENTITY coaxial_assembly_constraint
+  SUBTYPE OF (binary_assembly_constraint, coaxial_geometric_constraint);
+END_ENTITY;
+
+ENTITY coaxial_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF axial_geometry_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF axial_geometry_constraint_element;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\explicit_constraint.reference_elements
+                    | SIZEOF(TYPEOF(q) *
+                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERE']) >
+                      0)) =
+       0;
+END_ENTITY;
+
+ENTITY coaxiality_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY collection
+  SUBTYPE OF (product);
+END_ENTITY;
+
+ENTITY collection_assignment
+  SUBTYPE OF (applied_group_assignment);
+END_ENTITY;
+
+ENTITY collection_membership
+  SUBTYPE OF (applied_group_assignment);
+END_ENTITY;
+
+ENTITY collection_relationship
+  SUBTYPE OF (product_relationship);
+  SELF\product_relationship.relating_product : collection;
+  SELF\product_relationship.related_product  : collection;
+DERIVE
+  related_collection  : collection := SELF\product_relationship.related_product;
+  relating_collection : collection := SELF\product_relationship.relating_product;
+END_ENTITY;
+
+ENTITY collection_version
+  SUBTYPE OF (product_definition_formation);
+  SELF\product_definition_formation.of_product : collection;
+DERIVE
+  of_collection : collection := SELF\product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY collection_version_relationship
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : collection_version;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : collection_version;
+DERIVE
+  related_version  : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
+  relating_version : collection_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+END_ENTITY;
+
+ENTITY collection_version_sequence_relationship
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : collection_version;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : collection_version;
+DERIVE
+  predecessor : collection_version := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+  successor   : collection_version := SELF\product_definition_formation_relationship.related_product_definition_formation;
+END_ENTITY;
+
+ENTITY collection_view_definition
+  SUBTYPE OF (product_definition);
+  SELF\product_definition.formation : collection_version;
+DERIVE
+  defined_version : collection_version := SELF\product_definition.formation;
+END_ENTITY;
+
+ENTITY colour;
+END_ENTITY;
+
+ENTITY colour_rgb
+  SUBTYPE OF (colour_specification);
+  red   : REAL;
+  green : REAL;
+  blue  : REAL;
+WHERE
+  WR1: {0.0 <= red <= 1.0};
+  WR2: {0.0 <= green <= 1.0};
+  WR3: {0.0 <= blue <= 1.0};
+END_ENTITY;
+
+ENTITY colour_specification
+  SUBTYPE OF (colour);
+  name : label;
+END_ENTITY;
+
+ENTITY common_datum
+  SUBTYPE OF (composite_shape_aspect, datum);
+WHERE
+  WR1: SIZEOF(SELF\composite_shape_aspect.component_relationships) = 2;
+  WR2: SIZEOF(QUERY(sar
+                    <* SELF\composite_shape_aspect.component_relationships
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN
+                            TYPEOF(sar.related_shape_aspect)) AND
+                           NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM' IN
+                                TYPEOF(sar.related_shape_aspect))))) =
+       0;
+END_ENTITY;
+
+ENTITY comparison_equal
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY comparison_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(comparison_equal, comparison_greater, comparison_greater_equal, comparison_less,
+                               comparison_less_equal, comparison_not_equal, like_expression))
+  SUBTYPE OF (boolean_expression, binary_generic_expression);
+  SELF\binary_generic_expression.operands : LIST [2 : 2] OF expression;
+WHERE
+  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[1])) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[2]))) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[1])) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[2]))) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[1])) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN
+         TYPEOF(SELF\binary_generic_expression.operands[2])));
+END_ENTITY;
+
+ENTITY comparison_greater
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY comparison_greater_equal
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY comparison_less
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY comparison_less_equal
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY comparison_not_equal
+  SUBTYPE OF (comparison_expression);
+END_ENTITY;
+
+ENTITY complex_area
+  ABSTRACT SUPERTYPE OF (path_area_with_parameters ANDOR primitive_2d_with_inner_boundary)
+  SUBTYPE OF (primitive_2d);
+END_ENTITY;
+
+ENTITY complex_clause
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY complex_conjunctive_clause
+  SUBTYPE OF (complex_clause);
+END_ENTITY;
+
+ENTITY complex_disjunctive_clause
+  SUBTYPE OF (complex_clause);
+END_ENTITY;
+
+ENTITY complex_number_literal
+  SUBTYPE OF (generic_literal);
+  real_part : REAL;
+  imag_part : REAL;
+END_ENTITY;
+
+ENTITY complex_number_literal_polar
+  SUBTYPE OF (complex_number_literal);
+  modulus  : REAL;
+  argument : REAL;
+DERIVE
+  SELF\complex_number_literal.real_part : REAL := modulus * COS(argument);
+  SELF\complex_number_literal.imag_part : REAL := modulus * SIN(argument);
+WHERE
+  WR1: modulus >= 0;
+  WR2: {0 <= argument <= 2 * PI};
+END_ENTITY;
+
+ENTITY complex_shelled_solid
+  SUBTYPE OF (shelled_solid);
+  thickened_face_list : LIST [1 : ?] OF SET [1 : ?] OF face_surface;
+  thickness_list      : LIST [1 : ?] OF length_measure;
+WHERE
+  WR1: SIZEOF(thickened_face_list) = SIZEOF(thickness_list);
+  WR2: SIZEOF(QUERY(q <* thickness_list | (q = 0))) = 0;
+END_ENTITY;
+
+ENTITY complex_triangulated_face
+  SUBTYPE OF (tessellated_face);
+  pnindex         : LIST [0 : ?] OF INTEGER;
+  triangle_strips : LIST [0 : ?] OF LIST [3 : ?] OF INTEGER;
+  triangle_fans   : LIST [0 : ?] OF LIST [3 : ?] OF INTEGER;
+WHERE
+  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
+  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> coordinates.npoints));
+  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
+END_ENTITY;
+
+ENTITY complex_triangulated_surface_set
+  SUBTYPE OF (tessellated_surface_set);
+  pnindex         : LIST [0 : ?] OF INTEGER;
+  triangle_strips : LIST [0 : ?] OF LIST [3 : ?] OF INTEGER;
+  triangle_fans   : LIST [0 : ?] OF LIST [3 : ?] OF INTEGER;
+WHERE
+  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
+  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> coordinates.npoints));
+  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
+END_ENTITY;
+
+ENTITY component_definition
+  SUBTYPE OF (product_definition, product_definition_relationship);
+DERIVE
+  SELF\product_definition_relationship.related_product_definition : component_definition := SELF;
+WHERE
+  WR1: NOT EXISTS(SELF\product_definition_relationship.description);
+  WR2: NOT EXISTS(SELF\property_definition.description);
+  WR3: SELF\product_definition_relationship.id = SELF\product_definition.id;
+  WR4: SELF\product_definition_relationship.name = 'definition usage';
+  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY component_feature
+  SUBTYPE OF (shape_aspect);
+  SELF\shape_aspect.of_shape : assembly_component;
+END_ENTITY;
+
+ENTITY component_feature_joint
+  SUBTYPE OF (shape_aspect_relationship, shape_aspect);
+  SELF\shape_aspect_relationship.relating_shape_aspect : component_feature;
+  SELF\shape_aspect_relationship.related_shape_aspect  : component_feature;
+END_ENTITY;
+
+ENTITY component_feature_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : component_feature;
+  SELF\shape_aspect_relationship.related_shape_aspect  : component_feature;
+WHERE
+  WR1: SELF\shape_aspect_relationship.related_shape_aspect :<>: SELF\shape_aspect_relationship.relating_shape_aspect;
+END_ENTITY;
+
+ENTITY component_path_shape_aspect
+  SUBTYPE OF (shape_aspect);
+  location               : multi_or_next_assembly_usage_occurrence;
+  component_shape_aspect : internal_or_reflected_shape_aspect;
+UNIQUE
+  UR1: location, component_shape_aspect;
+END_ENTITY;
+
+ENTITY component_terminal
+  SUBTYPE OF (component_feature);
+END_ENTITY;
+
+ENTITY composite_assembly_sequence_definition
+  SUBTYPE OF (product_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
+                      TYPEOF(pdr))) >
+       0;
+END_ENTITY;
+
+ENTITY composite_curve
+  SUBTYPE OF (bounded_curve);
+  segments       : LIST [1 : ?] OF composite_curve_segment;
+  self_intersect : LOGICAL;
+DERIVE
+  n_segments   : INTEGER := SIZEOF(segments);
+  closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous;
+WHERE
+  WR1: ((NOT closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 1)) OR
+       ((closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 0));
+END_ENTITY;
+
+ENTITY composite_curve_on_surface
+  SUPERTYPE OF (boundary_curve)
+  SUBTYPE OF (composite_curve);
+DERIVE
+  basis_surface : SET [0 : 2] OF surface := get_basis_surface(SELF);
+WHERE
+  WR1: SIZEOF(basis_surface) > 0;
+  WR2: constraints_composite_curve_on_surface(SELF);
+END_ENTITY;
+
+ENTITY composite_curve_segment
+  SUBTYPE OF (founded_item);
+  transition   : transition_code;
+  same_sense   : BOOLEAN;
+  parent_curve : curve;
+INVERSE
+  using_curves : BAG [1:?] OF composite_curve FOR segments;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE' IN TYPEOF(parent_curve));
+END_ENTITY;
+
+ENTITY composite_curve_transition_locator
+  SUBTYPE OF (founded_item);
+  basis_curve      : composite_curve;
+  transition_index : INTEGER;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_curve) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY composite_group_shape_aspect
+  SUBTYPE OF (composite_shape_aspect);
+END_ENTITY;
+
+ENTITY composite_hole
+  SUBTYPE OF (compound_feature);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SELF\characterized_object.description IN ['counterbore','countersunk']);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                        (SIZEOF(QUERY(csa
+                                      <* USEDIN(pds,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                          TYPEOF(csa)) AND
+                                         (SIZEOF(QUERY(sar
+                                                       <* csa.component_relationships
+                                                       | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                            TYPEOF(sar)) AND
+                                                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN
+                                                            TYPEOF(sar.related_shape_aspect)))))) =
+                                          2)))) =
+                         1)))) =
+        1);
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       ((NOT (SELF\characterized_object.description = 'countersunk')) OR
+        (SIZEOF(QUERY(pds
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                          TYPEOF(pds)) AND
+                         (SIZEOF(QUERY(csa
+                                       <* USEDIN(pds,
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                       | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                           TYPEOF(csa)) AND
+                                          (SIZEOF(QUERY(sar
+                                                        <* csa.component_relationships
+                                                        | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN
+                                                            TYPEOF(sar.related_shape_aspect)) AND
+                                                           (NOT (SIZEOF(QUERY(pds
+                                                                              <* QUERY(pd
+                                                                                       <* USEDIN(sar.related_shape_aspect,
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                                                                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                                                                          TYPEOF(pd)))
+                                                                              | (NOT (SIZEOF(QUERY(sa_occ
+                                                                                                   <* USEDIN(pds,
+                                                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                                                                                   | ((sa_occ.description =
+                                                                                                       'change in diameter occurrence') AND
+                                                                                                      (SIZEOF(QUERY(fcr2
+                                                                                                                    <* QUERY(sar2
+                                                                                                                             <* USEDIN(sa_occ,
+                                                                                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                                                                             | ((sar2.description =
+                                                                                                                                 'taper usage') AND
+                                                                                                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                                                                                 TYPEOF(sar2))))
+                                                                                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                                                                                       TYPEOF(fcr2.related_shape_aspect)))) =
+                                                                                                       1)))) =
+                                                                                      0)))) =
+                                                                 0))))) =
+                                           1)))) =
+                          1)))) =
+         1));
+END_ENTITY;
+
+ENTITY composite_material_designation
+  SUBTYPE OF (material_designation);
+END_ENTITY;
+
+ENTITY composite_shape_aspect
+  SUPERTYPE OF (ONEOF(continuous_shape_aspect, common_datum, composite_group_shape_aspect))
+  SUBTYPE OF (shape_aspect);
+INVERSE
+  component_relationships : SET [2:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+END_ENTITY;
+
+ENTITY composite_sheet_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION'] *
+              TYPEOF(SELF)) =
+       1;
+END_ENTITY;
+
+ENTITY composite_text
+  SUBTYPE OF (geometric_representation_item);
+  collected_text : SET [2 : ?] OF text_or_character;
+WHERE
+  WR1: acyclic_composite_text(SELF, collected_text);
+END_ENTITY;
+
+ENTITY composite_text_with_associated_curves
+  SUBTYPE OF (composite_text);
+  associated_curves : SET [1 : ?] OF curve;
+END_ENTITY;
+
+ENTITY composite_text_with_blanking_box
+  SUBTYPE OF (composite_text);
+  blanking : planar_box;
+END_ENTITY;
+
+ENTITY composite_text_with_delineation
+  SUBTYPE OF (composite_text);
+  delineation : text_delineation;
+END_ENTITY;
+
+ENTITY composite_text_with_extent
+  SUBTYPE OF (composite_text);
+  extent : planar_extent;
+END_ENTITY;
+
+ENTITY composite_unit_shape_aspect
+  SUBTYPE OF (composite_shape_aspect);
+END_ENTITY;
+
+ENTITY compound_feature
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | ((csa.name = 'compound feature in solid') AND
+                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                         TYPEOF(csa))))) =
+                        1))) =
+        1);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                       TYPEOF(csa))) =
+                        1))) =
+        1);
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                        (SIZEOF(QUERY(csa
+                                      <* USEDIN(pds,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                          TYPEOF(csa)) AND
+                                         (SIZEOF(QUERY(fcr
+                                                       <* csa.component_relationships
+                                                       | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                               TYPEOF(fcr))))) =
+                                          0)))) =
+                         1)))) =
+        1);
+  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                        TYPEOF(csa)))) =
+                        1))) =
+        1);
+  WR5: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                        (SIZEOF(QUERY(csa
+                                      <* USEDIN(pds,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                          TYPEOF(csa)) AND
+                                         (SIZEOF(QUERY(sar
+                                                       <* csa.component_relationships
+                                                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THREAD' IN
+                                                          TYPEOF(sar.related_shape_aspect)))) =
+                                          0)))) =
+                         1)))) =
+        1);
+  WR6: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                        TYPEOF(csa)) AND
+                                       (SIZEOF(QUERY(sar
+                                                     <* csa.component_relationships
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_FEATURE' IN
+                                                         TYPEOF(sar.related_shape_aspect)) AND
+                                                        (sar.related_shape_aspect\characterized_object.name <>
+                                                         SELF\characterized_object.name)))) =
+                                        0))) =
+                        1))) =
+        1);
+END_ENTITY;
+
+ENTITY compound_representation_item
+  SUPERTYPE OF ((ONEOF(point_and_vector, point_array)) ANDOR
+                ((ONEOF(row_representation_item, table_representation_item))))
+  SUBTYPE OF (representation_item);
+  item_element : compound_item_definition;
+END_ENTITY;
+
+ENTITY compound_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+        TYPEOF(SELF.context_of_items)) AND
+       (SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3);
+  WR2: SIZEOF(QUERY(cbsr_i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                             TYPEOF(cbsr_i)) <>
+                      1)) =
+       0;
+  WR3: SIZEOF(QUERY(cbsr_i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(cbsr_i)) =
+                      1)) >
+       0;
+  WR4: SIZEOF(QUERY(cbsr_i
+                    <* SELF.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(cbsr_i)) AND
+                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_SHAPE_REPRESENTATION',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'] *
+                              TYPEOF(cbsr_i\mapped_item.mapping_source)) <>
+                       1))) =
+       0;
+END_ENTITY;
+
+ENTITY concat_expression
+  SUBTYPE OF (string_expression, multiple_arity_generic_expression);
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF string_expression;
+END_ENTITY;
+
+ENTITY concentricity_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY concept_feature_operator;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY concept_feature_relationship;
+  name                             : label;
+  description                      : OPTIONAL text;
+  relating_product_concept_feature : product_concept_feature;
+  related_product_concept_feature  : product_concept_feature;
+END_ENTITY;
+
+ENTITY concept_feature_relationship_with_condition
+  SUBTYPE OF (concept_feature_relationship);
+  conditional_operator : concept_feature_operator;
+END_ENTITY;
+
+ENTITY condition
+  SUBTYPE OF (action_method);
+END_ENTITY;
+
+ENTITY conditional_concept_feature
+  SUBTYPE OF (product_concept_feature);
+  condition : concept_feature_relationship_with_condition;
+END_ENTITY;
+
+ENTITY conditional_effectivity
+  SUBTYPE OF (condition, effectivity);
+END_ENTITY;
+
+ENTITY conductance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDUCTANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY conductance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.siemens);
+END_ENTITY;
+
+ENTITY configurable_item
+  SUBTYPE OF (configuration_item);
+  item_concept_feature : SET [1 : ?] OF product_concept_feature_association;
+END_ENTITY;
+
+ENTITY configuration_design;
+  configuration : configuration_item;
+  design        : configuration_design_item;
+DERIVE
+  name        : label := get_name_value(SELF);
+  description : text  := get_description_value(SELF);
+UNIQUE
+  UR1: configuration, design;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY configuration_effectivity
+  SUBTYPE OF (product_definition_effectivity);
+  configuration : configuration_design;
+UNIQUE
+  UR1: configuration, SELF\product_definition_effectivity.usage, SELF\effectivity.id;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN
+       TYPEOF(SELF\product_definition_effectivity.usage);
+END_ENTITY;
+
+ENTITY configuration_item;
+  id           : identifier;
+  name         : label;
+  description  : OPTIONAL text;
+  item_concept : product_concept;
+  purpose      : OPTIONAL label;
+END_ENTITY;
+
+ENTITY configuration_item_hierarchical_relationship
+  SUBTYPE OF (configuration_item_relationship);
+END_ENTITY;
+
+ENTITY configuration_item_relationship;
+  name                        : label;
+  description                 : OPTIONAL text;
+  relating_configuration_item : configuration_item;
+  related_configuration_item  : configuration_item;
+END_ENTITY;
+
+ENTITY configuration_item_revision_sequence
+  SUBTYPE OF (configuration_item_relationship);
+END_ENTITY;
+
+ENTITY configured_effectivity_assignment
+  SUBTYPE OF (effectivity_assignment);
+  items : SET [1 : ?] OF configured_effectivity_item;
+WHERE
+  WR1: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY'] * TYPEOF(SELF.assigned_effectivity)) =
+        1) AND
+       (SELF.assigned_effectivity.id = 'configuration validity');
+  WR2: SIZEOF(SELF.items) = 1;
+  WR3: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) OR
+                          NOT (i\product_definition.frame_of_reference.name IN
+                               ['conceptual definition',
+                                'part occurrence',
+                                'functional definition',
+                                'alternative definition']))) =
+       0;
+  WR4: SELF.role.name IN ['design','usage'];
+  WR5: (SELF.role.name <> 'design') OR
+       (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) AND
+                       (i\product_definition.frame_of_reference.name = 'part occurrence'))) =
+        0);
+  WR6: (SELF.role.name <> 'usage') OR
+       (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(i)) AND
+                       (i\product_definition.frame_of_reference.name = 'conceptual definition'))) =
+        0);
+  WR7: SELF.role.description IN ['exception','inherited','local'];
+  WR8: SIZEOF(QUERY(x
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY_CONTEXT_ASSIGNMENT.ASSIGNED_EFFECTIVITY_ASSIGNMENT')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURED_EFFECTIVITY_CONTEXT_ASSIGNMENT' IN
+                      TYPEOF(x))) =
+       1;
+END_ENTITY;
+
+ENTITY configured_effectivity_context_assignment
+  SUBTYPE OF (effectivity_context_assignment);
+  SELF\effectivity_context_assignment.assigned_effectivity_assignment : configured_effectivity_assignment;
+  items                                                               : SET [1 : ?] OF configured_effectivity_context_item;
+WHERE
+  WR1: SIZEOF(SELF.items) = 1;
+END_ENTITY;
+
+ENTITY conic
+  SUPERTYPE OF (ONEOF(circle, ellipse, hyperbola, parabola))
+  SUBTYPE OF (curve);
+  position : axis2_placement;
+END_ENTITY;
+
+ENTITY conical_stepped_hole_transition
+  SUBTYPE OF (geometric_representation_item);
+  transition_number : positive_integer;
+  cone_apex_angle   : plane_angle_measure;
+  cone_base_radius  : positive_length_measure;
+END_ENTITY;
+
+ENTITY conical_surface
+  SUBTYPE OF (elementary_surface);
+  radius     : length_measure;
+  semi_angle : plane_angle_measure;
+WHERE
+  WR1: radius >= 0.0;
+END_ENTITY;
+
+ENTITY connected_edge_set
+  SUBTYPE OF (topological_representation_item);
+  ces_edges : SET [1 : ?] OF edge;
+END_ENTITY;
+
+ENTITY connected_edge_with_length_set_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF connected_edge_with_length_set_items;
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN TYPEOF(it))) =
+       1;
+END_ENTITY;
+
+ENTITY connected_face_set
+  SUPERTYPE OF (ONEOF(closed_shell, open_shell))
+  SUBTYPE OF (topological_representation_item);
+  cfs_faces : SET [1 : ?] OF face;
+END_ENTITY;
+
+ENTITY connected_face_sub_set
+  SUBTYPE OF (connected_face_set);
+  parent_face_set : connected_face_set;
+END_ENTITY;
+
+ENTITY connected_volume_set
+  SUBTYPE OF (topological_representation_item);
+  cvs_volumes : SET [1 : ?] OF volume_with_faces;
+END_ENTITY;
+
+ENTITY connected_volume_sub_set
+  SUBTYPE OF (connected_volume_set);
+  parent_volume_set : connected_volume_set;
+END_ENTITY;
+
+ENTITY connection_zone_interface_plane_relationship
+  SUBTYPE OF (shape_aspect, shape_aspect_relationship);
+UNIQUE
+  UR1: SELF\shape_aspect_relationship.name;
+END_ENTITY;
+
+ENTITY connectivity_definition
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY connectivity_definition_item_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : connectivity_definition;
+END_ENTITY;
+
+ENTITY constant_function
+  SUBTYPE OF (maths_function, generic_literal);
+  sole_output      : maths_value;
+  source_of_domain : maths_space_or_function;
+WHERE
+  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
+  WR2: expression_is_constant(domain_from(source_of_domain));
+END_ENTITY;
+
+ENTITY constituent_shape_aspect
+  SUBTYPE OF (shape_aspect);
+  parent : shape_aspect;
+DERIVE
+  SELF\shape_aspect.of_shape : product_definition_shape := get_root_shape_aspect(SELF);
+END_ENTITY;
+
+ENTITY constrained_kinematic_motion_representation
+  SUBTYPE OF (representation_relationship_with_transformation);
+  SELF\representation_relationship.rep_1 : representative_shape_representation;
+  SELF\representation_relationship.rep_2 : representative_shape_representation;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+        TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+        TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2));
+  WR2: ((dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) =
+         3) AND
+        (dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) =
+         3));
+  WR3: (SELF\representation_relationship.rep_1 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND
+       (SELF\representation_relationship.rep_2 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
+  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_PAIR' IN
+       TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator);
+END_ENTITY;
+
+ENTITY constructive_geometry_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+        TYPEOF(SELF\representation.context_of_items)) AND
+       ({2 <= SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension <= 3});
+  WR2: SIZEOF(QUERY(cgr_i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT'] *
+                             TYPEOF(cgr_i)) <>
+                      1)) =
+       0;
+  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) > 0;
+END_ENTITY;
+
+ENTITY constructive_geometry_representation_relationship
+  SUBTYPE OF (representation_relationship);
+  SELF\representation_relationship.rep_1 : constructive_geometry_representation_or_shape_representation;
+  SELF\representation_relationship.rep_2 : constructive_geometry_representation;
+WHERE
+  WR1: (SELF.rep_1.context_of_items :=: SELF.rep_2.context_of_items) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+        TYPEOF(SELF.rep_1.context_of_items));
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION' IN
+            TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY contact_feature
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY contact_feature_definition
+  SUBTYPE OF (shape_feature_definition);
+END_ENTITY;
+
+ENTITY contact_feature_definition_fit_relationship
+  SUBTYPE OF (shape_feature_definition_fit_relationship);
+  SELF\characterized_object_relationship.relating_object : contact_feature_definition;
+  SELF\characterized_object_relationship.related_object  : contact_feature_definition;
+END_ENTITY;
+
+ENTITY contact_feature_fit_relationship
+  SUBTYPE OF (shape_feature_fit_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : contact_feature;
+  SELF\shape_aspect_relationship.related_shape_aspect  : contact_feature;
+END_ENTITY;
+
+ENTITY contact_ratio_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) = 1) AND
+       (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                               TYPEOF(i)) =
+                        1) AND
+                       (i.name = 'ratio value'))) =
+        1);
+  WR2: (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | pdr\property_definition_representation.name = 'contact ratio reference')) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | (pdr\property_definition_representation.name = 'contact ratio reference') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+                        TYPEOF(pdr\property_definition_representation.definition\property_definition.definition)))) =
+        1);
+  WR3: (SIZEOF(USEDIN(SELF,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | SIZEOF(QUERY(gpa
+                                    <* USEDIN(pdr.definition,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN
+                                       TYPEOF(gpa\general_property_association.base_definition)) AND
+                                      (gpa\general_property_association.base_definition\general_property.name =
+                                       'surface_condition'))) =
+                       1)) =
+        1);
+END_ENTITY;
+
+ENTITY contacting_feature
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: SELF\shape_aspect.product_definitional = false;
+END_ENTITY;
+
+ENTITY containing_message
+  SUBTYPE OF (group_assignment);
+  items                                : SET [1 : 1] OF structured_message;
+  SELF\group_assignment.assigned_group : message_contents_group;
+DERIVE
+  message_contents_group : message_contents_group := SELF\group_assignment.assigned_group;
+END_ENTITY;
+
+ENTITY context_dependent_invisibility
+  SUBTYPE OF (invisibility);
+  presentation_context : invisibility_context;
+END_ENTITY;
+
+ENTITY context_dependent_kinematic_link_representation;
+  representation_relation      : kinematic_link_representation_association;
+  represented_product_relation : product_definition_relationship_kinematics;
+END_ENTITY;
+
+ENTITY context_dependent_over_riding_styled_item
+  SUBTYPE OF (over_riding_styled_item);
+  style_context : LIST [1 : ?] OF style_context_select;
+WHERE
+  WR1: (SIZEOF(QUERY(sc
+                     <* style_context
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(sc))) =
+        1) OR
+       (SIZEOF(QUERY(sc
+                     <* style_context
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(sc)) OR
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN
+                        TYPEOF(sc)) OR
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP' IN
+                        TYPEOF(sc)))) =
+        SIZEOF(style_context));
+END_ENTITY;
+
+ENTITY context_dependent_shape_representation;
+  representation_relation      : shape_representation_relationship;
+  represented_product_relation : product_definition_shape;
+DERIVE
+  description : text  := get_description_value(SELF);
+  name        : label := get_name_value(SELF);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP' IN
+       TYPEOF(SELF.represented_product_relation.definition);
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY context_dependent_unit
+  SUBTYPE OF (named_unit);
+  name : label;
+END_ENTITY;
+
+ENTITY continuous_shape_aspect
+  SUPERTYPE OF (ONEOF(between_shape_aspect, all_around_shape_aspect))
+  SUBTYPE OF (composite_shape_aspect);
+END_ENTITY;
+
+ENTITY contract;
+  name    : label;
+  purpose : text;
+  kind    : contract_type;
+END_ENTITY;
+
+ENTITY contract_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_contract : contract;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY contract_relationship;
+  id                : identifier;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_contract : contract;
+  related_contract  : contract;
+END_ENTITY;
+
+ENTITY contract_type;
+  description : label;
+END_ENTITY;
+
+ENTITY conversion_based_unit
+  SUBTYPE OF (named_unit);
+  name              : label;
+  conversion_factor : measure_with_unit;
+WHERE
+  WR1: SELF\named_unit.dimensions = derive_dimensional_exponents(conversion_factor\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY convex_hexahedron
+  SUBTYPE OF (faceted_primitive);
+WHERE
+  WR1: SIZEOF(points) = 8;
+  WR2: above_plane(points[1], points[2], points[3], points[4]) = 0.0;
+  WR3: above_plane(points[5], points[8], points[7], points[6]) = 0.0;
+  WR4: above_plane(points[1], points[4], points[8], points[5]) = 0.0;
+  WR5: above_plane(points[4], points[3], points[7], points[8]) = 0.0;
+  WR6: above_plane(points[3], points[2], points[6], points[7]) = 0.0;
+  WR7: above_plane(points[1], points[5], points[6], points[2]) = 0.0;
+  WR8: same_side([points[1],points[2],points[3]], [points[5],points[6],points[7],points[8]]);
+  WR9: same_side([points[1],points[4],points[8]], [points[3],points[7],points[6],points[2]]);
+  WR10: same_side([points[1],points[2],points[5]], [points[3],points[7],points[8],points[4]]);
+  WR11: same_side([points[5],points[6],points[7]], [points[1],points[2],points[3],points[4]]);
+  WR12: same_side([points[3],points[7],points[6]], [points[1],points[4],points[8],points[5]]);
+  WR13: same_side([points[3],points[7],points[8]], [points[1],points[5],points[6],points[2]]);
+END_ENTITY;
+
+ENTITY coordinated_universal_time_offset;
+  hour_offset   : INTEGER;
+  minute_offset : OPTIONAL INTEGER;
+  sense         : ahead_or_behind;
+DERIVE
+  actual_minute_offset : INTEGER := NVL(minute_offset, 0);
+WHERE
+  WR1: {0 <= hour_offset < 24};
+  WR2: {0 <= actual_minute_offset <= 59};
+  WR3: NOT (((hour_offset <> 0) OR (actual_minute_offset <> 0)) AND (sense = exact));
+END_ENTITY;
+
+ENTITY coordinates_list
+  SUBTYPE OF (tessellated_item);
+  npoints         : INTEGER;
+  position_coords : LIST [1 : ?] OF LIST [3 : 3] OF REAL;
+WHERE
+  WR1: npoints = SIZEOF(position_coords);
+  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPOSITIONED_TESSELLATED_ITEM'] * TYPEOF(SELF)) = 0;
+END_ENTITY;
+
+ENTITY cos_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY counterbore_hole_definition
+  SUBTYPE OF (explicit_composite_hole);
+  counterbore                     : LIST [1 : ?] OF UNIQUE explicit_round_hole;
+  drilled_hole_depth              : OPTIONAL positive_length_measure_with_unit;
+  drilled_hole_depth_tolerance    : OPTIONAL tolerance_value;
+  drilled_hole_diameter           : positive_length_measure_with_unit;
+  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
+  through_hole                    : BOOLEAN;
+WHERE
+  WR1: through_hole XOR EXISTS(drilled_hole_depth);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
+  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
+  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
+END_ENTITY;
+
+ENTITY counterbore_hole_occurrence
+  SUBTYPE OF (shape_aspect_occurrence);
+  SELF\shape_aspect_occurrence.definition : counterbore_hole_definition;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY counterbore_hole_occurrence_in_assembly
+  SUBTYPE OF (counterbore_hole_occurrence);
+  modified_components : LIST [1 : ?] OF UNIQUE multi_level_reference_designator;
+END_ENTITY;
+
+ENTITY counterdrill_hole_definition
+  SUBTYPE OF (explicit_composite_hole);
+  counterbore                     : explicit_round_hole;
+  counterdrill_angle              : positive_plane_angle_measure_with_unit;
+  counterdrill_angle_tolerance    : tolerance_value;
+  drilled_hole_depth              : OPTIONAL positive_length_measure_with_unit;
+  drilled_hole_depth_tolerance    : OPTIONAL tolerance_value;
+  drilled_hole_diameter           : positive_length_measure_with_unit;
+  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
+  through_hole                    : BOOLEAN;
+WHERE
+  WR1: through_hole XOR EXISTS(drilled_hole_depth);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+       TYPEOF(counterdrill_angle_tolerance\tolerance_value.lower_bound);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+       TYPEOF(counterdrill_angle_tolerance\tolerance_value.upper_bound);
+  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
+  WR5: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
+  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
+  WR7: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
+END_ENTITY;
+
+ENTITY counterdrill_hole_occurrence
+  SUBTYPE OF (shape_aspect_occurrence);
+  SELF\shape_aspect_occurrence.definition : counterdrill_hole_definition;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY counterdrill_hole_occurrence_in_assembly
+  SUBTYPE OF (counterdrill_hole_occurrence);
+  modified_components : LIST [1 : ?] OF UNIQUE multi_level_reference_designator;
+END_ENTITY;
+
+ENTITY countersink_hole_definition
+  SUBTYPE OF (explicit_composite_hole);
+  countersink_angle               : positive_plane_angle_measure_with_unit;
+  countersink_angle_tolerance     : tolerance_value;
+  countersink_diameter            : positive_length_measure_with_unit;
+  countersink_diameter_tolerance  : OPTIONAL tolerance_value_or_limits_and_fits;
+  drilled_hole_depth              : OPTIONAL positive_length_measure_with_unit;
+  drilled_hole_depth_tolerance    : OPTIONAL tolerance_value;
+  drilled_hole_diameter           : positive_length_measure_with_unit;
+  drilled_hole_diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
+  through_hole                    : BOOLEAN;
+WHERE
+  WR1: through_hole XOR EXISTS(drilled_hole_depth);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+       TYPEOF(countersink_angle_tolerance\tolerance_value.lower_bound);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+       TYPEOF(countersink_angle_tolerance\tolerance_value.upper_bound);
+  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(countersink_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(countersink_diameter_tolerance\tolerance_value.lower_bound));
+  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(countersink_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(countersink_diameter_tolerance\tolerance_value.upper_bound));
+  WR6: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.lower_bound);
+  WR7: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(drilled_hole_depth_tolerance\tolerance_value.upper_bound);
+  WR8: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.lower_bound));
+  WR9: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN
+            TYPEOF(drilled_hole_diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(drilled_hole_diameter_tolerance\tolerance_value.upper_bound));
+END_ENTITY;
+
+ENTITY countersink_hole_occurrence
+  SUBTYPE OF (shape_aspect_occurrence);
+  SELF\shape_aspect_occurrence.definition : countersink_hole_definition;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(SELF\shape_aspect.of_shape\property_definition.definition);
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY countersink_hole_occurrence_in_assembly
+  SUBTYPE OF (countersink_hole_occurrence);
+  modified_components : LIST [1 : ?] OF UNIQUE multi_level_reference_designator;
+END_ENTITY;
+
+ENTITY criterion_report_item_with_number_of_instances
+  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
+  statistical_value : count_measure;
+  value_type        : summary_report_style_type;
+END_ENTITY;
+
+ENTITY criterion_report_item_with_value
+  SUBTYPE OF (data_equivalence_inspection_criterion_report_item);
+  report_value : measure_with_unit;
+  value_type   : label;
+END_ENTITY;
+
+ENTITY cross_sectional_alternative_shape_element
+  SUBTYPE OF (cross_sectional_part_shape_element);
+INVERSE
+  items : SET [2:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+END_ENTITY;
+
+ENTITY cross_sectional_group_shape_element
+  SUPERTYPE OF (ONEOF(cross_sectional_group_shape_element_with_tubular_cover,
+                      cross_sectional_group_shape_element_with_lacing, twisted_cross_sectional_group_shape_element))
+  SUBTYPE OF (cross_sectional_part_shape_element);
+INVERSE
+  items : SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+END_ENTITY;
+
+ENTITY cross_sectional_group_shape_element_with_lacing
+  SUBTYPE OF (cross_sectional_group_shape_element);
+END_ENTITY;
+
+ENTITY cross_sectional_group_shape_element_with_tubular_cover
+  SUBTYPE OF (cross_sectional_group_shape_element);
+END_ENTITY;
+
+ENTITY cross_sectional_occurrence_shape_element
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY cross_sectional_part_shape_element
+  SUPERTYPE OF (ONEOF(cross_sectional_alternative_shape_element, cross_sectional_group_shape_element))
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY csg_2d_shape_representation
+  SUBTYPE OF (shape_representation);
+  SELF\representation.items : SET [1 : ?] OF csg_2d_shape_select;
+WHERE
+  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID'] * TYPEOF(it)) = 1) OR
+                      (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION' IN
+                        TYPEOF(it\mapped_item.mapping_source.mapped_representation))))) >=
+       1;
+  WR3: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)) AND
+                       (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION') IN
+                             TYPEOF(it\mapped_item.mapping_source.mapped_representation)))))) =
+       0;
+END_ENTITY;
+
+ENTITY csg_primitive_solid_2d
+  SUBTYPE OF (csg_solid_2d);
+  SELF\csg_solid.tree_root_expression : bounded_primitive_2d;
+END_ENTITY;
+
+ENTITY csg_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REVOLVED_FACE_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTRUDED_FACE_SOLID'] *
+                              TYPEOF(it)) <>
+                       1))) =
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR4: SIZEOF(QUERY(sr
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA' IN TYPEOF(it)))
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REVOLVED_FACE_SOLID',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTRUDED_FACE_SOLID'] *
+                              TYPEOF(sr\solid_replica.parent_solid)) =
+                       0))) =
+       0;
+  WR5: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(it)))) >
+       0;
+END_ENTITY;
+
+ENTITY csg_solid
+  SUBTYPE OF (solid_model);
+  tree_root_expression : csg_select;
+END_ENTITY;
+
+ENTITY csg_solid_2d
+  SUBTYPE OF (csg_solid);
+  SELF\csg_solid.tree_root_expression : csg_select_2d;
+WHERE
+  WR1: valid_csg_2d_primitives(SELF);
+END_ENTITY;
+
+ENTITY cubic_bezier_tessellated_edge
+  SUBTYPE OF (tessellated_edge);
+  SELF\tessellated_edge.line_strip : LIST [4 : ?] OF INTEGER;
+END_ENTITY;
+
+ENTITY cubic_bezier_triangulated_face
+  SUBTYPE OF (tessellated_face);
+  ctriangles : LIST [1 : ?] OF LIST [10 : 10] OF INTEGER;
+WHERE
+  WR1: SIZEOF(SELF\tessellated_face.normals) = 0;
+END_ENTITY;
+
+ENTITY cubic_tessellated_connecting_edge
+  SUBTYPE OF (cubic_bezier_tessellated_edge);
+  smooth : LOGICAL;
+  face1  : cubic_bezier_triangulated_face;
+  face2  : cubic_bezier_triangulated_face;
+END_ENTITY;
+
+ENTITY currency
+  ABSTRACT SUPERTYPE OF ((ONEOF(externally_defined_currency, iso4217_currency)))
+  SUBTYPE OF (context_dependent_unit);
+WHERE
+  WR1: ((SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+        (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+        (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+        (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+        (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+        (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0));
+END_ENTITY;
+
+ENTITY currency_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+  SELF\measure_with_unit.unit_component : currency;
+END_ENTITY;
+
+ENTITY current_change_element_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : current_element_assignment_select;
+  items                                : SET [1 : ?] OF change_management_object;
+END_ENTITY;
+
+ENTITY curve
+  SUPERTYPE OF (ONEOF(line, conic, clothoid, circular_involute, pcurve, surface_curve, offset_curve_2d,
+                      offset_curve_3d, curve_replica))
+  SUBTYPE OF (geometric_representation_item);
+END_ENTITY;
+
+ENTITY curve_11
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY curve_based_path
+  SUBTYPE OF (path_node);
+  path_curve : curve;
+END_ENTITY;
+
+ENTITY curve_based_path_with_orientation
+  SUBTYPE OF (kinematic_path_segment);
+  position_curve    : bounded_curve;
+  orientation_curve : bounded_curve;
+WHERE
+  WR1: TYPEOF(position_curve) = TYPEOF(orientation_curve);
+END_ENTITY;
+
+ENTITY curve_based_path_with_orientation_and_parameters
+  SUBTYPE OF (curve_based_path_with_orientation);
+  parameters : path_parameter_representation;
+END_ENTITY;
+
+ENTITY curve_bounded_surface
+  SUBTYPE OF (bounded_surface);
+  basis_surface  : surface;
+  boundaries     : SET [1 : ?] OF boundary_curve;
+  implicit_outer : BOOLEAN;
+WHERE
+  WR1: (NOT implicit_outer) OR
+       (SIZEOF(QUERY(temp
+                     <* boundaries
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) =
+        0);
+  WR2: (NOT (implicit_outer)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(basis_surface));
+  WR3: SIZEOF(QUERY(temp
+                    <* boundaries
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) <=
+       1;
+  WR4: SIZEOF(QUERY(temp <* boundaries | (temp\composite_curve_on_surface.basis_surface[1] <> SELF.basis_surface))) = 0;
+END_ENTITY;
+
+ENTITY curve_dimension
+  SUBTYPE OF (dimension_curve_directed_callout);
+END_ENTITY;
+
+ENTITY curve_distance_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : 2] OF curve;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 4] OF point_curve_or_surface_constraint_element;
+  near_points                                   : SET [0 : 4] OF near_point_relationship;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND
+        (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
+  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
+  WR3: SIZEOF(QUERY(q
+                    <* near_points
+                    | NOT (q\representation_item_relationship.relating_representation_item IN
+                           SELF\explicit_constraint.reference_elements))) =
+       0;
+END_ENTITY;
+
+ENTITY curve_length_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF bounded_curve;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+END_ENTITY;
+
+ENTITY curve_replica
+  SUBTYPE OF (curve);
+  parent_curve   : curve;
+  transformation : cartesian_transformation_operator;
+WHERE
+  WR1: transformation.dim = parent_curve.dim;
+  WR2: acyclic_curve_replica(SELF, parent_curve);
+END_ENTITY;
+
+ENTITY curve_segment_set
+  SUBTYPE OF (geometric_representation_item);
+  segments : SET [1 : ?] OF composite_curve_segment;
+END_ENTITY;
+
+ENTITY curve_smoothness_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : 1] OF curve_segment_set;
+  smoothness                                    : transition_code;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+END_ENTITY;
+
+ENTITY curve_style
+  SUBTYPE OF (founded_item);
+  name         : label;
+  curve_font   : OPTIONAL curve_font_or_scaled_curve_font_select;
+  curve_width  : OPTIONAL size_select;
+  curve_colour : OPTIONAL colour;
+WHERE
+  WR1: EXISTS(curve_font) OR EXISTS(curve_width) OR EXISTS(curve_colour);
+END_ENTITY;
+
+ENTITY curve_style_font
+  SUBTYPE OF (founded_item);
+  name         : label;
+  pattern_list : LIST [1 : ?] OF curve_style_font_pattern;
+END_ENTITY;
+
+ENTITY curve_style_font_and_scaling
+  SUBTYPE OF (founded_item);
+  name               : label;
+  curve_font         : curve_style_font_select;
+  curve_font_scaling : REAL;
+END_ENTITY;
+
+ENTITY curve_style_font_pattern
+  SUBTYPE OF (founded_item);
+  visible_segment_length   : positive_length_measure;
+  invisible_segment_length : positive_length_measure;
+END_ENTITY;
+
+ENTITY curve_style_parameters_representation
+  SUBTYPE OF (representation);
+END_ENTITY;
+
+ENTITY curve_style_parameters_with_ends
+  SUBTYPE OF (curve_style_parameters_representation);
+END_ENTITY;
+
+ENTITY curve_style_rendering;
+  rendering_method     : shading_curve_method;
+  rendering_properties : surface_rendering_properties;
+END_ENTITY;
+
+ENTITY curve_swept_solid_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_AREA_SOLID',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_DISK_SOLID',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_AREA_SOLID',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_DISK_SOLID',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_SWEPT_SOLID_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR4: SIZEOF(QUERY(scsas
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE_SWEPT_AREA_SOLID' IN
+                               TYPEOF(it))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN
+                            TYPEOF(scsas\surface_curve_swept_area_solid.directrix)) OR
+                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                            TYPEOF(scsas\surface_curve_swept_area_solid.directrix))))) =
+       0;
+END_ENTITY;
+
+ENTITY curve_with_excessive_segments
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_COMPOSITE_CURVE_SELECT']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY curve_with_small_curvature_radius
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY cyclide_segment_solid
+  SUBTYPE OF (geometric_representation_item);
+  position    : axis2_placement_3d;
+  radius1     : positive_length_measure;
+  radius2     : positive_length_measure;
+  cone_angle1 : plane_angle_measure;
+  cone_angle2 : plane_angle_measure;
+  turn_angle  : plane_angle_measure;
+END_ENTITY;
+
+ENTITY cylindrical_11
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY cylindrical_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY cylindrical_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : cylindrical_pair;
+  actual_translation              : length_measure;
+  actual_rotation                 : plane_angle_measure;
+END_ENTITY;
+
+ENTITY cylindrical_pair_with_range
+  SUBTYPE OF (cylindrical_pair);
+  lower_limit_actual_translation : OPTIONAL length_measure;
+  upper_limit_actual_translation : OPTIONAL length_measure;
+  lower_limit_actual_rotation    : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation    : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR
+       (lower_limit_actual_translation < upper_limit_actual_translation);
+  WR2: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR
+       (lower_limit_actual_rotation < upper_limit_actual_rotation);
+END_ENTITY;
+
+ENTITY cylindrical_point
+  SUBTYPE OF (cartesian_point);
+  r     : length_measure;
+  theta : plane_angle_measure;
+  z     : length_measure;
+DERIVE
+  SELF\cartesian_point.coordinates : LIST [3 : 3] OF length_measure := [r * COS(theta),r * SIN(theta),z];
+WHERE
+  WR1: r >= 0.0;
+END_ENTITY;
+
+ENTITY cylindrical_surface
+  SUBTYPE OF (elementary_surface);
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY cylindrical_volume
+  SUBTYPE OF (volume);
+  position : axis2_placement_3d;
+  radius   : positive_length_measure;
+  height   : positive_length_measure;
+END_ENTITY;
+
+ENTITY cylindricity_tolerance
+  SUBTYPE OF (geometric_tolerance);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY data_environment;
+  name        : label;
+  description : text;
+  elements    : SET [1 : ?] OF characterized_property_representation;
+END_ENTITY;
+
+ENTITY data_equivalence_assessment_specification;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY data_equivalence_criteria_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERION' IN TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_criterion
+  SUBTYPE OF (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_definition;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY data_equivalence_definition_relationship;
+  id                                   : identifier;
+  name                                 : label;
+  description                          : OPTIONAL text;
+  relating_data_equivalence_definition : data_equivalence_definition;
+  related_data_equivalence_definition  : data_equivalence_definition;
+END_ENTITY;
+
+ENTITY data_equivalence_definition_representation_relationship;
+  id                  : identifier;
+  name                : label;
+  description         : OPTIONAL text;
+  definition          : data_equivalence_definition;
+  used_representation : used_equivalence_representation_select;
+END_ENTITY;
+
+ENTITY data_equivalence_inspected_element_pair
+  SUBTYPE OF (representation_item);
+  comparing_elements : SET [1 : ?] OF inspected_equivalence_element_select;
+  compared_elements  : SET [1 : ?] OF inspected_equivalence_element_select;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_criterion_report
+  SUBTYPE OF (data_equivalence_inspection_report);
+  statistical_values : SET [1 : ?] OF data_equivalence_inspection_criterion_report_item;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_criterion_report_item
+  ABSTRACT SUPERTYPE OF ((ONEOF(criterion_report_item_with_number_of_instances,
+                                criterion_report_item_with_value)) ANDOR
+                         (ONEOF(a3m_equivalence_criterion_report_item_with_measured_value,
+                                criterion_report_item_with_number_of_instances, criterion_report_item_with_value)))
+  SUBTYPE OF (representation_item);
+INVERSE
+  criterion_report : data_equivalence_inspection_criterion_report FOR statistical_values;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_instance_report
+  SUBTYPE OF (data_equivalence_inspection_report);
+  inspected_instances : LIST [1 : ?] OF data_equivalence_inspection_instance_report_item;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_instance_report_item
+  SUBTYPE OF (representation_item);
+  inspected_element : data_equivalence_inspected_element_pair;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_report
+  ABSTRACT SUPERTYPE OF (ONEOF(data_equivalence_inspection_criterion_report,
+                               data_equivalence_inspection_instance_report))
+  SUBTYPE OF (representation_item);
+  inspection_result : data_equivalence_inspection_result;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_requirement
+  SUBTYPE OF (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_result
+  SUBTYPE OF (representation_item);
+  criterion_inspected : data_equivalence_criterion;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_result_representation
+  SUBTYPE OF (representation);
+  criteria_inspected : data_equivalence_criteria_representation;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_RESULT' IN
+                      TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY data_equivalence_inspection_result_with_judgement
+  SUBTYPE OF (data_equivalence_inspection_result);
+  judgement : BOOLEAN;
+END_ENTITY;
+
+ENTITY data_equivalence_report_request;
+  id                          : identifier;
+  name                        : label;
+  description                 : OPTIONAL text;
+  criterion_of_report_request : data_equivalence_criterion;
+END_ENTITY;
+
+ENTITY data_quality_assessment_measurement_association;
+  assessment_specification : data_quality_criterion_assessment_association;
+  measurement_requirement  : data_quality_criterion_measurement_association;
+WHERE
+  WR1: SELF.measurement_requirement\representation_item_relationship.relating_representation_item :=:
+       SELF.assessment_specification.criterion;
+END_ENTITY;
+
+ENTITY data_quality_assessment_specification;
+  description : text;
+END_ENTITY;
+
+ENTITY data_quality_criteria_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION' IN TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY data_quality_criterion
+  SUBTYPE OF (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_criterion_assessment_association;
+  criterion                : data_quality_criterion;
+  assessment_specification : data_quality_assessment_specification;
+END_ENTITY;
+
+ENTITY data_quality_criterion_measurement_association
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : data_quality_criterion;
+  SELF\representation_item_relationship.related_representation_item  : data_quality_measurement_requirement;
+END_ENTITY;
+
+ENTITY data_quality_definition;
+  description : text;
+END_ENTITY;
+
+ENTITY data_quality_definition_relationship;
+  description                      : text;
+  relating_data_quality_definition : data_quality_definition;
+  related_data_quality_definition  : data_quality_definition;
+END_ENTITY;
+
+ENTITY data_quality_definition_representation_relationship;
+  description         : text;
+  definition          : data_quality_definition;
+  used_representation : used_quality_representation_select;
+END_ENTITY;
+
+ENTITY data_quality_inspection_criterion_report
+  SUBTYPE OF (data_quality_inspection_report);
+  statistical_values : SET [1 : 2] OF data_quality_inspection_criterion_report_item;
+WHERE
+  WR1: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF\data_quality_inspection_report.inspection_result.criterion_inspected,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_REPORT_REQUEST.CRITERION_OF_REPORT_REQUEST'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUMMARY_REPORT_REQUEST' IN TYPEOF(i1))) >
+       0;
+  WR2: (SIZEOF(SELF.statistical_values) = 1) OR
+       (SELF.statistical_values[1].value_type <> SELF.statistical_values[2].value_type);
+END_ENTITY;
+
+ENTITY data_quality_inspection_criterion_report_item
+  SUBTYPE OF (representation_item);
+  statistical_value : INTEGER;
+  value_type        : statistical_value_type;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_instance_report
+  SUBTYPE OF (data_quality_inspection_report);
+  inspected_instances : LIST [1 : ?] OF data_quality_inspection_instance_report_item;
+WHERE
+  WR1: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF\data_quality_inspection_report.inspection_result.criterion_inspected,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_REPORT_REQUEST.CRITERION_OF_REPORT_REQUEST'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DETAILED_REPORT_REQUEST' IN TYPEOF(i1))) >
+       0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_instance_report_item
+  SUBTYPE OF (representation_item);
+  inspected_elements : SET [1 : ?] OF inspected_element_select;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_report
+  SUPERTYPE OF (ONEOF(data_quality_inspection_criterion_report, data_quality_inspection_instance_report))
+  SUBTYPE OF (representation_item);
+  inspection_result : data_quality_inspection_result;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_result
+  SUBTYPE OF (representation_item);
+  criterion_inspected : data_quality_criterion;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERIA_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_result_representation
+  SUBTYPE OF (representation);
+  criteria_inspected : data_quality_criteria_representation;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q))) >
+       0;
+  WR2: SIZEOF(inspected_product_definition(SELF)) > 0;
+END_ENTITY;
+
+ENTITY data_quality_inspection_result_with_judgement
+  SUBTYPE OF (data_quality_inspection_result);
+  judgement : BOOLEAN;
+END_ENTITY;
+
+ENTITY data_quality_measurement_requirement
+  SUBTYPE OF (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* bag_to_set(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN
+                      TYPEOF(q))) =
+       0;
+END_ENTITY;
+
+ENTITY data_quality_report_measurement_association
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : data_quality_measurement_requirement;
+  SELF\representation_item_relationship.related_representation_item  : data_quality_inspection_report;
+END_ENTITY;
+
+ENTITY data_quality_report_request
+  ABSTRACT SUPERTYPE OF (ONEOF(summary_report_request, detailed_report_request));
+  description                 : text;
+  criterion_of_report_request : data_quality_criterion;
+END_ENTITY;
+
+ENTITY date
+  SUPERTYPE OF (ONEOF(calendar_date, ordinal_date, week_of_year_and_day_date, year_month));
+  year_component : year_number;
+END_ENTITY;
+
+ENTITY date_and_time;
+  date_component : date;
+  time_component : local_time;
+END_ENTITY;
+
+ENTITY date_and_time_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_date_and_time : date_and_time;
+  role                   : date_time_role;
+END_ENTITY;
+
+ENTITY date_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_date : date;
+  role          : date_role;
+END_ENTITY;
+
+ENTITY date_representation_item
+  SUBTYPE OF (representation_item, date);
+END_ENTITY;
+
+ENTITY date_role;
+  name : label;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY date_time_representation_item
+  SUBTYPE OF (representation_item, date_and_time);
+END_ENTITY;
+
+ENTITY date_time_role;
+  name : label;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY dated_effectivity
+  SUBTYPE OF (effectivity);
+  effectivity_end_date   : OPTIONAL date_time_or_event_occurrence;
+  effectivity_start_date : OPTIONAL date_time_or_event_occurrence;
+WHERE
+  WR1: EXISTS(effectivity_end_date) OR EXISTS(effectivity_start_date);
+END_ENTITY;
+
+ENTITY datum
+  SUBTYPE OF (shape_aspect);
+  identification : identifier;
+INVERSE
+  established_by_relationships : SET [1:?] OF shape_aspect_relationship FOR related_shape_aspect;
+UNIQUE
+  UR1: identification, SELF\shape_aspect.of_shape;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM' IN TYPEOF(SELF)) XOR
+       ((SIZEOF(QUERY(x
+                      <* SELF\datum.established_by_relationships
+                      | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET'] *
+                               TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)) =
+                        1)) >=
+         1));
+  WR2: SIZEOF(QUERY(x
+                    <* SELF\datum.established_by_relationships
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE' IN
+                       TYPEOF(x\shape_aspect_relationship.relating_shape_aspect)))) <=
+       1;
+  WR3: SELF\shape_aspect.product_definitional = false;
+  WR4: SELF\shape_aspect.name = '';
+END_ENTITY;
+
+ENTITY datum_feature
+  SUPERTYPE OF (ONEOF(dimensional_location_with_datum_feature, dimensional_size_with_datum_feature))
+  SUBTYPE OF (shape_aspect);
+INVERSE
+  feature_basis_relationship : SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+WHERE
+  WR1: SIZEOF(QUERY(sar
+                    <* SELF\datum_feature.feature_basis_relationship
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN
+                       TYPEOF(sar\shape_aspect_relationship.related_shape_aspect)))) =
+       1;
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY datum_feature_callout
+  SUBTYPE OF (draughting_callout);
+END_ENTITY;
+
+ENTITY datum_reference;
+  precedence       : INTEGER;
+  referenced_datum : datum;
+WHERE
+  WR1: precedence > 0;
+END_ENTITY;
+
+ENTITY datum_reference_compartment
+  SUBTYPE OF (general_datum_reference);
+INVERSE
+  owner : datum_system FOR constituents;
+END_ENTITY;
+
+ENTITY datum_reference_element
+  SUBTYPE OF (general_datum_reference);
+DERIVE
+  owner : general_datum_reference := sts_get_general_datum_reference(SELF);
+WHERE
+  WR1: SELF <> owner;
+  WR2: EXISTS(owner);
+  WR3: SELF\shape_aspect.of_shape = owner\shape_aspect.of_shape;
+END_ENTITY;
+
+ENTITY datum_reference_modifier_with_value;
+  modifier_type  : datum_reference_modifier_type;
+  modifier_value : length_measure_with_unit;
+WHERE
+  WR1: modifier_value\measure_with_unit.value_component > 0.0;
+END_ENTITY;
+
+ENTITY datum_system
+  SUBTYPE OF (shape_aspect);
+  constituents : LIST [1 : 3] OF UNIQUE datum_reference_compartment;
+UNIQUE
+  UR1: SELF\shape_aspect.of_shape, SELF\shape_aspect.name;
+WHERE
+  WR1: SELF\shape_aspect.product_definitional = false;
+END_ENTITY;
+
+ENTITY datum_target
+  SUBTYPE OF (shape_aspect);
+  target_id : identifier;
+INVERSE
+  target_basis_relationship : SET [1:?] OF shape_aspect_relationship FOR relating_shape_aspect;
+WHERE
+  WR1: SIZEOF(QUERY(sar
+                    <* SELF\datum_target.target_basis_relationship
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN
+                       TYPEOF(sar\shape_aspect_relationship.related_shape_aspect)))) =
+       1;
+  WR2: SELF\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY datum_target_callout
+  SUBTYPE OF (draughting_callout);
+END_ENTITY;
+
+ENTITY default_model_geometric_view
+  SUBTYPE OF (model_geometric_view, shape_aspect);
+DERIVE
+  SELF\shape_aspect.product_definitional : LOGICAL := false;
+UNIQUE
+  UR1: of_shape;
+WHERE
+  WR1: SELF\characterized_object.name = SELF\shape_aspect.name;
+  WR2: NOT EXISTS(SELF\characterized_object.description);
+  WR3: NOT EXISTS(SELF\shape_aspect.description);
+END_ENTITY;
+
+ENTITY default_tolerance_table
+  SUBTYPE OF (representation);
+WHERE
+  WR1: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFAULT_TOLERANCE_TABLE_CELL' IN
+                           TYPEOF(i)))) =
+       0;
+  WR2: (SIZEOF(QUERY(rr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')
+                     | rr.name < 'general tolerance definition')) =
+        0) AND
+       (SIZEOF(QUERY(rr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')
+                     | (rr.name = 'general tolerance definition') AND (rr.rep_2.name < 'default tolerance'))) =
+        0) AND
+       (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) = 0);
+END_ENTITY;
+
+ENTITY default_tolerance_table_cell
+  SUBTYPE OF (compound_representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(x
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFAULT_TOLERANCE_TABLE' IN TYPEOF(x))) =
+       1;
+  WR2: default_tolerance_table_cell_wr2(SELF\compound_representation_item.item_element);
+  WR3: default_tolerance_table_cell_wr3(SELF\compound_representation_item.item_element);
+  WR4: default_tolerance_table_cell_wr4(SELF\compound_representation_item.item_element);
+  WR5: default_tolerance_table_cell_wr5(SELF\compound_representation_item.item_element);
+END_ENTITY;
+
+ENTITY defined_character_glyph
+  SUBTYPE OF (geometric_representation_item);
+  definition : defined_glyph_select;
+  placement  : axis2_placement;
+END_ENTITY;
+
+ENTITY defined_constraint
+  ABSTRACT SUPERTYPE OF (equal_parameter_constraint)
+  SUBTYPE OF (explicit_constraint);
+END_ENTITY;
+
+ENTITY defined_function
+  ABSTRACT SUPERTYPE OF ((ONEOF(numeric_defined_function, string_defined_function, boolean_defined_function)) ANDOR
+                         sql_mappable_defined_function);
+END_ENTITY;
+
+ENTITY defined_symbol
+  SUBTYPE OF (geometric_representation_item);
+  definition : defined_symbol_select;
+  target     : symbol_target;
+END_ENTITY;
+
+ENTITY definite_integral_expression
+  SUBTYPE OF (quantifier_expression);
+  lower_limit_neg_infinity : BOOLEAN;
+  upper_limit_pos_infinity : BOOLEAN;
+DERIVE
+  integrand                            : generic_expression                      := SELF\multiple_arity_generic_expression.operands[1];
+  variable_of_integration              : maths_variable                          := SELF\multiple_arity_generic_expression.operands[2];
+  SELF\quantifier_expression.variables : LIST [1 : 1] OF UNIQUE generic_variable := [variable_of_integration];
+WHERE
+  WR1: has_values_space(integrand);
+  WR2: space_is_continuum(values_space_of(integrand));
+  WR3: definite_integral_expr_check(SELF\multiple_arity_generic_expression.operands, lower_limit_neg_infinity,
+                                    upper_limit_pos_infinity);
+END_ENTITY;
+
+ENTITY definite_integral_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  variable_of_integration               : input_selector;
+  lower_limit_neg_infinity              : BOOLEAN;
+  upper_limit_pos_infinity              : BOOLEAN;
+DERIVE
+  integrand : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: space_is_continuum(integrand.range);
+  WR2: definite_integral_check(integrand.domain, variable_of_integration, lower_limit_neg_infinity,
+                               upper_limit_pos_infinity);
+END_ENTITY;
+
+ENTITY definitional_product_definition_usage
+  SUBTYPE OF (product_definition_usage);
+UNIQUE
+  UR1: relating_product_definition, related_product_definition;
+END_ENTITY;
+
+ENTITY definitional_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETRIC_REPRESENTATION_CONTEXT' IN
+       TYPEOF(SELF\representation.context_of_items);
+END_ENTITY;
+
+ENTITY definitional_representation_relationship
+  SUBTYPE OF (representation_relationship);
+WHERE
+  WR1: acyclic_representation_relationship(SELF, [SELF\representation_relationship.rep_2],
+                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION');
+END_ENTITY;
+
+ENTITY definitional_representation_relationship_with_same_context
+  SUBTYPE OF (definitional_representation_relationship);
+WHERE
+  WR1: SELF\representation_relationship.rep_1.context_of_items :=:
+       SELF\representation_relationship.rep_2.context_of_items;
+END_ENTITY;
+
+ENTITY degenerate_pcurve
+  SUBTYPE OF (point);
+  basis_surface      : surface;
+  reference_to_curve : definitional_representation;
+WHERE
+  WR1: SIZEOF(reference_to_curve\representation.items) = 1;
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(reference_to_curve\representation.items[1]);
+  WR3: reference_to_curve\representation.items[1]\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY degenerate_toroidal_surface
+  SUBTYPE OF (toroidal_surface);
+  select_outer : BOOLEAN;
+WHERE
+  WR1: major_radius < minor_radius;
+END_ENTITY;
+
+ENTITY delete_element
+  SUBTYPE OF (change_element);
+END_ENTITY;
+
+ENTITY dependent_variable_definition
+  SUBTYPE OF (unary_generic_expression);
+  name        : label;
+  description : text;
+END_ENTITY;
+
+ENTITY derived_shape_aspect
+  SUPERTYPE OF (ONEOF(apex, centre_of_symmetry, geometric_alignment, geometric_contact, geometric_intersection,
+                      parallel_offset, perpendicular_to, extension, tangent))
+  SUBTYPE OF (shape_aspect);
+INVERSE
+  deriving_relationships : SET [1:?] OF shape_aspect_deriving_relationship FOR relating_shape_aspect;
+END_ENTITY;
+
+ENTITY derived_unit
+  SUPERTYPE OF (ONEOF(absorbed_dose_unit, acceleration_unit, radioactivity_unit, area_unit, capacitance_unit,
+                      dose_equivalent_unit, electric_charge_unit, conductance_unit, electric_potential_unit,
+                      energy_unit, magnetic_flux_density_unit, force_unit, frequency_unit, illuminance_unit,
+                      inductance_unit, magnetic_flux_unit, power_unit, pressure_unit, resistance_unit, velocity_unit,
+                      volume_unit));
+  elements : SET [1 : ?] OF derived_unit_element;
+DERIVE
+  name : label := get_name_value(SELF);
+WHERE
+  WR1: (SIZEOF(elements) > 1) OR ((SIZEOF(elements) = 1) AND (elements[1].exponent <> 1.0));
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY derived_unit_element;
+  unit     : named_unit;
+  exponent : REAL;
+END_ENTITY;
+
+ENTITY description_attribute;
+  attribute_value : text;
+  described_item  : description_attribute_select;
+END_ENTITY;
+
+ENTITY description_text;
+  description : text;
+END_ENTITY;
+
+ENTITY description_text_assignment
+  ABSTRACT SUPERTYPE;
+  description : description_text;
+END_ENTITY;
+
+ENTITY description_text_assignment_relationship;
+  id            : OPTIONAL identifier;
+  description   : OPTIONAL text;
+  relating      : description_text_assignment;
+  related       : description_text_assignment;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_description_text_assignment_relationship(SELF, [related],
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_TEXT_ASSIGNMENT_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY descriptive_representation_item
+  SUPERTYPE OF (ONEOF(tagged_text_item, uniform_resource_identifier))
+  SUBTYPE OF (representation_item);
+  description : text;
+END_ENTITY;
+
+ENTITY design_context
+  SUBTYPE OF (product_definition_context);
+WHERE
+  WR1: SELF.life_cycle_stage = 'design';
+END_ENTITY;
+
+ENTITY design_make_from_relationship
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY detailed_equivalence_report_request
+  SUBTYPE OF (data_equivalence_report_request);
+  report_request_type : detailed_report_style_type;
+  report_sequence     : preferred_report_ordering;
+END_ENTITY;
+
+ENTITY detailed_equivalence_report_request_with_number_of_instances
+  SUBTYPE OF (detailed_equivalence_report_request);
+  number_of_instances : INTEGER;
+DERIVE
+  SELF\detailed_equivalence_report_request.report_request_type : detailed_report_style_type := inspected_element;
+END_ENTITY;
+
+ENTITY detailed_report_request
+  SUBTYPE OF (data_quality_report_request);
+  detailed_report_request_type : detailed_report_type;
+  report_sequence              : preferred_ordering;
+END_ENTITY;
+
+ENTITY detailed_report_request_with_number_of_data
+  SUBTYPE OF (detailed_report_request);
+  number_of_data : INTEGER;
+DERIVE
+  SELF\detailed_report_request.detailed_report_request_type : detailed_report_type := measured_element;
+END_ENTITY;
+
+ENTITY diameter_dimension
+  SUBTYPE OF (dimension_curve_directed_callout);
+END_ENTITY;
+
+ENTITY dielectric_constant_measure_with_unit
+  SUBTYPE OF (ratio_measure_with_unit);
+END_ENTITY;
+
+ENTITY different_angle_of_assembly_constraint
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_plane_angle_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY different_assembly_centroid
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_cartesian_point];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY different_assembly_centroid_using_notional_solid
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_cartesian_point];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY different_assembly_constraint_type
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
+END_ENTITY;
+
+ENTITY different_assembly_volume
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_volume_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_volume_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY different_bounding_box
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [3 : 3] OF a3ms_element_type_name             := [etns_manifold_solid_brep,
+                                                                                                                    etns_shell_based_surface_model,
+                                                                                                                    etns_shell_based_wireframe_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_two_cartesian_points];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
+END_ENTITY;
+
+ENTITY different_centroid
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [3 : 3] OF a3ms_element_type_name             := [etns_manifold_solid_brep,
+                                                                                                                    etns_shell_based_surface_model,
+                                                                                                                    etns_shell_based_wireframe_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_cartesian_point];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
+END_ENTITY;
+
+ENTITY different_component_identification_via_multi_level_reference
+  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_multi_level_reference_designator];
+END_ENTITY;
+
+ENTITY different_component_shape
+  SUBTYPE OF (a3m_equivalence_criterion_of_component_property_difference);
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ma_element_type_name             := [etna_shape_representation];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ma_element_type_name             := [etna_shape_representation];
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_a3ms_inspected_equivalence_element_select];
+INVERSE
+  shape_criteria : SET [1:?] OF a3ma_assembly_and_shape_criteria_relationship FOR relating_representation_item;
+END_ENTITY;
+
+ENTITY different_component_type
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_assembly_component_usage];
+END_ENTITY;
+
+ENTITY different_curve_length
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_edge_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_length_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
+END_ENTITY;
+
+ENTITY different_length_of_assembly_constraint
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_binary_assembly_constraint];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY different_number_of_closed_shell
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_manifold_solid_brep];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_count_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY different_number_of_components
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_assembly_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_count_measure];
+END_ENTITY;
+
+ENTITY different_number_of_geometric_elements
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [2 : 2] OF a3ms_element_type_name             := [etns_manifold_solid_brep,
+                                                                                                                    etns_shell_based_surface_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_three_count_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY different_number_of_geometric_elements_wireframe_model
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_shell_based_wireframe_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_two_count_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY different_number_of_topological_elements
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [2 : 2] OF a3ms_element_type_name             := [etns_manifold_solid_brep,
+                                                                                                                    etns_shell_based_surface_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_five_count_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY different_number_of_topological_elements_wireframe_model
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_shell_based_wireframe_model];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_four_count_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY different_placement_of_component
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_assembly_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_length_measure_and_context_dependent_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_context_dependent_shape_representation];
+INVERSE
+  assessment_threshold_2 : a3ma_equivalence_criterion_assessment_threshold_relationship FOR relating_representation_item;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ma_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        mdna_length_measure);
+  WR2: (a3ma_get_value_limit_type(SELF.assessment_threshold_2\representation_item_relationship.related_representation_item) =
+        mdna_context_dependent_measure) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_UNIT' IN
+        TYPEOF(SELF.assessment_threshold_2\representation_item_relationship.related_representation_item\measure_with_unit.unit_component));
+END_ENTITY;
+
+ENTITY different_surface_area
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_area_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_area_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_area_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
+END_ENTITY;
+
+ENTITY different_surface_normal
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_plane_angle_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,
+                                                                                                                    ddns_point_on_surface];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_plane_angle_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name =
+        'discretization_distance_tolerance');
+END_ENTITY;
+
+ENTITY different_volume
+  SUBTYPE OF (a3m_equivalence_criterion_of_representative_shape_property_value,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_manifold_solid_brep];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_volume_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_volume_measure];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_volume_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name = 'approximation_tolerance');
+END_ENTITY;
+
+ENTITY dimension_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR
+       (SIZEOF(QUERY(dce_1
+                     <* SELF\draughting_callout.contents
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(dce_1))))) =
+        0);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR
+       (SIZEOF(QUERY(dce_1
+                     <* SELF\draughting_callout.contents
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(dce_1))))) =
+        0);
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) XOR
+       (SIZEOF(QUERY(dce_1
+                     <* SELF\draughting_callout.contents
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(dce_1))))) =
+        0);
+END_ENTITY;
+
+ENTITY dimension_callout_component_relationship
+  SUBTYPE OF (draughting_callout_relationship);
+WHERE
+  WR1: SELF.name IN ['prefix','suffix'];
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_DIMENSION_CALLOUT' IN
+       TYPEOF(SELF.relating_draughting_callout);
+  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_DIMENSION_CALLOUT']) =
+       0;
+  WR4: SELF.related_draughting_callout.contents * SELF.relating_draughting_callout.contents =
+       SELF.related_draughting_callout.contents;
+  WR5: ((SELF.name = 'prefix') AND
+        (SIZEOF(QUERY(ato
+                      <* QUERY(con
+                               <* SELF.related_draughting_callout.contents
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                  TYPEOF(con)))
+                      | NOT (ato.name = 'prefix text'))) =
+         0));
+  WR6: ((SELF.name = 'suffix') AND
+        (SIZEOF(QUERY(ato
+                      <* QUERY(con
+                               <* SELF.related_draughting_callout.contents
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                  TYPEOF(con)))
+                      | NOT (ato.name = 'suffix text'))) =
+         0));
+END_ENTITY;
+
+ENTITY dimension_callout_relationship
+  SUBTYPE OF (draughting_callout_relationship);
+WHERE
+  WR1: SELF.name IN ['primary','secondary'];
+  WR2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) >=
+       1;
+  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT']) =
+       0;
+  WR4: SELF.related_draughting_callout.contents * SELF.relating_draughting_callout.contents =
+       SELF.related_draughting_callout.contents;
+END_ENTITY;
+
+ENTITY dimension_curve
+  SUBTYPE OF (annotation_curve_occurrence);
+WHERE
+  WR1: (SIZEOF(QUERY(dct
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN
+                         TYPEOF(dct))))) <=
+        2);
+  WR2: SIZEOF(QUERY(dcdc
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN
+                       TYPEOF(dcdc)))) >=
+       1;
+  WR3: (SIZEOF(QUERY(dct1
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN
+                         TYPEOF(dct1)) AND
+                        (dct1\dimension_curve_terminator.role = dimension_extent_usage.origin)))) <=
+        1) AND
+       (SIZEOF(QUERY(dct2
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TERMINATOR_SYMBOL.ANNOTATED_CURVE')
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_TERMINATOR' IN
+                         TYPEOF(dct2)) AND
+                        (dct2\dimension_curve_terminator.role = dimension_extent_usage.target)))) <=
+        1);
+END_ENTITY;
+
+ENTITY dimension_curve_directed_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(QUERY(d_c
+                    <* SELF\draughting_callout.contents
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(d_c)))) <=
+       2;
+  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
+END_ENTITY;
+
+ENTITY dimension_curve_terminator
+  SUBTYPE OF (terminator_symbol);
+  role : dimension_extent_usage;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN
+       TYPEOF(SELF\terminator_symbol.annotated_curve);
+END_ENTITY;
+
+ENTITY dimension_curve_terminator_to_projection_curve_associativity
+  SUBTYPE OF (annotation_occurrence_associativity);
+  SELF\annotation_occurrence_relationship.relating_annotation_occurrence : dimension_curve_terminator;
+  SELF\annotation_occurrence_relationship.related_annotation_occurrence  : projection_curve;
+END_ENTITY;
+
+ENTITY dimension_pair
+  SUBTYPE OF (draughting_callout_relationship);
+WHERE
+  WR1: SELF.name IN ['chained','parallel'];
+  WR2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) =
+       1;
+  WR3: SIZEOF(TYPEOF(SELF.related_draughting_callout) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIAMETER_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORDINATE_DIMENSION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIUS_DIMENSION']) =
+       1;
+END_ENTITY;
+
+ENTITY dimension_related_tolerance_zone_element;
+  related_dimension : dimensional_location;
+  related_element   : tolerance_zone_definition;
+END_ENTITY;
+
+ENTITY dimension_text_associativity
+  SUBTYPE OF (text_literal, mapped_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DIMENSION_REPRESENTATION' IN
+        TYPEOF(SELF\mapped_item.mapping_source.mapped_representation));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT' IN
+        TYPEOF(SELF\mapped_item.mapping_target));
+  WR3: SIZEOF(QUERY(ato
+                    <* QUERY(si
+                             <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                TYPEOF(si)))
+                    | NOT (SIZEOF(QUERY(dc
+                                        <* USEDIN(ato,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT' IN
+                                           TYPEOF(dc))) *
+                                  [SELF\mapped_item.mapping_target]) =
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY dimensional_characteristic_representation;
+  dimension      : dimensional_characteristic;
+  representation : shape_dimension_representation;
+END_ENTITY;
+
+ENTITY dimensional_exponents;
+  length_exponent                    : REAL;
+  mass_exponent                      : REAL;
+  time_exponent                      : REAL;
+  electric_current_exponent          : REAL;
+  thermodynamic_temperature_exponent : REAL;
+  amount_of_substance_exponent       : REAL;
+  luminous_intensity_exponent        : REAL;
+END_ENTITY;
+
+ENTITY dimensional_location
+  SUPERTYPE OF (ONEOF(angular_location, dimensional_location_with_path))
+  SUBTYPE OF (shape_aspect_relationship);
+WHERE
+  WR1: SELF\shape_aspect_relationship.relating_shape_aspect :<>: SELF\shape_aspect_relationship.related_shape_aspect;
+  WR2: SELF\shape_aspect_relationship.relating_shape_aspect.of_shape :=:
+       SELF\shape_aspect_relationship.related_shape_aspect.of_shape;
+END_ENTITY;
+
+ENTITY dimensional_location_with_datum_feature
+  SUBTYPE OF (datum_feature, dimensional_location);
+END_ENTITY;
+
+ENTITY dimensional_location_with_path
+  SUBTYPE OF (dimensional_location);
+  path : shape_aspect;
+END_ENTITY;
+
+ENTITY dimensional_size
+  SUPERTYPE OF (ONEOF(angular_size, dimensional_size_with_path));
+  applies_to : shape_aspect;
+  name       : label;
+DERIVE
+  id : identifier := get_id_value(SELF);
+UNIQUE
+  UR1: id, applies_to;
+WHERE
+  WR1: applies_to.product_definitional = true;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY dimensional_size_with_datum_feature
+  SUBTYPE OF (datum_feature, dimensional_size);
+WHERE
+  WR1: SELF\dimensional_size.applies_to :=: SELF;
+END_ENTITY;
+
+ENTITY dimensional_size_with_path
+  SUBTYPE OF (dimensional_size);
+  path : shape_aspect;
+END_ENTITY;
+
+ENTITY directed_action
+  SUBTYPE OF (executed_action);
+  directive : action_directive;
+END_ENTITY;
+
+ENTITY directed_action_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_directed_action : directed_action;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY directed_angle
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pdr
+                    <* get_shape_aspect_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)))) =
+       1;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_shape_aspect_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(pdr.used_representation.items) = 1))) =
+       1;
+  WR4: SELF.description IN ['punch direction','profile normal','surface normal'];
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_shape_aspect_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'angle') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+END_ENTITY;
+
+ENTITY directed_dimensional_location
+  SUBTYPE OF (dimensional_location);
+END_ENTITY;
+
+ENTITY directed_tolerance_zone
+  SUBTYPE OF (tolerance_zone_with_datum);
+  direction : directed_tolerance_zone_type;
+END_ENTITY;
+
+ENTITY direction
+  SUBTYPE OF (geometric_representation_item);
+  direction_ratios : LIST [2 : 3] OF REAL;
+WHERE
+  WR1: SIZEOF(QUERY(tmp <* direction_ratios | tmp <> 0.0)) > 0;
+END_ENTITY;
+
+ENTITY direction_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) = 1);
+  WR2: (SIZEOF(QUERY(it
+                     <* SELF.items
+                     | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(it))))) =
+        0);
+END_ENTITY;
+
+ENTITY disallowed_assembly_relationship_usage
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE']);
+END_ENTITY;
+
+ENTITY disconnected_face_set
+  SUBTYPE OF (erroneous_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY discontinuous_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(g1_discontinuous_curve, g2_discontinuous_curve, g1_discontinuous_surface,
+                               g2_discontinuous_surface))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY div_expression
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY document;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+  kind        : document_type;
+INVERSE
+  representation_types : SET [0:?] OF document_representation_type FOR represented_document;
+END_ENTITY;
+
+ENTITY document_file
+  SUBTYPE OF (document, characterized_object);
+WHERE
+  WR1: SELF\characterized_object.name = '';
+  WR2: NOT EXISTS(SELF\characterized_object.description);
+  WR3: SIZEOF(QUERY(drt <* SELF\document.representation_types | drt.name IN ['digital','physical'])) = 1;
+END_ENTITY;
+
+ENTITY document_identifier
+  SUBTYPE OF (group);
+UNIQUE
+  UR1: SELF\group.name, SELF\group.description;
+END_ENTITY;
+
+ENTITY document_identifier_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : document_identifier;
+  items                                : SET [1 : ?] OF document_identifier_assigned_item;
+END_ENTITY;
+
+ENTITY document_product_association;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_document : document;
+  related_product   : product_or_formation_or_definition;
+END_ENTITY;
+
+ENTITY document_product_equivalence
+  SUBTYPE OF (document_product_association);
+WHERE
+  WR1: SELF\document_product_association.name = 'equivalence';
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN
+            TYPEOF(SELF\document_product_association.related_product)) OR
+           ((SELF\document_product_association.relating_document.kind.product_data_type =
+             'configuration controlled document') AND
+            (SIZEOF(QUERY(prpc
+                          <* USEDIN(SELF\document_product_association.related_product,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                          | prpc.name = 'document')) =
+             1));
+  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
+            TYPEOF(SELF.related_product)) OR
+           ((SELF\document_product_association.relating_document.kind.product_data_type =
+             'configuration controlled document version') AND
+            (SIZEOF(QUERY(prpc
+                          <* USEDIN(SELF.related_product\product_definition_formation.of_product,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                          | prpc.name = 'document')) =
+             1));
+  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF.related_product)) OR
+           ((SELF\document_product_association.relating_document.kind.product_data_type =
+             'configuration controlled document definition') AND
+            (SIZEOF(QUERY(prpc
+                          <* USEDIN(SELF\document_product_association.related_product\product_definition.formation.of_product,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                          | prpc.name = 'document')) =
+             1));
+END_ENTITY;
+
+ENTITY document_reference
+  ABSTRACT SUPERTYPE;
+  assigned_document : document;
+  source            : label;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY document_relationship;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_document : document;
+  related_document  : document;
+END_ENTITY;
+
+ENTITY document_representation_type;
+  name                 : label;
+  represented_document : document;
+END_ENTITY;
+
+ENTITY document_type;
+  product_data_type : label;
+END_ENTITY;
+
+ENTITY document_usage_constraint;
+  source                : document;
+  subject_element       : label;
+  subject_element_value : text;
+END_ENTITY;
+
+ENTITY document_usage_constraint_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_document_usage : document_usage_constraint;
+  role                    : document_usage_role;
+END_ENTITY;
+
+ENTITY document_usage_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY dose_equivalent_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOSE_EQUIVALENT_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY dose_equivalent_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.sievert);
+END_ENTITY;
+
+ENTITY double_offset_shelled_solid
+  SUBTYPE OF (shelled_solid);
+  thickness2 : length_measure;
+WHERE
+  WR1: thickness2 <> 0;
+  WR2: SELF\shelled_solid.thickness <> thickness2;
+END_ENTITY;
+
+ENTITY draped_defined_transformation
+  SUBTYPE OF (transformation_with_derived_angle);
+END_ENTITY;
+
+ENTITY draped_orientation_angle
+  SUBTYPE OF (ply_orientation_angle);
+END_ENTITY;
+
+ENTITY draughting_annotation_occurrence
+  SUBTYPE OF (annotation_occurrence);
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(QUERY(sty
+                     <* SELF.styles
+                     | NOT ((SIZEOF(sty.styles) = 1) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                             TYPEOF(sty.styles[1]))))) =
+        0);
+  WR2: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(QUERY(sty
+                     <* SELF.styles
+                     | NOT ((SIZEOF(sty.styles) = 1) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN
+                             TYPEOF(sty.styles[1]))))) =
+        0);
+  WR3: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(QUERY(bound
+                     <* SELF.item\annotation_fill_area.boundaries
+                     | NOT (SIZEOF(QUERY(si
+                                         <* USEDIN(bound,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN
+                                            TYPEOF(si)))) >
+                            0))) =
+        0);
+  WR4: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(QUERY(sty
+                     <* SELF.styles
+                     | NOT ((SIZEOF(sty.styles) = 1) AND
+                            (SIZEOF(TYPEOF(sty.styles[1]) *
+                                    ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_STYLE',
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NULL_STYLE']) =
+                             1)))) =
+        0);
+  WR5: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(SELF.item)))) OR
+       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SYMBOL_REPRESENTATION',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_SUBFIGURE_REPRESENTATION'] *
+               TYPEOF(SELF.item\mapped_item.mapping_source.mapped_representation)) =
+        1);
+  WR6: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(QUERY(sty
+                     <* SELF.styles
+                     | NOT ((SIZEOF(sty.styles) = 1) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE' IN
+                             TYPEOF(sty.styles[1]))))) =
+        0);
+  WR7: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF))) OR
+       (SIZEOF(TYPEOF(SELF.item) *
+               ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL']) =
+        1);
+  WR8: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR
+       (SIZEOF(QUERY(tl
+                     <* SELF.item\composite_text.collected_text
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(tl)))) =
+        0);
+  WR9: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(SELF.item)))) OR
+       (SELF.item\text_literal.alignment IN ['baseline left','baseline centre','baseline right']);
+  WR10: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR
+        (SIZEOF(QUERY(tl
+                      <* QUERY(text
+                               <* SELF.item\composite_text.collected_text
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(text)))
+                      | NOT (tl\text_literal.alignment IN ['baseline left','baseline centre','baseline right']))) =
+         0);
+  WR11: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item))) OR
+            check_text_alignment(SELF.item);
+  WR12: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item))) OR
+            check_text_font(SELF.item);
+  WR13: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(SELF.item)))) OR
+        (SIZEOF(QUERY(tl
+                      <* QUERY(text
+                               <* SELF.item\composite_text.collected_text
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL' IN TYPEOF(text)))
+                      | NOT (SIZEOF(TYPEOF(tl) *
+                                    ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_BLANKING_BOX',
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_ASSOCIATED_CURVES']) =
+                             0))) =
+         0);
+  WR14: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL_WITH_ASSOCIATED_CURVES' IN
+               TYPEOF(SELF.item)))) OR
+        (SIZEOF(QUERY(crv
+                      <* SELF.item\text_literal_with_associated_curves.associated_curves
+                      | NOT (SIZEOF(QUERY(si
+                                          <* USEDIN(crv,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN
+                                             TYPEOF(si)))) >
+                             0))) =
+         0);
+  WR15: (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND
+              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT_WITH_ASSOCIATED_CURVES' IN
+               TYPEOF(SELF.item)))) OR
+        (SIZEOF(QUERY(crv
+                      <* SELF.item\composite_text_with_associated_curves.associated_curves
+                      | NOT (SIZEOF(QUERY(si
+                                          <* USEDIN(crv,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE' IN
+                                             TYPEOF(si)))) >
+                             0))) =
+         0);
+  WR16: SIZEOF(QUERY(cs
+                     <* QUERY(sty
+                              <* SELF.styles
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                 TYPEOF(sty.styles[1])))
+                     | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                             TYPEOF(cs.styles[1]\curve_style.curve_width)) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                             TYPEOF(cs.styles[1]\curve_style.curve_width\measure_with_unit.value_component))))) =
+        0;
+  WR17: SIZEOF(QUERY(fas
+                     <* QUERY(sty
+                              <* SELF.styles
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN
+                                 TYPEOF(sty.styles[1])))
+                     | NOT ((SIZEOF(QUERY(fs
+                                          <* fas.styles[1]\fill_area_style.fill_styles
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_TILES' IN
+                                             TYPEOF(fs)))) <=
+                             1) AND
+                            (SIZEOF(QUERY(fst
+                                          <* QUERY(fs
+                                                   <* fas.styles[1]\fill_area_style.fill_styles
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_TILES' IN
+                                                      TYPEOF(fs)))
+                                          | NOT (SIZEOF(fst\fill_area_style_tiles.tiles) = 1))) =
+                             0)))) =
+        0;
+  WR18: SIZEOF(QUERY(fas
+                     <* QUERY(sty
+                              <* SELF.styles
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE' IN
+                                 TYPEOF(sty.styles[1])))
+                     | NOT (SIZEOF(QUERY(fsh
+                                         <* QUERY(fs
+                                                  <* fas.styles[1]\fill_area_style.fill_styles
+                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_HATCHING' IN
+                                                     TYPEOF(fs)))
+                                         | NOT (fsh\fill_area_style_hatching.point_of_reference_hatch_line :=:
+                                                fsh\fill_area_style_hatching.pattern_start))) =
+                            0))) =
+        0;
+  WR19: SIZEOF(QUERY(ts
+                     <* QUERY(sty
+                              <* SELF.styles
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE' IN
+                                 TYPEOF(sty.styles[1])))
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE_WITH_BOX_CHARACTERISTICS' IN
+                            TYPEOF(ts.styles[1])))) =
+        0;
+  WR20: SIZEOF(QUERY(ts
+                     <* QUERY(sty
+                              <* SELF.styles
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_STYLE_WITH_BOX_CHARACTERISTICS' IN
+                                 TYPEOF(sty.styles[1])))
+                     | NOT (SIZEOF(ts.styles[1]\text_style_with_box_characteristics.characteristics) = 4))) =
+        0;
+END_ENTITY;
+
+ENTITY draughting_callout
+  SUBTYPE OF (geometric_representation_item);
+  contents : SET [1 : ?] OF draughting_callout_element;
+WHERE
+  WR1: (SIZEOF(QUERY(l_1
+                     <* SELF\draughting_callout.contents
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(l_1)))) =
+        0) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND
+       (SIZEOF(QUERY(l_1
+                     <* SELF\draughting_callout.contents
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(l_1)))) =
+        0) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT' IN (TYPEOF(SELF))) AND
+       (SIZEOF(QUERY(l_1
+                     <* SELF\draughting_callout.contents
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE' IN (TYPEOF(l_1)))) =
+        0) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN (TYPEOF(SELF)));
+END_ENTITY;
+
+ENTITY draughting_callout_relationship;
+  name                        : label;
+  description                 : text;
+  relating_draughting_callout : draughting_callout;
+  related_draughting_callout  : draughting_callout;
+END_ENTITY;
+
+ENTITY draughting_elements
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(QUERY(l_c
+                    <* QUERY(con
+                             <* SELF.contents
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(con)))
+                    | NOT (SIZEOF(QUERY(ldc
+                                        <* USEDIN(l_c,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN
+                                           TYPEOF(ldc)))) <=
+                           1))) =
+       0;
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT' IN TYPEOF(SELF)) OR
+           (SIZEOF(QUERY(con
+                         <* SELF.contents
+                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN TYPEOF(con)))) <=
+            2);
+  WR3: SIZEOF(QUERY(rc
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN
+                       TYPEOF(rc)) AND
+                      (rc.name = 'primary'))) <=
+       1;
+  WR4: SIZEOF(QUERY(rc
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN
+                       TYPEOF(rc)) AND
+                      (rc.name = 'secondary'))) <=
+       1;
+  WR5: SIZEOF(QUERY(sec
+                    <* QUERY(rc
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN
+                                TYPEOF(rc)) AND
+                               (rc.name = 'secondary'))
+                    | NOT (SIZEOF(QUERY(prim
+                                        <* USEDIN(SELF,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_RELATIONSHIP' IN
+                                           TYPEOF(prim)) AND
+                                          (prim.name = 'primary'))) =
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY draughting_model
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF draughting_model_item_select;
+UNIQUE
+  UR1: SELF\representation.name;
+WHERE
+  WR1: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL'] *
+                                  TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(smi
+                    <* QUERY(si
+                             <* QUERY(it
+                                      <* SELF.items
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)))
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN
+                                TYPEOF(si\styled_item.item)))
+                    | (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+                             TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation)) AND
+                            (SIZEOF(QUERY(sty
+                                          <* smi\styled_item.styles
+                                          | (NOT (SIZEOF(QUERY(psa
+                                                               <* sty.styles
+                                                               | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                       TYPEOF(psa))))) =
+                                                  1)))) =
+                             1))))) =
+       0;
+END_ENTITY;
+
+ENTITY draughting_model_item_association
+  SUBTYPE OF (item_identified_representation_usage);
+  SELF\item_identified_representation_usage.definition          : draughting_model_item_definition;
+  SELF\item_identified_representation_usage.used_representation : annotation_representation_select;
+  SELF\item_identified_representation_usage.identified_item     : draughting_model_item_association_select;
+END_ENTITY;
+
+ENTITY draughting_model_item_association_with_placeholder
+  SUBTYPE OF (draughting_model_item_association);
+  SELF\draughting_model_item_association.definition          : draughting_model_item_definition;
+  SELF\draughting_model_item_association.used_representation : draughting_model;
+  SELF\item_identified_representation_usage.identified_item  : draughting_callout;
+  annotation_placeholder                                     : annotation_placeholder_occurrence;
+END_ENTITY;
+
+ENTITY draughting_pre_defined_colour
+  SUBTYPE OF (pre_defined_colour);
+WHERE
+  WR1: SELF\pre_defined_item.name IN ['red','green','blue','yellow','magenta','cyan','black','white'];
+END_ENTITY;
+
+ENTITY draughting_pre_defined_curve_font
+  SUBTYPE OF (pre_defined_curve_font);
+WHERE
+  WR1: SELF\pre_defined_item.name IN ['continuous','chain','chain double dash','dashed','dotted'];
+END_ENTITY;
+
+ENTITY draughting_pre_defined_text_font
+  SUBTYPE OF (pre_defined_text_font);
+WHERE
+  WR1: SELF\pre_defined_item.name[1:8] = 'ISO 3098';
+END_ENTITY;
+
+ENTITY draughting_specification_reference
+  SUBTYPE OF (document_reference);
+  specified_items : SET [1 : ?] OF specified_item;
+WHERE
+  WR1: (SELF.assigned_document.kind.product_data_type = 'draughting specification');
+END_ENTITY;
+
+ENTITY draughting_subfigure_representation
+  SUBTYPE OF (symbol_representation);
+  SELF\representation.items : SET [1 : ?] OF draughting_subfigure_representation_item;
+WHERE
+  WR1: SIZEOF(QUERY(item
+                    <* SELF\representation.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_OCCURRENCE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT'] *
+                             TYPEOF(item)) =
+                      1)) >=
+       1;
+  WR2: SIZEOF(QUERY(srm
+                    <* QUERY(rm
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_REPRESENTATION_MAP' IN
+                                TYPEOF(rm)))
+                    | NOT (SIZEOF(QUERY(a_s
+                                        <* QUERY(mi
+                                                 <* srm.map_usage
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN
+                                                    TYPEOF(mi)))
+                                        | NOT (SIZEOF(QUERY(aso
+                                                            <* USEDIN(a_s,
+                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE' IN
+                                                                   TYPEOF(aso)))) =
+                                               0))) =
+                           0))) >
+       0;
+  WR3: SIZEOF(SELF.context_of_items.representations_in_context) = 1;
+END_ENTITY;
+
+ENTITY draughting_symbol_representation
+  SUBTYPE OF (symbol_representation);
+  SELF\representation.items : SET [1 : ?] OF draughting_symbol_representation_item;
+UNIQUE
+  UR1: SELF\representation.name;
+WHERE
+  WR1: SIZEOF(QUERY(item
+                    <* SELF\representation.items
+                    | (SIZEOF(TYPEOF(item) *
+                              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_FILL_AREA_OCCURRENCE',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE']) =
+                       1))) >=
+       1;
+  WR2: SIZEOF(QUERY(item
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SUBFIGURE_OCCURRENCE' IN
+                      TYPEOF(item))) =
+       0;
+  WR3: SIZEOF(QUERY(rm
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION')
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMBOL_REPRESENTATION_MAP' IN
+                           TYPEOF(rm)))) =
+       0;
+  WR4: SIZEOF(SELF.context_of_items.representations_in_context) = 1;
+END_ENTITY;
+
+ENTITY draughting_text_literal_with_delineation
+  SUBTYPE OF (text_literal_with_delineation);
+WHERE
+  WR1: SELF.delineation IN ['underline','overline'];
+END_ENTITY;
+
+ENTITY draughting_title;
+  items    : SET [1 : ?] OF draughting_titled_item;
+  language : label;
+  contents : text;
+END_ENTITY;
+
+ENTITY drawing_definition;
+  drawing_number : identifier;
+  drawing_type   : OPTIONAL label;
+END_ENTITY;
+
+ENTITY drawing_revision
+  SUBTYPE OF (presentation_set);
+  revision_identifier : identifier;
+  drawing_identifier  : drawing_definition;
+  intended_scale      : OPTIONAL text;
+UNIQUE
+  UR1: revision_identifier, drawing_identifier;
+END_ENTITY;
+
+ENTITY drawing_revision_sequence;
+  predecessor : drawing_revision;
+  successor   : drawing_revision;
+WHERE
+  WR1: predecessor :<>: successor;
+END_ENTITY;
+
+ENTITY drawing_sheet_layout
+  SUBTYPE OF (draughting_symbol_representation);
+END_ENTITY;
+
+ENTITY drawing_sheet_revision
+  SUBTYPE OF (presentation_area);
+  revision_identifier : identifier;
+WHERE
+  WR1: SIZEOF(QUERY(item
+                    <* SELF\representation.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN (TYPEOF(item))) AND
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN
+                       (TYPEOF(item\mapped_item.mapping_source.mapped_representation))))) =
+       0;
+END_ENTITY;
+
+ENTITY drawing_sheet_revision_sequence
+  SUBTYPE OF (representation_relationship);
+WHERE
+  WR1: SELF\representation_relationship.rep_1 :<>: SELF\representation_relationship.rep_2;
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN
+       TYPEOF(SELF\representation_relationship.rep_1);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN
+       TYPEOF(SELF\representation_relationship.rep_2);
+END_ENTITY;
+
+ENTITY drawing_sheet_revision_usage
+  SUBTYPE OF (area_in_set);
+  sheet_number : identifier;
+UNIQUE
+  UR1: sheet_number, SELF\area_in_set.in_set;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_SHEET_REVISION' IN TYPEOF(SELF\area_in_set.area)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAWING_REVISION' IN TYPEOF(SELF\area_in_set.in_set));
+END_ENTITY;
+
+ENTITY dupin_cyclide_surface
+  SUBTYPE OF (elementary_surface);
+  generalised_major_radius : positive_length_measure;
+  generalised_minor_radius : positive_length_measure;
+  skewness                 : length_measure;
+WHERE
+  WR1: skewness >= 0.0;
+END_ENTITY;
+
+ENTITY eccentric_cone
+  SUBTYPE OF (geometric_representation_item);
+  position    : axis2_placement_3d;
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+  height      : positive_length_measure;
+  x_offset    : length_measure;
+  y_offset    : length_measure;
+  ratio       : REAL;
+WHERE
+  WR1: ratio >= 0.0;
+END_ENTITY;
+
+ENTITY eccentric_conical_volume
+  SUBTYPE OF (volume);
+  position    : axis2_placement_3d;
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+  height      : positive_length_measure;
+  x_offset    : length_measure;
+  y_offset    : length_measure;
+  ratio       : REAL;
+WHERE
+  WR1: ratio >= 0.0;
+END_ENTITY;
+
+ENTITY edge
+  SUPERTYPE OF (ONEOF(edge_curve, edge_with_length, oriented_edge, subedge))
+  SUBTYPE OF (topological_representation_item);
+  edge_start : vertex;
+  edge_end   : vertex;
+END_ENTITY;
+
+ENTITY edge_based_wireframe_model
+  SUBTYPE OF (geometric_representation_item);
+  ebwm_boundary : SET [1 : ?] OF connected_edge_set;
+END_ENTITY;
+
+ENTITY edge_based_wireframe_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                              TYPEOF(it)) =
+                       1))) >=
+       1;
+  WR3: SIZEOF(QUERY(ebwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(eb
+                                        <* ebwm\edge_based_wireframe_model.ebwm_boundary
+                                        | NOT (SIZEOF(QUERY(edges
+                                                            <* eb.ces_edges
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                   TYPEOF(edges)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(ebwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(eb
+                                        <* ebwm\edge_based_wireframe_model.ebwm_boundary
+                                        | NOT (SIZEOF(QUERY(pline_edges
+                                                            <* QUERY(edges
+                                                                     <* eb.ces_edges
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                                                        TYPEOF(edges\edge_curve.edge_geometry)))
+                                                            | NOT (SIZEOF(pline_edges\edge_curve.edge_geometry\polyline.points) >
+                                                                   2))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(ebwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(eb
+                                        <* ebwm\edge_based_wireframe_model.ebwm_boundary
+                                        | NOT (SIZEOF(QUERY(edges
+                                                            <* eb.ces_edges
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                    TYPEOF(edges.edge_start)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                    TYPEOF(edges.edge_end))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(ebwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(eb
+                                        <* ebwm\edge_based_wireframe_model.ebwm_boundary
+                                        | NOT (SIZEOF(QUERY(edges
+                                                            <* eb.ces_edges
+                                                            | NOT valid_wireframe_edge_curve(edges\edge_curve.edge_geometry))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(ebwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(eb
+                                        <* ebwm\edge_based_wireframe_model.ebwm_boundary
+                                        | NOT (SIZEOF(QUERY(edges
+                                                            <* eb.ces_edges
+                                                            | NOT (valid_wireframe_vertex_point(edges.edge_start\vertex_point.vertex_geometry) AND
+                                                                   valid_wireframe_vertex_point(edges.edge_end\vertex_point.vertex_geometry)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR9: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
+END_ENTITY;
+
+ENTITY edge_blended_solid
+  ABSTRACT SUPERTYPE OF (track_blended_solid ANDOR
+                         (ONEOF(solid_with_constant_radius_edge_blend, solid_with_chamfered_edges)))
+  SUBTYPE OF (modified_solid);
+  blended_edges : LIST [1 : ?] OF UNIQUE edge_curve;
+END_ENTITY;
+
+ENTITY edge_curve
+  SUBTYPE OF (edge, geometric_representation_item);
+  edge_geometry : curve;
+  same_sense    : BOOLEAN;
+END_ENTITY;
+
+ENTITY edge_loop
+  SUBTYPE OF (loop, path);
+DERIVE
+  ne : INTEGER := SIZEOF(SELF\path.edge_list);
+WHERE
+  WR1: (SELF\path.edge_list[1].edge_start) :=: (SELF\path.edge_list[ne].edge_end);
+END_ENTITY;
+
+ENTITY edge_round
+  SUBTYPE OF (transition_feature);
+WHERE
+  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                           TYPEOF(pdr.used_representation))) =
+                            1))) =
+        0);
+  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND
+                                                (SIZEOF(impl_rep.used_representation.items) <= 3)))) =
+                            0))) =
+        0);
+  WR3: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'radius'))) =
+                                                1))) =
+                            0))) =
+        0);
+  WR4: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'first offset'))) <=
+                                                1))) =
+                            0))) =
+        0);
+  WR5: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'second offset'))) <=
+                                                1))) =
+                            0))) =
+        0);
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'edge round face'))) <=
+                           1))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'first face shape'))) <=
+                           1))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'second face shape'))) <=
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY edge_with_excessive_segments
+  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY edge_with_length
+  SUBTYPE OF (edge);
+  edge_length : positive_length_measure;
+END_ENTITY;
+
+ENTITY effectivity
+  SUPERTYPE OF (ONEOF(serial_numbered_effectivity, dated_effectivity, lot_effectivity,
+                      time_interval_based_effectivity));
+  id : identifier;
+DERIVE
+  name        : label := get_name_value(SELF);
+  description : text  := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY effectivity_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_effectivity : effectivity;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY effectivity_context_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_effectivity_assignment : effectivity_assignment;
+  role                            : effectivity_context_role;
+END_ENTITY;
+
+ENTITY effectivity_context_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY effectivity_relationship;
+  name                 : label;
+  description          : OPTIONAL text;
+  related_effectivity  : effectivity;
+  relating_effectivity : effectivity;
+END_ENTITY;
+
+ENTITY electric_charge_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_CHARGE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY electric_charge_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.coulomb);
+END_ENTITY;
+
+ENTITY electric_current_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_CURRENT_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY electric_current_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 1.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY electric_potential_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_POTENTIAL_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY electric_potential_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.volt);
+END_ENTITY;
+
+ENTITY elementary_brep_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh.cfs_faces
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN
+                                                                   TYPEOF(fcs)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN
+                                                                    TYPEOF(fcs\face_surface.face_geometry))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (SIZEOF(QUERY(elp_fbnds
+                                                                                <* QUERY(bnds
+                                                                                         <* fcs.bounds
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                           TYPEOF(bnds.bound))
+                                                                                | NOT (SIZEOF(QUERY(oe
+                                                                                                    <* elp_fbnds.bound\path.edge_list
+                                                                                                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                                           TYPEOF(oe.edge_element)))) =
+                                                                                       0))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (SIZEOF(QUERY(elp_fbnds
+                                                                                <* QUERY(bnds
+                                                                                         <* fcs.bounds
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                           TYPEOF(bnds.bound))
+                                                                                | NOT (SIZEOF(QUERY(oe
+                                                                                                    <* elp_fbnds.bound\path.edge_list
+                                                                                                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                                                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                                                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE'] *
+                                                                                                                  TYPEOF(oe.edge_element\edge_curve.edge_geometry)) =
+                                                                                                           1))) =
+                                                                                       0))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (SIZEOF(QUERY(elp_fbnds
+                                                                                <* QUERY(bnds
+                                                                                         <* fcs.bounds
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                           TYPEOF(bnds.bound))
+                                                                                | NOT (SIZEOF(QUERY(oe
+                                                                                                    <* elp_fbnds.bound\path.edge_list
+                                                                                                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                            TYPEOF(oe.edge_start)) AND
+                                                                                                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                            TYPEOF(oe.edge_end))))) =
+                                                                                       0))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(msb)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (SIZEOF(QUERY(elp_fbnds
+                                                                                <* QUERY(bnds
+                                                                                         <* fcs.bounds
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                           TYPEOF(bnds.bound))
+                                                                                | NOT (SIZEOF(QUERY(oe
+                                                                                                    <* elp_fbnds.bound\path.edge_list
+                                                                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                                                                                       TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND
+                                                                                                      (NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >=
+                                                                                                            3)))) =
+                                                                                       0))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN
+                      TYPEOF(msb\manifold_solid_brep.outer))) =
+       0;
+  WR10: SIZEOF(QUERY(brv
+                     <* QUERY(it
+                              <* items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(mi
+                     <* QUERY(it
+                              <* items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_BREP_SHAPE_REPRESENTATION' IN
+                            TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+        0;
+  WR12: SIZEOF(QUERY(msb
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(csh
+                                         <* msb_shells(msb)
+                                         | NOT (SIZEOF(QUERY(fcs
+                                                             <* csh\connected_face_set.cfs_faces
+                                                             | NOT (SIZEOF(QUERY(vlp_fbnds
+                                                                                 <* QUERY(bnds
+                                                                                          <* fcs.bounds
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                                            TYPEOF(bnds.bound))
+                                                                                 | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                         TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND
+                                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN
+                                                                                         TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex\vertex_point.vertex_geometry))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY elementary_function
+  SUBTYPE OF (maths_function, generic_literal);
+  func_id : elementary_function_enumerators;
+END_ENTITY;
+
+ENTITY elementary_space
+  SUBTYPE OF (maths_space, generic_literal);
+  space_id : elementary_space_enumerators;
+END_ENTITY;
+
+ENTITY elementary_surface
+  SUPERTYPE OF (ONEOF(plane, cylindrical_surface, conical_surface, spherical_surface, toroidal_surface))
+  SUBTYPE OF (surface);
+  position : axis2_placement_3d;
+END_ENTITY;
+
+ENTITY ellipse
+  SUBTYPE OF (conic);
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+END_ENTITY;
+
+ENTITY ellipsoid
+  SUBTYPE OF (geometric_representation_item);
+  position    : axis2_placement_3d;
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+  semi_axis_3 : positive_length_measure;
+END_ENTITY;
+
+ENTITY ellipsoid_volume
+  SUBTYPE OF (volume);
+  position    : axis2_placement_3d;
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+  semi_axis_3 : positive_length_measure;
+END_ENTITY;
+
+ENTITY elliptic_area
+  SUBTYPE OF (primitive_2d);
+  position    : axis2_placement_2d;
+  semi_axis_1 : positive_length_measure;
+  semi_axis_2 : positive_length_measure;
+END_ENTITY;
+
+ENTITY energy_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ENERGY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY energy_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.joule);
+END_ENTITY;
+
+ENTITY entirely_narrow_face
+  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  width_tolerance                                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY entirely_narrow_solid
+  SUBTYPE OF (inapt_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  width_tolerance                                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY entirely_narrow_surface
+  SUBTYPE OF (nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  width_tolerance                                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY entity_assertion
+  SUBTYPE OF (fact_type);
+END_ENTITY;
+
+ENTITY enum_reference_prefix
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY envelope
+  SUBTYPE OF (characterized_object, product);
+END_ENTITY;
+
+ENTITY envelope_relationship
+  SUBTYPE OF (product_relationship);
+END_ENTITY;
+
+ENTITY environment;
+  syntactic_representation : generic_variable;
+  semantics                : variable_semantics;
+END_ENTITY;
+
+ENTITY equal_parameter_constraint
+  SUBTYPE OF (defined_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF variational_parameter;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF variational_parameter;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) >= 2;
+END_ENTITY;
+
+ENTITY equals_expression
+  SUBTYPE OF (binary_boolean_expression);
+END_ENTITY;
+
+ENTITY equivalence_instance_report_item_with_notable_instances
+  SUBTYPE OF (a3m_equivalence_inspection_instance_report_item);
+  notable_instances : LIST [1 : ?] OF equivalence_notable_instance;
+END_ENTITY;
+
+ENTITY equivalence_notable_instance;
+  comparing_elements : LIST [0 : ?] OF equivalence_detected_difference_select;
+  compared_elements  : LIST [0 : ?] OF equivalence_detected_difference_select;
+  measured_value     : equivalence_measured_value_select;
+WHERE
+  WR1: (SIZEOF(comparing_elements) <> 0) OR (SIZEOF(compared_elements) <> 0);
+END_ENTITY;
+
+ENTITY erroneous_b_spline_curve_definition
+  SUBTYPE OF (erroneous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY erroneous_b_spline_surface_definition
+  SUBTYPE OF (erroneous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY erroneous_data
+  ABSTRACT SUPERTYPE OF (ONEOF(erroneous_topology, erroneous_geometry, erroneous_topology_and_geometry_relationship,
+                               erroneous_manifold_solid_brep))
+  SUBTYPE OF (shape_data_quality_criterion);
+END_ENTITY;
+
+ENTITY erroneous_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(inconsistent_curve_transition_code, erroneous_b_spline_curve_definition,
+                               inconsistent_surface_transition_code, erroneous_b_spline_surface_definition))
+  SUBTYPE OF (erroneous_data);
+END_ENTITY;
+
+ENTITY erroneous_manifold_solid_brep
+  ABSTRACT SUPERTYPE OF (ONEOF(wrongly_oriented_void, wrongly_placed_void, intersecting_shells_in_solid,
+                               solid_with_wrong_number_of_voids))
+  SUBTYPE OF (erroneous_data);
+END_ENTITY;
+
+ENTITY erroneous_topology
+  ABSTRACT SUPERTYPE OF (ONEOF(open_edge_loop, open_closed_shell, inconsistent_adjacent_face_normals,
+                               disconnected_face_set))
+  SUBTYPE OF (erroneous_data);
+END_ENTITY;
+
+ENTITY erroneous_topology_and_geometry_relationship
+  ABSTRACT SUPERTYPE OF (ONEOF(inconsistent_edge_and_curve_directions, inconsistent_face_and_surface_normals,
+                               inconsistent_face_and_closed_shell_normals, intersecting_loops_in_face,
+                               wrongly_placed_loop))
+  SUBTYPE OF (erroneous_data);
+END_ENTITY;
+
+ENTITY evaluated_characteristic
+  SUBTYPE OF (representation, representation_relationship);
+UNIQUE
+  UR1: SELF\representation_relationship.rep_1, SELF\representation_relationship.rep_2;
+WHERE
+  WR1: SELF\representation_relationship.rep_1 <> SELF\representation_relationship.rep_2;
+END_ENTITY;
+
+ENTITY evaluated_characteristic_of_product_as_individual_test_result
+  SUBTYPE OF (evaluated_characteristic);
+END_ENTITY;
+
+ENTITY evaluated_degenerate_pcurve
+  SUBTYPE OF (degenerate_pcurve);
+  equivalent_point : cartesian_point;
+END_ENTITY;
+
+ENTITY evaluation_product_definition
+  SUBTYPE OF (product_definition);
+END_ENTITY;
+
+ENTITY event_occurrence;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY event_occurrence_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_event_occurrence : event_occurrence;
+  role                      : event_occurrence_role;
+END_ENTITY;
+
+ENTITY event_occurrence_relationship;
+  name           : label;
+  description    : OPTIONAL text;
+  relating_event : event_occurrence;
+  related_event  : event_occurrence;
+END_ENTITY;
+
+ENTITY event_occurrence_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY evidence
+  SUBTYPE OF (group_assignment);
+  items : SET [1 : ?] OF evidence_item;
+END_ENTITY;
+
+ENTITY excessive_use_of_groups
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP']);
+END_ENTITY;
+
+ENTITY excessive_use_of_layers
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT']);
+END_ENTITY;
+
+ENTITY excessively_high_degree_curve
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY excessively_high_degree_surface
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY exclusive_product_concept_feature_category
+  SUBTYPE OF (product_concept_feature_category);
+END_ENTITY;
+
+ENTITY executed_action
+  SUBTYPE OF (action);
+END_ENTITY;
+
+ENTITY exp_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY expanded_uncertainty
+  SUBTYPE OF (standard_uncertainty);
+  coverage_factor : REAL;
+END_ENTITY;
+
+ENTITY explicit_composite_hole
+  SUBTYPE OF (composite_hole);
+  placement : shape_representation;
+INVERSE
+  explicit_shape : SET [0:?] OF item_identified_representation_usage FOR definition;
+WHERE
+  WR1: SIZEOF(QUERY(ri
+                    <* placement\representation.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ri)))) =
+       1;
+  WR2: (SIZEOF(explicit_shape) = 0) OR
+       (SIZEOF(QUERY(es
+                     <* explicit_shape
+                     | NOT (placement = es\item_identified_representation_usage.used_representation))) =
+        0);
+END_ENTITY;
+
+ENTITY explicit_constraint
+  ABSTRACT SUPERTYPE OF (ONEOF(defined_constraint, free_form_constraint))
+  SUBTYPE OF (variational_representation_item);
+  description          : OPTIONAL text;
+  constrained_elements : SET [1 : ?] OF representation_item;
+  reference_elements   : SET [0 : ?] OF representation_item;
+WHERE
+  WR1: SIZEOF(constrained_elements * reference_elements) = 0;
+END_ENTITY;
+
+ENTITY explicit_geometric_constraint
+  ABSTRACT SUPERTYPE OF (ONEOF(fixed_element_geometric_constraint, parallel_geometric_constraint,
+                               point_distance_geometric_constraint, skew_line_distance_geometric_constraint,
+                               curve_distance_geometric_constraint, surface_distance_geometric_constraint,
+                               radius_geometric_constraint, curve_length_geometric_constraint,
+                               parallel_offset_geometric_constraint, angle_geometric_constraint,
+                               perpendicular_geometric_constraint, incidence_geometric_constraint,
+                               coaxial_geometric_constraint, tangent_geometric_constraint,
+                               symmetry_geometric_constraint, swept_point_curve_geometric_constraint,
+                               swept_curve_surface_geometric_constraint, curve_smoothness_geometric_constraint,
+                               surface_smoothness_geometric_constraint))
+  SUBTYPE OF (defined_constraint, geometric_representation_item);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF geometric_representation_item;
+  SELF\explicit_constraint.reference_elements   : SET [0 : ?] OF geometric_representation_item;
+END_ENTITY;
+
+ENTITY explicit_procedural_geometric_representation_item_relationship
+  SUBTYPE OF (explicit_procedural_representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : procedural_shape_representation_sequence;
+  SELF\representation_item_relationship.related_representation_item  : geometric_representation_item;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_SHAPE_REPRESENTATION_SEQUENCE' IN
+            TYPEOF(SELF\representation_item_relationship.related_representation_item));
+END_ENTITY;
+
+ENTITY explicit_procedural_representation_item_relationship
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : procedural_representation_sequence;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_REPRESENTATION_SEQUENCE' IN
+            TYPEOF(SELF\representation_item_relationship.related_representation_item));
+  WR2: SIZEOF(QUERY(q
+                    <* using_representations(SELF\representation_item_relationship.related_representation_item)
+                    | item_in_context(SELF\representation_item_relationship.relating_representation_item,
+                                      q.context_of_items))) >
+       0;
+END_ENTITY;
+
+ENTITY explicit_procedural_representation_relationship
+  SUBTYPE OF (representation_relationship);
+  SELF\representation_relationship.rep_1 : procedural_representation;
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_REPRESENTATION' IN
+             TYPEOF(SELF\representation_relationship.rep_2))) AND
+       (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION' IN
+             TYPEOF(SELF\representation_relationship.rep_2)));
+  WR2: SELF\representation_relationship.rep_1.context_of_items :=:
+       SELF\representation_relationship.rep_2.context_of_items;
+END_ENTITY;
+
+ENTITY explicit_procedural_shape_representation_relationship
+  SUBTYPE OF (explicit_procedural_representation_relationship);
+  SELF\representation_relationship.rep_1 : procedural_shape_representation;
+  SELF\representation_relationship.rep_2 : shape_representation;
+END_ENTITY;
+
+ENTITY explicit_round_hole
+  SUBTYPE OF (round_hole);
+  depth              : positive_length_measure_with_unit;
+  depth_tolerance    : OPTIONAL tolerance_value;
+  diameter           : positive_length_measure_with_unit;
+  diameter_tolerance : OPTIONAL tolerance_value_or_limits_and_fits;
+  placement          : shape_representation;
+WHERE
+  WR1: SIZEOF(QUERY(ri
+                    <* placement\representation.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(ri)))) =
+       1;
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(depth_tolerance\tolerance_value.lower_bound);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(depth_tolerance\tolerance_value.upper_bound);
+  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(diameter_tolerance\tolerance_value.lower_bound));
+  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_VALUE' IN TYPEOF(diameter_tolerance)) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+            TYPEOF(diameter_tolerance\tolerance_value.upper_bound));
+END_ENTITY;
+
+ENTITY explicit_table_function
+  ABSTRACT SUPERTYPE OF (ONEOF(listed_real_data, listed_integer_data, listed_logical_data, listed_string_data,
+                               listed_complex_number_data, listed_data, externally_listed_data,
+                               linearized_table_function, basic_sparse_matrix))
+  SUBTYPE OF (maths_function);
+  index_base : zero_or_one;
+  shape      : LIST [1 : ?] OF positive_integer;
+END_ENTITY;
+
+ENTITY expression
+  ABSTRACT SUPERTYPE OF (ONEOF(numeric_expression, boolean_expression, string_expression))
+  SUBTYPE OF (generic_expression);
+END_ENTITY;
+
+ENTITY expression_conversion_based_unit
+  SUBTYPE OF (context_dependent_unit, variable_semantics);
+INVERSE
+  associated_variable_environment : environment FOR semantics;
+END_ENTITY;
+
+ENTITY expression_denoted_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+DERIVE
+  expr : generic_expression := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: (schema_prefix + 'FUNCTION_SPACE') IN TYPEOF(values_space_of(expr));
+END_ENTITY;
+
+ENTITY expression_extension_numeric
+  SUBTYPE OF (measure_with_unit, numeric_expression);
+END_ENTITY;
+
+ENTITY expression_extension_string
+  SUBTYPE OF (measure_with_unit, string_expression);
+END_ENTITY;
+
+ENTITY expression_extension_to_select;
+  type_expression_associated : expression_extension_select;
+END_ENTITY;
+
+ENTITY extended_tuple_space
+  SUBTYPE OF (maths_space, generic_literal);
+  base     : tuple_space;
+  extender : maths_space;
+WHERE
+  WR1: expression_is_constant(base) AND expression_is_constant(extender);
+  WR2: no_cyclic_space_reference(SELF, []);
+  WR3: extender <> the_empty_space;
+END_ENTITY;
+
+ENTITY extension
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
+END_ENTITY;
+
+ENTITY extent
+  SUBTYPE OF (characterized_object);
+END_ENTITY;
+
+ENTITY external_class_library
+  SUBTYPE OF (external_source);
+END_ENTITY;
+
+ENTITY external_identification_assignment
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (identification_assignment);
+  source : external_source;
+END_ENTITY;
+
+ENTITY external_identification_assignment_relationship;
+  id            : OPTIONAL identifier;
+  description   : OPTIONAL text;
+  relating      : external_identification_assignment;
+  related       : external_identification_assignment;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_external_identification_assignment_relationship(SELF, [related],
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY external_source;
+  source_id : source_item;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY external_source_relationship;
+  name            : label;
+  description     : OPTIONAL text;
+  relating_source : external_source;
+  related_source  : external_source;
+END_ENTITY;
+
+ENTITY externally_conditioned_data_quality_criteria_representation
+  SUBTYPE OF (data_quality_criteria_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_CRITERION' IN
+                      TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY externally_conditioned_data_quality_criterion
+  SUBTYPE OF (data_quality_criterion, data_quality_measurement_requirement);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) =
+       0;
+  WR2: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+  WR3: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+END_ENTITY;
+
+ENTITY externally_conditioned_data_quality_inspection_instance_report_item
+  SUBTYPE OF (data_quality_inspection_instance_report_item);
+  SELF\data_quality_inspection_instance_report_item.inspected_elements : SET [1 : ?] OF inspected_ecdq_element_select;
+WHERE
+  WR1: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT.INSPECTED_INSTANCES'))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN
+                           TYPEOF(i1.inspection_result)))) =
+       0;
+END_ENTITY;
+
+ENTITY externally_conditioned_data_quality_inspection_result
+  SUBTYPE OF (data_quality_inspection_result);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_CRITERION' IN
+       TYPEOF(SELF\data_quality_inspection_result.criterion_inspected);
+END_ENTITY;
+
+ENTITY externally_conditioned_data_quality_inspection_result_representation
+  SUBTYPE OF (data_quality_inspection_result_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN
+                      TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY externally_defined_character_glyph
+  SUBTYPE OF (externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_class
+  SUBTYPE OF (class, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_colour
+  SUBTYPE OF (colour_specification, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_context_dependent_unit
+  SUBTYPE OF (context_dependent_unit, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_conversion_based_unit
+  SUBTYPE OF (conversion_based_unit, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_currency
+  SUBTYPE OF (currency, externally_defined_context_dependent_unit);
+END_ENTITY;
+
+ENTITY externally_defined_curve_font
+  SUBTYPE OF (externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_dimension_definition
+  SUBTYPE OF (dimensional_size, externally_defined_item);
+WHERE
+  WR1: (SELF\externally_defined_item.item_id = 'external size dimension') AND
+       (SELF\externally_defined_item.source.source_id = 'external size dimension specification');
+  WR2: 1 >=
+       SIZEOF(QUERY(adr
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_REFERENCE.ITEMS')
+                    | (adr.assigned_document.description = 'external size dimension specification')));
+END_ENTITY;
+
+ENTITY externally_defined_feature_definition
+  SUBTYPE OF (feature_definition, externally_defined_item);
+WHERE
+  WR1: (((SELF\characterized_object.description = 'thread') AND
+         (SELF\externally_defined_item.item_id = 'external thread') AND
+         (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR
+        ((SELF\characterized_object.description = 'gear') AND
+         (SELF\externally_defined_item.item_id = 'external gear') AND
+         (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR
+        ((SELF\characterized_object.description = 'marking') AND
+         (SELF\externally_defined_item.item_id = 'external marking') AND
+         (SELF\externally_defined_item.source.source_id = 'external feature specification')) OR
+        ((SELF\characterized_object.description = 'knurl') AND
+         (SELF\externally_defined_item.item_id = 'external knurl') AND
+         (SELF\externally_defined_item.source.source_id = 'external feature specification')));
+  WR2: ((NOT (SELF\characterized_object.description = 'thread')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(pdr.used_representation)) AND
+                                       ({5 <= SIZEOF(pdr.used_representation.items) <= 10}))) =
+                        1)) =
+         1));
+  WR3: ((NOT (SELF\characterized_object.description = 'marking')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(pdr.used_representation)) AND
+                                       (SIZEOF(pdr.used_representation.items) = 2))) =
+                        1)) =
+         1));
+  WR4: ((NOT (SELF\characterized_object.description = 'knurl')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(pdr.used_representation)) AND
+                                       (SIZEOF(pdr.used_representation.items) = 1))) =
+                        1)) =
+         1));
+  WR5: (NOT (SELF\characterized_object.description IN ['knurl','thread'])) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'partial area occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'applied area usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN
+                                                              TYPEOF(sdr.relating_shape_aspect)))) =
+                                              1)))) <=
+                             1)))) =
+        0);
+  WR6: ((NOT (SELF\characterized_object.description = 'marking')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'marking text')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT (SELF\characterized_object.description = 'thread')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'removal direction') AND
+                                                                   ((it.description = 'internal') OR
+                                                                    (it.description = 'external'))))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT (SELF\characterized_object.description = 'thread')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'qualifier')))) <=
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR9: ((NOT (SELF\characterized_object.description = 'thread')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'hand')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR10: ((NOT (SELF\characterized_object.description = 'thread')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'fit class')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR11: ((NOT (SELF\characterized_object.description = 'thread')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'form')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR12: ((NOT (SELF\characterized_object.description = 'thread')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'major diameter')))) <=
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR13: ((NOT (SELF\characterized_object.description = 'thread')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'number of threads')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR14: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'fit class 2')))) <=
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR15: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'nominal size')))) <=
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR16: (NOT (SELF\characterized_object.description IN ['knurl','gear','thread'])) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'applied shape') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) =
+                                               1)))) <=
+                              1)))) =
+         0);
+  WR17: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | SIZEOF(QUERY(pdr
+                                      <* USEDIN(pd,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                         TYPEOF(pdr.used_representation)) AND
+                                        (10 <= SIZEOF(pdr.used_representation.items)) AND
+                                        (SIZEOF(pdr.used_representation.items) >= 11))) =
+                         1)) =
+          1));
+  WR18: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'number of teeth')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR19: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'reference pressure angle')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR20: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'rake shift factor')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR21: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'nominal tooth depth')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR22: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'face width')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR23: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'tip diameter')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR24: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'module or diametral pitch') AND
+                                                                    ((it.description = 'module') OR
+                                                                     (it.description = 'diametral pitch'))))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR25: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'normal attribute')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR26: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'internal or external gear') AND
+                                                                    ((it.description = 'internal') OR
+                                                                     (it.description = 'external'))))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR27: ((NOT (SELF\characterized_object.description IN ['gear'])) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'root fillet radius')))) <=
+                                                    1)))) =
+                               0)))) =
+          0));
+END_ENTITY;
+
+ENTITY externally_defined_general_property
+  SUBTYPE OF (general_property, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_hatch_style
+  SUBTYPE OF (externally_defined_item, geometric_representation_item);
+END_ENTITY;
+
+ENTITY externally_defined_item;
+  item_id : source_item;
+  source  : external_source;
+END_ENTITY;
+
+ENTITY externally_defined_item_relationship;
+  name          : label;
+  description   : OPTIONAL text;
+  relating_item : externally_defined_item;
+  related_item  : externally_defined_item;
+END_ENTITY;
+
+ENTITY externally_defined_item_with_multiple_references
+  SUBTYPE OF (externally_defined_item);
+  references : LIST [1 : ?] OF UNIQUE source_item;
+UNIQUE
+  UR1: references;
+WHERE
+  WR1: NOT (SELF\externally_defined_item.item_id IN references);
+END_ENTITY;
+
+ENTITY externally_defined_marker
+  SUBTYPE OF (externally_defined_symbol, pre_defined_marker);
+END_ENTITY;
+
+ENTITY externally_defined_representation
+  SUBTYPE OF (representation, externally_defined_item);
+  SELF\representation.items : SET [1 : ?] OF externally_defined_representation_item;
+END_ENTITY;
+
+ENTITY externally_defined_representation_item
+  SUBTYPE OF (representation_item, externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_string
+  SUBTYPE OF (externally_defined_representation_item);
+END_ENTITY;
+
+ENTITY externally_defined_style
+  SUBTYPE OF (externally_defined_item, founded_item);
+END_ENTITY;
+
+ENTITY externally_defined_symbol
+  SUBTYPE OF (externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_terminator_symbol
+  SUBTYPE OF (externally_defined_symbol);
+END_ENTITY;
+
+ENTITY externally_defined_text_font
+  SUBTYPE OF (externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_tile
+  SUBTYPE OF (externally_defined_item);
+END_ENTITY;
+
+ENTITY externally_defined_tile_style
+  SUBTYPE OF (externally_defined_item, geometric_representation_item);
+END_ENTITY;
+
+ENTITY externally_listed_data
+  SUBTYPE OF (explicit_table_function, generic_literal, externally_defined_item);
+  value_range : maths_space;
+WHERE
+  WR1: expression_is_constant(value_range);
+END_ENTITY;
+
+ENTITY extreme_instance;
+  locations_of_extreme_value : SET [1 : ?] OF location_of_extreme_value_select;
+  measured_value             : measured_value_select;
+END_ENTITY;
+
+ENTITY extreme_patch_width_variation
+  SUBTYPE OF (geometry_with_local_irregularity);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY extruded_area_solid
+  SUBTYPE OF (swept_area_solid);
+  extruded_direction : direction;
+  depth              : positive_length_measure;
+WHERE
+  WR1: dot_product((SELF\swept_area_solid.swept_area.basis_surface\elementary_surface.position.p[3]),
+                   extruded_direction) <>
+       0.0;
+END_ENTITY;
+
+ENTITY extruded_face_solid
+  SUBTYPE OF (swept_face_solid);
+  extruded_direction : direction;
+  depth              : positive_length_measure;
+WHERE
+  WR1: dot_product((SELF\swept_face_solid.swept_face.face_geometry\elementary_surface.position.p[3]),
+                   extruded_direction) <>
+       0.0;
+END_ENTITY;
+
+ENTITY extruded_face_solid_with_draft_angle
+  SUBTYPE OF (extruded_face_solid_with_trim_conditions);
+  draft_angle : plane_angle_measure;
+WHERE
+  WR1: draft_angle <> 0;
+END_ENTITY;
+
+ENTITY extruded_face_solid_with_multiple_draft_angles
+  SUBTYPE OF (extruded_face_solid_with_trim_conditions);
+  drafted_edges : LIST [2 : ?] OF SET [1 : ?] OF edge_curve;
+  draft_angles  : LIST [2 : ?] OF plane_angle_measure;
+WHERE
+  WR1: SIZEOF(drafted_edges) = SIZEOF(draft_angles);
+  WR2: SIZEOF(QUERY(q <* draft_angles | q = 0)) = 0;
+  WR3: SIZEOF(QUERY(q
+                    <* drafted_edges
+                    | (SIZEOF(QUERY(r <* q | NOT (SELF\swept_face_solid.swept_face IN using_items(r, [])))) > 0))) =
+       0;
+END_ENTITY;
+
+ENTITY extruded_face_solid_with_trim_conditions
+  SUPERTYPE OF (ONEOF(extruded_face_solid_with_draft_angle, extruded_face_solid_with_multiple_draft_angles))
+  SUBTYPE OF (extruded_face_solid);
+  first_trim_condition  : trim_condition_select;
+  second_trim_condition : trim_condition_select;
+  first_trim_intent     : trim_intent;
+  second_trim_intent    : trim_intent;
+  first_offset          : non_negative_length_measure;
+  second_offset         : non_negative_length_measure;
+WHERE
+  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(first_trim_condition)) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(second_trim_condition)));
+  WR2: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) AND
+             ((first_trim_intent = trim_intent.offset) OR (first_trim_intent = trim_intent.up_to_next))) OR
+            (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition)) AND
+             ((second_trim_intent = trim_intent.offset) OR (second_trim_intent = trim_intent.up_to_next))));
+  WR3: NOT (((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+                   TYPEOF(first_trim_condition))) AND
+             ((first_trim_intent = trim_intent.blind) OR (first_trim_intent = trim_intent.through_all))) OR
+            ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+                   TYPEOF(second_trim_condition))) AND
+             ((second_trim_intent = trim_intent.blind) OR (second_trim_intent = trim_intent.through_all))));
+  WR4: (((first_trim_intent = trim_intent.offset) AND (first_offset > 0)) XOR
+        ((first_trim_intent <> trim_intent.offset) AND (first_offset = 0))) AND
+       (((second_trim_intent = trim_intent.offset) AND (second_offset > 0)) XOR
+        ((second_trim_intent <> trim_intent.offset) AND (second_offset = 0)));
+  WR5: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition))) AND
+            (first_trim_condition = second_trim_condition));
+END_ENTITY;
+
+ENTITY face
+  SUPERTYPE OF (ONEOF(face_surface, subface, oriented_face))
+  SUBTYPE OF (topological_representation_item);
+  bounds : SET [1 : ?] OF face_bound;
+WHERE
+  WR1: NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF))));
+  WR2: SIZEOF(QUERY(temp
+                    <* bounds
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF(temp))) <=
+       1;
+END_ENTITY;
+
+ENTITY face_based_surface_model
+  SUBTYPE OF (geometric_representation_item);
+  fbsm_faces : SET [1 : ?] OF connected_face_set;
+END_ENTITY;
+
+ENTITY face_bound
+  SUBTYPE OF (topological_representation_item);
+  bound       : loop;
+  orientation : BOOLEAN;
+END_ENTITY;
+
+ENTITY face_outer_bound
+  SUBTYPE OF (face_bound);
+END_ENTITY;
+
+ENTITY face_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) >= 1);
+  WR2: (SIZEOF(QUERY(it
+                     <* SELF.items
+                     | (NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(it)) OR
+                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(it)))))) =
+        0);
+END_ENTITY;
+
+ENTITY face_shape_representation_relationship
+  SUBTYPE OF (representation_relationship);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(SELF.rep_1));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN TYPEOF(SELF.rep_2));
+END_ENTITY;
+
+ENTITY face_surface
+  SUBTYPE OF (face, geometric_representation_item);
+  face_geometry : surface;
+  same_sense    : BOOLEAN;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_SURFACE' IN TYPEOF(face_geometry));
+END_ENTITY;
+
+ENTITY face_surface_with_excessive_patches_in_one_direction
+  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY faceted_brep
+  SUBTYPE OF (manifold_solid_brep);
+END_ENTITY;
+
+ENTITY faceted_brep_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                              TYPEOF(it)) =
+                       1))) >
+       0;
+  WR3: SIZEOF(QUERY(fbrep
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(fbrep)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN
+                                                                    TYPEOF(fcs)) AND
+                                                                   (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                                                                     TYPEOF(fcs\face_surface.face_geometry)) AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN
+                                                                     TYPEOF(fcs\face_surface.face_geometry\elementary_surface.position.location)))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(fbrep
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(csh
+                                        <* msb_shells(fbrep)
+                                        | NOT (SIZEOF(QUERY(fcs
+                                                            <* csh\connected_face_set.cfs_faces
+                                                            | NOT (SIZEOF(QUERY(bnds
+                                                                                <* fcs.bounds
+                                                                                | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN
+                                                                                   TYPEOF(bnds)))) =
+                                                                   1))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(msb
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN TYPEOF(it)))
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN
+                       TYPEOF(msb\manifold_solid_brep.outer)))) =
+       0;
+  WR6: SIZEOF(QUERY(brv
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(csh <* brv\brep_with_voids.voids | csh\oriented_closed_shell.orientation)) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+END_ENTITY;
+
+ENTITY faceted_primitive
+  SUPERTYPE OF (ONEOF(tetrahedron, convex_hexahedron))
+  SUBTYPE OF (geometric_representation_item);
+  points : LIST [4 : ?] OF UNIQUE cartesian_point;
+WHERE
+  WR1: points[1].dim = 3;
+END_ENTITY;
+
+ENTITY fact_type
+  SUBTYPE OF (property_definition);
+END_ENTITY;
+
+ENTITY feature_component_definition
+  SUBTYPE OF (characterized_object);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(USEDIN(pd,
+                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')) =
+                             1)))) =
+        0);
+END_ENTITY;
+
+ENTITY feature_component_relationship
+  SUPERTYPE OF (ONEOF(pattern_omit_membership, pattern_offset_membership))
+  SUBTYPE OF (shape_aspect_relationship);
+WHERE
+  WR1: ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRANSITION_FEATURE',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN'] *
+                TYPEOF(SELF.relating_shape_aspect)) =
+         1) OR
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MACHINING_FEATURE_DEFINITION' IN
+         TYPEOF(SELF.relating_shape_aspect.of_shape.definition)) OR
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+         TYPEOF(SELF.relating_shape_aspect.of_shape.definition)));
+END_ENTITY;
+
+ENTITY feature_definition
+  SUPERTYPE OF (ONEOF(boss, compound_feature, externally_defined_feature_definition, flat_face, gear, marking,
+                      outer_round, outside_profile, pocket, protrusion, removal_volume, replicate_feature,
+                      revolved_profile, rib_top, round_hole, rounded_end, spherical_cap, step, slot, thread,
+                      turned_knurl))
+  SUBTYPE OF (characterized_object);
+END_ENTITY;
+
+ENTITY feature_definition_with_connection_area
+  SUBTYPE OF (shape_feature_definition);
+END_ENTITY;
+
+ENTITY feature_for_datum_target_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.related_shape_aspect : datum_target;
+UNIQUE
+  UR1: related_shape_aspect;
+WHERE
+  WR1: relating_shape_aspect.of_shape :=: related_shape_aspect.of_shape;
+  WR2: relating_shape_aspect\shape_aspect.product_definitional = true;
+END_ENTITY;
+
+ENTITY feature_in_panel
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SELF.description IN ['pocket','boss','stairstep'];
+  WR2: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      NOT ({2 <= SIZEOF(pdr.used_representation.items) <= 3}))) =
+       0;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | NOT (i.name IN ['orientation','base radius','target radius']))) >
+                       0))) =
+       0;
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'base radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'target radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR6: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'base boundary') AND
+                      (sa.description IN ['directed angle occurrence','closed profile occurrence']))) =
+       1;
+  WR7: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'target boundary') AND
+                      (sa.description IN ['directed angle occurrence','closed profile occurrence']))) =
+       1;
+  WR8: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'directed angle occurrence'))) <= 1;
+  WR9: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.description = 'directed angle occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.name = 'directed angle usage') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTED_ANGLE' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1))) =
+       SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'directed angle occurrence')));
+  WR10: SIZEOF(QUERY(sa
+                     <* get_shape_aspects(SELF)
+                     | (sa.description = 'closed profile occurrence') AND
+                       (SIZEOF(QUERY(sar
+                                     <* USEDIN(sa,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                        TYPEOF(sar)) AND
+                                       (sar.description = 'profile usage') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                               TYPEOF(sar.relating_shape_aspect)) =
+                                        1))) =
+                        1))) =
+        SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | (sa.description = 'closed profile occurrence')));
+  WR11: (SIZEOF(QUERY(pdr
+                      <* get_property_definition_representations(SELF)
+                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                        TYPEOF(pdr.used_representation))) <=
+         1) AND
+        (SIZEOF(QUERY(pdr
+                      <* get_property_definition_representations(SELF)
+                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                         TYPEOF(pdr.used_representation)) AND
+                        NOT (pdr.used_representation.name = 'target face'))) =
+         0);
+  WR12: (SIZEOF(QUERY(sa
+                      <* get_shape_aspects(SELF)
+                      | (sa.name = 'target boundary') AND (sa.description = 'directed angle occurrence'))) =
+         0) OR
+        (SIZEOF(QUERY(pdr
+                      <* get_property_definition_representations(SELF)
+                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                         TYPEOF(pdr.used_representation)))) =
+         1);
+END_ENTITY;
+
+ENTITY feature_pattern
+  SUBTYPE OF (replicate_feature);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                          TYPEOF(srwp_i)))) >
+                                      0))) >
+                      0)) =
+       0;
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'base feature placement'))) >
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY fill_area_style
+  SUBTYPE OF (founded_item);
+  name        : label;
+  fill_styles : SET [1 : ?] OF fill_style_select;
+WHERE
+  WR1: SIZEOF(QUERY(fill_style
+                    <* fill_styles
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_COLOUR' IN
+                      TYPEOF(fill_style))) <=
+       1;
+END_ENTITY;
+
+ENTITY fill_area_style_colour;
+  name        : label;
+  fill_colour : colour;
+END_ENTITY;
+
+ENTITY fill_area_style_hatching
+  SUBTYPE OF (geometric_representation_item);
+  hatch_line_appearance         : curve_style;
+  start_of_next_hatch_line      : one_direction_repeat_factor;
+  point_of_reference_hatch_line : cartesian_point;
+  pattern_start                 : cartesian_point;
+  hatch_line_angle              : plane_angle_measure;
+END_ENTITY;
+
+ENTITY fill_area_style_tile_coloured_region
+  SUBTYPE OF (geometric_representation_item);
+  closed_curve  : curve_or_annotation_curve_occurrence;
+  region_colour : colour;
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(closed_curve))) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN TYPEOF(closed_curve)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE' IN TYPEOF(closed_curve)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(closed_curve)) AND
+        (closed_curve\b_spline_curve.closed_curve = true)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(closed_curve)) AND
+        (closed_curve\composite_curve.closed_curve = true)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(closed_curve)) AND
+        (closed_curve\polyline.points[LOINDEX(closed_curve\polyline.points)] =
+         closed_curve\polyline.points[HIINDEX(closed_curve\polyline.points)]));
+END_ENTITY;
+
+ENTITY fill_area_style_tile_curve_with_style
+  SUBTYPE OF (geometric_representation_item);
+  styled_curve : annotation_curve_occurrence;
+END_ENTITY;
+
+ENTITY fill_area_style_tile_symbol_with_style
+  SUBTYPE OF (geometric_representation_item);
+  symbol : annotation_symbol_occurrence;
+END_ENTITY;
+
+ENTITY fill_area_style_tiles
+  SUBTYPE OF (geometric_representation_item);
+  tiling_pattern : two_direction_repeat_factor;
+  tiles          : SET [1 : ?] OF fill_area_style_tile_shape_select;
+  tiling_scale   : positive_ratio_measure;
+END_ENTITY;
+
+ENTITY fillet
+  SUBTYPE OF (transition_feature);
+WHERE
+  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                           TYPEOF(pdr.used_representation))) =
+                            1))) =
+        0);
+  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND
+                                                (SIZEOF(impl_rep.used_representation.items) <= 3)))) =
+                            0))) =
+        0);
+  WR3: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'radius'))) =
+                                                1))) =
+                            0))) =
+        0);
+  WR4: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'first offset'))) <=
+                                                1))) =
+                            0))) =
+        0);
+  WR5: (NOT (SELF.description = 'constant radius')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'second offset'))) <=
+                                                1))) =
+                            0))) =
+        0);
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'fillet face'))) =
+                           1))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'first face shape'))) =
+                           1))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'second face shape'))) =
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY final_solution
+  SUBTYPE OF (product_definition_formation);
+  status : STRING;
+INVERSE
+  specification : SET [1:?] OF product_definition FOR formation;
+END_ENTITY;
+
+ENTITY finite_function
+  SUBTYPE OF (maths_function, generic_literal);
+  pairs : SET [1 : ?] OF LIST [2 : 2] OF maths_value;
+WHERE
+  WR1: VALUE_UNIQUE(list_selected_components(pairs, 1));
+END_ENTITY;
+
+ENTITY finite_integer_interval
+  SUBTYPE OF (maths_space, generic_literal);
+  min : INTEGER;
+  max : INTEGER;
+DERIVE
+  size : positive_integer := max - min + 1;
+WHERE
+  WR1: min <= max;
+END_ENTITY;
+
+ENTITY finite_real_interval
+  SUBTYPE OF (maths_space, generic_literal);
+  min         : REAL;
+  min_closure : open_closed;
+  max         : REAL;
+  max_closure : open_closed;
+WHERE
+  WR1: min < max;
+END_ENTITY;
+
+ENTITY fixed_constituent_assembly_constraint
+  SUBTYPE OF (assembly_geometric_constraint, fixed_element_geometric_constraint);
+  fixed_constituent : representative_shape_representation;
+WHERE
+  WR1: SELF\explicit_constraint.constrained_elements[1]\geometric_representation_item.dim = 3;
+  WR2: (assembly_leaf(using_product_definition_of_shape_representation(fixed_constituent)[1]));
+  WR3: (SIZEOF(SELF\explicit_constraint.constrained_elements) = 1) AND
+       (SIZEOF(SELF\explicit_constraint.reference_elements) = 0);
+  WR4: fixed_constituent IN
+       (using_representations(SELF\explicit_constraint.constrained_elements[1]) +
+        using_representation_with_mapping(SELF\explicit_constraint.constrained_elements[1]));
+END_ENTITY;
+
+ENTITY fixed_element_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF geometric_constraint_element;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+END_ENTITY;
+
+ENTITY fixed_instance_attribute_set
+  SUBTYPE OF (variational_representation_item);
+  fixed_attributes : SET [1 : ?] OF instance_attribute_reference;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* using_representations(SELF)
+                    | SIZEOF(QUERY(r
+                                   <* q.items
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FIXED_INSTANCE_ATTRIBUTE_SET' IN
+                                     TYPEOF(r))) >
+                      1)) =
+       0;
+END_ENTITY;
+
+ENTITY fixed_reference_swept_surface
+  SUBTYPE OF (swept_surface);
+  directrix       : curve;
+  fixed_reference : direction;
+END_ENTITY;
+
+ENTITY flat_face
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'removal direction')))) =
+                             1)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'course of travel occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description =
+                                                                        'path feature component usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.relating_shape_aspect.description = 'linear') AND
+                                                              (sdr.name = 'course of travel')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'removal boundary occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'profile usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.name = 'removal boundary')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR4: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                               TYPEOF(pd))
+                    | NOT (SIZEOF(QUERY(sa_occ
+                                        <* USEDIN(pds,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                        | (sa_occ.description = 'enclosed boundary occurrence') AND
+                                          (SIZEOF(QUERY(sdr
+                                                        <* QUERY(sar
+                                                                 <* USEDIN(sa_occ,
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                 | (sar.description = 'profile usage') AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                    TYPEOF(sar)))
+                                                        | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                                                  TYPEOF(sdr.relating_shape_aspect)) =
+                                                           1) AND
+                                                          (sdr.relating_shape_aspect.description = 'boundary'))) =
+                                           1))) <=
+                           1))) =
+       0;
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+  WR6: SIZEOF(QUERY(pds
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                         TYPEOF(csa)) AND
+                                        (csa.name = 'uncut volume') AND
+                                        (SIZEOF(QUERY(sar
+                                                      <* csa.component_relationships
+                                                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                          TYPEOF(sar)) AND
+                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS',
+                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] *
+                                                                 TYPEOF(sar.related_shape_aspect)) =
+                                                          1)))) =
+                                         1)))) <=
+                        1)))) =
+       1;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'removal depth'))) <=
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY flat_pattern_ply_representation_relationship
+  SUBTYPE OF (shape_representation_relationship);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+       (TYPEOF(SELF\representation_relationship.rep_1) * TYPEOF(SELF\representation_relationship.rep_2));
+  WR2: SELF\representation_relationship.rep_1.context_of_items\geometric_representation_context.coordinate_space_dimension =
+       3;
+END_ENTITY;
+
+ENTITY flatness_tolerance
+  SUBTYPE OF (geometric_tolerance);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY force_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FORCE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY force_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.newton);
+END_ENTITY;
+
+ENTITY format_function
+  SUBTYPE OF (string_expression, binary_generic_expression);
+DERIVE
+  value_to_format : generic_expression := SELF\binary_generic_expression.operands[1];
+  format_string   : generic_expression := SELF\binary_generic_expression.operands[2];
+WHERE
+  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION') IN TYPEOF(value_to_format)) AND
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION') IN TYPEOF(format_string));
+END_ENTITY;
+
+ENTITY forward_chaining_rule
+  SUBTYPE OF (rule_definition);
+END_ENTITY;
+
+ENTITY forward_chaining_rule_premise
+  SUBTYPE OF (property_definition, property_definition_representation, representation);
+END_ENTITY;
+
+ENTITY founded_item
+  SUPERTYPE OF ((ONEOF(b_spline_curve_knot_locator, b_spline_curve_segment, b_spline_surface_knot_locator,
+                       b_spline_surface_patch, b_spline_surface_strip,
+                       boundary_curve_of_b_spline_or_rectangular_composite_surface, box_domain,
+                       character_glyph_style_outline, character_glyph_style_stroke, composite_curve_segment,
+                       composite_curve_transition_locator, curve_style, curve_style_font, curve_style_font_and_scaling,
+                       curve_style_font_pattern, externally_defined_style, fill_area_style,
+                       interpolated_configuration_segment, kinematic_path_segment, plane_angle_and_length_pair,
+                       plane_angle_and_ratio_pair, point_style, presentation_style_assignment,
+                       rectangular_composite_surface_transition_locator, surface_patch, surface_side_style,
+                       surface_style_boundary, surface_style_control_grid, surface_style_fill_area,
+                       surface_style_parameter_line, surface_style_segmentation_curve, surface_style_silhouette,
+                       surface_style_usage, symbol_style, text_style, view_volume)) ANDOR
+                (ONEOF(character_glyph_style_outline, character_glyph_style_stroke, curve_style, curve_style_font,
+                       curve_style_font_and_scaling, curve_style_font_pattern, externally_defined_style,
+                       fill_area_style, point_style, presentation_style_assignment, surface_side_style,
+                       surface_style_boundary, surface_style_control_grid, surface_style_fill_area,
+                       surface_style_parameter_line, surface_style_segmentation_curve, surface_style_silhouette,
+                       surface_style_usage, symbol_style, text_style)));
+DERIVE
+  users : SET [0 : ?] OF founded_item_select := using_items(SELF, []);
+WHERE
+  WR1: SIZEOF(users) > 0;
+  WR2: NOT (SELF IN users);
+END_ENTITY;
+
+ENTITY free_edge
+  SUBTYPE OF (inapt_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, []);
+  WR5: SIZEOF(QUERY(sdqr
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
+                       TYPEOF(sdqr)) AND
+                      (SIZEOF(QUERY(sdqiir
+                                    <* bag_to_set(USEDIN(sdqr,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                                       TYPEOF(sdqiir)) AND
+                                      (SIZEOF(QUERY(sdqiri
+                                                    <* sdqiir.inspected_instances
+                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN
+                                                       TYPEOF(sdqiri.inspected_elements[1])))) =
+                                       0))) =
+                       0))) =
+       0;
+END_ENTITY;
+
+ENTITY free_form_assignment
+  SUBTYPE OF (free_form_constraint);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\free_form_constraint.constrained_elements
+                    | q IN used_variables(SELF\free_form_constraint.constraining_expression))) =
+       0;
+  WR2: SIZEOF(QUERY(q
+                    <* SELF\free_form_constraint.reference_elements
+                    | NOT (q IN used_variables(SELF\free_form_constraint.constraining_expression)))) =
+       0;
+  WR3: SIZEOF(SELF\free_form_constraint.reference_elements) >= 1;
+  WR4: SIZEOF(QUERY(q
+                    <* SELF\free_form_constraint.constrained_elements
+                    | NOT (compatible_spaces(values_space_of(SELF\free_form_constraint.constraining_expression),
+                                             q\maths_variable.values_space)))) =
+       0;
+END_ENTITY;
+
+ENTITY free_form_constraint
+  ABSTRACT SUPERTYPE OF (ONEOF(free_form_assignment, free_form_relation))
+  SUBTYPE OF (explicit_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF variational_parameter;
+  SELF\explicit_constraint.reference_elements   : SET [0 : ?] OF variational_parameter;
+  constraining_expression                       : expression;
+END_ENTITY;
+
+ENTITY free_form_relation
+  SUBTYPE OF (free_form_constraint);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_EXPRESSION' IN
+       TYPEOF(SELF\free_form_constraint.constraining_expression);
+  WR2: SIZEOF(QUERY(q
+                    <* (SELF\free_form_constraint.constrained_elements + SELF\free_form_constraint.reference_elements)
+                    | NOT (q IN used_variables(SELF\free_form_constraint.constraining_expression)))) =
+       0;
+END_ENTITY;
+
+ENTITY free_kinematic_motion_representation
+  SUBTYPE OF (representation_relationship_with_transformation);
+  SELF\representation_relationship.rep_1 : representative_shape_representation;
+  SELF\representation_relationship.rep_2 : representative_shape_representation;
+  motion                                 : kinematic_path;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION' IN
+       TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN
+        TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN
+        TYPEOF(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2));
+  WR3: ((dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) =
+         3) AND
+        (dimension_of(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) =
+         3));
+  WR4: (SELF\representation_relationship.rep_1 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_1))) AND
+       (SELF\representation_relationship.rep_2 IN
+        (using_representations(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2) +
+         using_representation_with_mapping(SELF\representation_relationship_with_transformation.transformation_operator\item_defined_transformation.transform_item_2)));
+END_ENTITY;
+
+ENTITY free_variable_semantics
+  SUBTYPE OF (variable_semantics);
+END_ENTITY;
+
+ENTITY frequency_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FREQUENCY_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY frequency_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.hertz);
+END_ENTITY;
+
+ENTITY frozen_assignment
+  SUBTYPE OF (approval_assignment);
+  items : SET [1 : ?] OF change_management_object;
+END_ENTITY;
+
+ENTITY fully_constrained_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := false;
+END_ENTITY;
+
+ENTITY func
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY function_application
+  SUBTYPE OF (multiple_arity_generic_expression);
+  func      : maths_function_select;
+  arguments : LIST [1 : ?] OF maths_expression;
+DERIVE
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF generic_expression := [convert_to_maths_function(func)] +
+                                                                                          convert_to_operands(arguments);
+WHERE
+  WR1: function_applicability(func, arguments);
+END_ENTITY;
+
+ENTITY function_space
+  SUBTYPE OF (maths_space, generic_literal);
+  domain_constraint : space_constraint_type;
+  domain_argument   : maths_space;
+  range_constraint  : space_constraint_type;
+  range_argument    : maths_space;
+WHERE
+  WR1: expression_is_constant(domain_argument) AND expression_is_constant(range_argument);
+  WR2: (domain_argument <> the_empty_space) AND (range_argument <> the_empty_space);
+  WR3: (domain_constraint <> sc_member) OR NOT member_of(the_empty_space, domain_argument);
+  WR4: (range_constraint <> sc_member) OR NOT member_of(the_empty_space, range_argument);
+  WR5: NOT (any_space_satisfies(domain_constraint, domain_argument) AND
+            any_space_satisfies(range_constraint, range_argument));
+END_ENTITY;
+
+ENTITY functional_breakdown_context
+  SUBTYPE OF (breakdown_context);
+END_ENTITY;
+
+ENTITY functional_element_usage
+  SUBTYPE OF (breakdown_element_usage);
+END_ENTITY;
+
+ENTITY functionally_defined_transformation;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY g1_discontinuity_between_adjacent_faces
+  SUBTYPE OF (non_smooth_geometry_transition_across_edge);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
+END_ENTITY;
+
+ENTITY g1_discontinuous_curve
+  SUBTYPE OF (discontinuous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY g1_discontinuous_surface
+  SUBTYPE OF (discontinuous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
+END_ENTITY;
+
+ENTITY g2_discontinuity_between_adjacent_faces
+  SUBTYPE OF (non_smooth_geometry_transition_across_edge);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  assessment_specification_2                                 : shape_data_quality_assessment_by_numerical_test;
+  flat_curvature_radius_tolerance                            : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN
+        value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
+  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR5: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR6: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE']);
+END_ENTITY;
+
+ENTITY g2_discontinuous_curve
+  SUBTYPE OF (discontinuous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  assessment_specification_2                                 : shape_data_quality_assessment_by_numerical_test;
+  flat_curvature_radius_tolerance                            : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN
+        value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
+  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR5: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
+  WR6: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY g2_discontinuous_surface
+  SUBTYPE OF (discontinuous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  assessment_specification_2                                 : shape_data_quality_assessment_by_numerical_test;
+  flat_curvature_radius_tolerance                            : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN
+        value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_RATIO_PAIR');
+  WR4: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR5: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
+  WR6: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_adjacent_edges_in_loop
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_edge_and_base_surface
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_faces_related_to_an_edge
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_pcurves_related_to_an_edge
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_vertex_and_base_surface
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gap_between_vertex_and_edge
+  SUBTYPE OF (geometric_gap_in_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY gear
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (10 <= SIZEOF(pdr.used_representation.items)) AND
+                                     (SIZEOF(pdr.used_representation.items) <= 13))) =
+                      1)) =
+       1;
+  WR2: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'number of teeth'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR3: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'reference pressure angle'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR4: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'rake shift factor'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR5: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'nominal tooth depth'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR6: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'face width'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR7: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'tip diameter'))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR8: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'module or diametral pitch') AND
+                                                                   ((it.description = 'module') OR
+                                                                    (it.description = 'diametral pitch')))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR9: NOT (SELF\characterized_object.description IN
+            ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+           (SIZEOF(QUERY(pd
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                         | NOT (SIZEOF(QUERY(impl_rep
+                                             <* QUERY(pdr
+                                                      <* USEDIN(pd,
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                        TYPEOF(pdr.used_representation))
+                                             | NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'internal or external gear') AND
+                                                                   ((it.description = 'internal') OR
+                                                                    (it.description = 'external')))) =
+                                                    1))) =
+                                0))) =
+            0);
+  WR10: NOT (SELF\characterized_object.description IN
+             ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'normal attribute'))) =
+                                                     1))) =
+                                 0))) =
+             0);
+  WR11: NOT (SELF\characterized_object.description IN
+             ['straight bevel gear','helical bevel gear','spur gear','helical gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'root fillet radius'))) <=
+                                                     1))) =
+                                 0))) =
+             0);
+  WR12: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'reference helix angle'))) =
+                                                     1))) =
+                                 0))) =
+             0);
+  WR13: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'gear tooth') AND
+                                                                    ((it.description = 'left hand tooth') OR
+                                                                     (it.description = 'right hand tooth')))) =
+                                                     1))) =
+                                 0))) =
+             0);
+  WR14: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'tip angle'))) =
+                                                     1))) =
+                                 0))) =
+             0);
+  WR15: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(QUERY(it
+                                                                  <* impl_rep.used_representation.items
+                                                                  | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'root angle'))) =
+                                                     1))) =
+                                 0))) =
+             0);
+  WR16: SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | SIZEOF(QUERY(sdr
+                                                        <* QUERY(sar
+                                                                 <* USEDIN(sa_occ,
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                 | (sar.description = 'applied shape') AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                    TYPEOF(sar)))
+                                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                          TYPEOF(sdr.relating_shape_aspect))) =
+                                           1)) =
+                            1))) =
+        0;
+END_ENTITY;
+
+ENTITY gear_pair
+  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
+  radius_first_link  : length_measure;
+  radius_second_link : length_measure;
+  bevel              : plane_angle_measure;
+  helical_angle      : plane_angle_measure;
+  gear_ratio         : REAL;
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY gear_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : gear_pair;
+  actual_rotation_1               : plane_angle_measure;
+DERIVE
+  actual_rotation_2 : plane_angle_measure := -actual_rotation_1 * SELF\pair_value.applies_to_pair\gear_pair.gear_ratio;
+END_ENTITY;
+
+ENTITY gear_pair_with_range
+  SUBTYPE OF (gear_pair);
+  lower_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_rotation_1) OR NOT EXISTS(upper_limit_actual_rotation_1)) XOR
+       (lower_limit_actual_rotation_1 < upper_limit_actual_rotation_1);
+END_ENTITY;
+
+ENTITY general_datum_reference
+  ABSTRACT SUPERTYPE OF (ONEOF(datum_reference_compartment, datum_reference_element))
+  SUBTYPE OF (shape_aspect);
+  base      : datum_or_common_datum;
+  modifiers : OPTIONAL SET [1 : ?] OF datum_reference_modifier;
+WHERE
+  WR1: SELF\shape_aspect.name = '';
+  WR2: NOT EXISTS(SELF\shape_aspect.description);
+  WR3: NOT EXISTS(SELF\shape_aspect.id);
+  WR4: SELF\shape_aspect.product_definitional = false;
+  WR5: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN TYPEOF(base)) OR
+           (SELF\shape_aspect.of_shape = base\shape_aspect.of_shape);
+  WR6: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMMON_DATUM_LIST' IN TYPEOF(base)) OR
+           (SELF\shape_aspect.of_shape = base[1]\shape_aspect.of_shape);
+END_ENTITY;
+
+ENTITY general_feature
+  SUBTYPE OF (shape_feature_definition);
+WHERE
+  WR1: (SIZEOF(get_property_definition_representations(SELF)) <= 1) AND
+       (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation))) <=
+        1);
+  WR2: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'course of travel occurrence')) =
+       SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.description = 'course of travel occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.name = 'course of travel'))) =
+                       1)));
+  WR3: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'course of travel occurrence')) =
+       SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.description = 'course of travel occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1)));
+  WR4: SIZEOF(QUERY(sa <* get_shape_aspects(SELF) | sa.description = 'boundary occurrence')) =
+       SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.description = 'boundary occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'profile usage'))) =
+                       1)));
+  WR5: (SIZEOF(QUERY(sa
+                     <* get_shape_aspects(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(sa)))) <=
+        1) AND
+       (SIZEOF(QUERY(sa
+                     <* get_shape_aspects(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(sa)) AND
+                       (sa.name = 'general compound feature') AND
+                       (SIZEOF(QUERY(sar
+                                     <* USEDIN(sa,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                        TYPEOF(sar)) AND
+                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE' IN
+                                        TYPEOF(sar.related_shape_aspect)))) >=
+                        2))) <=
+        1);
+END_ENTITY;
+
+ENTITY general_linear_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  sum_index                             : one_or_two;
+DERIVE
+  mat : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: function_is_2d_table(mat);
+  WR2: (space_dimension(mat.range) = 1) AND subspace_of_es(factor1(mat.range), es_numbers);
+END_ENTITY;
+
+ENTITY general_material_property
+  SUBTYPE OF (general_property);
+WHERE
+  WR1: SIZEOF(QUERY(gpa
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.BASE_DEFINITION')
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_PROPERTY' IN
+                           TYPEOF(gpa\general_property_association.derived_definition)))) =
+       0;
+END_ENTITY;
+
+ENTITY general_property;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY general_property_association;
+  name               : label;
+  description        : OPTIONAL text;
+  base_definition    : general_property;
+  derived_definition : derived_property_select;
+WHERE
+  WR1: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE'] *
+               TYPEOF(derived_definition)) >
+        0) OR
+       (SIZEOF(USEDIN(derived_definition,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')) =
+        1);
+  WR2: (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE',
+                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE'] *
+               TYPEOF(derived_definition)) >
+        0) OR
+       (derived_definition.name = base_definition.name);
+END_ENTITY;
+
+ENTITY general_property_relationship;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_property : general_property;
+  related_property  : general_property;
+END_ENTITY;
+
+ENTITY generic_character_glyph_symbol
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (symbol_representation);
+END_ENTITY;
+
+ENTITY generic_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(simple_generic_expression, unary_generic_expression, binary_generic_expression,
+                               multiple_arity_generic_expression));
+WHERE
+  WR1: is_acyclic(SELF);
+END_ENTITY;
+
+ENTITY generic_literal
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (simple_generic_expression);
+END_ENTITY;
+
+ENTITY generic_product_definition_reference
+  ABSTRACT SUPERTYPE OF (ONEOF(product_definition_reference, product_definition_reference_with_local_representation));
+  source : external_source;
+END_ENTITY;
+
+ENTITY generic_property_relationship;
+  name          : label;
+  description   : text;
+  relating      : generic_property_definition_select;
+  related       : generic_property_definition_select;
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_generic_property_relationship(SELF, [related],
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_PROPERTY_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY generic_variable
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (simple_generic_expression);
+INVERSE
+  interpretation : environment FOR syntactic_representation;
+END_ENTITY;
+
+ENTITY geometric_alignment
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) > 1;
+END_ENTITY;
+
+ENTITY geometric_contact
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 2;
+END_ENTITY;
+
+ENTITY geometric_curve_set
+  SUBTYPE OF (geometric_set);
+WHERE
+  WR1: SIZEOF(QUERY(temp
+                    <* SELF\geometric_set.elements
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(temp)) OR
+                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(temp))))) =
+       0;
+END_ENTITY;
+
+ENTITY geometric_gap_in_topology
+  ABSTRACT SUPERTYPE OF (ONEOF(gap_between_adjacent_edges_in_loop, gap_between_vertex_and_base_surface,
+                               gap_between_vertex_and_edge, gap_between_edge_and_base_surface,
+                               gap_between_pcurves_related_to_an_edge, gap_between_faces_related_to_an_edge))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY geometric_intersection
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) > 1;
+END_ENTITY;
+
+ENTITY geometric_item_specific_usage
+  SUBTYPE OF (item_identified_representation_usage);
+  SELF\item_identified_representation_usage.definition          : geometric_item_specific_usage_select;
+  SELF\item_identified_representation_usage.used_representation : shape_model;
+  SELF\item_identified_representation_usage.identified_item     : geometric_model_item;
+END_ENTITY;
+
+ENTITY geometric_model_element_relationship
+  SUBTYPE OF (geometric_representation_item, representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : geometric_representation_item;
+  SELF\representation_item_relationship.related_representation_item  : geometric_representation_item;
+UNIQUE
+  UR1: SELF\representation_item_relationship.relating_representation_item,
+       SELF\representation_item_relationship.related_representation_item;
+WHERE
+  WR1: SELF\representation_item_relationship.relating_representation_item :<>:
+       SELF\representation_item_relationship.related_representation_item;
+END_ENTITY;
+
+ENTITY geometric_representation_context
+  SUPERTYPE OF (ONEOF(geometric_representation_context_with_parameter, path_parameter_representation_context))
+  SUBTYPE OF (representation_context);
+  coordinate_space_dimension : dimension_count;
+END_ENTITY;
+
+ENTITY geometric_representation_context_with_parameter
+  SUBTYPE OF (geometric_representation_context);
+  parameter_unit : OPTIONAL unit;
+END_ENTITY;
+
+ENTITY geometric_representation_item
+  SUPERTYPE OF ((ONEOF(point, direction, vector, placement, cartesian_transformation_operator, curve, surface,
+                       edge_curve, face_surface, poly_loop, vertex_point, solid_model, boolean_result, sphere,
+                       right_circular_cone, right_circular_cylinder, torus, block, primitive_2d, right_angular_wedge,
+                       ellipsoid, faceted_primitive, rectangular_pyramid, cyclide_segment_solid, volume,
+                       half_space_solid, shell_based_surface_model, face_based_surface_model,
+                       shell_based_wireframe_model, edge_based_wireframe_model, geometric_set, tessellated_item,
+                       volume_with_faces, scanned_data_item)) ANDOR
+                ((ONEOF(annotation_fill_area, curve, point, text_literal))) ANDOR
+                ((ONEOF(camera_model, curve, direction))) ANDOR
+                ((ONEOF(curve, externally_defined_hatch_style, externally_defined_tile_style, fill_area_style_hatching,
+                        fill_area_style_tile_symbol_with_style, fill_area_style_tiles, one_direction_repeat_factor,
+                        point, vector))) ANDOR
+                ((ONEOF(curve, planar_extent))) ANDOR (ONEOF(kinematic_path, placement)) ANDOR
+                (ONEOF(rotation_about_direction, su_parameters)))
+  SUBTYPE OF (representation_item);
+DERIVE
+  dim : dimension_count := dimension_of(SELF);
+WHERE
+  WR1: SIZEOF(QUERY(using_rep
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+                           TYPEOF(using_rep.context_of_items)))) =
+       0;
+END_ENTITY;
+
+ENTITY geometric_set
+  SUBTYPE OF (geometric_representation_item);
+  elements : SET [1 : ?] OF geometric_set_select;
+END_ENTITY;
+
+ENTITY geometric_tolerance
+  ABSTRACT SUPERTYPE OF (geometric_tolerance_with_datum_reference ANDOR geometric_tolerance_with_defined_unit ANDOR
+                         ONEOF(geometric_tolerance_with_modifiers, modified_geometric_tolerance) ANDOR
+                         unequally_disposed_geometric_tolerance ANDOR
+                         ONEOF(cylindricity_tolerance, flatness_tolerance, line_profile_tolerance, position_tolerance,
+                               roundness_tolerance, straightness_tolerance, surface_profile_tolerance));
+  name                    : label;
+  description             : OPTIONAL text;
+  magnitude               : OPTIONAL length_measure_with_unit;
+  toleranced_shape_aspect : geometric_tolerance_target;
+DERIVE
+  controlling_shape : product_definition_shape := sts_get_product_definition_shape(toleranced_shape_aspect);
+  id                : identifier               := get_id_value(SELF);
+INVERSE
+  auxiliary_classification : SET [0:?] OF geometric_tolerance_auxiliary_classification FOR described_item;
+  tolerance_relationship   : SET [0:?] OF geometric_tolerance_relationship FOR relating_geometric_tolerance;
+UNIQUE
+  UR1: id, controlling_shape;
+WHERE
+  WR1: magnitude\measure_with_unit.value_component >= 0.0;
+  WR2: EXISTS(controlling_shape);
+  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP' IN
+            TYPEOF(toleranced_shape_aspect)) OR
+           (toleranced_shape_aspect\shape_aspect_relationship.relating_shape_aspect.of_shape :=:
+            toleranced_shape_aspect\shape_aspect_relationship.related_shape_aspect.of_shape);
+  WR4: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+  WR5: SIZEOF(QUERY(tr <* tolerance_relationship | tr.name = 'composite tolerance')) <= 1;
+END_ENTITY;
+
+ENTITY geometric_tolerance_auxiliary_classification;
+  attribute_value : geometric_tolerance_auxiliary_classification_enum;
+  described_item  : geometric_tolerance;
+END_ENTITY;
+
+ENTITY geometric_tolerance_relationship;
+  name                         : label;
+  description                  : text;
+  relating_geometric_tolerance : geometric_tolerance;
+  related_geometric_tolerance  : geometric_tolerance;
+WHERE
+  WR1: NOT (name = 'composite tolerance') OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN
+             TYPEOF(relating_geometric_tolerance)) AND
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN
+             TYPEOF(related_geometric_tolerance))) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN
+             TYPEOF(relating_geometric_tolerance)) AND
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN
+             TYPEOF(related_geometric_tolerance))) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN
+             TYPEOF(relating_geometric_tolerance)) AND
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN
+             TYPEOF(related_geometric_tolerance)));
+  WR2: NOT (name = 'composite tolerance') OR
+           (relating_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect :=:
+            related_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect);
+  WR3: acyclic_geometric_tolerance_relationship(SELF, [related_geometric_tolerance],
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE');
+END_ENTITY;
+
+ENTITY geometric_tolerance_with_datum_reference
+  SUPERTYPE OF (ONEOF(angularity_tolerance, circular_runout_tolerance, coaxiality_tolerance, concentricity_tolerance,
+                      parallelism_tolerance, perpendicularity_tolerance, symmetry_tolerance, total_runout_tolerance))
+  SUBTYPE OF (geometric_tolerance);
+  datum_system : SET [1 : ?] OF datum_system_or_reference;
+WHERE
+  WR1: (SIZEOF(QUERY(ds
+                     <* datum_system
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_SYSTEM' IN TYPEOF(ds))) =
+        0) OR
+       (SIZEOF(datum_system) = 1);
+END_ENTITY;
+
+ENTITY geometric_tolerance_with_defined_area_unit
+  SUBTYPE OF (geometric_tolerance_with_defined_unit);
+  area_type        : area_unit_type;
+  second_unit_size : OPTIONAL length_or_plane_angle_measure_with_unit_select;
+WHERE
+  WR1: NOT (EXISTS(second_unit_size) XOR
+            (area_type IN [area_unit_type.rectangular,area_unit_type.cylindrical,area_unit_type.spherical]));
+  WR2: NOT (area_type = area_unit_type.cylindrical) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(unit_size)) AND
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+            TYPEOF(second_unit_size));
+  WR3: NOT (area_type = area_unit_type.rectangular) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(unit_size)) AND
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
+  WR4: NOT (area_type = area_unit_type.spherical) OR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(unit_size)) AND
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+            TYPEOF(second_unit_size));
+  WR5: NOT (area_type = area_unit_type.spherical) OR
+           (SIZEOF(QUERY(tz
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOLERANCE_ZONE.DEFINING_TOLERANCE')
+                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_TOLERANCE_ZONE' IN
+                            TYPEOF(tz)))) <>
+            0);
+END_ENTITY;
+
+ENTITY geometric_tolerance_with_defined_unit
+  SUBTYPE OF (geometric_tolerance);
+  unit_size : length_or_plane_angle_measure_with_unit_select;
+WHERE
+  WR1: ('NUMBER' IN TYPEOF(unit_size\measure_with_unit.value_component)) AND
+       (unit_size\measure_with_unit.value_component > 0.0);
+END_ENTITY;
+
+ENTITY geometric_tolerance_with_maximum_tolerance
+  SUBTYPE OF (geometric_tolerance_with_modifiers);
+  maximum_upper_tolerance : length_measure_with_unit;
+WHERE
+  WR1: (geometric_tolerance_modifier.maximum_material_requirement IN
+        SELF\geometric_tolerance_with_modifiers.modifiers) OR
+       (geometric_tolerance_modifier.least_material_requirement IN SELF\geometric_tolerance_with_modifiers.modifiers);
+  WR2: (maximum_upper_tolerance\measure_with_unit.unit_component =
+        SELF\geometric_tolerance.magnitude\measure_with_unit.unit_component) AND
+       (maximum_upper_tolerance\measure_with_unit.value_component >
+        SELF\geometric_tolerance.magnitude\measure_with_unit.value_component);
+END_ENTITY;
+
+ENTITY geometric_tolerance_with_modifiers
+  SUBTYPE OF (geometric_tolerance);
+  modifiers : SET [1 : ?] OF geometric_tolerance_modifier;
+WHERE
+  WR1: NOT (geometric_tolerance_modifier.circle_a IN modifiers) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+             TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)) AND
+            (SELF\geometric_tolerance.toleranced_shape_aspect\shape_aspect.product_definitional = true) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN
+             TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)));
+END_ENTITY;
+
+ENTITY geometrical_tolerance_callout
+  SUBTYPE OF (draughting_callout);
+END_ENTITY;
+
+ENTITY geometrically_bounded_2d_wireframe_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
+  WR2: SIZEOF(QUERY(item
+                    <* SELF.items
+                    | NOT (SIZEOF(TYPEOF(item) *
+                                  ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(item
+                    <* SELF.items
+                    | SIZEOF(TYPEOF(item) *
+                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) =
+                      1)) >=
+       1;
+  WR4: SIZEOF(QUERY(mi
+                    <* QUERY(item
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(item)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR5: SIZEOF(QUERY(gcs
+                    <* QUERY(item
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item)))
+                    | NOT (SIZEOF(QUERY(elem
+                                        <* gcs\geometric_set.elements
+                                        | NOT (SIZEOF(TYPEOF(elem) *
+                                                      ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_2D',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE']) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(gcs
+                    <* QUERY(item
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item)))
+                    | NOT (SIZEOF(QUERY(crv
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN
+                                                    TYPEOF(elem)))
+                                        | NOT (valid_basis_curve_in_2d_wireframe(crv)))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(gcs
+                    <* QUERY(item
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(item)))
+                    | NOT (SIZEOF(QUERY(pnt
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN
+                                                    TYPEOF(elem)))
+                                        | NOT (SIZEOF(TYPEOF(pnt) *
+                                                      ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']) =
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY geometrically_bounded_surface_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION' IN
+                            TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND
+                           (SIZEOF(QUERY(mr_it
+                                         <* mi\mapped_item.mapping_source.mapped_representation.items
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN
+                                            TYPEOF(mr_it)))) >
+                            0)))) =
+       0;
+  WR4: SIZEOF(QUERY(gs
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(pnt
+                                        <* QUERY(gsel
+                                                 <* gs\geometric_set.elements
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN
+                                                   TYPEOF(gsel))
+                                        | NOT (gbsf_check_point(pnt)))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(gs
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cv
+                                        <* QUERY(gsel
+                                                 <* gs\geometric_set.elements
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN
+                                                   TYPEOF(gsel))
+                                        | NOT (gbsf_check_curve(cv)))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(gs
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(sf
+                                        <* QUERY(gsel
+                                                 <* gs\geometric_set.elements
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
+                                                   TYPEOF(gsel))
+                                        | NOT (gbsf_check_surface(sf)))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(gs
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_SET' IN TYPEOF(it))
+                    | SIZEOF(QUERY(gsel
+                                   <* gs\geometric_set.elements
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(gsel))) >
+                      0)) >
+       0;
+END_ENTITY;
+
+ENTITY geometrically_bounded_wireframe_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(TYPEOF(it) *
+                                  ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(TYPEOF(it) *
+                              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM']) =
+                       1))) >=
+       1;
+  WR3: SIZEOF(QUERY(gcs
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(crv
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN
+                                                    TYPEOF(elem)))
+                                        | NOT valid_geometrically_bounded_wf_curve(crv))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(gcs
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(pnts
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN
+                                                    TYPEOF(elem)))
+                                        | NOT valid_geometrically_bounded_wf_point(pnts))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(gcs
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(cnc
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC' IN
+                                                    TYPEOF(elem)))
+                                        | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+                                               TYPEOF(cnc\conic.position)))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(gcs
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_CURVE_SET' IN TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(pline
+                                        <* QUERY(elem
+                                                 <* gcs\geometric_set.elements
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                                    TYPEOF(elem)))
+                                        | NOT (SIZEOF(pline\polyline.points) > 2))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+END_ENTITY;
+
+ENTITY geometry_with_local_irregularity
+  ABSTRACT SUPERTYPE OF (ONEOF(extreme_patch_width_variation, zero_surface_normal, abrupt_change_of_surface_normal))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY geometry_with_local_near_degeneracy
+  ABSTRACT SUPERTYPE OF (ONEOF(curve_with_small_curvature_radius, short_length_curve_segment,
+                               surface_with_small_curvature_radius, small_area_surface_patch, narrow_surface_patch,
+                               indistinct_surface_knots, indistinct_curve_knots, nearly_degenerate_surface_boundary,
+                               nearly_degenerate_surface_patch))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY global_assignment
+  SUBTYPE OF (representation_item_relationship);
+END_ENTITY;
+
+ENTITY global_uncertainty_assigned_context
+  SUBTYPE OF (representation_context);
+  uncertainty : SET [1 : ?] OF uncertainty_measure_with_unit;
+END_ENTITY;
+
+ENTITY global_unit_assigned_context
+  SUBTYPE OF (representation_context);
+  units : SET [1 : ?] OF unit;
+END_ENTITY;
+
+ENTITY gps_filter;
+  filter_type : gps_filtration_type;
+  filter_data : LIST [1 : ?] OF measure_with_unit;
+INVERSE
+  owner : gps_filtration_specification FOR filter_data;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_MODIFIERS' IN
+            TYPEOF(owner\gps_filtration_specification.base_target)) OR
+           (SIZEOF([geometric_tolerance_modifier.reference_minimax_feature_without_constraint,
+                    geometric_tolerance_modifier.reference_minimax_feature_with_external_material_constraint,
+                    geometric_tolerance_modifier.reference_minimax_feature_with_internal_material_constraint,
+                    geometric_tolerance_modifier.reference_least_square_feature_without_constraint,
+                    geometric_tolerance_modifier.reference_least_square_feature_with_external_material_constraint,
+                    geometric_tolerance_modifier.reference_least_square_feature_with_internal_material_constraint,
+                    geometric_tolerance_modifier.reference_minimum_circumscribed_feature,
+                    geometric_tolerance_modifier.reference_maximum_inscribed_feature,
+                    geometric_tolerance_modifier.total_range_deviations,
+                    geometric_tolerance_modifier.peak_height,
+                    geometric_tolerance_modifier.valley_depth,
+                    geometric_tolerance_modifier.standard_deviation] *
+                   owner\gps_filtration_specification.base_target\geometric_tolerance_with_modifiers.modifiers) <>
+            0);
+END_ENTITY;
+
+ENTITY gps_filtration_specification;
+  base_target : gps_filtration_specification_target;
+  filter_data : LIST [1 : ?] OF gps_filter;
+END_ENTITY;
+
+ENTITY ground_fact
+  SUBTYPE OF (atomic_formula);
+END_ENTITY;
+
+ENTITY group
+  SUPERTYPE OF (ONEOF(change_group, change_element));
+  name        : label;
+  description : OPTIONAL text;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY group_assignment
+  ABSTRACT SUPERTYPE OF (ONEOF(current_change_element_assignment, previous_change_element_assignment,
+                               change_group_assignment));
+  assigned_group : group;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY group_relationship;
+  name           : label;
+  description    : OPTIONAL text;
+  relating_group : group;
+  related_group  : group;
+END_ENTITY;
+
+ENTITY half_space_2d
+  SUBTYPE OF (primitive_2d);
+  base_curve     : curve;
+  agreement_flag : BOOLEAN;
+END_ENTITY;
+
+ENTITY half_space_solid
+  SUBTYPE OF (geometric_representation_item);
+  base_surface   : surface;
+  agreement_flag : BOOLEAN;
+END_ENTITY;
+
+ENTITY hardness_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: ({2 <= SIZEOF(SELF.items) <= 4}) AND
+       (SIZEOF(QUERY(i
+                     <* items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                        TYPEOF(i)) AND
+                       (i.name IN ['measuring method','measuring position']))) +
+        SIZEOF(QUERY(i
+                     <* items
+                     | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                               TYPEOF(i)) =
+                        1) AND
+                       (i.name IN ['depth','hardness']))) =
+        SIZEOF(SELF.items));
+  WR2: SIZEOF(QUERY(i <* SELF.items | i.name = 'measuring method')) = 1;
+  WR3: SIZEOF(QUERY(i <* SELF.items | i.name = 'hardness')) = 1;
+  WR4: SIZEOF(QUERY(i <* SELF.items | i.name = 'measuring position')) <= 1;
+  WR5: SIZEOF(QUERY(i <* SELF.items | i.name = 'depth')) <= 1;
+  WR6: (SIZEOF(USEDIN(SELF,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | SIZEOF(QUERY(gpa
+                                    <* USEDIN(pdr.definition,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN
+                                       TYPEOF(gpa.base_definition)) AND
+                                      (gpa\general_property_association.base_definition\general_property.name =
+                                       'surface_condition'))) =
+                       1)) =
+        1);
+END_ENTITY;
+
+ENTITY harness_node
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY harness_segment
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY hexahedron_volume
+  SUBTYPE OF (volume);
+  points : LIST [8 : 8] OF cartesian_point;
+WHERE
+  WR1: above_plane(points[1], points[2], points[3], points[4]) = 0.0;
+  WR2: above_plane(points[5], points[8], points[7], points[6]) = 0.0;
+  WR3: above_plane(points[1], points[4], points[8], points[5]) = 0.0;
+  WR4: above_plane(points[4], points[3], points[7], points[8]) = 0.0;
+  WR5: above_plane(points[3], points[2], points[6], points[7]) = 0.0;
+  WR6: above_plane(points[1], points[5], points[6], points[2]) = 0.0;
+  WR7: same_side([points[1],points[2],points[3]], [points[5],points[6],points[7],points[8]]);
+  WR8: same_side([points[1],points[4],points[8]], [points[3],points[7],points[6],points[2]]);
+  WR9: same_side([points[1],points[2],points[5]], [points[3],points[7],points[8],points[4]]);
+  WR10: same_side([points[5],points[6],points[7]], [points[1],points[2],points[3],points[4]]);
+  WR11: same_side([points[3],points[7],points[6]], [points[1],points[4],points[8],points[5]]);
+  WR12: same_side([points[3],points[7],points[8]], [points[1],points[5],points[6],points[2]]);
+  WR13: points[1].dim = 3;
+END_ENTITY;
+
+ENTITY hidden_element_over_riding_styled_item
+  SUBTYPE OF (context_dependent_over_riding_styled_item);
+  SELF\context_dependent_over_riding_styled_item.style_context : LIST [1 : 1] OF presentation_view;
+  SELF\styled_item.item                                        : camera_image;
+INVERSE
+  container : SET [1:?] OF presentation_view FOR items;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3_WITH_HLHSR' IN
+       TYPEOF(SELF.item\mapped_item.mapping_source.mapping_origin);
+END_ENTITY;
+
+ENTITY hierarchical_interface_connection
+  SUBTYPE OF (interface_connection);
+END_ENTITY;
+
+ENTITY high_degree_axi_symmetric_surface
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  approximation_tolerance                                    : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY high_degree_conic
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  approximation_tolerance                                    : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY high_degree_linear_curve
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  approximation_tolerance                                    : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY high_degree_planar_surface
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  approximation_tolerance                                    : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY high_order_kinematic_pair
+  ABSTRACT SUPERTYPE OF (ONEOF(linear_flexible_and_planar_curve_pair, point_on_surface_pair,
+                               point_on_planar_curve_pair, planar_curve_pair, surface_pair))
+  SUBTYPE OF (kinematic_pair);
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_2
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY hole_bottom
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SELF.description IN ['through','flat','flat with radius','flat with taper','spherical','conical']);
+  WR3: ((NOT (SELF.description = 'through')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(USEDIN(pd,
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) =
+                              0)))) =
+         0));
+  WR4: ((NOT (SELF.description IN ['flat with radius','flat with taper','spherical','conical'])) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                              TYPEOF(pdr.used_representation)))) =
+                              1)))) =
+         0));
+  WR5: ((NOT (SELF.description = 'flat')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 0)))) =
+                              0)))) =
+         0));
+  WR6: ((NOT (SELF.description IN ['flat with radius','spherical'])) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT (SELF.description = 'flat with taper')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT (SELF.description = 'conical')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND
+                                                  (SIZEOF(impl_rep.used_representation.items) <= 2)))) =
+                              0)))) =
+         0));
+  WR9: ((SELF.description = 'through') OR
+        (SIZEOF(QUERY(fcr
+                      <* QUERY(sar
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                               | ((sar.description = 'hole bottom usage') AND
+                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                   TYPEOF(sar))))
+                      | ((fcr.name IN ['hole depth start','hole depth end'])))) >=
+         1));
+  WR10: ((NOT (SELF.description = 'flat with radius')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'corner radius')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR11: ((NOT (SELF.description = 'spherical')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'radius')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR12: ((NOT (SELF.description = 'conical')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'tip radius')))) <=
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR13: ((NOT (SELF.description = 'conical')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'tip angle')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR14: (SIZEOF(QUERY(fcr
+                      <* QUERY(sar
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                               | ((sar.description = 'hole bottom usage') AND
+                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                   TYPEOF(sar))))
+                      | ((fcr.related_shape_aspect.description = 'bottom condition occurrence') AND
+                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN
+                          TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HOLE_BOTTOM' IN
+                          TYPEOF(fcr.relating_shape_aspect))))) >=
+         1);
+  WR15: ((NOT (SELF.description = 'flat with taper')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'final diameter')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR16: ((NOT (SELF.description = 'flat with taper')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'taper diameter')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+END_ENTITY;
+
+ENTITY hole_in_panel
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'hole profile') AND (sa.description = 'closed profile occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'profile usage') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                              TYPEOF(sar.relating_shape_aspect)) =
+                                       1))) =
+                       1))) =
+       1;
+  WR2: SIZEOF(get_property_definition_representations(SELF)) =
+       SIZEOF(QUERY(pdr <* get_property_definition_representations(SELF) | SIZEOF(pdr.used_representation.items) = 1));
+END_ENTITY;
+
+ENTITY homogeneous_linear_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  sum_index                             : one_or_two;
+DERIVE
+  mat : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: function_is_2d_table(mat);
+  WR2: (space_dimension(mat.range) = 1) AND subspace_of_es(factor1(mat.range), es_numbers);
+END_ENTITY;
+
+ENTITY homokinetic_pair
+  SUBTYPE OF (universal_pair);
+WHERE
+  WR1: NOT EXISTS(SELF.input_skew_angle);
+END_ENTITY;
+
+ENTITY hyperbola
+  SUBTYPE OF (conic);
+  semi_axis      : positive_length_measure;
+  semi_imag_axis : positive_length_measure;
+END_ENTITY;
+
+ENTITY id_attribute;
+  attribute_value : identifier;
+  identified_item : id_attribute_select;
+END_ENTITY;
+
+ENTITY identification_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_id : identifier;
+  role        : identification_role;
+END_ENTITY;
+
+ENTITY identification_assignment_relationship;
+  name                               : label;
+  description                        : OPTIONAL text;
+  relating_identification_assignment : identification_assignment;
+  related_identification_assignment  : identification_assignment;
+END_ENTITY;
+
+ENTITY identification_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY idrm_classification_assignment
+  SUBTYPE OF (classification_assignment);
+  items : SET [1 : ?] OF idrm_marked_item;
+END_ENTITY;
+
+ENTITY illuminance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ILLUMINANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY illuminance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.lux);
+END_ENTITY;
+
+ENTITY implicit_explicit_positioned_sketch_relationship
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : repositioned_neutral_sketch;
+  SELF\representation_item_relationship.related_representation_item  : positioned_sketch;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* using_representations(SELF\representation_item_relationship.related_representation_item)
+                    | item_in_context(SELF\representation_item_relationship.relating_representation_item,
+                                      q.context_of_items))) >
+       0;
+END_ENTITY;
+
+ENTITY implicit_intersection_curve
+  SUBTYPE OF (implicit_planar_curve);
+  external_surface : surface;
+END_ENTITY;
+
+ENTITY implicit_model_intersection_curve
+  SUBTYPE OF (implicit_planar_curve);
+  intersected_model : surface_or_solid_model;
+END_ENTITY;
+
+ENTITY implicit_planar_curve
+  ABSTRACT SUPERTYPE OF (ONEOF(implicit_intersection_curve, implicit_projected_curve,
+                               implicit_model_intersection_curve, implicit_silhouette_curve))
+  SUBTYPE OF (curve, auxiliary_geometric_representation_item);
+  using_sketch            : positioned_sketch;
+  computed_representation : curve;
+DERIVE
+  curve_plane : plane := get_plane_of_implicit_geometry(using_sketch);
+WHERE
+  WR1: SIZEOF(TYPEOF(computed_representation) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IMPLICIT_PLANAR_CURVE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA']) =
+       0;
+END_ENTITY;
+
+ENTITY implicit_planar_intersection_point
+  SUBTYPE OF (implicit_point_on_plane);
+  external_curve : curve;
+END_ENTITY;
+
+ENTITY implicit_planar_projection_point
+  SUBTYPE OF (implicit_point_on_plane);
+  external_point       : point;
+  projection_direction : direction;
+END_ENTITY;
+
+ENTITY implicit_point_on_plane
+  ABSTRACT SUPERTYPE OF (ONEOF(implicit_planar_intersection_point, implicit_planar_projection_point))
+  SUBTYPE OF (point, auxiliary_geometric_representation_item);
+  using_sketch            : positioned_sketch;
+  computed_representation : cartesian_point;
+DERIVE
+  plane_of_point : plane := get_plane_of_implicit_geometry(using_sketch);
+WHERE
+  WR1: (plane_of_point\elementary_surface.position.location = computed_representation) XOR
+       (dot_product(plane_of_point\elementary_surface.position.p[3],
+                    get_relative_direction_2points(plane_of_point\elementary_surface.position.location,
+                                                   computed_representation)) =
+        0);
+  WR2: SIZEOF(TYPEOF(computed_representation) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.IMPLICIT_POINT_ON_PLANE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA']) =
+       0;
+END_ENTITY;
+
+ENTITY implicit_projected_curve
+  SUBTYPE OF (implicit_planar_curve);
+  external_curve       : curve;
+  projection_direction : direction;
+END_ENTITY;
+
+ENTITY implicit_silhouette_curve
+  SUBTYPE OF (implicit_planar_curve);
+  silhouetted_model : surface_or_solid_model;
+  view_direction    : direction;
+END_ENTITY;
+
+ENTITY imported_curve_function
+  SUBTYPE OF (maths_function, generic_literal);
+  geometry          : curve;
+  parametric_domain : tuple_space;
+WHERE
+  WR1: expression_is_constant(parametric_domain);
+END_ENTITY;
+
+ENTITY imported_point_function
+  SUBTYPE OF (maths_function, generic_literal);
+  geometry : point;
+END_ENTITY;
+
+ENTITY imported_surface_function
+  SUBTYPE OF (maths_function, generic_literal);
+  geometry          : surface;
+  parametric_domain : tuple_space;
+WHERE
+  WR1: expression_is_constant(parametric_domain);
+END_ENTITY;
+
+ENTITY imported_volume_function
+  SUBTYPE OF (maths_function, generic_literal);
+  geometry          : volume;
+  parametric_domain : tuple_space;
+WHERE
+  WR1: expression_is_constant(parametric_domain);
+END_ENTITY;
+
+ENTITY in_zone
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY inappropriate_element_visibility
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM']);
+END_ENTITY;
+
+ENTITY inappropriate_use_of_layer
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT']);
+END_ENTITY;
+
+ENTITY inapt_data
+  ABSTRACT SUPERTYPE OF (ONEOF(inapt_topology, inapt_geometry, inapt_topology_and_geometry_relationship,
+                               inapt_manifold_solid_brep))
+  SUBTYPE OF (shape_data_quality_criterion);
+END_ENTITY;
+
+ENTITY inapt_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(nearly_degenerate_geometry, discontinuous_geometry, self_intersecting_geometry,
+                               geometry_with_local_near_degeneracy, overlapping_geometry, multiply_defined_geometry,
+                               geometry_with_local_irregularity, overcomplex_geometry))
+  SUBTYPE OF (inapt_data);
+END_ENTITY;
+
+ENTITY inapt_manifold_solid_brep
+  ABSTRACT SUPERTYPE OF (ONEOF(partly_overlapping_solids, small_volume_solid, multiply_defined_solids,
+                               entirely_narrow_solid, solid_with_excessive_number_of_voids))
+  SUBTYPE OF (inapt_data);
+END_ENTITY;
+
+ENTITY inapt_topology
+  ABSTRACT SUPERTYPE OF (ONEOF(free_edge, non_manifold_at_edge, non_manifold_at_vertex, over_used_vertex))
+  SUBTYPE OF (inapt_data);
+END_ENTITY;
+
+ENTITY inapt_topology_and_geometry_relationship
+  ABSTRACT SUPERTYPE OF (ONEOF(topology_related_to_nearly_degenerate_geometry, geometric_gap_in_topology,
+                               non_smooth_geometry_transition_across_edge,
+                               topology_related_to_self_intersecting_geometry, steep_geometry_transition_across_edge,
+                               topology_related_to_overlapping_geometry, topology_related_to_multiply_defined_geometry,
+                               overcomplex_topology_and_geometry_relationship))
+  SUBTYPE OF (inapt_data);
+END_ENTITY;
+
+ENTITY incidence_assembly_constraint
+  SUBTYPE OF (binary_assembly_constraint, incidence_geometric_constraint);
+END_ENTITY;
+
+ENTITY incidence_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF geometric_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : ?] OF geometric_constraint_element;
+  near_points                                   : SET [0 : ?] OF near_point_relationship;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
+  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
+  WR3: SIZEOF(QUERY(q
+                    <* near_points
+                    | NOT (q\representation_item_relationship.relating_representation_item IN
+                           SELF\explicit_constraint.reference_elements))) =
+       0;
+END_ENTITY;
+
+ENTITY included_text_block
+  SUBTYPE OF (mapped_item);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRUCTURED_TEXT_REPRESENTATION' IN
+       TYPEOF(SELF\mapped_item.mapping_source.mapped_representation);
+END_ENTITY;
+
+ENTITY inclusion_product_concept_feature
+  SUBTYPE OF (conditional_concept_feature);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PACKAGE_PRODUCT_CONCEPT_FEATURE' IN TYPEOF(SELF));
+  WR2: SIZEOF(QUERY(cfr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATING_PRODUCT_CONCEPT_FEATURE')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN
+                      TYPEOF(cfr))) +
+       SIZEOF(QUERY(cfr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATED_PRODUCT_CONCEPT_FEATURE')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN
+                      TYPEOF(cfr))) =
+       0;
+  WR3: SELF.condition.conditional_operator.name = 'implication';
+END_ENTITY;
+
+ENTITY inconsistent_adjacent_face_normals
+  SUBTYPE OF (erroneous_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_OR_OPEN_SHELL_SELECT']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inconsistent_curve_transition_code
+  SUBTYPE OF (erroneous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  angle_tolerance                                            : plane_angle_measure;
+  curvature_ratio_tolerance                                  : ratio_measure;
+  distance_tolerance                                         : length_measure;
+  flat_curvature_radius_tolerance                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_TRANSITION_LOCATOR']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inconsistent_edge_and_curve_directions
+  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  distance_tolerance                                         : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inconsistent_element_reference
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
+END_ENTITY;
+
+ENTITY inconsistent_face_and_closed_shell_normals
+  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inconsistent_face_and_surface_normals
+  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inconsistent_surface_transition_code
+  SUBTYPE OF (erroneous_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  angle_tolerance                                            : plane_angle_measure;
+  curvature_ratio_tolerance                                  : ratio_measure;
+  distance_tolerance                                         : length_measure;
+  flat_curvature_radius_tolerance                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE_TRANSITION_LOCATOR']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY index_expression
+  SUBTYPE OF (string_expression, binary_generic_expression);
+DERIVE
+  operand : generic_expression := SELF\binary_generic_expression.operands[1];
+  index   : generic_expression := SELF\binary_generic_expression.operands[2];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(operand)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index));
+  WR2: is_int_expr(index);
+END_ENTITY;
+
+ENTITY indirectly_selected_elements
+  SUBTYPE OF (user_selected_elements);
+  indirectly_picked_items : SET [1 : ?] OF representation_item;
+END_ENTITY;
+
+ENTITY indirectly_selected_shape_elements
+  SUBTYPE OF (indirectly_selected_elements, user_selected_shape_elements);
+  SELF\indirectly_selected_elements.indirectly_picked_items : SET [1 : ?] OF shape_representation_item;
+END_ENTITY;
+
+ENTITY indistinct_curve_knots
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_WITH_KNOTS']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_KNOT_LOCATOR']);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY indistinct_surface_knots
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARAMETER_VALUE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_WITH_KNOTS']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_KNOT_LOCATOR']);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY inductance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INDUCTANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY inductance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.henry);
+END_ENTITY;
+
+ENTITY information_right
+  SUBTYPE OF (action_method);
+END_ENTITY;
+
+ENTITY information_usage_right
+  SUBTYPE OF (action_method);
+END_ENTITY;
+
+ENTITY instance_attribute_reference
+  SUBTYPE OF (variable_semantics);
+  attribute_name  : attribute_identifier;
+  owning_instance : representation_item;
+END_ENTITY;
+
+ENTITY instance_report_item_with_extreme_instances
+  SUBTYPE OF (shape_data_quality_inspection_instance_report_item);
+  extreme_instances : LIST [1 : ?] OF extreme_instance;
+END_ENTITY;
+
+ENTITY instance_usage_context_assignment
+  SUBTYPE OF (product_definition_context);
+  items : SET [1 : ?] OF instance_usage_context_select;
+END_ENTITY;
+
+ENTITY instanced_feature
+  SUBTYPE OF (feature_definition, shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.product_definitional;
+END_ENTITY;
+
+ENTITY int_literal
+  SUBTYPE OF (literal_number);
+  SELF\literal_number.the_value : INTEGER;
+END_ENTITY;
+
+ENTITY int_numeric_variable
+  SUBTYPE OF (numeric_variable);
+END_ENTITY;
+
+ENTITY int_value_function
+  SUBTYPE OF (value_function);
+END_ENTITY;
+
+ENTITY integer_defined_function
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (numeric_defined_function);
+END_ENTITY;
+
+ENTITY integer_interval_from_min
+  SUBTYPE OF (maths_space, generic_literal);
+  min : INTEGER;
+END_ENTITY;
+
+ENTITY integer_interval_to_max
+  SUBTYPE OF (maths_space, generic_literal);
+  max : INTEGER;
+END_ENTITY;
+
+ENTITY integer_representation_item
+  SUBTYPE OF (representation_item, int_literal);
+END_ENTITY;
+
+ENTITY integer_tuple_literal
+  SUBTYPE OF (generic_literal);
+  lit_value : LIST [1 : ?] OF INTEGER;
+END_ENTITY;
+
+ENTITY interface_component
+  SUBTYPE OF (physical_component);
+END_ENTITY;
+
+ENTITY interface_connection
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY interface_connector_as_planned
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY interface_connector_as_realized
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY interface_connector_definition
+  SUBTYPE OF (product_definition);
+END_ENTITY;
+
+ENTITY interface_connector_design
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY interface_connector_design_to_planned
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_design;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : interface_connector_as_planned;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY interface_connector_design_to_realized
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_design;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : interface_connector_as_realized;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY interface_connector_occurrence
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY interface_connector_planned_to_realized
+  SUBTYPE OF (product_definition_formation_relationship);
+  SELF\product_definition_formation_relationship.relating_product_definition_formation : interface_connector_as_planned;
+  SELF\product_definition_formation_relationship.related_product_definition_formation  : interface_connector_as_realized;
+WHERE
+  WR1: SELF.relating_product_definition_formation.of_product :=: SELF.related_product_definition_formation.of_product;
+END_ENTITY;
+
+ENTITY interface_connector_version
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY interface_definition_connection
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY interface_definition_for
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY interface_specification_definition
+  SUBTYPE OF (product_definition);
+END_ENTITY;
+
+ENTITY interface_specification_version
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY interfaced_group_component
+  SUBTYPE OF (assembly_group_component);
+END_ENTITY;
+
+ENTITY interpolated_configuration_representation
+  SUBTYPE OF (representation);
+  SELF\representation.context_of_items : geometric_representation_context_with_parameter;
+  SELF\representation.items            : SET [1 : ?] OF interpolated_configuration_sequence;
+END_ENTITY;
+
+ENTITY interpolated_configuration_segment
+  SUBTYPE OF (founded_item);
+  state         : mechanism_state_representation;
+  t_parameter   : parameter_value;
+  interpolation : interpolation_type;
+END_ENTITY;
+
+ENTITY interpolated_configuration_sequence
+  SUBTYPE OF (geometric_representation_item);
+  segments : LIST [2 : ?] OF interpolated_configuration_segment;
+DERIVE
+  n_segments           : INTEGER                  := SIZEOF(segments);
+  closed_interpolation : LOGICAL                  := segments[n_segments].interpolation <>
+                                                     discontinuous_interpolation_type;
+  configured_mechanism : mechanism_representation := segments[1].state.represented_mechanism;
+WHERE
+  WR1: SIZEOF(QUERY(ics <* segments | ics.state.represented_mechanism :<>: configured_mechanism)) = 0;
+END_ENTITY;
+
+ENTITY intersecting_connected_face_sets
+  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY intersecting_loops_in_face
+  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY intersecting_shells_in_solid
+  SUBTYPE OF (erroneous_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY intersection_curve
+  SUBTYPE OF (surface_curve);
+WHERE
+  WR1: SIZEOF(SELF\surface_curve.associated_geometry) = 2;
+  WR2: associated_surface(SELF\surface_curve.associated_geometry[1]) <>
+       associated_surface(SELF\surface_curve.associated_geometry[2]);
+END_ENTITY;
+
+ENTITY interval_expression
+  SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
+DERIVE
+  interval_low  : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
+  interval_item : generic_expression := SELF\multiple_arity_generic_expression.operands[2];
+  interval_high : generic_expression := SELF\multiple_arity_generic_expression.operands[3];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_low)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_item)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPRESSION' IN TYPEOF(interval_high));
+  WR2: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_high)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(SELF.interval_item))) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_low)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_item)) AND
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(SELF.interval_high)));
+END_ENTITY;
+
+ENTITY invisibility;
+  invisible_items : SET [1 : ?] OF invisible_item;
+END_ENTITY;
+
+ENTITY iso4217_currency
+  SUBTYPE OF (currency);
+END_ENTITY;
+
+ENTITY item_defined_transformation;
+  name             : label;
+  description      : OPTIONAL text;
+  transform_item_1 : representation_item;
+  transform_item_2 : representation_item;
+END_ENTITY;
+
+ENTITY item_identified_representation_usage;
+  name                : label;
+  description         : OPTIONAL text;
+  definition          : item_identified_representation_usage_definition;
+  used_representation : representation;
+  identified_item     : item_identified_representation_usage_select;
+UNIQUE
+  UR1: used_representation, identified_item;
+  UR2: used_representation, definition;
+WHERE
+  WR1: NOT (SIZEOF(identified_item) = 1) OR (used_representation IN using_representations(identified_item));
+  WR2: NOT (SIZEOF(identified_item) > 1) OR (used_representation IN get_representations_for_items(identified_item));
+END_ENTITY;
+
+ENTITY item_link_motion_relationship
+  SUBTYPE OF (link_motion_relationship);
+  SELF\representation_relationship.rep_1 : shape_representation;
+  item                                   : geometric_representation_item;
+END_ENTITY;
+
+ENTITY joggle
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      NOT ({5 <= SIZEOF(pdr.used_representation.items) <= 10}))) =
+       0;
+  WR2: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | NOT (i.name IN
+                                           ['orientation',
+                                            'base radius 1',
+                                            'base radius 2',
+                                            'direction angle 1',
+                                            'direction angle 2',
+                                            'height',
+                                            'slope angle 1',
+                                            'slope angle 2',
+                                            'top radius 1',
+                                            'top radius 2']))) >
+                       0))) =
+       0;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'direction angle 1') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'direction angle 2') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'height') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) <=
+       1;
+  WR6: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'slope angle 1') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR7: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'slope angle 2') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR8: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'defining path') AND (sa.description = 'path feature component occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.description = 'path feature component usage') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                       TYPEOF(sar.relating_shape_aspect)) AND
+                                      (sar.relating_shape_aspect.description = 'linear'))) =
+                       1))) =
+       1;
+  WR9: SIZEOF(QUERY(sa
+                    <* get_shape_aspects(SELF)
+                    | (sa.name = 'termination') AND (sa.description = 'joggle termination occurrence') AND
+                      (SIZEOF(QUERY(sar
+                                    <* USEDIN(sa,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                       TYPEOF(sar)) AND
+                                      (sar.name = 'joggle termination usage') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.JOGGLE_TERMINATION' IN
+                                       TYPEOF(sar.relating_shape_aspect)))) =
+                       1))) =
+       1;
+  WR10: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'base radius 1') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) <=
+        1;
+  WR11: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'base radius 2') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) <=
+        1;
+  WR12: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'top radius 1') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) <=
+        1;
+  WR13: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'top radius 2') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) <=
+        1;
+END_ENTITY;
+
+ENTITY joggle_termination
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['value termination','face termination'];
+  WR3: (SELF.description = 'value termination') XOR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)))) =
+        0);
+  WR4: (SELF.description <> 'value termination') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(pdr.used_representation.items) = 2))) =
+        1);
+  WR5: (SELF.description <> 'value termination') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'depth') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) =
+        1);
+  WR6: (SELF.description <> 'value termination') OR
+       (SIZEOF(QUERY(pdr
+                     <* get_shape_aspect_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (SIZEOF(QUERY(i
+                                     <* pdr.used_representation.items
+                                     | (i.name = 'angle') AND
+                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                               TYPEOF(i)) =
+                                        2))) =
+                        1))) =
+        1);
+  WR7: SIZEOF(QUERY(sar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                       TYPEOF(sar)) AND
+                      (sar.name = 'joggle termination usage') AND
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.JOGGLE' IN
+                       TYPEOF(sar.related_shape_aspect.of_shape.definition)) AND
+                      (sar.related_shape_aspect.of_shape.definition\characterized_object.name = 'termination') AND
+                      (sar.related_shape_aspect.of_shape.definition\characterized_object.description =
+                       'joggle termination occurrence'))) =
+       1;
+END_ENTITY;
+
+ENTITY kinematic_analysis_consistency;
+  control : kinematic_control;
+  result  : kinematic_analysis_result;
+WHERE
+  WR1: control.controlled_mechanism :=: result.analysed_mechanism;
+END_ENTITY;
+
+ENTITY kinematic_analysis_result;
+  analysed_mechanism : mechanism_representation;
+  result             : kinematic_result;
+END_ENTITY;
+
+ENTITY kinematic_control;
+  controlled_mechanism         : mechanism_representation;
+  contained_kinematic_programs : kinematic_analysis_definition;
+END_ENTITY;
+
+ENTITY kinematic_joint
+  SUBTYPE OF (edge);
+  SELF\edge.edge_start : kinematic_link;
+  SELF\edge.edge_end   : kinematic_link;
+UNIQUE
+  UR1: edge_start, edge_end;
+WHERE
+  WR1: edge_start :<>: edge_end;
+END_ENTITY;
+
+ENTITY kinematic_link
+  SUBTYPE OF (vertex);
+END_ENTITY;
+
+ENTITY kinematic_link_representation
+  ABSTRACT SUPERTYPE OF (ONEOF(linear_flexible_link_representation, rigid_link_representation))
+  SUBTYPE OF (representation);
+  SELF\representation.context_of_items : geometric_representation_context;
+  SELF\representation.items            : SET [1 : ?] OF kinematic_link_representation_items;
+  represented_link                     : kinematic_link;
+INVERSE
+  associated_shape_representation : SET [0:1] OF kinematic_link_representation_association FOR rep_1;
+END_ENTITY;
+
+ENTITY kinematic_link_representation_association
+  SUBTYPE OF (representation_relationship);
+  SELF\representation_relationship.rep_1 : kinematic_link_representation;
+  SELF\representation_relationship.rep_2 : shape_representation;
+WHERE
+  WR1: (SELF\representation_relationship.rep_2.context_of_items :=:
+        SELF\representation_relationship.rep_1.context_of_items) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION' IN
+        TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY kinematic_loop
+  SUBTYPE OF (edge_loop);
+  SELF\path.edge_list : LIST [1 : ?] OF UNIQUE oriented_joint;
+END_ENTITY;
+
+ENTITY kinematic_pair
+  ABSTRACT SUPERTYPE OF (ONEOF(high_order_kinematic_pair, low_order_kinematic_pair_with_motion_coupling,
+                               low_order_kinematic_pair) ANDOR
+                         actuated_kinematic_pair)
+  SUBTYPE OF (geometric_representation_item, item_defined_transformation);
+  joint                                             : kinematic_joint;
+  SELF\item_defined_transformation.transform_item_1 : rigid_placement;
+  SELF\item_defined_transformation.transform_item_2 : rigid_placement;
+DERIVE
+  associated_link_representations_1     : SET [1 : ?] OF kinematic_link_representation := sort_link_associations(link_representation_associations,
+                                                                                                                 true);
+  associated_link_representations_2     : SET [1 : ?] OF kinematic_link_representation := sort_link_associations(link_representation_associations,
+                                                                                                                 false);
+  SELF\item_defined_transformation.name : label                                        := SELF\representation_item.name;
+INVERSE
+  link_representation_associations : SET [1:?] OF pair_representation_relationship FOR transformation_operator;
+END_ENTITY;
+
+ENTITY kinematic_path
+  ABSTRACT SUPERTYPE OF (ONEOF(kinematic_path_defined_by_nodes, kinematic_path_defined_by_curves))
+  SUBTYPE OF (geometric_representation_item);
+  segments : LIST [1 : ?] OF kinematic_path_segment;
+  t_start  : parameter_value;
+DERIVE
+  n_segments  : INTEGER := SIZEOF(segments);
+  closed_path : LOGICAL := segments[n_segments].transition <> discontinuous;
+WHERE
+  WR1: SIZEOF(QUERY(using_rep
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT_WITH_PARAMETER' IN
+                           TYPEOF(using_rep.context_of_items)))) =
+       0;
+END_ENTITY;
+
+ENTITY kinematic_path_defined_by_curves
+  SUBTYPE OF (kinematic_path);
+  SELF\kinematic_path.segments : LIST [1 : ?] OF curve_based_path_with_orientation;
+END_ENTITY;
+
+ENTITY kinematic_path_defined_by_nodes
+  SUBTYPE OF (kinematic_path);
+  SELF\kinematic_path.segments : LIST [1 : ?] OF path_node;
+  placement_start              : placement;
+END_ENTITY;
+
+ENTITY kinematic_path_segment
+  ABSTRACT SUPERTYPE OF (ONEOF(path_node, curve_based_path_with_orientation))
+  SUBTYPE OF (founded_item);
+  t_end      : parameter_value;
+  transition : transition_code;
+END_ENTITY;
+
+ENTITY kinematic_property_definition_representation
+  ABSTRACT SUPERTYPE OF (ONEOF(kinematic_property_topology_representation, kinematic_property_mechanism_representation))
+  SUBTYPE OF (property_definition_representation);
+  SELF\property_definition_representation.definition : product_definition_kinematics;
+END_ENTITY;
+
+ENTITY kinematic_property_mechanism_representation
+  SUBTYPE OF (kinematic_property_definition_representation);
+  SELF\property_definition_representation.used_representation : mechanism_representation;
+  base                                                        : kinematic_link_representation;
+WHERE
+  WR1: SIZEOF(QUERY(i
+                    <* used_representation.items
+                    | (base :=: i\representation_relationship.rep_1) OR
+                      (base :=: i\representation_relationship.rep_2))) >
+       0;
+END_ENTITY;
+
+ENTITY kinematic_property_topology_representation
+  SUBTYPE OF (kinematic_property_definition_representation);
+  SELF\property_definition_representation.used_representation : kinematic_topology_representation_select;
+  base                                                        : kinematic_link;
+WHERE
+  WR1: used_representation IN using_representations(base);
+END_ENTITY;
+
+ENTITY kinematic_topology_directed_structure
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF oriented_joint;
+  parent                    : kinematic_topology_structure;
+WHERE
+  WR1: context_of_items :=: parent.context_of_items;
+  WR2: get_kinematic_joints_from_oriented_joints(items) <= parent.items;
+END_ENTITY;
+
+ENTITY kinematic_topology_network_structure
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF kinematic_loop;
+  parent                    : kinematic_topology_structure;
+WHERE
+  WR1: context_of_items :=: parent.context_of_items;
+  WR2: get_kinematic_joints_from_kinematic_loops(items) <= parent.items;
+END_ENTITY;
+
+ENTITY kinematic_topology_structure
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF kinematic_joint;
+WHERE
+  WR1: SIZEOF(QUERY(item <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(item))) =
+       0;
+END_ENTITY;
+
+ENTITY kinematic_topology_substructure
+  SUBTYPE OF (kinematic_topology_structure);
+  parent : kinematic_topology_structure;
+WHERE
+  WR1: context_of_items :=: parent.context_of_items;
+  WR2: SELF\kinematic_topology_structure.items <= parent\kinematic_topology_structure.items;
+END_ENTITY;
+
+ENTITY kinematic_topology_tree_structure
+  SUBTYPE OF (kinematic_topology_directed_structure);
+END_ENTITY;
+
+ENTITY known_source
+  SUBTYPE OF (external_source, pre_defined_item);
+END_ENTITY;
+
+ENTITY laid_defined_transformation
+  SUBTYPE OF (transformation_with_derived_angle);
+END_ENTITY;
+
+ENTITY laid_orientation_angle
+  SUBTYPE OF (ply_orientation_angle);
+END_ENTITY;
+
+ENTITY language
+  SUBTYPE OF (group);
+WHERE
+  WR1: SELF\group.name <> '';
+END_ENTITY;
+
+ENTITY leader_curve
+  SUBTYPE OF (annotation_curve_occurrence);
+WHERE
+  WR1: SIZEOF(QUERY(ldc
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT.CONTENTS')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT' IN TYPEOF(ldc))) >=
+       1;
+END_ENTITY;
+
+ENTITY leader_directed_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(QUERY(l_1
+                    <* SELF\draughting_callout.contents
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN (TYPEOF(l_1)))) >=
+       1;
+  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
+END_ENTITY;
+
+ENTITY leader_directed_dimension
+  SUBTYPE OF (leader_directed_callout);
+WHERE
+  WR1: SIZEOF(QUERY(con
+                    <* SELF.contents
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(con))) =
+       1;
+END_ENTITY;
+
+ENTITY leader_terminator
+  SUBTYPE OF (terminator_symbol);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_CURVE' IN TYPEOF(SELF\terminator_symbol.annotated_curve);
+END_ENTITY;
+
+ENTITY length_function
+  SUBTYPE OF (numeric_expression, unary_generic_expression);
+  SELF\unary_generic_expression.operand : string_expression;
+END_ENTITY;
+
+ENTITY length_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY length_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 1.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY light_source
+  SUPERTYPE OF (ONEOF(light_source_ambient, light_source_directional, light_source_positional, light_source_spot))
+  SUBTYPE OF (geometric_representation_item);
+  light_colour : colour;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM.ITEM')) = 0;
+END_ENTITY;
+
+ENTITY light_source_ambient
+  SUBTYPE OF (light_source);
+END_ENTITY;
+
+ENTITY light_source_directional
+  SUBTYPE OF (light_source);
+  orientation : direction;
+END_ENTITY;
+
+ENTITY light_source_positional
+  SUBTYPE OF (light_source);
+  position             : cartesian_point;
+  constant_attenuation : REAL;
+  distance_attenuation : REAL;
+END_ENTITY;
+
+ENTITY light_source_spot
+  SUBTYPE OF (light_source);
+  position               : cartesian_point;
+  orientation            : direction;
+  concentration_exponent : REAL;
+  constant_attenuation   : REAL;
+  distance_attenuation   : REAL;
+  spread_angle           : positive_plane_angle_measure;
+END_ENTITY;
+
+ENTITY like_expression
+  SUBTYPE OF (comparison_expression);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN
+        TYPEOF(SELF\binary_generic_expression.operands[1])) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN
+        TYPEOF(SELF\binary_generic_expression.operands[2]));
+END_ENTITY;
+
+ENTITY limits_and_fits;
+  form_variance : label;
+  zone_variance : label;
+  grade         : label;
+  source        : text;
+END_ENTITY;
+
+ENTITY line
+  SUBTYPE OF (curve);
+  pnt : cartesian_point;
+  dir : vector;
+WHERE
+  WR1: dir.dim = pnt.dim;
+END_ENTITY;
+
+ENTITY line_profile_tolerance
+  SUBTYPE OF (geometric_tolerance);
+END_ENTITY;
+
+ENTITY linear_array_component_definition_link
+  SUBTYPE OF (product_definition, product_definition_relationship);
+  SELF\product_definition_relationship.relating_product_definition : linear_array_placement_group_component;
+  SELF\product_definition_relationship.related_product_definition  : linear_array_placement_group_component;
+WHERE
+  WR1: SELF\product_definition_relationship.related_product_definition :<>:
+       SELF\product_definition_relationship.relating_product_definition;
+  WR2: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition],
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_ARRAY_COMPONENT_DEFINITION_LINK');
+END_ENTITY;
+
+ENTITY linear_array_placement_group_component
+  SUBTYPE OF (array_placement_group);
+END_ENTITY;
+
+ENTITY linear_dimension
+  SUBTYPE OF (dimension_curve_directed_callout);
+END_ENTITY;
+
+ENTITY linear_flexible_and_pinion_pair
+  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
+  pinion_radius : length_measure;
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY linear_flexible_and_planar_curve_pair
+  SUBTYPE OF (high_order_kinematic_pair);
+  pair_curve  : curve;
+  orientation : BOOLEAN;
+WHERE
+  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_curve IN r.items))) = 0;
+  WR2: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY linear_flexible_link_representation
+  SUBTYPE OF (kinematic_link_representation);
+END_ENTITY;
+
+ENTITY linear_path
+  SUBTYPE OF (path_node);
+DERIVE
+  SELF\kinematic_path_segment.transition : transition_code := continuous;
+END_ENTITY;
+
+ENTITY linear_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'profile length')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY linearized_table_function
+  SUPERTYPE OF (ONEOF(standard_table_function, regular_table_function, triangular_matrix, symmetric_matrix,
+                      banded_matrix))
+  SUBTYPE OF (explicit_table_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  first                                 : INTEGER;
+DERIVE
+  source : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: function_is_1d_array(source);
+  WR2: member_of(first, source\maths_function.domain);
+END_ENTITY;
+
+ENTITY link_motion_relationship
+  SUBTYPE OF (definitional_representation_relationship, representation_relationship_with_transformation);
+  SELF\representation_relationship.rep_1                                       : link_or_shape_representation;
+  SELF\representation_relationship.rep_2                                       : link_motion_representation_along_path;
+  SELF\representation_relationship_with_transformation.transformation_operator : link_motion_transformation;
+WHERE
+  WR1: transformation_operator\item_defined_transformation.transform_item_1 IN rep_1.items;
+  WR2: transformation_operator\item_defined_transformation.transform_item_2 IN rep_2.items;
+END_ENTITY;
+
+ENTITY link_motion_representation_along_path
+  SUPERTYPE OF (ONEOF(prescribed_path, resulting_path))
+  SUBTYPE OF (representation);
+  SELF\representation.items            : SET [1 : ?] OF kinematic_path;
+  SELF\representation.context_of_items : geometric_representation_context_with_parameter;
+END_ENTITY;
+
+ENTITY link_motion_transformation
+  SUBTYPE OF (item_defined_transformation);
+  SELF\item_defined_transformation.transform_item_1 : rigid_placement;
+  SELF\item_defined_transformation.transform_item_2 : kinematic_path;
+END_ENTITY;
+
+ENTITY listed_complex_number_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values : LIST [2 : ?] OF REAL;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values) DIV 2];
+WHERE
+  WR1: NOT ODD(SIZEOF(values));
+END_ENTITY;
+
+ENTITY listed_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values      : LIST [1 : ?] OF maths_value;
+  value_range : maths_space;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values)];
+WHERE
+  WR1: expression_is_constant(value_range);
+  WR2: SIZEOF(QUERY(val <* values | NOT (member_of(val, value_range)))) = 0;
+END_ENTITY;
+
+ENTITY listed_integer_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values : LIST [1 : ?] OF INTEGER;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values)];
+END_ENTITY;
+
+ENTITY listed_logical_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values : LIST [1 : ?] OF LOGICAL;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values)];
+END_ENTITY;
+
+ENTITY listed_real_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values : LIST [1 : ?] OF REAL;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values)];
+END_ENTITY;
+
+ENTITY listed_string_data
+  SUBTYPE OF (explicit_table_function, generic_literal);
+  values : LIST [1 : ?] OF STRING;
+DERIVE
+  SELF\explicit_table_function.shape : LIST [1 : ?] OF positive_integer := [SIZEOF(values)];
+END_ENTITY;
+
+ENTITY literal_conjunction
+  SUBTYPE OF (simple_clause);
+END_ENTITY;
+
+ENTITY literal_disjunction
+  SUBTYPE OF (simple_clause);
+END_ENTITY;
+
+ENTITY literal_number
+  ABSTRACT SUPERTYPE OF (ONEOF(int_literal, real_literal))
+  SUBTYPE OF (simple_numeric_expression, generic_literal);
+  the_value : NUMBER;
+END_ENTITY;
+
+ENTITY local_b_spline
+  SUBTYPE OF (representation_item);
+  degree         : INTEGER;
+  knots          : LIST [2 : ?] OF INTEGER;
+  multiplicities : LIST [2 : ?] OF INTEGER;
+WHERE
+  WR1: degree > 0;
+  WR2: SIZEOF(knots) = SIZEOF(multiplicities);
+  WR3: constraints_param_local_b_spline(degree, knots, multiplicities);
+END_ENTITY;
+
+ENTITY local_time;
+  hour_component   : hour_in_day;
+  minute_component : OPTIONAL minute_in_hour;
+  second_component : OPTIONAL second_in_minute;
+  zone             : coordinated_universal_time_offset;
+WHERE
+  WR1: valid_time(SELF);
+END_ENTITY;
+
+ENTITY locally_refined_spline_curve
+  SUBTYPE OF (bounded_curve);
+  b_splines                   : LIST [2 : ?] OF local_b_spline;
+  knot_values                 : spline_knot_values;
+  control_points_list         : LIST [2 : ?] OF cartesian_point;
+  scaling_factors             : LIST [2 : ?] OF REAL;
+  closed_curve                : LOGICAL;
+  locally_refined_spline_type : locally_refined_spline_type_enum;
+  self_intersect              : LOGICAL;
+  domain                      : LIST [2 : 2] OF REAL;
+WHERE
+  WR1: SIZEOF(b_splines) = SIZEOF(control_points_list);
+  WR2: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
+END_ENTITY;
+
+ENTITY locally_refined_spline_surface
+  SUBTYPE OF (bounded_surface);
+  u_b_splines                 : LIST [4 : ?] OF local_b_spline;
+  v_b_splines                 : LIST [4 : ?] OF local_b_spline;
+  u_knots                     : spline_knot_values;
+  v_knots                     : spline_knot_values;
+  control_points_list         : LIST [4 : ?] OF cartesian_point;
+  scaling_factors             : LIST [4 : ?] OF REAL;
+  linearly_independent        : linearly_independent_enum;
+  locally_refined_spline_type : locally_refined_spline_type_enum;
+  self_intersect              : LOGICAL;
+  u_closed                    : LOGICAL;
+  v_closed                    : LOGICAL;
+  domain                      : LIST [2 : 2] OF LIST [2 : 2] OF REAL;
+WHERE
+  WR1: SIZEOF(u_b_splines) = SIZEOF(control_points_list);
+  WR2: SIZEOF(v_b_splines) = SIZEOF(control_points_list);
+  WR3: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
+  WR4: constraints_scaling(SELF.scaling_factors);
+END_ENTITY;
+
+ENTITY locally_refined_spline_volume
+  SUBTYPE OF (volume);
+  u_b_splines                 : LIST [8 : ?] OF local_b_spline;
+  v_b_splines                 : LIST [8 : ?] OF local_b_spline;
+  w_b_splines                 : LIST [8 : ?] OF local_b_spline;
+  u_knots                     : spline_knot_values;
+  v_knots                     : spline_knot_values;
+  w_knots                     : spline_knot_values;
+  control_points_list         : LIST [8 : ?] OF cartesian_point;
+  scaling_factors             : LIST [8 : ?] OF REAL;
+  linearly_independent        : linearly_independent_enum;
+  locally_refined_spline_type : locally_refined_spline_type_enum;
+  domain                      : LIST [3 : 3] OF LIST [2 : 2] OF REAL;
+WHERE
+  WR1: SIZEOF(u_b_splines) = SIZEOF(control_points_list);
+  WR2: SIZEOF(v_b_splines) = SIZEOF(control_points_list);
+  WR3: SIZEOF(w_b_splines) = SIZEOF(control_points_list);
+  WR4: SIZEOF(scaling_factors) = SIZEOF(control_points_list);
+  WR5: constraints_scaling(SELF.scaling_factors);
+END_ENTITY;
+
+ENTITY location;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY location_assignment
+  ABSTRACT SUPERTYPE;
+  id                : identifier;
+  name              : label;
+  description       : OPTIONAL text;
+  assigned_location : location;
+  role              : location_role;
+END_ENTITY;
+
+ENTITY location_in_aggregate_representation_item
+  SUBTYPE OF (compound_representation_item);
+  SELF\compound_representation_item.item_element : location_in_aggregate_item;
+END_ENTITY;
+
+ENTITY location_relationship;
+  id                : identifier;
+  name              : label;
+  description       : OPTIONAL text;
+  relating_location : location;
+  related_location  : location;
+END_ENTITY;
+
+ENTITY location_representation_assignment
+  ABSTRACT SUPERTYPE;
+  id                   : identifier;
+  name                 : label;
+  description          : OPTIONAL text;
+  represented_location : location;
+  role                 : location_representation_role;
+END_ENTITY;
+
+ENTITY location_representation_role;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY location_role;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY location_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) = 1);
+  WR2: (SIZEOF(QUERY(it
+                     <* SELF.items
+                     | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(it))))) =
+        0);
+END_ENTITY;
+
+ENTITY locator
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      NOT ({2 <= SIZEOF(pdr.used_representation.items) <= 5}))) =
+       0;
+  WR2: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'diameter') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'tip radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) <=
+       1;
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'tip angle') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) =
+       1;
+  WR5: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (SIZEOF(QUERY(i
+                                    <* pdr.used_representation.items
+                                    | (i.name = 'base radius') AND
+                                      (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                              TYPEOF(i)) =
+                                       2))) =
+                       1))) <=
+       1;
+END_ENTITY;
+
+ENTITY log_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY log10_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY log2_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY logical_literal
+  SUBTYPE OF (generic_literal);
+  lit_value : LOGICAL;
+END_ENTITY;
+
+ENTITY logical_representation_item
+  SUBTYPE OF (representation_item, logical_literal);
+END_ENTITY;
+
+ENTITY loop
+  SUPERTYPE OF (ONEOF(vertex_loop, edge_loop, poly_loop))
+  SUBTYPE OF (topological_representation_item);
+END_ENTITY;
+
+ENTITY loss_tangent_measure_with_unit
+  SUBTYPE OF (ratio_measure_with_unit);
+END_ENTITY;
+
+ENTITY lot_effectivity
+  SUBTYPE OF (effectivity);
+  effectivity_lot_id   : identifier;
+  effectivity_lot_size : measure_with_unit;
+END_ENTITY;
+
+ENTITY low_order_kinematic_pair
+  SUPERTYPE OF (ONEOF(revolute_pair, cylindrical_pair, spherical_pair, spherical_pair_with_pin, planar_pair,
+                      unconstrained_pair, fully_constrained_pair, prismatic_pair, universal_pair,
+                      low_order_kinematic_pair_with_range))
+  SUBTYPE OF (kinematic_pair);
+  t_x : BOOLEAN;
+  t_y : BOOLEAN;
+  t_z : BOOLEAN;
+  r_x : BOOLEAN;
+  r_y : BOOLEAN;
+  r_z : BOOLEAN;
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+  WR2: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_2
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY low_order_kinematic_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : low_order_kinematic_pair;
+  actual_translation_x            : length_measure;
+  actual_translation_y            : length_measure;
+  actual_translation_z            : length_measure;
+  actual_rotation_x               : plane_angle_measure;
+  actual_rotation_y               : plane_angle_measure;
+  actual_rotation_z               : plane_angle_measure;
+END_ENTITY;
+
+ENTITY low_order_kinematic_pair_with_motion_coupling
+  ABSTRACT SUPERTYPE OF (ONEOF(gear_pair, linear_flexible_and_pinion_pair, rack_and_pinion_pair, screw_pair))
+  SUBTYPE OF (kinematic_pair);
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_2
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY low_order_kinematic_pair_with_range
+  SUBTYPE OF (low_order_kinematic_pair);
+  lower_limit_actual_rotation_x    : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation_x    : OPTIONAL plane_angle_measure;
+  lower_limit_actual_rotation_y    : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation_y    : OPTIONAL plane_angle_measure;
+  lower_limit_actual_rotation_z    : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation_z    : OPTIONAL plane_angle_measure;
+  lower_limit_actual_translation_x : OPTIONAL length_measure;
+  upper_limit_actual_translation_x : OPTIONAL length_measure;
+  lower_limit_actual_translation_y : OPTIONAL length_measure;
+  upper_limit_actual_translation_y : OPTIONAL length_measure;
+  lower_limit_actual_translation_z : OPTIONAL length_measure;
+  upper_limit_actual_translation_z : OPTIONAL length_measure;
+END_ENTITY;
+
+ENTITY luminous_flux_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LUMINOUS_FLUX_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY luminous_flux_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.lumen);
+END_ENTITY;
+
+ENTITY luminous_intensity_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LUMINOUS_INTENSITY_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY luminous_intensity_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 1.0);
+END_ENTITY;
+
+ENTITY machining_process_executable
+  SUBTYPE OF (process_operation);
+END_ENTITY;
+
+ENTITY magnetic_flux_density_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAGNETIC_FLUX_DENSITY_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY magnetic_flux_density_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.tesla);
+END_ENTITY;
+
+ENTITY magnetic_flux_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAGNETIC_FLUX_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY magnetic_flux_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.weber);
+END_ENTITY;
+
+ENTITY make_from_feature_relationship
+  SUBTYPE OF (component_feature_relationship);
+END_ENTITY;
+
+ENTITY make_from_usage_option
+  SUBTYPE OF (product_definition_usage);
+  ranking           : INTEGER;
+  ranking_rationale : text;
+  quantity          : measure_with_unit;
+WHERE
+  WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
+END_ENTITY;
+
+ENTITY manifold_solid_brep
+  SUBTYPE OF (solid_model);
+  outer : closed_shell;
+END_ENTITY;
+
+ENTITY manifold_subsurface_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN
+                           TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR4: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(cfss)))) =
+       0;
+  WR5: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN
+                             TYPEOF(cfss\connected_face_sub_set.parent_face_set)) AND
+                            (SIZEOF(QUERY(fac
+                                          <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces
+                                          | NOT advanced_face_properties(fac))) =
+                             0)) OR
+                           (SIZEOF(QUERY(fac
+                                         <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces
+                                         | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                TYPEOF(fac)))) =
+                            0)))) =
+       0;
+  WR6: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | (SIZEOF(QUERY(fac <* cfss\connected_face_set.cfs_faces | NOT advanced_face_properties(fac))) =
+                       0))) =
+       0;
+  WR7: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(fcs
+                                        <* cfss\connected_face_set.cfs_faces
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                           TYPEOF(fcs)) AND
+                                          NOT (SIZEOF(QUERY(elp_fbnds
+                                                            <* QUERY(bnds
+                                                                     <* fcs.bounds
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                       TYPEOF(bnds.bound))
+                                                            | NOT (SIZEOF(QUERY(oe
+                                                                                <* elp_fbnds.bound\path.edge_list
+                                                                                | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                        TYPEOF(oe.edge_element)) OR
+                                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE' IN
+                                                                                        TYPEOF(oe.edge_element))))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(fcs
+                                        <* cfss\connected_face_set.cfs_faces
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                           TYPEOF(fcs)) AND
+                                          NOT (SIZEOF(QUERY(elp_fbnds
+                                                            <* QUERY(bnds
+                                                                     <* fcs.bounds
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                       TYPEOF(bnds.bound))
+                                                            | NOT (SIZEOF(QUERY(oe
+                                                                                <* elp_fbnds.bound\path.edge_list
+                                                                                | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                        TYPEOF(oe.edge_start)) AND
+                                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                        TYPEOF(oe.edge_end))))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(cfss
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(fcs
+                                        <* cfss\connected_face_set.cfs_faces
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                           TYPEOF(fcs)) AND
+                                          (NOT (SIZEOF(QUERY(bnds
+                                                             <* fcs.bounds
+                                                             | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] *
+                                                                           TYPEOF(bnds.bound)) =
+                                                                    1))) =
+                                                0)))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(fcs
+                                         <* cfss\connected_face_set.cfs_faces
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                            TYPEOF(fcs)) AND
+                                           (NOT (SIZEOF(QUERY(elp_fbnds
+                                                              <* QUERY(bnds
+                                                                       <* fcs.bounds
+                                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                         TYPEOF(bnds.bound))
+                                                              | NOT (SIZEOF(QUERY(oe
+                                                                                  <* elp_fbnds.bound\path.edge_list
+                                                                                  | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE'] *
+                                                                                                TYPEOF(oe.edge_element\edge_curve.edge_geometry)) =
+                                                                                         1))) =
+                                                                     0))) =
+                                                 0)))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(fcs
+                                         <* cfss\connected_face_set.cfs_faces
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                            TYPEOF(fcs)) AND
+                                           (NOT (SIZEOF(QUERY(elp_fbnds
+                                                              <* QUERY(bnds
+                                                                       <* fcs.bounds
+                                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                         TYPEOF(bnds.bound))
+                                                              | NOT (SIZEOF(QUERY(oe
+                                                                                  <* elp_fbnds.bound\path.edge_list
+                                                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN
+                                                                                     TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND
+                                                                                    (NOT ((SIZEOF(QUERY(sc_ag
+                                                                                                        <* oe.edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry
+                                                                                                        | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                                                                                                               TYPEOF(sc_ag)))) =
+                                                                                           0))))) =
+                                                                     0))) =
+                                                 0)))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(cfss
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SUB_SET' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(fcs
+                                         <* cfss\connected_face_set.cfs_faces
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN
+                                            TYPEOF(fcs)) AND
+                                           (NOT (SIZEOF(QUERY(elp_fbnds
+                                                              <* QUERY(bnds
+                                                                       <* fcs.bounds
+                                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                         TYPEOF(bnds.bound))
+                                                              | NOT (SIZEOF(QUERY(oe
+                                                                                  <* elp_fbnds.bound\path.edge_list
+                                                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                                                                     TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND
+                                                                                    (NOT (SIZEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry\polyline.points) >=
+                                                                                          3)))) =
+                                                                     0))) =
+                                                 0)))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY manifold_surface_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN
+                            TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND
+                           (SIZEOF(QUERY(mr_it
+                                         <* mi\mapped_item.mapping_source.mapped_representation.items
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                            TYPEOF(mr_it)))) >
+                            0)))) =
+       0;
+  WR4: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(sh
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL'] *
+                                                      TYPEOF(sh)) =
+                                               1))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs\connected_face_set.cfs_faces
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN
+                                                                   TYPEOF(fa)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (msf_surface_check(fa\face_surface.face_geometry))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(bnds
+                                                                                 <* fa.bounds
+                                                                                 | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP',
+                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] *
+                                                                                               TYPEOF(bnds.bound)) =
+                                                                                        1))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(elp_fbnds
+                                                                                 <* QUERY(bnds
+                                                                                          <* fa.bounds
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                            TYPEOF(bnds.bound))
+                                                                                 | NOT (SIZEOF(QUERY(oe
+                                                                                                     <* elp_fbnds\path.edge_list
+                                                                                                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                                            TYPEOF(oe.edge_element)))) =
+                                                                                        0))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(sbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* sbsm\shell_based_surface_model.sbsm_boundary
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs\connected_face_set.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(elp_fbnds
+                                                                                 <* QUERY(bnds
+                                                                                          <* fa.bounds
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                            TYPEOF(bnds.bound))
+                                                                                 | NOT (SIZEOF(QUERY(oe_cv
+                                                                                                     <* QUERY(oe
+                                                                                                              <* elp_fbnds\path.edge_list
+                                                                                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                                                TYPEOF(oe.edge_element))
+                                                                                                     | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE'] *
+                                                                                                                   TYPEOF(oe_cv.edge_element\edge_curve.edge_geometry)) =
+                                                                                                            1))) =
+                                                                                        0))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(sbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* sbsm\shell_based_surface_model.sbsm_boundary
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs\connected_face_set.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT (msf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(sbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* sbsm\shell_based_surface_model.sbsm_boundary
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs\connected_face_set.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                              TYPEOF(oe.edge_element.edge_start)) AND
+                                                                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                              TYPEOF(oe.edge_element.edge_end))))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(sbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* sbsm\shell_based_surface_model.sbsm_boundary
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs\connected_face_set.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                                     TYPEOF(oe.edge_element.edge_start\vertex_point.vertex_geometry)) =
+                                                                                                              1) AND
+                                                                                                             (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                                     TYPEOF(oe.edge_element.edge_end\vertex_point.vertex_geometry)) =
+                                                                                                              1)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR13: SIZEOF(QUERY(sbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* sbsm\shell_based_surface_model.sbsm_boundary
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs\connected_face_set.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(vlp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                         TYPEOF(vlp_fbnds\vertex_loop.loop_vertex)))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR14: SIZEOF(QUERY(sbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* sbsm\shell_based_surface_model.sbsm_boundary
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs\connected_face_set.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(vlp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                TYPEOF(vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry)) =
+                                                                                         1))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY mapped_item
+  SUBTYPE OF (representation_item);
+  mapping_source : representation_map;
+  mapping_target : representation_item;
+WHERE
+  WR1: acyclic_mapped_representation(SELF);
+END_ENTITY;
+
+ENTITY marking
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     ({2 <= SIZEOF(pdr.used_representation.items) <= 6}))) =
+                      1)) =
+       1;
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'marking text')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'special instructions')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'font name')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'character height')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'character spacing')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'applied shape') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                              TYPEOF(sdr.relating_shape_aspect)))) =
+                                              1)))) =
+                             1)))) =
+        0);
+END_ENTITY;
+
+ENTITY mass_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MASS_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY mass_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY mated_part_relationship
+  SUBTYPE OF (group, group_assignment, product_definition_shape, product_definition_relationship, shape_aspect);
+  items : SET [0 : ?] OF product_definition;
+DERIVE
+  SELF\group_assignment.assigned_group : mated_part_relationship := SELF;
+  SELF\property_definition.definition  : mated_part_relationship := SELF;
+  SELF\shape_aspect.of_shape           : mated_part_relationship := SELF;
+END_ENTITY;
+
+ENTITY material_designation;
+  name        : label;
+  definitions : SET [1 : ?] OF characterized_definition;
+END_ENTITY;
+
+ENTITY material_designation_characterization;
+  name        : label;
+  description : text;
+  designation : material_designation;
+  property    : characterized_material_property;
+END_ENTITY;
+
+ENTITY material_property
+  SUBTYPE OF (property_definition);
+UNIQUE
+  UR1: SELF\property_definition.name, SELF\property_definition.definition;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_OBJECT' IN
+        TYPEOF(SELF\property_definition.definition)) OR
+       (SIZEOF(bag_to_set(USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) -
+               QUERY(temp
+                     <* bag_to_set(USEDIN(SELF,
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'))
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_PROPERTY_REPRESENTATION' IN
+                        TYPEOF(temp)))) =
+        0);
+END_ENTITY;
+
+ENTITY material_property_representation
+  SUBTYPE OF (property_definition_representation);
+  dependent_environment : data_environment;
+END_ENTITY;
+
+ENTITY mathematical_description;
+  described  : maths_expression;
+  describing : STRING;
+  encoding   : label;
+END_ENTITY;
+
+ENTITY maths_boolean_variable
+  SUBTYPE OF (maths_variable, boolean_variable);
+WHERE
+  WR1: subspace_of_es(SELF\maths_variable.values_space, es_booleans);
+END_ENTITY;
+
+ENTITY maths_enum_literal
+  SUBTYPE OF (generic_literal);
+  lit_value : maths_enum_atom;
+END_ENTITY;
+
+ENTITY maths_function
+  ABSTRACT SUPERTYPE OF (ONEOF(finite_function, constant_function, selector_function, elementary_function,
+                               restriction_function, repackaging_function, reindexed_array_function,
+                               series_composed_function, parallel_composed_function, explicit_table_function,
+                               homogeneous_linear_function, general_linear_function, b_spline_basis, b_spline_function,
+                               rationalize_function, partial_derivative_function, definite_integral_function,
+                               abstracted_expression_function, expression_denoted_function, imported_point_function,
+                               imported_curve_function, imported_surface_function, imported_volume_function,
+                               application_defined_function))
+  SUBTYPE OF (generic_expression);
+DERIVE
+  domain : tuple_space := derive_function_domain(SELF);
+  range  : tuple_space := derive_function_range(SELF);
+END_ENTITY;
+
+ENTITY maths_integer_variable
+  SUBTYPE OF (maths_variable, int_numeric_variable);
+WHERE
+  WR1: subspace_of_es(SELF\maths_variable.values_space, es_integers);
+END_ENTITY;
+
+ENTITY maths_real_variable
+  SUBTYPE OF (maths_variable, real_numeric_variable);
+WHERE
+  WR1: subspace_of_es(SELF\maths_variable.values_space, es_reals);
+END_ENTITY;
+
+ENTITY maths_space
+  ABSTRACT SUPERTYPE OF (ONEOF(elementary_space, finite_integer_interval, integer_interval_from_min,
+                               integer_interval_to_max, finite_real_interval, real_interval_from_min,
+                               real_interval_to_max, cartesian_complex_number_region, polar_complex_number_region,
+                               uniform_product_space, extended_tuple_space,
+                               function_space))
+  SUBTYPE OF (generic_expression);
+END_ENTITY;
+
+ENTITY maths_string_variable
+  SUBTYPE OF (maths_variable, string_variable);
+WHERE
+  WR1: subspace_of_es(SELF\maths_variable.values_space, es_strings);
+END_ENTITY;
+
+ENTITY maths_value_precision_qualifier;
+  precision_value : maths_value;
+END_ENTITY;
+
+ENTITY maths_variable
+  SUBTYPE OF (generic_variable);
+  values_space : maths_space;
+  name         : label;
+WHERE
+  WR1: expression_is_constant(values_space);
+END_ENTITY;
+
+ENTITY mating_material
+  SUBTYPE OF (property_definition, group);
+  SELF\property_definition.definition : product_definition_usage_relationship;
+UNIQUE
+  UR1: SELF\property_definition.definition;
+END_ENTITY;
+
+ENTITY mating_material_items
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : mating_material;
+  items                                : SET [1 : ?] OF product_definition;
+END_ENTITY;
+
+ENTITY maximum_function
+  SUBTYPE OF (multiple_arity_function_call);
+END_ENTITY;
+
+ENTITY measure_qualification;
+  name              : label;
+  description       : text;
+  qualified_measure : measure_with_unit;
+  qualifiers        : SET [1 : ?] OF value_qualifier;
+WHERE
+  WR1: SIZEOF(QUERY(temp
+                    <* qualifiers
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp)) OR
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATHS_VALUE_PRECISION_QUALIFIER' IN
+                       TYPEOF(temp)))) <
+       2;
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN
+            TYPEOF(SELF\measure_qualification.qualified_measure));
+END_ENTITY;
+
+ENTITY measure_representation_item
+  SUBTYPE OF (representation_item, measure_with_unit);
+END_ENTITY;
+
+ENTITY measure_with_unit
+  SUPERTYPE OF (ONEOF(length_measure_with_unit, mass_measure_with_unit, time_measure_with_unit,
+                      electric_current_measure_with_unit, thermodynamic_temperature_measure_with_unit,
+                      celsius_temperature_measure_with_unit, amount_of_substance_measure_with_unit,
+                      luminous_intensity_measure_with_unit, plane_angle_measure_with_unit,
+                      solid_angle_measure_with_unit, area_measure_with_unit, volume_measure_with_unit,
+                      ratio_measure_with_unit, acceleration_measure_with_unit, capacitance_measure_with_unit,
+                      electric_charge_measure_with_unit, conductance_measure_with_unit,
+                      electric_potential_measure_with_unit, energy_measure_with_unit,
+                      magnetic_flux_density_measure_with_unit, force_measure_with_unit, frequency_measure_with_unit,
+                      illuminance_measure_with_unit, inductance_measure_with_unit, luminous_flux_measure_with_unit,
+                      magnetic_flux_measure_with_unit, power_measure_with_unit, pressure_measure_with_unit,
+                      resistance_measure_with_unit, velocity_measure_with_unit, absorbed_dose_measure_with_unit,
+                      radioactivity_measure_with_unit, dose_equivalent_measure_with_unit));
+  value_component : measure_value;
+  unit_component  : unit;
+WHERE
+  WR1: valid_units(SELF);
+END_ENTITY;
+
+ENTITY mechanical_context
+  SUBTYPE OF (product_context);
+WHERE
+  WR1: SELF.discipline_type = 'mechanical';
+END_ENTITY;
+
+ENTITY mechanical_design_and_draughting_relationship
+  SUBTYPE OF (definitional_representation_relationship_with_same_context);
+  SELF\representation_relationship.rep_1 : mechanical_design_and_draughting_relationship_select;
+  SELF\representation_relationship.rep_2 : mechanical_design_and_draughting_relationship_select;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL' IN TYPEOF(rep_2)) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_MODEL' IN TYPEOF(rep_1)) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN
+            TYPEOF(rep_2)) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN
+             TYPEOF(rep_1)) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
+  WR3: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN
+            TYPEOF(rep_2)) OR
+           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN
+             TYPEOF(rep_1)) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN TYPEOF(rep_1)));
+END_ENTITY;
+
+ENTITY mechanical_design_geometric_presentation_area
+  SUBTYPE OF (presentation_area);
+  SELF\representation.items : SET [1 : ?] OF mechanical_design_geometric_presentation_area_items;
+WHERE
+  WR1: SIZEOF(QUERY(it1
+                    <* SELF.items
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) OR
+                          ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                           TYPEOF(it1\mapped_item.mapping_source.mapped_representation)))) =
+       0;
+  WR2: SIZEOF(QUERY(pv
+                    <* QUERY(mi1
+                             <* QUERY(it1
+                                      <* SELF.items
+                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1))
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                               TYPEOF(mi1\mapped_item.mapping_source.mapped_representation))
+                    | NOT (SIZEOF(QUERY(it2
+                                        <* pv\mapped_item.mapping_source.mapped_representation\representation.items
+                                        | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN
+                                                TYPEOF(it2)) OR
+                                               (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN
+                                                 TYPEOF(it2)) AND
+                                                NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN
+                                                     TYPEOF(it2))) AND
+                                               NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                                                    TYPEOF(it2\mapped_item.mapping_source.mapped_representation))) OR
+                                              (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN
+                                                TYPEOF(it2)) AND
+                                               NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION' IN
+                                                     TYPEOF(it2\mapped_item.mapping_source.mapped_representation)))))) =
+                           0))) =
+       0;
+  WR3: (SIZEOF(QUERY(ps
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                     | ((ps\presentation_size.size.size_in_x <= 0) OR (ps\presentation_size.size.size_in_y <= 0)))) =
+        0) AND
+       (SIZEOF(QUERY(ais
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                     | (SIZEOF(QUERY(ps
+                                     <* USEDIN(ais,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                                     | ((ps\presentation_size.size.size_in_x <= 0) OR
+                                        (ps\presentation_size.size.size_in_y <= 0)))) >
+                        0))) =
+        0);
+  WR4: (SIZEOF(QUERY(ps
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+                        TYPEOF(ps.size.placement)))) =
+        1) AND
+       (SIZEOF(QUERY(ps
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+                        TYPEOF(ps.size.placement)))) =
+        0) OR
+       ((SIZEOF(QUERY(ais
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                      | (SIZEOF(QUERY(ps
+                                      <* USEDIN(ais,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+                                         TYPEOF(ps.size.placement)))) =
+                         1))) =
+         1) AND
+        (SIZEOF(QUERY(ais
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                      | (SIZEOF(QUERY(ps
+                                      <* USEDIN(ais,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+                                         TYPEOF(ps.size.placement)))) =
+                         0))) =
+         1));
+END_ENTITY;
+
+ENTITY mechanical_design_geometric_presentation_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF mechanical_design_geometric_presentation_representation_items;
+WHERE
+  WR1: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'] *
+                                  TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(smi
+                    <* QUERY(si
+                             <* QUERY(it
+                                      <* SELF.items
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)))
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN
+                                TYPEOF(si\styled_item.item)))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+                            TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation))))) =
+       0;
+  WR3: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(pss
+                                                            <* psa.styles
+                                                            | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE'] *
+                                                                          TYPEOF(pss)) =
+                                                                   1))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psbc
+                                        <* QUERY(psa
+                                                 <* si\styled_item.styles
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN
+                                                   TYPEOF(psa))
+                                        | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION'] *
+                                                      TYPEOF(psbc\presentation_style_by_context.style_context)) =
+                                               1))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ps
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                    TYPEOF(ps\point_style.marker_size)) AND
+                                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                           TYPEOF(ps\point_style.marker_colour)) =
+                                                                    1)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(cs
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                           TYPEOF(cs\curve_style.curve_colour)) =
+                                                                    1) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                    TYPEOF(cs\curve_style.curve_width)) AND
+                                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                           TYPEOF(cs\curve_style.curve_font)) =
+                                                                    1)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_SIDE_STYLE' IN
+                                                                   TYPEOF(ssu\surface_style_usage.style)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (SIZEOF(QUERY(sses
+                                                                                <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_FILL_AREA',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY'] *
+                                                                                              TYPEOF(sses)) =
+                                                                                       1))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (SIZEOF(QUERY(sspl
+                                                                                <* QUERY(sses
+                                                                                         <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE' IN
+                                                                                           TYPEOF(sses))
+                                                                                | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                        TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND
+                                                                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                               TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_colour)) =
+                                                                                        1) AND
+                                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                        TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_width)) AND
+                                                                                       (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                               TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_font)) =
+                                                                                        1)))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sscg
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                         TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_colour)) =
+                                                                                         1) AND
+                                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                         TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_width)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_font)) =
+                                                                                         1)))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sssh
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                         TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_colour)) =
+                                                                                         1) AND
+                                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                         TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_width)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_font)) =
+                                                                                         1)))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sssc
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                         TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_colour)) =
+                                                                                         1) AND
+                                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                         TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_width)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_font)) =
+                                                                                         1)))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR13: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(ssbd
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                         TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_colour)) =
+                                                                                         1) AND
+                                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                         TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_width)) AND
+                                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_font)) =
+                                                                                         1)))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY mechanical_design_presentation_representation_with_draughting
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF camera_model_d3;
+END_ENTITY;
+
+ENTITY mechanical_design_requirement_item_association
+  SUBTYPE OF (pmi_requirement_item_association);
+  SELF\pmi_requirement_item_association.requirement : requirement_assignment;
+END_ENTITY;
+
+ENTITY mechanical_design_shaded_presentation_area
+  SUBTYPE OF (presentation_area);
+  SELF\representation.items : SET [1 : ?] OF mechanical_design_shaded_presentation_area_items;
+WHERE
+  WR1: SIZEOF(QUERY(it1
+                    <* SELF.items
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(it1)) OR
+                           (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1)) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                             TYPEOF(it1\mapped_item.mapping_source.mapped_representation)))))) =
+       0;
+  WR2: SIZEOF(QUERY(pv
+                    <* QUERY(mi1
+                             <* QUERY(it1
+                                      <* SELF.items
+                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1))
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                               TYPEOF(mi1\mapped_item.mapping_source.mapped_representation))
+                    | NOT (SIZEOF(QUERY(it2
+                                        <* pv\mapped_item.mapping_source.mapped_representation\representation.items
+                                        | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN
+                                                TYPEOF(it2)) OR
+                                               (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN
+                                                 TYPEOF(it2)) AND
+                                                NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN
+                                                     TYPEOF(it2))) AND
+                                               NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                                                    TYPEOF(it2\mapped_item.mapping_source.mapped_representation))) OR
+                                              (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN
+                                                TYPEOF(it2)) AND
+                                               NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION' IN
+                                                     TYPEOF(it2\mapped_item.mapping_source.mapped_representation)))))) =
+                           0))) =
+       0;
+  WR3: (SIZEOF(QUERY(ps
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                     | NOT ((ps\presentation_size.size.size_in_x > 0) AND
+                            (ps\presentation_size.size.size_in_y > 0)))) =
+        0) AND
+       (SIZEOF(QUERY(pset
+                     <* QUERY(ais
+                              <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SET' IN
+                                TYPEOF(ais.in_set))
+                     | SIZEOF(QUERY(ps
+                                    <* USEDIN(pset,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                                    | NOT ((ps\presentation_size.size.size_in_x > 0) AND
+                                           (ps\presentation_size.size.size_in_y > 0)))) =
+                       0)) =
+        0);
+  WR4: (SIZEOF(QUERY(psize
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+                       TYPEOF(psize.size.placement))) =
+        1) AND
+       (SIZEOF(QUERY(pset
+                     <* QUERY(ais
+                              <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SET' IN
+                                TYPEOF(ais.in_set))
+                     | SIZEOF(QUERY(psize
+                                    <* USEDIN(pset,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')
+                                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+                                           TYPEOF(psize.size.placement)))) =
+                       0)) =
+        0);
+  WR5: SIZEOF(QUERY(pv
+                    <* QUERY(mi1
+                             <* QUERY(it1
+                                      <* SELF.items
+                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it1))
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_VIEW' IN
+                               TYPEOF(mi1\mapped_item.mapping_source.mapped_representation))
+                    | NOT (SIZEOF(QUERY(ci
+                                        <* pv\mapped_item.mapping_source.mapped_representation\representation.items
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_IMAGE_3D_WITH_SCALE' IN
+                                           TYPEOF(ci)) AND
+                                          (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3',
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_D3_WITH_HLHSR',
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAMERA_MODEL_WITH_LIGHT_SOURCES'] *
+                                                  TYPEOF(ci\mapped_item.mapping_source.mapping_origin)) =
+                                           1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY mechanical_design_shaded_presentation_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF mechanical_design_shaded_presentation_representation_items;
+WHERE
+  WR1: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MECHANICAL_DESIGN_SHADED_PRESENTATION_REPRESENTATION'] *
+                                  TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(smi
+                    <* QUERY(si
+                             <* QUERY(it
+                                      <* SELF.items
+                                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it)))
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN
+                                TYPEOF(si\styled_item.item)))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+                            TYPEOF(smi\styled_item.item\mapped_item.mapping_source.mapped_representation))))) =
+       0;
+  WR3: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(pss
+                                                            <* psa.styles
+                                                            | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE'] *
+                                                                          TYPEOF(pss)) =
+                                                                   1))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psbc
+                                        <* QUERY(psa
+                                                 <* si\styled_item.styles
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN
+                                                   TYPEOF(psa))
+                                        | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM',
+                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION'] *
+                                                      TYPEOF(psbc\presentation_style_by_context.style_context)) =
+                                               1))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ps
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_STYLE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MARKER_TYPE' IN
+                                                                    TYPEOF(ps\point_style.marker)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                    TYPEOF(ps\point_style.marker_size)) AND
+                                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                           TYPEOF(ps\point_style.marker_colour)) =
+                                                                    1)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(cs
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                           TYPEOF(cs\curve_style.curve_colour)) =
+                                                                    1) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                    TYPEOF(cs\curve_style.curve_width)) AND
+                                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                           TYPEOF(cs\curve_style.curve_font)) =
+                                                                    1)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_SIDE_STYLE' IN
+                                                                   TYPEOF(ssu\surface_style_usage.style)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (SIZEOF(QUERY(sses
+                                                                                <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_FILL_AREA',
+                                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_RENDERING'] *
+                                                                                              TYPEOF(sses)) =
+                                                                                       1))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(si
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(psa
+                                        <* si\styled_item.styles
+                                        | NOT (SIZEOF(QUERY(ssu
+                                                            <* QUERY(pss
+                                                                     <* psa.styles
+                                                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                       TYPEOF(pss))
+                                                            | NOT (SIZEOF(QUERY(ssfa
+                                                                                <* QUERY(sses
+                                                                                         <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_FILL_AREA' IN
+                                                                                           TYPEOF(sses))
+                                                                                | NOT (SIZEOF(QUERY(fss
+                                                                                                    <* ssfa\surface_style_fill_area.fill_area.fill_styles
+                                                                                                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILL_AREA_STYLE_COLOUR' IN
+                                                                                                            TYPEOF(fss)) AND
+                                                                                                           (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                                   TYPEOF(fss\fill_area_style_colour.fill_colour)) =
+                                                                                                            1)))) =
+                                                                                       0))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sspl
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_PARAMETER_LINE' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                          TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_colour)) =
+                                                                                          1) AND
+                                                                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                          TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_width)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                 TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style.curve_font)) =
+                                                                                          1)) OR
+                                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN
+                                                                                          TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sspl\surface_style_parameter_line.style_of_parameter_lines\curve_style_rendering.rendering_properties.rendered_colour)) =
+                                                                                          1))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sscg
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_CONTROL_GRID' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                          TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_colour)) =
+                                                                                          1) AND
+                                                                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                          TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_width)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                 TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style.curve_font)) =
+                                                                                          1)) OR
+                                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN
+                                                                                          TYPEOF(sscg\surface_style_control_grid.style_of_control_grid)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sscg\surface_style_control_grid.style_of_control_grid\curve_style_rendering.rendering_properties.rendered_colour)) =
+                                                                                          1))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sssh
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SILHOUETTE' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                          TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_colour)) =
+                                                                                          1) AND
+                                                                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                          TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_width)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                 TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style.curve_font)) =
+                                                                                          1)) OR
+                                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN
+                                                                                          TYPEOF(sssh\surface_style_silhouette.style_of_silhouette)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sssh\surface_style_silhouette.style_of_silhouette\curve_style_rendering.rendering_properties.rendered_colour)) =
+                                                                                          1))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR13: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(sssc
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_SEGMENTATION_CURVE' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                          TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_colour)) =
+                                                                                          1) AND
+                                                                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                          TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_width)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                 TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style.curve_font)) =
+                                                                                          1)) OR
+                                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN
+                                                                                          TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(sssc\surface_style_segmentation_curve.style_of_segmentation_curve\curve_style_rendering.rendering_properties.rendered_colour)) =
+                                                                                          1))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR14: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(ssbd
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_BOUNDARY' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                                                          TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_colour)) =
+                                                                                          1) AND
+                                                                                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+                                                                                          TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_width)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_FONT',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_CURVE_FONT'] *
+                                                                                                 TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style.curve_font)) =
+                                                                                          1)) OR
+                                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_RENDERING' IN
+                                                                                          TYPEOF(ssbd\surface_style_boundary.style_of_boundary)) AND
+                                                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                                 TYPEOF(ssbd\surface_style_boundary.style_of_boundary\curve_style_rendering.rendering_properties.rendered_colour)) =
+                                                                                          1))))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR15: SIZEOF(QUERY(si
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(psa
+                                         <* si\styled_item.styles
+                                         | NOT (SIZEOF(QUERY(ssu
+                                                             <* QUERY(pss
+                                                                      <* psa.styles
+                                                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                                                        TYPEOF(pss))
+                                                             | NOT (SIZEOF(QUERY(ssre
+                                                                                 <* QUERY(sses
+                                                                                          <* ssu\surface_style_usage.style\surface_side_style.styles
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_RENDERING' IN
+                                                                                            TYPEOF(sses))
+                                                                                 | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COLOUR_RGB',
+                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_PRE_DEFINED_COLOUR'] *
+                                                                                               TYPEOF(ssre\surface_style_rendering.surface_colour)) =
+                                                                                        1))) =
+                                                                    0))) =
+                                                0))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY mechanism_representation
+  SUBTYPE OF (representation);
+  SELF\representation.context_of_items : geometric_representation_context;
+  SELF\representation.items            : SET [1 : ?] OF pair_representation_relationship;
+  represented_topology                 : kinematic_topology_representation_select;
+DERIVE
+  represented_joints : SET [1 : ?] OF kinematic_joint := collect_joints(items);
+WHERE
+  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_STRUCTURE' IN
+         TYPEOF(represented_topology)) AND
+        (represented_joints :=: represented_topology.items)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_DIRECTED_STRUCTURE' IN
+         TYPEOF(represented_topology)) AND
+        (represented_joints :=: get_kinematic_joints_from_oriented_joints(represented_topology.items))) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KINEMATIC_TOPOLOGY_NETWORK_STRUCTURE' IN
+         TYPEOF(represented_topology)) AND
+        (represented_joints :=: get_kinematic_joints_from_kinematic_loops(represented_topology.items)));
+END_ENTITY;
+
+ENTITY mechanism_state_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF pair_value;
+  represented_mechanism     : mechanism_representation;
+DERIVE
+  SELF\representation.context_of_items : geometric_representation_context := represented_mechanism.context_of_items;
+END_ENTITY;
+
+ENTITY message_contents_assignment
+  SUBTYPE OF (group_assignment);
+  items                                : SET [1 : ?] OF representation;
+  SELF\group_assignment.assigned_group : message_contents_group;
+DERIVE
+  message_contents_group : message_contents_group := SELF\group_assignment.assigned_group;
+END_ENTITY;
+
+ENTITY message_contents_group
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY message_relationship
+  SUBTYPE OF (product_relationship);
+  SELF\product_relationship.relating_product : structured_message;
+  SELF\product_relationship.related_product  : structured_message;
+DERIVE
+  related_message  : structured_message := SELF\product_relationship.related_product;
+  relating_message : structured_message := SELF\product_relationship.relating_product;
+END_ENTITY;
+
+ENTITY min_and_major_ply_orientation_basis
+  SUBTYPE OF (representation_item_relationship, geometric_representation_item);
+  SELF\representation_item_relationship.relating_representation_item : axis2_placement_3d;
+  SELF\representation_item_relationship.related_representation_item  : axis2_placement_3d;
+DERIVE
+  major_orientation_basis : axis2_placement_3d := SELF\representation_item_relationship.related_representation_item;
+  minor_orientation_basis : axis2_placement_3d := SELF\representation_item_relationship.relating_representation_item;
+END_ENTITY;
+
+ENTITY minimum_function
+  SUBTYPE OF (multiple_arity_function_call);
+END_ENTITY;
+
+ENTITY minus_expression
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY minus_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY mismatch_of_arcwise_connected_curves
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_edge_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_edge_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,
+                                                                                                                    ddns_point_on_curve];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name =
+        'discretization_distance_tolerance');
+END_ENTITY;
+
+ENTITY mismatch_of_arcwise_connected_surfaces
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,
+                                                                                                                    ddns_point_on_surface];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name =
+        'discretization_distance_tolerance');
+END_ENTITY;
+
+ENTITY mismatch_of_arcwise_connected_surfaces_boundary
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content,
+              a3m_equivalence_inspection_requirement_with_values);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,
+                                                                                                                    ddns_point_on_curve];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+        TYPEOF(SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1])) AND
+       (SELF\a3m_equivalence_inspection_requirement_with_values.applied_values[1].name =
+        'discretization_distance_tolerance');
+END_ENTITY;
+
+ENTITY mismatch_of_component
+  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ma_detected_difference_type_name := [ddna_assembly_component_usage];
+END_ENTITY;
+
+ENTITY mismatch_of_edges
+  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_edge_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_edge,
+                                                                                                                    ddns_several_edges];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY mismatch_of_faces
+  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_face,
+                                                                                                                    ddns_several_faces];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY mismatch_of_point_cloud_and_related_geometry
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [2 : 2] OF a3ms_element_type_name             := [etns_connected_edge_set,
+                                                                                                                    etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_point_cloud_dataset];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [3 : 3] OF a3ms_detected_difference_type_name := [ddns_cartesian_point,
+                                                                                                                    ddns_point_on_curve,
+                                                                                                                    ddns_point_on_surface];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [1 : 1] OF a3ms_accuracy_type_name            := [atns_length_measure];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY mismatch_of_points
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_numerical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_vertex_point];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_vertex_point];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_length_measure;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_no_element];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold)) AND
+       (a3ms_get_value_limit_type(SELF\a3m_equivalence_criterion.assessment_specification\a3m_equivalence_assessment_by_numerical_test.threshold) =
+        SELF.measured_data_type);
+END_ENTITY;
+
+ENTITY mismatch_of_underlying_edge_geometry
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_edge];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY mismatch_of_underlying_face_geometry
+  SUBTYPE OF (a3m_equivalence_criterion_of_detailed_shape_data_content);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.comparing_element_types   : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [1 : 1] OF a3ms_detected_difference_type_name := [ddns_face];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY missing_assembly_constraint
+  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ma_detected_difference_type_name := [ddna_no_element,
+                                                                                                                    ddna_binary_assembly_constraint];
+END_ENTITY;
+
+ENTITY missing_component
+  SUBTYPE OF (a3m_equivalence_criterion_of_assembly_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ma_measured_data_type_name                       := mdna_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ma_detected_difference_type_name := [ddna_no_element,
+                                                                                                                    ddna_assembly_component_usage];
+END_ENTITY;
+
+ENTITY missing_edge
+  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_edge_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_no_element,
+                                                                                                                    ddns_edge];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY missing_face
+  SUBTYPE OF (a3m_equivalence_criterion_of_shape_data_structure);
+  SELF\a3m_equivalence_criterion.assessment_specification : a3m_equivalence_assessment_by_logical_test;
+DERIVE
+  SELF\a3m_equivalence_criterion.compared_element_types    : LIST [1 : 1] OF a3ms_element_type_name             := [etns_connected_face_set];
+  SELF\a3m_equivalence_criterion.measured_data_type        : a3ms_measured_data_type_name                       := mdns_boolean_value;
+  SELF\a3m_equivalence_criterion.detected_difference_types : LIST [2 : 2] OF a3ms_detected_difference_type_name := [ddns_no_element,
+                                                                                                                    ddns_face];
+  SELF\a3m_equivalence_criterion.accuracy_types            : LIST [0 : 0] OF a3ms_accuracy_type_name            := [];
+END_ENTITY;
+
+ENTITY mod_expression
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY model_geometric_view
+  SUBTYPE OF (characterized_item_within_representation);
+  SELF\characterized_item_within_representation.rep  : draughting_model;
+  SELF\characterized_item_within_representation.item : camera_model;
+END_ENTITY;
+
+ENTITY modified_geometric_tolerance
+  SUBTYPE OF (geometric_tolerance);
+  modifier : limit_condition;
+END_ENTITY;
+
+ENTITY modified_pattern
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: SIZEOF(QUERY(fcr
+                    <* QUERY(sar
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                               TYPEOF(sar))
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE'] *
+                              TYPEOF(fcr.related_shape_aspect.of_shape.definition)) >=
+                       1) AND
+                      (fcr.description = 'base shape'))) =
+       1;
+  WR2: SIZEOF(QUERY(fcr
+                    <* QUERY(sar
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                               TYPEOF(sar))
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] *
+                              TYPEOF(fcr.related_shape_aspect.of_shape.definition)) =
+                       1) AND
+                      (fcr.description = 'base pattern'))) =
+       1;
+  WR3: SIZEOF(QUERY(sar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                    | (SIZEOF(QUERY(msar
+                                    <* USEDIN(sar.related_shape_aspect,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATTERN_OFFSET_MEMBERSHIP',
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATTERN_OMIT_MEMBERSHIP'] *
+                                              TYPEOF(sar)) =
+                                       1) AND
+                                      (sar.description = 'modified pattern') AND (sar :<>: msar))) >=
+                       1))) =
+       0;
+END_ENTITY;
+
+ENTITY modified_solid
+  ABSTRACT SUPERTYPE OF (ONEOF(edge_blended_solid, sculptured_solid, shelled_solid,
+                               modified_solid_with_placed_configuration))
+  SUBTYPE OF (solid_model);
+  rationale  : text;
+  base_solid : base_solid_select;
+END_ENTITY;
+
+ENTITY modified_solid_with_placed_configuration
+  ABSTRACT SUPERTYPE OF (ONEOF(solid_with_depression, solid_with_protrusion, solid_with_shape_element_pattern))
+  SUBTYPE OF (modified_solid);
+  placing : axis2_placement_3d;
+END_ENTITY;
+
+ENTITY modify_element
+  SUBTYPE OF (change_element);
+END_ENTITY;
+
+ENTITY moments_of_inertia_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) = 1) AND
+       (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM' IN
+                        TYPEOF(i)) AND
+                       (i.name = 'moments of inertia matrix'))) =
+        1);
+  WR2: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM' IN TYPEOF(i)) AND
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIST_REPRESENTATION_ITEM' IN
+                       TYPEOF(i\compound_representation_item.item_element)) AND
+                      value_range_aggregate_rep_item(i\compound_representation_item.item_element))) =
+       1;
+END_ENTITY;
+
+ENTITY mult_expression
+  SUBTYPE OF (multiple_arity_numeric_expression);
+END_ENTITY;
+
+ENTITY multi_language_attribute_assignment
+  SUBTYPE OF (attribute_value_assignment);
+  items : SET [1 : ?] OF multi_language_attribute_item;
+DERIVE
+  translation_language : language := language_indication[1]\attribute_classification_assignment.assigned_class;
+INVERSE
+  language_indication : SET [1:1] OF attribute_language_assignment FOR items;
+WHERE
+  WR1: (SELF\attribute_value_assignment.role.name = 'alternate language');
+  WR2: SIZEOF(QUERY(ala
+                    <* language_indication
+                    | (ala\attribute_classification_assignment.attribute_name = 'attribute_value') AND
+                      (ala\attribute_classification_assignment.role.name = 'translated'))) =
+       1;
+  WR3: SELF\attribute_value_assignment.attribute_name <> '';
+  WR4: SIZEOF(QUERY(ci
+                    <* items
+                    | SIZEOF(QUERY(ata
+                                   <* USEDIN(ci,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.ITEMS')
+                                   | (ata\attribute_value_assignment.attribute_name =
+                                      SELF\attribute_value_assignment.attribute_name) AND
+                                     (ata.translation_language :=: translation_language))) >
+                      1)) =
+       0;
+  WR5: SIZEOF(QUERY(ci
+                    <* items
+                    | SIZEOF(QUERY(ata
+                                   <* USEDIN(ci,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS')
+                                   | (ata\attribute_classification_assignment.role.name = 'primary') AND
+                                     (ata\attribute_classification_assignment.attribute_name =
+                                      SELF\attribute_value_assignment.attribute_name) AND
+                                     (ata\attribute_classification_assignment.assigned_class :=:
+                                      translation_language))) >
+                      0)) =
+       0;
+END_ENTITY;
+
+ENTITY multi_level_reference_designator
+  SUBTYPE OF ( assembly_component_usage );
+  location  : LIST [1 : ?] OF UNIQUE next_assembly_usage_occurrence;
+DERIVE
+  SELF\product_definition_relationship.relating_product_definition : product_definition := location[1]\product_definition_relationship.relating_product_definition;
+  SELF\product_definition_relationship.related_product_definition  : product_definition_or_reference := location[HIINDEX(location)]\product_definition_relationship.related_product_definition;
+  leaf : product_definition_or_reference := related_product_definition;
+  root : product_definition := relating_product_definition;
+UNIQUE
+  UR1: location;
+WHERE
+  WR1: unambiguously_specified_multi_level_reference_designator(location);
+  WR2: SIZEOF( QUERY ( cp <* location | NOT EXISTS(cp\assembly_component_usage.reference_designator ))) = 0;
+END_ENTITY;
+
+ENTITY multiple_arity_boolean_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(and_expression, or_expression))
+  SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF boolean_expression;
+END_ENTITY;
+
+ENTITY multiple_arity_function_call
+  ABSTRACT SUPERTYPE OF (ONEOF(maximum_function, minimum_function))
+  SUBTYPE OF (multiple_arity_numeric_expression);
+END_ENTITY;
+
+ENTITY multiple_arity_generic_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (generic_expression);
+  operands : LIST [2 : ?] OF generic_expression;
+END_ENTITY;
+
+ENTITY multiple_arity_numeric_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(plus_expression, mult_expression, multiple_arity_function_call))
+  SUBTYPE OF (numeric_expression, multiple_arity_generic_expression);
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF numeric_expression;
+END_ENTITY;
+
+ENTITY multiply_defined_cartesian_points
+  SUBTYPE OF (multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_curves
+  SUBTYPE OF (multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_directions
+  SUBTYPE OF (multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY multiply_defined_edges
+  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_faces
+  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(multiply_defined_curves, multiply_defined_surfaces, multiply_defined_cartesian_points,
+                               multiply_defined_directions, multiply_defined_placements))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY multiply_defined_placements
+  SUBTYPE OF (multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  assessment_specification_2                                 : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(assessment_specification_2\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR3: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_AND_LENGTH_PAIR');
+  WR4: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT']);
+  WR5: validate_locations_of_extreme_value_type(SELF, []);
+  WR6: validate_accuracy_types(SELF, []);
+  WR7: SIZEOF(QUERY(sdqr
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
+                       TYPEOF(sdqr)) AND
+                      (SIZEOF(QUERY(sdqiir
+                                    <* bag_to_set(USEDIN(sdqr,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                                       TYPEOF(sdqiir)) AND
+                                      (SIZEOF(QUERY(sdqiri
+                                                    <* sdqiir.inspected_instances
+                                                    | (TYPEOF(sdqiri.inspected_elements[1]) <>
+                                                       TYPEOF(sdqiri.inspected_elements[2])))) =
+                                       0))) =
+                       0))) =
+       0;
+END_ENTITY;
+
+ENTITY multiply_defined_solids
+  SUBTYPE OF (inapt_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_surfaces
+  SUBTYPE OF (multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY multiply_defined_vertices
+  SUBTYPE OF (topology_related_to_multiply_defined_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY name_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_name : label;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY name_attribute;
+  attribute_value : label;
+  named_item      : name_attribute_select;
+END_ENTITY;
+
+ENTITY named_unit
+  SUPERTYPE OF (ONEOF(si_unit, conversion_based_unit, context_dependent_unit) ANDOR
+                ONEOF(length_unit, mass_unit, time_unit, electric_current_unit, thermodynamic_temperature_unit,
+                      amount_of_substance_unit, luminous_flux_unit, luminous_intensity_unit, plane_angle_unit,
+                      solid_angle_unit, ratio_unit));
+  dimensions : dimensional_exponents;
+END_ENTITY;
+
+ENTITY narrow_surface_patch
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  width_tolerance                                            : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY near_point_relationship
+  SUBTYPE OF (representation_item_relationship);
+  SELF\representation_item_relationship.relating_representation_item : curve_or_surface_constraint_element;
+  SELF\representation_item_relationship.related_representation_item  : point;
+END_ENTITY;
+
+ENTITY nearly_degenerate_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(small_area_surface, short_length_curve, entirely_narrow_surface))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY nearly_degenerate_surface_boundary
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDARY_CURVE_OF_B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY nearly_degenerate_surface_patch
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY neutral_sketch_representation
+  SUBTYPE OF (shape_representation);
+  neutral_sketch_semantics  : curves_or_area;
+  SELF\representation.items : SET [1 : ?] OF sketch_element_select;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* items
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN
+                            TYPEOF(q)) AND
+                           (q\geometric_representation_item.dim = 3)))) =
+       0;
+END_ENTITY;
+
+ENTITY next_assembly_usage_occurrence
+  SUBTYPE OF (assembly_component_usage);
+DERIVE
+  product_definition_occurrence_id : identifier := SELF\product_definition_relationship.related_product_definition\product_definition_occurrence.id;
+UNIQUE
+  UR1: SELF\assembly_component_usage.reference_designator,
+       SELF\product_definition_relationship.relating_product_definition;
+  UR2: product_definition_occurrence_id, SELF\product_definition_relationship.relating_product_definition;
+END_ENTITY;
+
+ENTITY ngon_closed_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                          TYPEOF(pdr.used_representation))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 4)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR
+                                                     (srwp_i.name = 'number of sides') OR
+                                                     (srwp_i.name = 'circumscribed diameter') OR
+                                                     (srwp_i.name = 'corner radius') OR
+                                                     (srwp_i.name = 'diameter across flats'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'orientation'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                               TYPEOF(it)) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                               TYPEOF(it\measure_with_unit.value_component)) AND
+                                                              (it.name = 'number of sides'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name IN
+                                                               ['circumscribed diameter','diameter across flats']))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'corner radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY non_agreed_accuracy_parameter_usage
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT']);
+END_ENTITY;
+
+ENTITY non_agreed_scale_usage
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_TRANSFORMATION_OPERATOR_3D']);
+END_ENTITY;
+
+ENTITY non_agreed_unit_usage
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT']);
+END_ENTITY;
+
+ENTITY non_manifold_at_edge
+  SUBTYPE OF (inapt_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY non_manifold_at_vertex
+  SUBTYPE OF (inapt_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY non_manifold_surface_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(it)) =
+                      1)) >
+       0;
+  WR3: SIZEOF(QUERY(mi
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it))
+                    | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN
+                            TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND
+                           (SIZEOF(QUERY(mr_it
+                                         <* mi\mapped_item.mapping_source.mapped_representation.items
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                            TYPEOF(mr_it)))) >
+                            0)))) =
+       0;
+  WR4: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs.cfs_faces
+                                                            | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE'] *
+                                                                          TYPEOF(fa)) =
+                                                                   1))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(f_sf
+                                                            <* QUERY(fa
+                                                                     <* cfs.cfs_faces
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN
+                                                                        TYPEOF(fa)))
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(f_sf)) OR
+                                                                   (nmsf_surface_check(f_sf\face_surface.face_geometry))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(o_fa
+                                                            <* QUERY(fa
+                                                                     <* cfs.cfs_faces
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN
+                                                                        TYPEOF(fa)))
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(o_fa\oriented_face.face_element)) OR
+                                                                   (nmsf_surface_check(o_fa\oriented_face.face_element\face_surface.face_geometry))))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(bnds
+                                                                                 <* fa.bounds
+                                                                                 | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP',
+                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP'] *
+                                                                                               TYPEOF(bnds.bound)) =
+                                                                                        1))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(elp_fbnds
+                                                                                 <* QUERY(bnds
+                                                                                          <* fa.bounds
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                            TYPEOF(bnds.bound))
+                                                                                 | NOT (SIZEOF(QUERY(oe
+                                                                                                     <* elp_fbnds\path.edge_list
+                                                                                                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                                            TYPEOF(oe.edge_element)))) =
+                                                                                        0))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(fbsm
+                    <* QUERY(it
+                             <* SELF.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                               TYPEOF(it))
+                    | NOT (SIZEOF(QUERY(cfs
+                                        <* fbsm\face_based_surface_model.fbsm_faces
+                                        | NOT (SIZEOF(QUERY(fa
+                                                            <* cfs.cfs_faces
+                                                            | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                    TYPEOF(fa)) OR
+                                                                   (SIZEOF(QUERY(elp_fbnds
+                                                                                 <* QUERY(bnds
+                                                                                          <* fa.bounds
+                                                                                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                            TYPEOF(bnds.bound))
+                                                                                 | NOT (SIZEOF(QUERY(oe_cv
+                                                                                                     <* QUERY(oe
+                                                                                                              <* elp_fbnds\path.edge_list
+                                                                                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                                                TYPEOF(oe.edge_element))
+                                                                                                     | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+                                                                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE'] *
+                                                                                                                   TYPEOF(oe_cv.edge_element\edge_curve.edge_geometry)) =
+                                                                                                            1))) =
+                                                                                        0))) =
+                                                                    0)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(fbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* fbsm\face_based_surface_model.fbsm_faces
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT (nmsf_curve_check(oe.edge_element\edge_curve.edge_geometry)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(fbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* fbsm\face_based_surface_model.fbsm_faces
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                              TYPEOF(oe.edge_element.edge_start)) AND
+                                                                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                                              TYPEOF(oe.edge_element.edge_end))))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(fbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* fbsm\face_based_surface_model.fbsm_faces
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(elp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(QUERY(oe
+                                                                                                      <* elp_fbnds\path.edge_list
+                                                                                                      | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                                     TYPEOF(oe.edge_element.edge_start\vertex_point.vertex_geometry)) =
+                                                                                                              1) AND
+                                                                                                             (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                                     TYPEOF(oe.edge_element.edge_end\vertex_point.vertex_geometry)) =
+                                                                                                              1)))) =
+                                                                                         0))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR13: SIZEOF(QUERY(fbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* fbsm\face_based_surface_model.fbsm_faces
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(vlp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                         TYPEOF(vlp_fbnds\vertex_loop.loop_vertex)))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+  WR14: SIZEOF(QUERY(fbsm
+                     <* QUERY(it
+                              <* SELF.items
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BASED_SURFACE_MODEL' IN
+                                TYPEOF(it))
+                     | NOT (SIZEOF(QUERY(cfs
+                                         <* fbsm\face_based_surface_model.fbsm_faces
+                                         | NOT (SIZEOF(QUERY(fa
+                                                             <* cfs.cfs_faces
+                                                             | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN
+                                                                     TYPEOF(fa)) OR
+                                                                    (SIZEOF(QUERY(vlp_fbnds
+                                                                                  <* QUERY(bnds
+                                                                                           <* fa.bounds
+                                                                                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                                             TYPEOF(bnds.bound))
+                                                                                  | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                                                                                                TYPEOF(vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry)) =
+                                                                                         1))) =
+                                                                     0)))) =
+                                                0))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY non_referenced_coordinate_system
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D']);
+END_ENTITY;
+
+ENTITY non_smooth_geometry_transition_across_edge
+  ABSTRACT SUPERTYPE OF (ONEOF(g1_discontinuity_between_adjacent_faces, g2_discontinuity_between_adjacent_faces))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY non_uniform_zone_definition
+  SUBTYPE OF (tolerance_zone_definition);
+END_ENTITY;
+
+ENTITY not_expression
+  SUBTYPE OF (unary_boolean_expression);
+  SELF\unary_generic_expression.operand : boolean_expression;
+END_ENTITY;
+
+ENTITY null_representation_item
+  SUBTYPE OF (representation_item);
+END_ENTITY;
+
+ENTITY numeric_defined_function
+  ABSTRACT SUPERTYPE OF (ONEOF(integer_defined_function, real_defined_function))
+  SUBTYPE OF (numeric_expression, defined_function);
+END_ENTITY;
+
+ENTITY numeric_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(simple_numeric_expression, unary_numeric_expression, binary_numeric_expression,
+                               multiple_arity_numeric_expression, length_function, value_function,
+                               numeric_defined_function))
+  SUBTYPE OF (expression);
+DERIVE
+  is_int       : BOOLEAN := is_int_expr(SELF);
+  sql_mappable : BOOLEAN := is_sql_mappable(SELF);
+END_ENTITY;
+
+ENTITY numeric_variable
+  SUPERTYPE OF (ONEOF(int_numeric_variable, real_numeric_variable))
+  SUBTYPE OF (simple_numeric_expression, variable);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(SELF)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY object_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY odd_function
+  SUBTYPE OF (unary_boolean_expression);
+  SELF\unary_generic_expression.operand : numeric_expression;
+WHERE
+  WR1: is_int_expr(operand);
+END_ENTITY;
+
+ENTITY offset_curve_2d
+  SUBTYPE OF (curve);
+  basis_curve    : curve;
+  distance       : length_measure;
+  self_intersect : LOGICAL;
+WHERE
+  WR1: basis_curve.dim = 2;
+END_ENTITY;
+
+ENTITY offset_curve_3d
+  SUBTYPE OF (curve);
+  basis_curve    : curve;
+  distance       : length_measure;
+  self_intersect : LOGICAL;
+  ref_direction  : direction;
+WHERE
+  WR1: (basis_curve.dim = 3) AND (ref_direction.dim = 3);
+END_ENTITY;
+
+ENTITY offset_surface
+  SUBTYPE OF (surface);
+  basis_surface  : surface;
+  distance       : length_measure;
+  self_intersect : LOGICAL;
+END_ENTITY;
+
+ENTITY one_direction_repeat_factor
+  SUBTYPE OF (geometric_representation_item);
+  repeat_factor : vector;
+END_ENTITY;
+
+ENTITY open_closed_shell
+  SUBTYPE OF (erroneous_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY open_edge_loop
+  SUBTYPE OF (erroneous_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY open_path
+  SUBTYPE OF (path);
+DERIVE
+  ne : INTEGER := SIZEOF(SELF\path.edge_list);
+WHERE
+  WR1: (SELF\path.edge_list[1].edge_element.edge_start) :<>: (SELF\path.edge_list[ne].edge_element.edge_end);
+END_ENTITY;
+
+ENTITY open_path_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'profile limit'))) <=
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY open_shell
+  SUBTYPE OF (connected_face_set);
+END_ENTITY;
+
+ENTITY or_expression
+  SUBTYPE OF (multiple_arity_boolean_expression);
+END_ENTITY;
+
+ENTITY ordinal_date
+  SUBTYPE OF (date);
+  day_component : day_in_year_number;
+WHERE
+  WR1: (NOT leap_year(SELF.year_component) AND {1 <= day_component <= 365}) OR
+       (leap_year(SELF.year_component) AND {1 <= day_component <= 366});
+END_ENTITY;
+
+ENTITY ordinate_dimension
+  SUBTYPE OF (projection_directed_callout);
+END_ENTITY;
+
+ENTITY organization;
+  id          : OPTIONAL identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY organization_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_organization : organization;
+  role                  : organization_role;
+END_ENTITY;
+
+ENTITY organization_relationship;
+  name                  : label;
+  description           : OPTIONAL text;
+  relating_organization : organization;
+  related_organization  : organization;
+END_ENTITY;
+
+ENTITY organization_role;
+  name : label;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY organization_type;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY organization_type_assignment
+  ABSTRACT SUPERTYPE;
+  id                         : identifier;
+  name                       : label;
+  description                : OPTIONAL text;
+  assigned_organization_type : organization_type;
+  role                       : organization_type_role;
+END_ENTITY;
+
+ENTITY organization_type_role;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY organizational_address
+  SUBTYPE OF (address);
+  organizations : SET [1 : ?] OF organization;
+  description   : OPTIONAL text;
+END_ENTITY;
+
+ENTITY organizational_project;
+  name                      : label;
+  description               : OPTIONAL text;
+  responsible_organizations : SET [1 : ?] OF organization;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY organizational_project_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_organizational_project : organizational_project;
+  role                            : organizational_project_role;
+END_ENTITY;
+
+ENTITY organizational_project_relationship;
+  name                            : label;
+  description                     : OPTIONAL text;
+  relating_organizational_project : organizational_project;
+  related_organizational_project  : organizational_project;
+END_ENTITY;
+
+ENTITY organizational_project_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY oriented_closed_shell
+  SUBTYPE OF (closed_shell);
+  closed_shell_element : closed_shell;
+  orientation          : BOOLEAN;
+DERIVE
+  SELF\connected_face_set.cfs_faces : SET [1 : ?] OF face := conditional_reverse(SELF.orientation,
+                                                                                 SELF.closed_shell_element.cfs_faces);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN
+            TYPEOF(SELF.closed_shell_element));
+END_ENTITY;
+
+ENTITY oriented_edge
+  SUBTYPE OF (edge);
+  edge_element : edge;
+  orientation  : BOOLEAN;
+DERIVE
+  SELF\edge.edge_start : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_start,
+                                                  SELF.edge_element.edge_end);
+  SELF\edge.edge_end   : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_end,
+                                                  SELF.edge_element.edge_start);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(SELF.edge_element));
+END_ENTITY;
+
+ENTITY oriented_face
+  SUBTYPE OF (face);
+  face_element : face;
+  orientation  : BOOLEAN;
+DERIVE
+  SELF\face.bounds : SET [1 : ?] OF face_bound := conditional_reverse(SELF.orientation, SELF.face_element.bounds);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(SELF.face_element));
+END_ENTITY;
+
+ENTITY oriented_joint
+  SUBTYPE OF (oriented_edge);
+  SELF\oriented_edge.edge_element : kinematic_joint;
+END_ENTITY;
+
+ENTITY oriented_open_shell
+  SUBTYPE OF (open_shell);
+  open_shell_element : open_shell;
+  orientation        : BOOLEAN;
+DERIVE
+  SELF\connected_face_set.cfs_faces : SET [1 : ?] OF face := conditional_reverse(SELF.orientation,
+                                                                                 SELF.open_shell_element.cfs_faces);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_OPEN_SHELL' IN TYPEOF(SELF.open_shell_element));
+END_ENTITY;
+
+ENTITY oriented_path
+  SUBTYPE OF (path);
+  path_element : path;
+  orientation  : BOOLEAN;
+DERIVE
+  SELF\path.edge_list : LIST [1 : ?] OF UNIQUE oriented_edge := conditional_reverse(SELF.orientation,
+                                                                                    SELF.path_element.edge_list);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(SELF.path_element));
+END_ENTITY;
+
+ENTITY oriented_surface
+  SUBTYPE OF (surface);
+  orientation : BOOLEAN;
+END_ENTITY;
+
+ENTITY oriented_tolerance_zone
+  SUBTYPE OF (tolerance_zone_with_datum);
+  orientation : oriented_tolerance_zone_type;
+  angle       : OPTIONAL plane_angle_measure_with_unit;
+WHERE
+  WR1: (orientation <> oriented_tolerance_zone_type.angular) XOR EXISTS(angle);
+END_ENTITY;
+
+ENTITY outer_boundary_curve
+  SUBTYPE OF (boundary_curve);
+END_ENTITY;
+
+ENTITY outer_round
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(pdr.used_representation)) AND
+                                       (SIZEOF(pdr.used_representation.items) = 3))) =
+                        1)) =
+         1));
+  WR2: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(pdr.used_representation)) AND
+                                       ({2 <= SIZEOF(pdr.used_representation.items) <= 3}))) =
+                        1)) =
+         1));
+  WR3: (SELF\characterized_object.description IN ['outer diameter','outer diameter to shoulder']);
+  WR4: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'length')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'diameter')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'v-shape boundary occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE' IN
+                                                                TYPEOF(sdr.relating_shape_aspect)) AND
+                                                               (sdr.relating_shape_aspect.description = 'v-shape')))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR7: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'reduced size occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'taper usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                                TYPEOF(sdr.relating_shape_aspect)) AND
+                                                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTER_ROUND' IN
+                                                                TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND
+                                                               (sdr.name = 'reduced size')))) =
+                                               1)))) <=
+                              1)))) =
+         0));
+  WR8: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'length')))) <=
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR9: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'feature length')))) <=
+                                                   1)))) =
+                              0)))) =
+         0));
+END_ENTITY;
+
+ENTITY outside_profile
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(pdr.used_representation.items) = 1))) =
+                      1)) =
+       1;
+  WR2: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                               TYPEOF(pd))
+                    | NOT (SIZEOF(QUERY(sa_occ
+                                        <* USEDIN(pds,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                        | (sa_occ.description IN
+                                           ['boundary occurrence',
+                                            'non-planar boundary occurrence',
+                                            'partial circular boundary occurrence',
+                                            'closed circular boundary occurrence',
+                                            'open rectangular boundary occurrence',
+                                            'closed rectangular boundary occurrence']))) =
+                           1))) =
+       0;
+  WR3: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description = 'boundary occurrence'))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] *
+                                                                   TYPEOF(sdr.relating_shape_aspect)) =
+                                                            1) AND
+                                                           (sdr.relating_shape_aspect.description =
+                                                            'outside boundary'))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR4: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description IN
+                                                 ['complex boundary occurrence',
+                                                  'partial circular boundary occurrence',
+                                                  'closed circular boundary occurrence',
+                                                  'open rectangular boundary occurrence',
+                                                  'closed rectangular boundary occurrence']))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | NOT (SIZEOF(QUERY(sdr
+                                                             <* QUERY(sar
+                                                                      <* USEDIN(sa_occ,
+                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                      | (sar.description = 'profile floor usage') AND
+                                                                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                         TYPEOF(sar)))
+                                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROFILE_FLOOR' IN
+                                                                 TYPEOF(sdr.relating_shape_aspect)) AND
+                                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTSIDE_PROFILE' IN
+                                                                 TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) =
+                                                1))) =
+                            0))) =
+        0);
+  WR5: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description IN
+                                                 ['outside boundary',
+                                                  'complex boundary occurrence',
+                                                  'partial circular boundary occurrence',
+                                                  'closed circular boundary occurrence',
+                                                  'open rectangular boundary occurrence',
+                                                  'closed rectangular boundary occurrence']))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description =
+                                                                     'path feature component usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT'] *
+                                                                   TYPEOF(sdr.relating_shape_aspect)) =
+                                                            1) AND
+                                                           (sdr.name = 'profile swept shape') AND
+                                                           (sdr.relating_shape_aspect.description = 'linear'))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR6: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description = 'complex boundary occurrence'))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] *
+                                                                   TYPEOF(sdr.relating_shape_aspect)) =
+                                                            1))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR7: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description = 'partial circular boundary occurrence'))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN
+                                                            TYPEOF(sdr.relating_shape_aspect)))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR8: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description = 'closed circular boundary occurrence'))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN
+                                                            TYPEOF(sdr.relating_shape_aspect)))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR9: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                     TYPEOF(pd))
+                          | NOT (SIZEOF(QUERY(sa_occ
+                                              <* USEDIN(pds,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                              | (sa_occ.description = 'open rectangular boundary occurrence'))) =
+                                 1))) =
+             0)) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE' IN
+                                                            TYPEOF(sdr.relating_shape_aspect)))) =
+                                            1))) =
+                            1))) =
+        0);
+  WR10: (NOT (SIZEOF(QUERY(pds
+                           <* QUERY(pd
+                                    <* USEDIN(SELF,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                      TYPEOF(pd))
+                           | NOT (SIZEOF(QUERY(sa_occ
+                                               <* USEDIN(pds,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                               | (sa_occ.description = 'closed rectangular boundary occurrence'))) =
+                                  1))) =
+              0)) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | (sar.description = 'profile usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN
+                                                             TYPEOF(sdr.relating_shape_aspect)))) =
+                                             1))) =
+                             1))) =
+         0);
+  WR11: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description IN
+                                             ['boundary occurrence',
+                                              'complex boundary occurrence',
+                                              'partial circular boundary occurrence',
+                                              'closed circular boundary occurrence',
+                                              'open rectangular boundary occurrence',
+                                              'closed rectangular boundary occurrence']))) =
+                             1))) =
+         0) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                               TYPEOF(pdr.used_representation)) AND
+                                              (pdr.used_representation.name = 'removal direction')))) =
+                              1)))) =
+         0);
+  WR12: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (pdr.used_representation.name = 'maximum feature limit'))) >=
+        0;
+END_ENTITY;
+
+ENTITY over_riding_styled_item
+  SUBTYPE OF (styled_item);
+  over_ridden_style : styled_item;
+END_ENTITY;
+
+ENTITY over_used_vertex
+  SUBTYPE OF (inapt_topology);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY overcomplex_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(excessively_high_degree_curve, excessively_high_degree_surface,
+                               surface_with_excessive_patches_in_one_direction, curve_with_excessive_segments,
+                               high_degree_linear_curve, high_degree_planar_surface, high_degree_conic,
+                               high_degree_axi_symmetric_surface))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY overcomplex_topology_and_geometry_relationship
+  ABSTRACT SUPERTYPE OF (ONEOF(unused_patches, edge_with_excessive_segments,
+                               face_surface_with_excessive_patches_in_one_direction))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY overlapping_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(partly_overlapping_curves, partly_overlapping_surfaces))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY package_product_concept_feature
+  SUBTYPE OF (product_concept_feature);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE' IN TYPEOF(SELF));
+  WR2: SIZEOF(QUERY(cfr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP.RELATING_PRODUCT_CONCEPT_FEATURE')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION' IN
+                       TYPEOF(cfr)) AND
+                      (SIZEOF(QUERY(ipcf
+                                    <* USEDIN(cfr,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE.CONDITION')
+                                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE' IN
+                                      TYPEOF(ipcf))) =
+                       1))) >
+       0;
+END_ENTITY;
+
+ENTITY pair_representation_relationship
+  SUBTYPE OF (geometric_representation_item, representation_relationship_with_transformation);
+  SELF\representation_relationship.rep_1                                       : kinematic_link_representation;
+  SELF\representation_relationship.rep_2                                       : kinematic_link_representation;
+  SELF\representation_relationship_with_transformation.transformation_operator : kinematic_pair;
+WHERE
+  WR1: transformation_operator\item_defined_transformation.transform_item_1 IN rep_1.items;
+  WR2: transformation_operator\item_defined_transformation.transform_item_2 IN rep_2.items;
+  WR3: rep_1\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_start;
+  WR4: rep_2\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_end;
+END_ENTITY;
+
+ENTITY pair_value
+  ABSTRACT SUPERTYPE OF (ONEOF(sliding_surface_pair_value, rolling_surface_pair_value, revolute_pair_value,
+                               prismatic_pair_value, screw_pair_value, cylindrical_pair_value, spherical_pair_value,
+                               sliding_curve_pair_value, rolling_curve_pair_value, gear_pair_value,
+                               rack_and_pinion_pair_value, universal_pair_value, planar_pair_value,
+                               unconstrained_pair_value, point_on_surface_pair_value, point_on_planar_curve_pair_value,
+                               low_order_kinematic_pair_value))
+  SUBTYPE OF (geometric_representation_item);
+  applies_to_pair : kinematic_pair;
+END_ENTITY;
+
+ENTITY parabola
+  SUBTYPE OF (conic);
+  focal_dist : length_measure;
+WHERE
+  WR1: focal_dist <> 0.0;
+END_ENTITY;
+
+ENTITY parallel_assembly_constraint
+  SUBTYPE OF (binary_assembly_constraint, parallel_geometric_constraint);
+END_ENTITY;
+
+ENTITY parallel_assembly_constraint_with_dimension
+  SUBTYPE OF (parallel_assembly_constraint, pgc_with_dimension);
+END_ENTITY;
+
+ENTITY parallel_composed_function
+  SUBTYPE OF (maths_function, multiple_arity_generic_expression);
+  source_of_domain : maths_space_or_function;
+  prep_functions   : LIST [1 : ?] OF maths_function;
+  final_function   : maths_function_select;
+DERIVE
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF generic_expression := convert_to_operands_prcmfn(source_of_domain,
+                                                                                                                     prep_functions,
+                                                                                                                     final_function);
+WHERE
+  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
+  WR2: expression_is_constant(domain_from(source_of_domain));
+  WR3: parallel_composed_function_domain_check(domain_from(source_of_domain), prep_functions);
+  WR4: parallel_composed_function_composability_check(prep_functions, final_function);
+END_ENTITY;
+
+ENTITY parallel_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF linear_geometry_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF linear_geometry_constraint_element;
+END_ENTITY;
+
+ENTITY parallel_offset
+  SUBTYPE OF (derived_shape_aspect);
+  offset : measure_with_unit;
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
+END_ENTITY;
+
+ENTITY parallel_offset_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF curve_or_surface_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF curve_or_surface_constraint_element;
+  offset_type                                   : parallel_offset_type;
+WHERE
+  WR1: NOT (((offset_type = curve_2d_offset) OR (offset_type = curve_3d_offset)) AND
+            (SIZEOF(QUERY(q
+                          <* (SELF\explicit_constraint.constrained_elements +
+                              SELF\explicit_constraint.reference_elements)
+                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(q))) >
+             0));
+  WR2: NOT ((offset_type = surface_offset) AND
+            (SIZEOF(QUERY(q
+                          <* (SELF\explicit_constraint.constrained_elements +
+                              SELF\explicit_constraint.reference_elements)
+                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(q))) >
+             0));
+END_ENTITY;
+
+ENTITY parallelism_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY parametric_representation_context
+  SUBTYPE OF (representation_context);
+END_ENTITY;
+
+ENTITY partial_circular_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) >= 3)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'orientation')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'sweep angle')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'profile limit'))) <=
+                           1))) =
+       0;
+END_ENTITY;
+
+ENTITY partial_derivative_expression
+  SUBTYPE OF (unary_generic_expression);
+  d_variables : LIST [1 : ?] OF maths_variable;
+  extension   : extension_options;
+DERIVE
+  derivand : generic_expression := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: has_values_space(derivand);
+  WR2: space_is_continuum(values_space_of(derivand));
+  WR3: SIZEOF(QUERY(vbl
+                    <* d_variables
+                    | (NOT subspace_of(values_space_of(vbl), the_reals)) AND
+                      (NOT subspace_of(values_space_of(vbl), the_complex_numbers)))) =
+       0;
+END_ENTITY;
+
+ENTITY partial_derivative_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  d_variables                           : LIST [1 : ?] OF input_selector;
+  extension                             : extension_options;
+DERIVE
+  derivand : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: space_is_continuum(derivand.range);
+  WR2: partial_derivative_check(derivand.domain, d_variables);
+END_ENTITY;
+
+ENTITY partial_document_with_structured_text_representation_assignment
+  SUBTYPE OF (applied_document_usage_constraint_assignment, characterized_object);
+END_ENTITY;
+
+ENTITY partly_overlapping_curves
+  SUBTYPE OF (overlapping_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY partly_overlapping_edges
+  SUBTYPE OF (topology_related_to_overlapping_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBEDGE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY partly_overlapping_faces
+  SUBTYPE OF (topology_related_to_overlapping_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY partly_overlapping_solids
+  SUBTYPE OF (inapt_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY partly_overlapping_surfaces
+  SUBTYPE OF (overlapping_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE',
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY path
+  SUPERTYPE OF (ONEOF(open_path, edge_loop, oriented_path))
+  SUBTYPE OF (topological_representation_item);
+  edge_list : LIST [1 : ?] OF UNIQUE oriented_edge;
+WHERE
+  WR1: path_head_to_tail(SELF);
+END_ENTITY;
+
+ENTITY path_area_with_parameters
+  SUBTYPE OF (complex_area, mapped_item);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(SELF\mapped_item.mapping_target);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE_PARAMETERS_REPRESENTATION' IN
+       TYPEOF(SELF\mapped_item.mapping_source\representation_map.mapped_representation);
+  WR3: SELF\mapped_item.mapping_source\representation_map.mapping_origin\representation_item.name = 'curve width';
+END_ENTITY;
+
+ENTITY path_feature_component
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SELF.description IN ['partial circular','complete circular','linear','complex']);
+  WR3: ((NOT (SELF.description = 'complex')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                              TYPEOF(pdr.used_representation)))) =
+                              1)))) =
+         0));
+  WR4: ((SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'orientation')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR5: ((NOT (SELF.description = 'partial circular')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) =
+                              0)))) =
+         0));
+  WR6: ((NOT (SELF.description = 'partial circular')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'radius')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT (SELF.description = 'partial circular')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'sweep angle')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT (SELF.description = 'complete circular')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                              0)))) =
+         0));
+  WR9: ((NOT (SELF.description = 'complete circular')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'radius')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR10: ((NOT (SELF.description = 'linear')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                               0)))) =
+          0));
+  WR11: ((NOT (SELF.description = 'linear')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                            TYPEOF(it)) =
+                                                                     2) AND
+                                                                    (it.name = 'distance')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR12: ((NOT (SELF.description = 'linear')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(pdr
+                                            <* USEDIN(pd,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                               TYPEOF(pdr.used_representation)))) =
+                               1)))) =
+          0));
+  WR13: ((NOT (SELF.description = 'complex')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(pdr
+                                            <* USEDIN(pd,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION' IN
+                                                TYPEOF(pdr.used_representation)) AND
+                                               (pdr.used_representation.name = 'sweep path') AND
+                                               (SIZEOF(QUERY(srwp_i
+                                                             <* pdr.used_representation.items
+                                                             | (srwp_i.name = 'profile shape'))) =
+                                                1)))) =
+                               1)))) =
+          0));
+END_ENTITY;
+
+ENTITY path_node
+  ABSTRACT SUPERTYPE OF (ONEOF(point_to_point_path, circular_path, linear_path, curve_based_path))
+  SUBTYPE OF (kinematic_path_segment);
+  placement_end : placement;
+END_ENTITY;
+
+ENTITY path_parameter_representation
+  SUBTYPE OF (definitional_representation);
+  SELF\representation.context_of_items : path_parameter_representation_context;
+  SELF\representation.items            : SET [1 : ?] OF bounded_curve;
+WHERE
+  WR1: SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
+END_ENTITY;
+
+ENTITY path_parameter_representation_context
+  SUBTYPE OF (geometric_representation_context, parametric_representation_context);
+END_ENTITY;
+
+ENTITY path_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: (SIZEOF(SELF.items) >= 1);
+  WR2: (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH'] *
+                               TYPEOF(i)) =
+                        1))) >=
+        1);
+END_ENTITY;
+
+ENTITY pattern_offset_membership
+  SUBTYPE OF (feature_component_relationship);
+WHERE
+  WR1: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.relating_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | ((SIZEOF(QUERY(pdr
+                                      <* (QUERY(pd
+                                                <* USEDIN(fcr.related_shape_aspect.of_shape,
+                                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                                | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                                  TYPEOF(pd)))
+                                      | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] *
+                                               TYPEOF(pdr.definition)) =
+                                        1)) =
+                         0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.related_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | (fcr.description = 'modified pattern') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN
+                        TYPEOF(fcr.relating_shape_aspect)))) >=
+        1);
+  WR3: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.related_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN
+                         TYPEOF(fcr.relating_shape_aspect)) AND
+                        (NOT (SIZEOF(QUERY(modfcr
+                                           <* QUERY(modsar
+                                                    <* USEDIN(fcr.relating_shape_aspect,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                    | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN',
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] *
+                                                               TYPEOF(modsar.related_shape_aspect.of_shape.definition)) =
+                                                        1) AND
+                                                       (modsar :<>: fcr)))
+                                           | (NOT (modfcr.related_shape_aspect.of_shape.definition :=:
+                                                   SELF.relating_shape_aspect.of_shape.definition)))) =
+                              0))))) =
+        0);
+  WR4: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(USEDIN(pd,
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) =
+                              2)))) =
+         0));
+  WR5: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(USEDIN(pd,
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) =
+                              1)))) =
+         0));
+  WR6: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (NOT (SIZEOF(pdr.used_representation.items) = 2)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                    TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                   (it.name = 'index number')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'offset')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR9: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) =
+                              0)))) =
+         0));
+  WR10: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+               TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF.related_shape_aspect,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                     TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                    (it.name = 'row index')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR11: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+               TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF.related_shape_aspect,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                     TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                    (it.name = 'column index')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR12: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+               TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF.related_shape_aspect,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'offset distance')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR13: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+               TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF.related_shape_aspect,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(pdr
+                                            <* USEDIN(pd,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                                TYPEOF(pdr.used_representation)) AND
+                                               (pdr.used_representation.name = 'offset direction')))) =
+                               1)))) =
+          0));
+END_ENTITY;
+
+ENTITY pattern_omit_membership
+  SUBTYPE OF (feature_component_relationship);
+WHERE
+  WR1: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.relating_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | ((SIZEOF(QUERY(pdr
+                                      <* (QUERY(pd
+                                                <* USEDIN(fcr.related_shape_aspect.of_shape,
+                                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                                | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                                  TYPEOF(pd)))
+                                      | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] *
+                                               TYPEOF(pdr.definition)) =
+                                        1)) =
+                         0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.related_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | (fcr.description = 'modified pattern') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN
+                        TYPEOF(fcr.relating_shape_aspect)))) >=
+        1);
+  WR3: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF.related_shape_aspect,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                              | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar)) AND
+                                 (sar :<>: SELF)))
+                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MODIFIED_PATTERN' IN
+                         TYPEOF(fcr.relating_shape_aspect)) AND
+                        (NOT (SIZEOF(QUERY(modfcr
+                                           <* QUERY(modsar
+                                                    <* USEDIN(fcr.relating_shape_aspect,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                    | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN',
+                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN'] *
+                                                               TYPEOF(modsar.related_shape_aspect.of_shape.definition)) =
+                                                        1) AND
+                                                       (modsar :<>: fcr)))
+                                           | (NOT (modfcr.related_shape_aspect.of_shape.definition :=:
+                                                   SELF.relating_shape_aspect.of_shape.definition)))) =
+                              0))))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF.related_shape_aspect,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(USEDIN(pd,
+                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) =
+                             1)))) =
+        0);
+  WR5: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (NOT (SIZEOF(pdr.used_representation.items) = 1)))) =
+                              0)))) =
+         0));
+  WR6: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                    TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                   (it.name = 'index number')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (NOT (SIZEOF(pdr.used_representation.items) = 2)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                    TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                   (it.name = 'row index')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR9: ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_PATTERN' IN
+              TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF.related_shape_aspect,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                    TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                   (it.name = 'column index')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+END_ENTITY;
+
+ENTITY pcurve
+  SUBTYPE OF (curve);
+  basis_surface      : surface;
+  reference_to_curve : definitional_representation;
+WHERE
+  WR1: SIZEOF(reference_to_curve\representation.items) = 1;
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(reference_to_curve\representation.items[1]);
+  WR3: reference_to_curve\representation.items[1]\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY pdgc_with_dimension
+  SUBTYPE OF (point_distance_geometric_constraint);
+  distance_value : non_negative_length_measure;
+END_ENTITY;
+
+ENTITY perpendicular_assembly_constraint
+  SUBTYPE OF (binary_assembly_constraint, perpendicular_geometric_constraint);
+END_ENTITY;
+
+ENTITY perpendicular_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF linear_geometry_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 2] OF linear_geometry_constraint_element;
+WHERE
+  WR1: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 2) AND
+            NOT ((SIZEOF(QUERY(q
+                               <* SELF\explicit_constraint.constrained_elements +
+                                  SELF\explicit_constraint.reference_elements
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE' IN TYPEOF(q))) =
+                  SIZEOF(SELF\explicit_constraint.reference_elements +
+                         SELF\explicit_constraint.constrained_elements)) XOR
+                 (SIZEOF(QUERY(q
+                               <* SELF\explicit_constraint.constrained_elements +
+                                  SELF\explicit_constraint.reference_elements
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(q))) =
+                  SIZEOF(SELF\explicit_constraint.reference_elements +
+                         SELF\explicit_constraint.constrained_elements))));
+  WR2: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (SIZEOF(SELF\explicit_constraint.constrained_elements) IN [2,3]);
+  WR3: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 0) AND
+            (SIZEOF(SELF\explicit_constraint.constrained_elements) = 3)) AND
+           NOT ((SIZEOF(QUERY(q
+                              <* SELF\explicit_constraint.constrained_elements
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE' IN TYPEOF(q))) =
+                 3) XOR
+                (SIZEOF(QUERY(q
+                              <* SELF\explicit_constraint.constrained_elements
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(q))) =
+                 3));
+END_ENTITY;
+
+ENTITY perpendicular_to
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
+END_ENTITY;
+
+ENTITY perpendicularity_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY person;
+  id            : identifier;
+  last_name     : OPTIONAL label;
+  first_name    : OPTIONAL label;
+  middle_names  : OPTIONAL LIST [1 : ?] OF label;
+  prefix_titles : OPTIONAL LIST [1 : ?] OF label;
+  suffix_titles : OPTIONAL LIST [1 : ?] OF label;
+WHERE
+  WR1: EXISTS(last_name) OR EXISTS(first_name);
+END_ENTITY;
+
+ENTITY person_and_organization;
+  the_person       : person;
+  the_organization : organization;
+DERIVE
+  name        : label := get_name_value(SELF);
+  description : text  := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY person_and_organization_address
+  SUBTYPE OF (organizational_address, personal_address);
+  SELF\organizational_address.organizations : SET [1 : 1] OF organization;
+  SELF\personal_address.people              : SET [1 : 1] OF person;
+WHERE
+  WR1: SIZEOF(QUERY(pao
+                    <* USEDIN(SELF\personal_address.people[1],
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERSON_AND_ORGANIZATION.THE_PERSON')
+                    | pao.the_organization :=: SELF\organizational_address.organizations[1])) =
+       1;
+END_ENTITY;
+
+ENTITY person_and_organization_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_person_and_organization : person_and_organization;
+  role                             : person_and_organization_role;
+END_ENTITY;
+
+ENTITY person_and_organization_role;
+  name : label;
+DERIVE
+  description : text := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY personal_address
+  SUBTYPE OF (address);
+  people      : SET [1 : ?] OF person;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY pgc_with_dimension
+  SUBTYPE OF (parallel_geometric_constraint);
+  distance_value     : non_negative_length_measure;
+  negative_direction : BOOLEAN;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR
+       (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
+  WR2: SIZEOF(QUERY(q
+                    <* (SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements)
+                    | SIZEOF(TYPEOF(q) *
+                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR']) >
+                      0)) =
+       0;
+END_ENTITY;
+
+ENTITY physical_breakdown_context
+  SUBTYPE OF (breakdown_context);
+END_ENTITY;
+
+ENTITY physical_component
+  SUBTYPE OF (assembly_component);
+END_ENTITY;
+
+ENTITY physical_component_feature
+  SUPERTYPE OF ((ONEOF(physical_component_terminal, physical_component_interface_terminal)))
+  SUBTYPE OF (component_feature);
+END_ENTITY;
+
+ENTITY physical_component_interface_terminal
+  SUBTYPE OF (physical_component_feature);
+END_ENTITY;
+
+ENTITY physical_component_terminal
+  SUBTYPE OF (component_terminal, physical_component_feature);
+END_ENTITY;
+
+ENTITY physical_element_usage
+  SUBTYPE OF (breakdown_element_usage);
+END_ENTITY;
+
+ENTITY picture_representation
+  SUBTYPE OF (presentation_view);
+  SELF\representation.items : SET [2 : ?] OF picture_representation_item_select;
+INVERSE
+  size : presentation_size FOR unit;
+WHERE
+  WR1: SIZEOF(QUERY(item <* items | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item))) = 1;
+  WR2: SIZEOF(QUERY(se
+                    <* QUERY(item
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item)))
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PICTURE_REPRESENTATION_ITEM' IN
+                           TYPEOF(se\styled_item.item)))) =
+       0;
+END_ENTITY;
+
+ENTITY placed_datum_target_feature
+  SUBTYPE OF (datum_target);
+DERIVE
+  representation_associations : SET [0 : ?] OF property_definition_representation := get_shape_aspect_property_definition_representations(SELF);
+WHERE
+  WR1: SELF.description IN ['point','line','rectangle','circle','circular curve'];
+  WR2: SIZEOF(QUERY(pdr
+                    <* representation_associations
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                      TYPEOF(pdr.used_representation))) =
+       1;
+  WR3: valid_datum_target_parameters(SELF);
+END_ENTITY;
+
+ENTITY placed_feature
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY placement
+  SUPERTYPE OF (ONEOF(axis1_placement, axis2_placement_2d, axis2_placement_3d))
+  SUBTYPE OF (geometric_representation_item);
+  location : cartesian_point;
+END_ENTITY;
+
+ENTITY planar_box
+  SUBTYPE OF (planar_extent);
+  placement : axis2_placement;
+END_ENTITY;
+
+ENTITY planar_curve_pair
+  SUPERTYPE OF (ONEOF(sliding_curve_pair, rolling_curve_pair) ANDOR planar_curve_pair_range)
+  SUBTYPE OF (high_order_kinematic_pair);
+  curve_1     : curve;
+  curve_2     : curve;
+  orientation : BOOLEAN;
+WHERE
+  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (curve_1 IN r.items))) = 0;
+  WR2: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (curve_2 IN r.items))) = 0;
+  WR3: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY planar_curve_pair_range
+  SUBTYPE OF (planar_curve_pair);
+  range_on_curve_1 : trimmed_curve;
+  range_on_curve_2 : trimmed_curve;
+WHERE
+  WR1: SELF\planar_curve_pair.curve_1 :=: range_on_curve_1.basis_curve;
+  WR2: SELF\planar_curve_pair.curve_2 :=: range_on_curve_2.basis_curve;
+  WR3: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (range_on_curve_1 IN r.items))) =
+       0;
+  WR4: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (range_on_curve_2 IN r.items))) =
+       0;
+END_ENTITY;
+
+ENTITY planar_extent
+  SUBTYPE OF (geometric_representation_item);
+  size_in_x : length_measure;
+  size_in_y : length_measure;
+END_ENTITY;
+
+ENTITY planar_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY planar_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : planar_pair;
+  actual_rotation                 : plane_angle_measure;
+  actual_translation_x            : length_measure;
+  actual_translation_y            : length_measure;
+END_ENTITY;
+
+ENTITY planar_pair_with_range
+  SUBTYPE OF (planar_pair);
+  lower_limit_actual_rotation      : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation      : OPTIONAL plane_angle_measure;
+  lower_limit_actual_translation_x : OPTIONAL length_measure;
+  upper_limit_actual_translation_x : OPTIONAL length_measure;
+  lower_limit_actual_translation_y : OPTIONAL length_measure;
+  upper_limit_actual_translation_y : OPTIONAL length_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR
+       (lower_limit_actual_rotation < upper_limit_actual_rotation);
+  WR2: (NOT EXISTS(lower_limit_actual_translation_x) OR NOT EXISTS(upper_limit_actual_translation_x)) XOR
+       (lower_limit_actual_translation_x < upper_limit_actual_translation_x);
+  WR3: (NOT EXISTS(lower_limit_actual_translation_y) OR NOT EXISTS(upper_limit_actual_translation_y)) XOR
+       (lower_limit_actual_translation_y < upper_limit_actual_translation_y);
+END_ENTITY;
+
+ENTITY planar_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(SELF.items) = 1;
+  WR2: SIZEOF(QUERY(it <* SELF.items | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(it)))) = 1;
+END_ENTITY;
+
+ENTITY plane
+  SUBTYPE OF (elementary_surface);
+END_ENTITY;
+
+ENTITY plane_angle_and_length_pair
+  SUBTYPE OF (founded_item);
+  plane_angle_value : plane_angle_measure;
+  length_value      : length_measure;
+END_ENTITY;
+
+ENTITY plane_angle_and_ratio_pair
+  SUBTYPE OF (founded_item);
+  plane_angle_value : plane_angle_measure;
+  ratio_value       : ratio_measure;
+END_ENTITY;
+
+ENTITY plane_angle_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY plane_angle_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY plus_expression
+  SUBTYPE OF (multiple_arity_numeric_expression);
+END_ENTITY;
+
+ENTITY plus_minus_tolerance;
+  range                : tolerance_method_definition;
+  toleranced_dimension : dimensional_characteristic;
+UNIQUE
+  UR1: toleranced_dimension;
+END_ENTITY;
+
+ENTITY ply_angle_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : 1] OF measure_representation_item;
+END_ENTITY;
+
+ENTITY ply_laminate_sequence_definition
+  SUBTYPE OF (product_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION')
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE' IN
+                      TYPEOF(pdr))) >
+       0;
+END_ENTITY;
+
+ENTITY ply_orientation_angle
+  SUBTYPE OF (representation_relationship);
+  SELF\representation_relationship.rep_1 : reinforcement_orientation_basis;
+  SELF\representation_relationship.rep_2 : ply_angle_representation;
+END_ENTITY;
+
+ENTITY pmi_requirement_item_association
+  SUBTYPE OF (item_identified_representation_usage);
+  requirement : characterized_object;
+END_ENTITY;
+
+ENTITY pocket
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SELF\characterized_object.description IN
+        ['closed rectangular','open rectangular','complex','circular cutout','complex cutout','recess']);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'pocket depth occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description =
+                                                                        'path feature component usage') AND
+                                                                       (sar.name = 'pocket depth') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.relating_shape_aspect.description = 'linear')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                       TYPEOF(pdr.used_representation)))) =
+       1;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     ({1 <= SIZEOF(pdr.used_representation.items) <= 2}))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR
+                                                     (srwp_i.name = 'fillet radius'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'fillet radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+  WR7: ((NOT (SELF\characterized_object.description IN ['complex','non-circular cutout','recess'])) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'boundary occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] *
+                                                                       TYPEOF(sdr.relating_shape_aspect)) =
+                                                                1)))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR8: ((NOT (SELF\characterized_object.description = 'closed rectangular')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'closed boundary occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE' IN
+                                                                TYPEOF(sdr.relating_shape_aspect))))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR9: ((NOT (SELF\characterized_object.description = 'open rectangular')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'open boundary occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE' IN
+                                                                TYPEOF(sdr.relating_shape_aspect))))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR10: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'bottom condition occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'pocket bottom usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN
+                                                                TYPEOF(sdr.relating_shape_aspect)) AND
+                                                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                                                                TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) =
+                                               1)))) =
+                              1)))) =
+         0);
+  WR11: ((NOT (SELF\characterized_object.description IN ['complex','non-circular cutout','recess'])) OR
+         (SIZEOF(QUERY(pds
+                       <* QUERY(pd
+                                <* USEDIN(SELF,
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                   TYPEOF(pd)))
+                       | (NOT (SIZEOF(QUERY(sa_occ
+                                            <* USEDIN(pds,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                            | ((sa_occ.description = 'change in boundary occurrence') AND
+                                               (SIZEOF(QUERY(fcr
+                                                             <* QUERY(sar
+                                                                      <* USEDIN(sa_occ,
+                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                      | ((sar.description = 'taper usage') AND
+                                                                         (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                          TYPEOF(sar))))
+                                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                                 TYPEOF(fcr.relating_shape_aspect)) AND
+                                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                                                                 TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                                                                (fcr.related_shape_aspect.description IN
+                                                                 ['angle taper','directed taper'])))) =
+                                                1)))) <=
+                               1)))) =
+          0));
+  WR12: (NOT (SELF\characterized_object.description = 'circular cutout')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description = 'enclosed boundary occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | (sar.description = 'profile usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN
+                                                             TYPEOF(sdr.relating_shape_aspect)))) =
+                                             1))) =
+                             1))) =
+         0);
+  WR13: (NOT (SELF\characterized_object.description IN ['circular cutout','complex cutout'])) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description = 'bottom condition occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | (sar.description = 'pocket bottom usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN
+                                                              TYPEOF(sdr.relating_shape_aspect)) AND
+                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                                                              TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND
+                                                             (sdr.relating_shape_aspect.description = 'through')))) =
+                                             1))) =
+                             1))) =
+         0);
+  WR14: (NOT (SELF\characterized_object.description = 'recess')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd))
+                      | NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | (sa_occ.description = 'bottom condition occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | (sar.description = 'pocket bottom usage') AND
+                                                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                      TYPEOF(sar)))
+                                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN
+                                                              TYPEOF(sdr.relating_shape_aspect)) AND
+                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                                                              TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND
+                                                             (sdr.relating_shape_aspect.description IN
+                                                              ['planar','complex'])))) =
+                                             1))) =
+                             1))) =
+         0);
+  WR15: SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (pdr.used_representation.name = 'maximum feature limit'))) >=
+        0;
+  WR16: ((NOT (SELF\characterized_object.description IN
+               ['closed rectangular','open rectangular','complex','recess'])) OR
+         (SIZEOF(QUERY(pds
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                           TYPEOF(pds)) AND
+                          (SIZEOF(QUERY(csa
+                                        <* USEDIN(pds,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                        | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                            TYPEOF(csa)) AND
+                                           (csa.name = 'uncut volume') AND
+                                           (SIZEOF(QUERY(sar
+                                                         <* csa.component_relationships
+                                                         | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                              TYPEOF(sar)) AND
+                                                             (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS',
+                                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] *
+                                                                     TYPEOF(sar.related_shape_aspect)) =
+                                                              1))))) =
+                                            1)))) <=
+                           1)))) =
+          1));
+  WR17: ((NOT (SELF\characterized_object.description IN ['closed rectangular','open rectangular'])) OR
+         (SIZEOF(QUERY(pds
+                       <* QUERY(pd
+                                <* USEDIN(SELF,
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                   TYPEOF(pd)))
+                       | (NOT (SIZEOF(QUERY(sa_occ
+                                            <* USEDIN(pds,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                            | ((sa_occ.description = 'change in boundary occurrence') AND
+                                               (SIZEOF(QUERY(fcr
+                                                             <* QUERY(sar
+                                                                      <* USEDIN(sa_occ,
+                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                      | ((sar.description = 'taper usage') AND
+                                                                         (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                          TYPEOF(sar))))
+                                                             | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                                 TYPEOF(fcr.relating_shape_aspect)) AND
+                                                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                                                                 TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                                                                (fcr.related_shape_aspect.description IN
+                                                                 ['angle taper','directed taper'])))) >=
+                                                1)))) <=
+                               1)))) =
+          0));
+END_ENTITY;
+
+ENTITY pocket_bottom
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['planar','complex','through'];
+  WR3: ((NOT (SELF.description = 'planar')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION') IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'floor normal'))) =
+                              1)))) =
+         0));
+  WR4: ((NOT (SELF.description = 'planar')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION') IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'floor location'))) =
+                              1)))) =
+         0));
+  WR5: ((NOT (SELF.description = 'complex')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'floor face'))) =
+                              1)))) =
+         0));
+  WR6: (NOT (SELF.description IN ['planar','complex']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(pdr
+                                              <* USEDIN(pd,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                TYPEOF(pdr.used_representation))) =
+                                 1))) =
+             0));
+  WR7: (NOT (SELF.description IN ['planar','complex']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(impl_rep
+                                              <* QUERY(pdr
+                                                       <* USEDIN(pd,
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                         TYPEOF(pdr.used_representation))
+                                              | NOT (SIZEOF(impl_rep.used_representation.items) <= 1))) =
+                                 0))) =
+             0));
+  WR8: (NOT (SELF.description = 'through') OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(pdr
+                                              <* USEDIN(pd,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                TYPEOF(pdr.used_representation))) =
+                                 0))) =
+             0));
+  WR9: (NOT (SELF.description IN ['planar','complex'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'radius'))) <=
+                                                1))) =
+                            0))) =
+        0);
+  WR10: SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | (sar.description = 'pocket bottom usage') AND
+                                ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                 TYPEOF(sar)))
+                     | ((fcr.related_shape_aspect.description = 'bottom condition occurrence') AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET' IN
+                         TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POCKET_BOTTOM' IN
+                         TYPEOF(fcr.relating_shape_aspect))))) >=
+        1;
+  WR11: ((NOT (SELF.description IN ['planar','complex'])) OR
+         (SIZEOF(QUERY(fcr
+                       <* QUERY(sar
+                                <* USEDIN(SELF,
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                | (sar.description = 'pocket bottom usage') AND
+                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                   TYPEOF(sar)))
+                       | (fcr.related_shape_aspect.description = 'bottom condition occurrence') AND
+                         (fcr.related_shape_aspect.name IN ['pocket depth start','pocket depth end']))) =
+          0));
+END_ENTITY;
+
+ENTITY pogc_with_dimension
+  SUBTYPE OF (parallel_offset_geometric_constraint);
+  offset_value                 : positive_length_measure;
+  offset_direction_constrained : BOOLEAN;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR
+       (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
+  WR2: (NOT (offset_direction_constrained = true) AND
+            ((offset_type = curve_2d_offset) OR (offset_type = surface_offset)));
+END_ENTITY;
+
+ENTITY point
+  SUPERTYPE OF (ONEOF(cartesian_point, point_on_curve, point_on_surface, point_in_volume, point_replica,
+                      degenerate_pcurve))
+  SUBTYPE OF (geometric_representation_item);
+END_ENTITY;
+
+ENTITY point_and_vector
+  SUBTYPE OF (compound_representation_item, geometric_representation_item);
+  SELF\compound_representation_item.item_element : point_and_vector_members;
+END_ENTITY;
+
+ENTITY point_array
+  SUBTYPE OF (compound_representation_item, geometric_representation_item);
+  SELF\compound_representation_item.item_element : point_array_members;
+END_ENTITY;
+
+ENTITY point_cloud_dataset
+  SUBTYPE OF (scanned_data_item);
+  point_coordinates : LIST [1 : ?] OF LIST [3 : 3] OF REAL;
+END_ENTITY;
+
+ENTITY point_cloud_dataset_with_colours
+  SUBTYPE OF (point_cloud_dataset);
+  colour_indices : LIST [1 : ?] OF LIST [3 : 3] OF INTEGER;
+WHERE
+  WR1: SIZEOF(colour_indices) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
+END_ENTITY;
+
+ENTITY point_cloud_dataset_with_intensities
+  SUBTYPE OF (point_cloud_dataset);
+  intensities : LIST [1 : ?] OF REAL;
+WHERE
+  WR1: SIZEOF(intensities) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
+END_ENTITY;
+
+ENTITY point_cloud_dataset_with_normals
+  SUBTYPE OF (point_cloud_dataset);
+  normals : LIST [1 : ?] OF LIST [3 : 3] OF REAL;
+WHERE
+  WR1: SIZEOF(normals) = SIZEOF(SELF\point_cloud_dataset.point_coordinates);
+END_ENTITY;
+
+ENTITY point_cloud_superdataset
+  SUBTYPE OF (scanned_data_item);
+  pts_per_sublist : INTEGER;
+  sublists        : LIST [2 : ?] OF point_cloud_dataset;
+WHERE
+  WR1: consistent_sizes(SELF.pts_per_sublist, SELF.sublists);
+END_ENTITY;
+
+ENTITY point_distance_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF point;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 4] OF point_curve_or_surface_constraint_element;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND
+        (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
+END_ENTITY;
+
+ENTITY point_in_volume
+  SUBTYPE OF (point);
+  basis_volume      : volume;
+  point_parameter_u : parameter_value;
+  point_parameter_v : parameter_value;
+  point_parameter_w : parameter_value;
+END_ENTITY;
+
+ENTITY point_on_curve
+  SUBTYPE OF (point);
+  basis_curve     : curve;
+  point_parameter : parameter_value;
+END_ENTITY;
+
+ENTITY point_on_edge_curve
+  SUBTYPE OF (point_on_curve);
+  basis_edge_curve : edge_curve;
+DERIVE
+  SELF\point_on_curve.basis_curve : curve := SELF.basis_edge_curve.edge_geometry;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_edge_curve) * relating_shape_representations_of_extreme_values(SELF)) >
+       0;
+END_ENTITY;
+
+ENTITY point_on_face_surface
+  SUBTYPE OF (point_on_surface);
+  basis_face_surface : face_surface;
+DERIVE
+  SELF\point_on_surface.basis_surface : surface := SELF.basis_face_surface.face_geometry;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_face_surface) *
+              relating_shape_representations_of_extreme_values(SELF)) >
+       0;
+END_ENTITY;
+
+ENTITY point_on_planar_curve_pair
+  SUBTYPE OF (high_order_kinematic_pair);
+  pair_curve  : curve;
+  orientation : BOOLEAN;
+WHERE
+  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_curve IN r.items))) = 0;
+  WR2: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY point_on_planar_curve_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : point_on_planar_curve_pair;
+  actual_point_on_curve           : point_on_curve;
+  input_orientation               : spatial_rotation;
+DERIVE
+  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair,
+                                                                       input_orientation);
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\point_on_planar_curve_pair.pair_curve :=: actual_point_on_curve.basis_curve;
+END_ENTITY;
+
+ENTITY point_on_planar_curve_pair_with_range
+  SUBTYPE OF (point_on_planar_curve_pair);
+  range_on_pair_curve : trimmed_curve;
+  lower_limit_yaw     : OPTIONAL plane_angle_measure;
+  upper_limit_yaw     : OPTIONAL plane_angle_measure;
+  lower_limit_pitch   : OPTIONAL plane_angle_measure;
+  upper_limit_pitch   : OPTIONAL plane_angle_measure;
+  lower_limit_roll    : OPTIONAL plane_angle_measure;
+  upper_limit_roll    : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
+  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
+  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
+  WR4: SIZEOF(QUERY(r
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT (range_on_pair_curve IN r.items))) =
+       0;
+END_ENTITY;
+
+ENTITY point_on_surface
+  SUBTYPE OF (point);
+  basis_surface     : surface;
+  point_parameter_u : parameter_value;
+  point_parameter_v : parameter_value;
+END_ENTITY;
+
+ENTITY point_on_surface_pair
+  SUBTYPE OF (high_order_kinematic_pair);
+  pair_surface : surface;
+WHERE
+  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (pair_surface IN r.items))) = 0;
+  WR2: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY point_on_surface_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : point_on_surface_pair;
+  actual_point_on_surface         : point_on_surface;
+  input_orientation               : spatial_rotation;
+DERIVE
+  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair,
+                                                                       input_orientation);
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\point_on_surface_pair.pair_surface :=: actual_point_on_surface.basis_surface;
+END_ENTITY;
+
+ENTITY point_on_surface_pair_with_range
+  SUBTYPE OF (point_on_surface_pair);
+  range_on_pair_surface : rectangular_trimmed_surface;
+  lower_limit_yaw       : OPTIONAL plane_angle_measure;
+  upper_limit_yaw       : OPTIONAL plane_angle_measure;
+  lower_limit_pitch     : OPTIONAL plane_angle_measure;
+  upper_limit_pitch     : OPTIONAL plane_angle_measure;
+  lower_limit_roll      : OPTIONAL plane_angle_measure;
+  upper_limit_roll      : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
+  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
+  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
+  WR4: SIZEOF(QUERY(r
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT (range_on_pair_surface IN r.items))) =
+       0;
+END_ENTITY;
+
+ENTITY point_path
+  SUBTYPE OF (compound_representation_item, geometric_representation_item);
+  SELF\compound_representation_item.item_element : point_path_members;
+END_ENTITY;
+
+ENTITY point_placement_shape_representation
+  SUBTYPE OF (shape_representation);
+  SELF\representation.items : SET [1 : ?] OF point_placement_shape_representation_item;
+WHERE
+  WR1: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                             TYPEOF(i)) =
+                      1)) >
+       0;
+END_ENTITY;
+
+ENTITY point_replica
+  SUBTYPE OF (point);
+  parent_pt      : point;
+  transformation : cartesian_transformation_operator;
+WHERE
+  WR1: transformation.dim = parent_pt.dim;
+  WR2: acyclic_point_replica(SELF, parent_pt);
+END_ENTITY;
+
+ENTITY point_style
+  SUBTYPE OF (founded_item);
+  name          : label;
+  marker        : OPTIONAL marker_select;
+  marker_size   : OPTIONAL size_select;
+  marker_colour : OPTIONAL colour;
+WHERE
+  WR1: EXISTS(marker) OR EXISTS(marker_size) OR EXISTS(marker_colour);
+END_ENTITY;
+
+ENTITY point_to_point_path
+  SUBTYPE OF (path_node);
+DERIVE
+  SELF\kinematic_path_segment.transition : transition_code := discontinuous;
+END_ENTITY;
+
+ENTITY polar_11
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY polar_complex_number_region
+  SUBTYPE OF (maths_space, generic_literal);
+  centre               : complex_number_literal;
+  distance_constraint  : real_interval;
+  direction_constraint : finite_real_interval;
+WHERE
+  WR1: min_exists(distance_constraint) AND (real_min(distance_constraint) >= 0.0);
+  WR2: {-PI <= direction_constraint.min < PI};
+  WR3: direction_constraint.max - direction_constraint.min <= 2.0 * PI;
+  WR4: (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.min_closure = open);
+  WR5: (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.max_closure = open) OR
+       (direction_constraint.min = -PI);
+  WR6: (real_min(distance_constraint) > 0.0) OR max_exists(distance_constraint) OR
+       (direction_constraint.max - direction_constraint.min < 2.0 * PI) OR (direction_constraint.max_closure = open);
+END_ENTITY;
+
+ENTITY polar_point
+  SUBTYPE OF (cartesian_point);
+  r     : length_measure;
+  theta : plane_angle_measure;
+DERIVE
+  SELF\cartesian_point.coordinates : LIST [2 : 2] OF length_measure := [r * COS(theta),r * SIN(theta)];
+WHERE
+  WR1: r >= 0.0;
+END_ENTITY;
+
+ENTITY poly_loop
+  SUBTYPE OF (loop, geometric_representation_item);
+  polygon : LIST [3 : ?] OF UNIQUE cartesian_point;
+END_ENTITY;
+
+ENTITY polygonal_area
+  SUBTYPE OF (primitive_2d);
+  bounds : LIST [3 : ?] OF UNIQUE cartesian_point;
+END_ENTITY;
+
+ENTITY polyline
+  SUBTYPE OF (bounded_curve);
+  points : LIST [2 : ?] OF cartesian_point;
+END_ENTITY;
+
+ENTITY position_tolerance
+  SUBTYPE OF (geometric_tolerance);
+END_ENTITY;
+
+ENTITY positioned_sketch
+  SUBTYPE OF (geometric_representation_item);
+  sketch_basis       : sketch_basis_select;
+  auxiliary_elements : SET [0 : ?] OF auxiliary_geometric_representation_item;
+WHERE
+  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(sketch_basis)) AND
+            NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                 TYPEOF(sketch_basis\curve_bounded_surface.basis_surface)));
+  WR2: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(sketch_basis)) AND
+            NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                 TYPEOF(sketch_basis\face_surface.face_geometry)));
+  WR3: SIZEOF(QUERY(q
+                    <* auxiliary_elements
+                    | (SIZEOF(TYPEOF(q) *
+                              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']) =
+                       0))) =
+       0;
+  WR4: SIZEOF(QUERY(q <* auxiliary_elements | q\geometric_representation_item.dim <> 3)) = 0;
+END_ENTITY;
+
+ENTITY positive_length_measure_with_unit
+  SUBTYPE OF (length_measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN
+       TYPEOF(SELF\measure_with_unit.value_component);
+END_ENTITY;
+
+ENTITY positive_plane_angle_measure_with_unit
+  SUBTYPE OF (plane_angle_measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN
+       TYPEOF(SELF\measure_with_unit.value_component);
+END_ENTITY;
+
+ENTITY power_expression
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY power_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POWER_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY power_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.watt);
+END_ENTITY;
+
+ENTITY pre_defined_character_glyph
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_colour
+  SUBTYPE OF (pre_defined_item, colour);
+END_ENTITY;
+
+ENTITY pre_defined_curve_font
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_dimension_symbol
+  SUBTYPE OF (pre_defined_symbol);
+WHERE
+  WR1: SELF.name IN
+       ['arc length',
+        'conical taper',
+        'counterbore',
+        'countersink',
+        'depth',
+        'diameter',
+        'plus minus',
+        'radius',
+        'slope',
+        'spherical diameter',
+        'spherical radius',
+        'square'];
+END_ENTITY;
+
+ENTITY pre_defined_geometrical_tolerance_symbol
+  SUBTYPE OF (pre_defined_symbol);
+WHERE
+  WR1: SELF.name IN
+       ['angularity',
+        'basic dimension',
+        'blanked datum reference',
+        'circular runout',
+        'circularity',
+        'concentricity',
+        'cylindricity',
+        'datum target identification',
+        'diameter',
+        'filled datum reference',
+        'flatness',
+        'least material condition',
+        'maximum material condition',
+        'parallelism',
+        'perpendicularity',
+        'position',
+        'profile of a line',
+        'profile of a surface',
+        'projected tolerance zone',
+        'regardless of feature size',
+        'straightness',
+        'symmetry',
+        'total runout'];
+END_ENTITY;
+
+ENTITY pre_defined_item;
+  name : label;
+END_ENTITY;
+
+ENTITY pre_defined_marker
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_point_marker_symbol
+  SUBTYPE OF (pre_defined_marker, pre_defined_symbol);
+WHERE
+  WR1: SELF.name IN ['asterisk','circle','dot','plus','square','triangle','x'];
+END_ENTITY;
+
+ENTITY pre_defined_surface_condition_symbol
+  SUBTYPE OF (pre_defined_symbol);
+WHERE
+  WR1: SELF.name IN
+       ['000',
+        '010',
+        '020',
+        '030',
+        '040',
+        '050',
+        '060',
+        '070',
+        '001',
+        '011',
+        '021',
+        '031',
+        '041',
+        '051',
+        '061',
+        '071',
+        '100',
+        '110',
+        '120',
+        '130',
+        '140',
+        '150',
+        '160',
+        '170',
+        '101',
+        '111',
+        '121',
+        '131',
+        '141',
+        '151',
+        '161',
+        '171',
+        '200',
+        '210',
+        '220',
+        '230',
+        '240',
+        '250',
+        '260',
+        '270',
+        '201',
+        '211',
+        '221',
+        '231',
+        '241',
+        '251',
+        '261',
+        '271'];
+END_ENTITY;
+
+ENTITY pre_defined_surface_side_style
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_symbol
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_terminator_symbol
+  SUBTYPE OF (pre_defined_symbol);
+WHERE
+  WR1: SELF.name IN
+       ['blanked arrow',
+        'blanked box',
+        'blanked dot',
+        'blanked triangle',
+        'dimension origin',
+        'filled arrow',
+        'filled box',
+        'filled dot',
+        'integral symbol',
+        'open arrow',
+        'slash',
+        'unfilled arrow',
+        'unfilled triangle',
+        'filled triangle'];
+END_ENTITY;
+
+ENTITY pre_defined_text_font
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY pre_defined_tile
+  SUBTYPE OF (pre_defined_item);
+END_ENTITY;
+
+ENTITY precision_qualifier;
+  precision_value : INTEGER;
+END_ENTITY;
+
+ENTITY prescribed_path
+  SUBTYPE OF (link_motion_representation_along_path);
+  controlling_joints : OPTIONAL SET [1 : 6] OF kinematic_joint;
+END_ENTITY;
+
+ENTITY presentation_area
+  SUBTYPE OF (presentation_representation);
+WHERE
+  WR1: ((SIZEOF(QUERY(ais
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET.AREA')
+                      | SIZEOF(USEDIN(ais, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')) =
+                        1)) >
+         0) OR
+        (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_SIZE.UNIT')) = 1));
+END_ENTITY;
+
+ENTITY presentation_layer_assignment;
+  name           : label;
+  description    : text;
+  assigned_items : SET [1 : ?] OF layered_item;
+END_ENTITY;
+
+ENTITY presentation_representation
+  SUPERTYPE OF (ONEOF(presentation_area, presentation_view))
+  SUBTYPE OF (representation);
+  SELF\representation.context_of_items : geometric_representation_context;
+WHERE
+  WR1: SELF\representation.context_of_items\geometric_representation_context.coordinate_space_dimension = 2;
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_AREA' IN TYPEOF(SELF)) OR
+       (SIZEOF(QUERY(prr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN
+                       TYPEOF(prr\representation_relationship.rep_1))) >
+        0) OR
+       (SIZEOF(QUERY(rm
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION')
+                     | SIZEOF(QUERY(mi
+                                    <* USEDIN(rm,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE')
+                                    | SIZEOF(QUERY(rep
+                                                   <* using_representations(mi)
+                                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN
+                                                     TYPEOF(rep))) >
+                                      0)) >
+                       0)) >
+        0);
+END_ENTITY;
+
+ENTITY presentation_set;
+INVERSE
+  areas : SET [1:?] OF area_in_set FOR in_set;
+END_ENTITY;
+
+ENTITY presentation_size;
+  unit : presentation_size_assignment_select;
+  size : planar_box;
+UNIQUE
+  UR1: unit;
+WHERE
+  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_REPRESENTATION' IN TYPEOF(unit)) AND
+        item_in_context(size, unit\representation.context_of_items)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_IN_SET' IN TYPEOF(unit)) AND
+        (SIZEOF(QUERY(ais
+                      <* unit\area_in_set.in_set.areas
+                      | NOT item_in_context(size, ais.area\representation.context_of_items))) =
+         0));
+END_ENTITY;
+
+ENTITY presentation_style_assignment
+  SUBTYPE OF (founded_item);
+  styles : SET [1 : ?] OF presentation_style_select;
+WHERE
+  WR1: SIZEOF(QUERY(style1
+                    <* styles
+                    | NOT (SIZEOF(QUERY(style2
+                                        <* (styles - style1)
+                                        | NOT ((TYPEOF(style1) <> TYPEOF(style2)) OR
+                                               (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE',
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_STYLE'] *
+                                                       TYPEOF(style1)) =
+                                                1)))) =
+                           0))) =
+       0;
+  WR2: SIZEOF(QUERY(style1
+                    <* styles
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(style1))) <=
+       2;
+  WR3: SIZEOF(QUERY(style1
+                    <* styles
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN TYPEOF(style1)) AND
+                      (SIZEOF(QUERY(style2
+                                    <* (styles - style1)
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_STYLE_USAGE' IN
+                                       TYPEOF(style2)) AND
+                                      ((style1\surface_style_usage.side = both) OR
+                                       (style2\surface_style_usage.side = both) OR
+                                       (style1\surface_style_usage.side = style2\surface_style_usage.side)))) >
+                       0))) =
+       0;
+END_ENTITY;
+
+ENTITY presentation_style_by_context
+  SUBTYPE OF (presentation_style_assignment);
+  style_context : style_context_select;
+END_ENTITY;
+
+ENTITY presentation_view
+  SUBTYPE OF (presentation_representation);
+END_ENTITY;
+
+ENTITY presented_item
+  ABSTRACT SUPERTYPE;
+END_ENTITY;
+
+ENTITY presented_item_representation;
+  presentation : presentation_representation_select;
+  item         : presented_item;
+END_ENTITY;
+
+ENTITY pressure_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESSURE_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY pressure_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.pascal);
+END_ENTITY;
+
+ENTITY previous_change_element_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : previous_element_assignment_select;
+  items                                : SET [1 : ?] OF change_management_object;
+END_ENTITY;
+
+ENTITY primitive_2d
+  SUPERTYPE OF (ONEOF(circular_area, elliptic_area, rectangular_area, polygonal_area, half_space_2d))
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 2;
+END_ENTITY;
+
+ENTITY primitive_2d_with_inner_boundary
+  SUBTYPE OF (complex_area, compound_representation_item);
+  SELF\compound_representation_item.item_element : compound_inner_area_boundary;
+DERIVE
+  inner_boundary : compound_inner_area_boundary := SELF\compound_representation_item.item_element;
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_AREA',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPTIC_AREA',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_AREA',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYGONAL_AREA',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_WITH_OUTER_BOUNDARY',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_AREA_WITH_PARAMETERS'] *
+              TYPEOF(SELF)) >
+       0;
+  WR2: SIZEOF(QUERY(inner
+                    <* inner_boundary
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY' IN
+                      TYPEOF(inner))) =
+       0;
+  WR3: open_path_based_inner_boundary(inner_boundary);
+END_ENTITY;
+
+ENTITY prismatic_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := false;
+END_ENTITY;
+
+ENTITY prismatic_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : prismatic_pair;
+  actual_translation              : length_measure;
+END_ENTITY;
+
+ENTITY prismatic_pair_with_range
+  SUBTYPE OF (prismatic_pair);
+  lower_limit_actual_translation : OPTIONAL length_measure;
+  upper_limit_actual_translation : OPTIONAL length_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR
+       (lower_limit_actual_translation < upper_limit_actual_translation);
+END_ENTITY;
+
+ENTITY procedural_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF procedural_representation_sequence;
+END_ENTITY;
+
+ENTITY procedural_representation_sequence
+  SUBTYPE OF (representation_item);
+  elements         : LIST [1 : ?] OF representation_item;
+  suppressed_items : SET [0 : ?] OF representation_item;
+  rationale        : text;
+WHERE
+  WR1: SIZEOF(QUERY(q <* suppressed_items | NOT (q IN elements))) = 0;
+END_ENTITY;
+
+ENTITY procedural_shape_representation
+  SUBTYPE OF (procedural_representation, shape_representation);
+  SELF\representation.items : SET [1 : ?] OF procedural_shape_representation_sequence;
+END_ENTITY;
+
+ENTITY procedural_shape_representation_sequence
+  SUBTYPE OF (geometric_representation_item, procedural_representation_sequence);
+  SELF\procedural_representation_sequence.elements : LIST [1 : ?] OF shape_representation_item;
+END_ENTITY;
+
+ENTITY procedural_solid_representation_sequence
+  SUBTYPE OF (procedural_shape_representation_sequence);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_MODEL' IN TYPEOF(SELF);
+END_ENTITY;
+
+ENTITY process_operation
+  SUBTYPE OF (action_method);
+END_ENTITY;
+
+ENTITY process_plan
+  SUBTYPE OF (action);
+WHERE
+  WR1: SIZEOF(QUERY(ar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION')
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] *
+                             TYPEOF(ar.relating_action)) <>
+                      1)) =
+       0;
+  WR2: SIZEOF(QUERY(ar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION')
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] *
+                              TYPEOF(ar.related_action)) =
+                       1) OR
+                      ((ar.name = 'process operation occurrence') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_OPERATION' IN
+                        TYPEOF(ar.related_action.chosen_method))))) =
+       SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION'));
+END_ENTITY;
+
+ENTITY process_product_association;
+  name            : label;
+  description     : text;
+  defined_product : characterized_product_definition;
+  process         : product_definition_process;
+END_ENTITY;
+
+ENTITY process_property_association;
+  name              : label;
+  description       : text;
+  process           : property_process;
+  property_or_shape : property_or_shape_select;
+END_ENTITY;
+
+ENTITY product;
+  id                 : identifier;
+  name               : label;
+  description        : OPTIONAL text;
+  frame_of_reference : SET [1 : ?] OF product_context;
+END_ENTITY;
+
+ENTITY product_as_planned
+  SUBTYPE OF (product_definition_formation);
+END_ENTITY;
+
+ENTITY product_category;
+  name        : label;
+  description : OPTIONAL text;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY product_category_relationship;
+  name         : label;
+  description  : OPTIONAL text;
+  category     : product_category;
+  sub_category : product_category;
+WHERE
+  WR1: acyclic_product_category_relationship(SELF, [SELF.sub_category]);
+END_ENTITY;
+
+ENTITY product_class
+  SUBTYPE OF (product_concept, characterized_object);
+END_ENTITY;
+
+ENTITY product_concept;
+  id             : identifier;
+  name           : label;
+  description    : OPTIONAL text;
+  market_context : product_concept_context;
+UNIQUE
+  UR1: id;
+END_ENTITY;
+
+ENTITY product_concept_context
+  SUBTYPE OF (application_context_element);
+  market_segment_type : label;
+END_ENTITY;
+
+ENTITY product_concept_feature;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY product_concept_feature_association;
+  name        : label;
+  description : OPTIONAL text;
+  concept     : product_concept;
+  feature     : product_concept_feature;
+END_ENTITY;
+
+ENTITY product_concept_feature_category
+  SUBTYPE OF (group);
+WHERE
+  WR1: SIZEOF(QUERY(aga
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP_ASSIGNMENT.ASSIGNED_GROUP')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_GROUP_ASSIGNMENT' IN TYPEOF(aga)) AND
+                      ((aga\group_assignment.role\object_role.name <> 'specification category member') OR
+                       (SIZEOF(QUERY(i
+                                     <* aga\applied_group_assignment.items
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE' IN
+                                        TYPEOF(i)) AND
+                                       NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE' IN
+                                            TYPEOF(i)))) <>
+                        SIZEOF(aga\applied_group_assignment.items))))) =
+       0;
+END_ENTITY;
+
+ENTITY product_concept_feature_category_usage
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_concept_feature_category;
+  items                                : SET [1 : ?] OF category_usage_item;
+WHERE
+  WR1: SELF.role.name IN ['mandatory category usage','optional category usage'];
+END_ENTITY;
+
+ENTITY product_concept_relationship;
+  name                     : label;
+  description              : OPTIONAL text;
+  relating_product_concept : product_concept;
+  related_product_concept  : product_concept;
+END_ENTITY;
+
+ENTITY product_context
+  SUBTYPE OF (application_context_element);
+  discipline_type : label;
+END_ENTITY;
+
+ENTITY product_data_and_data_equivalence_relationship;
+  id               : identifier;
+  name             : label;
+  description      : OPTIONAL text;
+  product_data     : equivalence_product_data_select;
+  data_equivalence : data_equivalence_definition;
+END_ENTITY;
+
+ENTITY product_data_and_data_quality_relationship;
+  description  : text;
+  product_data : product_definition;
+  data_quality : data_quality_definition;
+END_ENTITY;
+
+ENTITY product_definition
+  SUPERTYPE OF (ONEOF(composite_assembly_sequence_definition, ply_laminate_sequence_definition));
+  id                 : identifier;
+  description        : OPTIONAL text;
+  formation          : product_definition_formation;
+  frame_of_reference : product_definition_context;
+DERIVE
+  name : label := get_name_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY product_definition_context
+  SUBTYPE OF (application_context_element);
+  life_cycle_stage : label;
+END_ENTITY;
+
+ENTITY product_definition_context_association;
+  definition         : product_definition;
+  frame_of_reference : product_definition_context;
+  role               : product_definition_context_role;
+END_ENTITY;
+
+ENTITY product_definition_context_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY product_definition_effectivity
+  SUBTYPE OF (effectivity);
+  usage : product_definition_relationship;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EFFECTIVITY_ASSIGNMENT.ASSIGNED_EFFECTIVITY')) =
+       0;
+END_ENTITY;
+
+ENTITY product_definition_element_relationship
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY product_definition_formation;
+  id          : identifier;
+  description : OPTIONAL text;
+  of_product  : product;
+UNIQUE
+  UR1: id, of_product;
+END_ENTITY;
+
+ENTITY product_definition_formation_relationship;
+  id                                    : identifier;
+  name                                  : label;
+  description                           : OPTIONAL text;
+  relating_product_definition_formation : product_definition_formation;
+  related_product_definition_formation  : product_definition_formation;
+END_ENTITY;
+
+ENTITY product_definition_formation_resource
+  SUBTYPE OF (action_resource, product_definition_formation);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) >
+       0;
+  WR2: SIZEOF(QUERY(prpc
+                    <* USEDIN(SELF\product_definition_formation.of_product,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                    | prpc.name = 'part')) <>
+       0;
+  WR3: SELF\action_resource.name = SELF\product_definition_formation.id;
+  WR4: SELF\action_resource.description = SELF\product_definition_formation.description;
+END_ENTITY;
+
+ENTITY product_definition_formation_with_specified_source
+  SUBTYPE OF (product_definition_formation);
+  make_or_buy : source;
+END_ENTITY;
+
+ENTITY product_definition_group_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_definition_element_relationship;
+  items                                : SET [1 : 1] OF product_definition_or_product_definition_relationship;
+END_ENTITY;
+
+ENTITY product_definition_kinematics
+  SUBTYPE OF (property_definition);
+  SELF\property_definition.definition : product_definition;
+INVERSE
+  representation_relation : kinematic_property_definition_representation FOR definition;
+UNIQUE
+  UR1: definition;
+END_ENTITY;
+
+ENTITY product_definition_occurrence
+  SUPERTYPE OF (product_definition_specified_occurrence ANDOR
+                product_definition_occurrence_reference_with_local_representation);
+  id          : identifier;
+  name        : OPTIONAL label;
+  description : OPTIONAL text;
+  definition  : OPTIONAL product_definition_or_reference_or_occurrence;
+  quantity    : OPTIONAL measure_with_unit;
+DERIVE
+  descendant_occurrences : SET [0 : ?] OF product_definition_specified_occurrence := get_descendant_occurrences(SELF);
+INVERSE
+  assembly_usages   : SET [0:?] OF assembly_component_usage FOR related_product_definition;
+  child_occurrences : SET [0:?] OF product_definition_specified_occurrence FOR occurrence_usage;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE' IN TYPEOF(SELF)) XOR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE' IN TYPEOF(definition)) OR
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_REFERENCE' IN
+         TYPEOF(definition)));
+  WR2: EXISTS(definition) OR
+       (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.DESIGN')) > 0);
+  WR3: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
+END_ENTITY;
+
+ENTITY product_definition_occurrence_reference
+  SUBTYPE OF (product_definition_reference);
+  product_occurrence_id : identifier;
+END_ENTITY;
+
+ENTITY product_definition_occurrence_reference_with_local_representation
+  SUBTYPE OF (product_definition_occurrence, generic_product_definition_reference);
+END_ENTITY;
+
+ENTITY product_definition_occurrence_relationship;
+  name             : label;
+  description      : OPTIONAL text;
+  occurrence       : product_definition;
+  occurrence_usage : assembly_component_usage;
+WHERE
+  WR1: occurrence_usage.relating_product_definition :<>: occurrence;
+  WR2: occurrence_usage.related_product_definition :<>: occurrence;
+  WR3: occurrence.formation :=: occurrence_usage.related_product_definition.formation;
+END_ENTITY;
+
+ENTITY product_definition_process
+  SUBTYPE OF (action);
+  identification : identifier;
+INVERSE
+  product_definitions : SET [1:?] OF process_product_association FOR process;
+END_ENTITY;
+
+ENTITY product_definition_reference
+  SUBTYPE OF (generic_product_definition_reference);
+  product_id                      : identifier;
+  product_definition_formation_id : identifier;
+  product_definition_id           : identifier;
+  id_owning_organization_name     : OPTIONAL label;
+END_ENTITY;
+
+ENTITY product_definition_reference_with_local_representation
+  SUBTYPE OF (generic_product_definition_reference, product_definition);
+END_ENTITY;
+
+ENTITY product_definition_relationship;
+  id                          : identifier;
+  name                        : label;
+  description                 : OPTIONAL text;
+  relating_product_definition : product_definition_or_reference;
+  related_product_definition  : product_definition_or_reference;
+END_ENTITY;
+
+ENTITY product_definition_relationship_kinematics
+  SUBTYPE OF (property_definition);
+  SELF\property_definition.definition : product_definition_relationship;
+UNIQUE
+  UR1: definition;
+END_ENTITY;
+
+ENTITY product_definition_relationship_relationship;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+  relating    : product_definition_relationship;
+  related     : product_definition_relationship;
+END_ENTITY;
+
+ENTITY product_definition_resource
+  SUBTYPE OF (action_resource, product_definition);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) >
+       0;
+  WR2: SELF\product_definition.frame_of_reference\application_context_element.name IN
+       ['part definition','part occurrence','physical occurrence'];
+  WR3: SELF\action_resource.name = SELF\product_definition.name;
+  WR4: SELF\action_resource.description = SELF\product_definition.description;
+END_ENTITY;
+
+ENTITY product_definition_shape
+  SUBTYPE OF (property_definition);
+UNIQUE
+  UR1: SELF\property_definition.definition;
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_PRODUCT_DEFINITION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_OBJECT'] *
+              TYPEOF(SELF\property_definition.definition)) >
+       0;
+END_ENTITY;
+
+ENTITY product_definition_specified_occurrence
+  SUBTYPE OF (product_definition_occurrence);
+  SELF\product_definition_occurrence.definition : product_definition_occurrence_or_reference;
+  occurrence_usage                              : product_definition_occurrence_or_reference;
+UNIQUE
+  UR1: occurrence_usage, id;
+WHERE
+  WR1: SIZEOF(assembly_usages) = 0;
+  WR2: acyclic_product_definition_specified_occurrence(SELF, SELF\product_definition_occurrence.definition);
+END_ENTITY;
+
+ENTITY product_definition_substitute;
+  description           : OPTIONAL text;
+  context_relationship  : product_definition_relationship;
+  substitute_definition : product_definition;
+DERIVE
+  name : label := get_name_value(SELF);
+WHERE
+  WR1: context_relationship.related_product_definition :<>: substitute_definition;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY product_definition_usage
+  SUPERTYPE OF (ONEOF(make_from_usage_option, assembly_component_usage))
+  SUBTYPE OF (product_definition_relationship);
+UNIQUE
+  UR1: SELF\product_definition_relationship.id, SELF\product_definition_relationship.relating_product_definition,
+       SELF\product_definition_relationship.related_product_definition;
+WHERE
+  WR1: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition],
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE');
+END_ENTITY;
+
+ENTITY product_definition_usage_relationship
+  SUBTYPE OF (product_definition_relationship_relationship);
+  SELF\product_definition_relationship_relationship.relating : product_definition_usage;
+  SELF\product_definition_relationship_relationship.related  : product_definition_usage;
+WHERE
+  WR1: relating.relating_product_definition :=: related.relating_product_definition;
+END_ENTITY;
+
+ENTITY product_definition_with_associated_documents
+  SUBTYPE OF (product_definition);
+  documentation_ids : SET [1 : ?] OF document;
+END_ENTITY;
+
+ENTITY product_design_to_individual
+  SUBTYPE OF (product_relationship);
+DERIVE
+  individual_product : product := SELF\product_relationship.related_product;
+  product_design     : product := SELF\product_relationship.relating_product;
+END_ENTITY;
+
+ENTITY product_design_version_to_individual
+  SUBTYPE OF (product_definition_formation_relationship);
+DERIVE
+  individual_product     : product_definition_formation := SELF\product_definition_formation_relationship.related_product_definition_formation;
+  product_design_version : product_definition_formation := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+END_ENTITY;
+
+ENTITY product_group
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY product_group_attribute_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_group_attributes;
+  attributes                           : SET [1 : 1] OF attribute_select;
+END_ENTITY;
+
+ENTITY product_group_attribute_set
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_group;
+  product_group_attributes             : SET [1 : 1] OF product_group_attributes;
+END_ENTITY;
+
+ENTITY product_group_attributes
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY product_group_context
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY product_group_membership
+  SUBTYPE OF (characterized_object, group_assignment);
+  member : product_select;
+END_ENTITY;
+
+ENTITY product_group_membership_rules
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_group;
+  product_group_rules                  : SET [1 : 1] OF product_group_rules;
+END_ENTITY;
+
+ENTITY product_group_purpose
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY product_group_relationship
+  SUBTYPE OF (group_relationship);
+END_ENTITY;
+
+ENTITY product_group_rule
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY product_group_rule_assignment
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : product_group_rules;
+  product_group_rules                  : SET [1 : ?] OF product_group_rule;
+END_ENTITY;
+
+ENTITY product_group_rules
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY product_identification
+  SUBTYPE OF (configuration_item, characterized_object);
+  SELF\configuration_item.item_concept : product_class;
+WHERE
+  WR1: SIZEOF(QUERY(cd
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.CONFIGURATION')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
+                       TYPEOF(cd.design)) AND
+                      (SIZEOF(QUERY(prpc
+                                    <* USEDIN(cd.design\product_definition_formation.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name IN ['part','raw material','tool'])) >
+                       0))) <=
+       1;
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURABLE_ITEM' IN TYPEOF(SELF)) XOR
+           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_SPECIFICATION' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY product_in_attachment_slot
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY product_material_composition_relationship
+  SUBTYPE OF (product_definition_relationship);
+  class                : label;
+  constituent_amount   : SET [1 : ?] OF characterized_product_composition_value;
+  composition_basis    : label;
+  determination_method : text;
+END_ENTITY;
+
+ENTITY product_planned_to_realized
+  SUBTYPE OF (product_definition_formation_relationship);
+DERIVE
+  planned_product  : product_definition_formation := SELF\product_definition_formation_relationship.relating_product_definition_formation;
+  realized_product : product_definition_formation := SELF\product_definition_formation_relationship.related_product_definition_formation;
+END_ENTITY;
+
+ENTITY product_process_plan
+  SUBTYPE OF (product_definition_process);
+WHERE
+  WR1: SIZEOF(QUERY(ar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION')
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] *
+                             TYPEOF(ar.relating_action)) <>
+                      1)) =
+       0;
+  WR2: SIZEOF(QUERY(ar
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION')
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PLAN',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_PROCESS_PLAN'] *
+                              TYPEOF(ar.related_action)) =
+                       1) OR
+                      ((ar.name = 'process operation occurrence') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_OPERATION' IN
+                        TYPEOF(ar.related_action.chosen_method))))) =
+       SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION'));
+  WR3: SIZEOF(QUERY(ppa
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCESS_PRODUCT_ASSOCIATION.PROCESS')
+                    | (ppa.name <> 'produced output') OR
+                      NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+                           TYPEOF(ppa.defined_product)))) =
+       0;
+END_ENTITY;
+
+ENTITY product_related_product_category
+  SUBTYPE OF (product_category);
+  products : SET [1 : ?] OF product;
+END_ENTITY;
+
+ENTITY product_relationship;
+  id               : identifier;
+  name             : label;
+  description      : OPTIONAL text;
+  relating_product : product;
+  related_product  : product;
+END_ENTITY;
+
+ENTITY product_resource
+  SUBTYPE OF (action_resource, product);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REQUIREMENT_FOR_ACTION_RESOURCE.RESOURCES')) >
+       0;
+  WR2: SIZEOF(QUERY(prpc
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                    | prpc.name = 'part')) <>
+       0;
+  WR3: SELF\action_resource.name = SELF\product.name;
+  WR4: SELF\action_resource.description = SELF\product.description;
+END_ENTITY;
+
+ENTITY product_specification
+  SUBTYPE OF (product_identification, configurable_item);
+END_ENTITY;
+
+ENTITY profile_floor
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['planar','complex','through'];
+  WR3: (NOT (SELF.description IN ['planar','complex']) OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(pdr
+                                              <* USEDIN(pd,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                TYPEOF(pdr.used_representation))) =
+                                 1))) =
+             0));
+  WR4: (NOT (SELF.description IN ['planar','complex'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 2))) =
+                            0))) =
+        0);
+  WR5: (NOT (SELF.description = 'through') OR
+            (SIZEOF(QUERY(pd
+                          <* USEDIN(SELF,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                          | NOT (SIZEOF(QUERY(pdr
+                                              <* USEDIN(pd,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                TYPEOF(pdr.used_representation))) =
+                                 0))) =
+             0));
+  WR6: (NOT (SELF.description IN ['planar','complex'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'radius'))) =
+                                                1))) =
+                            0))) =
+        0);
+  WR7: SIZEOF(QUERY(fcr
+                    <* QUERY(sar
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                             | (sar.description = 'profile floor usage') AND
+                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                TYPEOF(sar)))
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OUTSIDE_PROFILE' IN
+                        TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROFILE_FLOOR' IN
+                        TYPEOF(fcr.relating_shape_aspect))))) >=
+       1;
+  WR8: ((NOT (SELF.description IN ['planar','complex'])) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'shape profile floor orientation') AND
+                                                                   (it.description IN
+                                                                    ['shape profile start','shape profile end'])))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR9: (NOT (SELF.description = 'complex')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                            TYPEOF(pdr.used_representation)) AND
+                                           (pdr.used_representation.name = 'floor'))) =
+                            1))) =
+        1);
+  WR10: (NOT (SELF.description = 'planar')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (pdr.used_representation.name = 'floor'))) =
+                             1))) =
+         1);
+END_ENTITY;
+
+ENTITY projected_zone_definition
+  SUBTYPE OF (tolerance_zone_definition);
+  projection_end   : shape_aspect;
+  projected_length : length_measure_with_unit;
+WHERE
+  WR1: ('NUMBER' IN TYPEOF(projected_length\measure_with_unit.value_component)) AND
+       (projected_length\measure_with_unit.value_component > 0.0);
+  WR2: (derive_dimensional_exponents(projected_length\measure_with_unit.unit_component) =
+        dimensional_exponents(1, 0, 0, 0, 0, 0, 0));
+END_ENTITY;
+
+ENTITY projected_zone_definition_with_offset
+  SUBTYPE OF (projected_zone_definition);
+  offset : length_measure_with_unit;
+END_ENTITY;
+
+ENTITY projection_curve
+  SUBTYPE OF (annotation_curve_occurrence);
+END_ENTITY;
+
+ENTITY projection_directed_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(QUERY(p_1
+                    <* SELF\draughting_callout.contents
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN (TYPEOF(p_1)))) <=
+       2;
+  WR2: SIZEOF(SELF\draughting_callout.contents) >= 2;
+END_ENTITY;
+
+ENTITY promissory_usage_occurrence
+  SUBTYPE OF (assembly_component_usage);
+END_ENTITY;
+
+ENTITY property_definition
+  SUPERTYPE OF (ONEOF(product_definition_kinematics, product_definition_relationship_kinematics,
+                      product_definition_shape));
+  name        : label;
+  description : OPTIONAL text;
+  definition  : characterized_definition;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY property_definition_relationship;
+  name                         : label;
+  description                  : text;
+  relating_property_definition : property_definition;
+  related_property_definition  : property_definition;
+END_ENTITY;
+
+ENTITY property_definition_representation;
+  definition          : represented_definition;
+  used_representation : representation;
+DERIVE
+  description : text  := get_description_value(SELF);
+  name        : label := get_name_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY property_process
+  SUBTYPE OF (action);
+  identification : identifier;
+INVERSE
+  properties : SET [1:?] OF process_property_association FOR process;
+END_ENTITY;
+
+ENTITY protrusion
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'shape volume occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'volume shape usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (sdr.relating_shape_aspect.description =
+                                                              'volume shape'))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+END_ENTITY;
+
+ENTITY pyramid_volume
+  SUBTYPE OF (volume);
+  position : axis2_placement_3d;
+  xlength  : positive_length_measure;
+  ylength  : positive_length_measure;
+  height   : positive_length_measure;
+END_ENTITY;
+
+ENTITY qualified_representation_item
+  SUBTYPE OF (representation_item);
+  qualifiers : SET [1 : ?] OF value_qualifier;
+WHERE
+  WR1: SIZEOF(QUERY(temp
+                    <* qualifiers
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRECISION_QUALIFIER' IN TYPEOF(temp)) OR
+                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATHS_VALUE_PRECISION_QUALIFIER' IN
+                       TYPEOF(temp)))) <
+       2;
+END_ENTITY;
+
+ENTITY qualitative_uncertainty
+  SUBTYPE OF (uncertainty_qualifier);
+  uncertainty_value : text;
+END_ENTITY;
+
+ENTITY quantified_assembly_component_usage
+  SUBTYPE OF (assembly_component_usage);
+  quantity : measure_with_unit;
+WHERE
+  WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
+END_ENTITY;
+
+ENTITY quantifier_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (multiple_arity_generic_expression);
+  variables : LIST [1 : ?] OF UNIQUE generic_variable;
+WHERE
+  WR1: SIZEOF(QUERY(vrbl <* variables | NOT (vrbl IN SELF\multiple_arity_generic_expression.operands))) = 0;
+  WR2: SIZEOF(QUERY(vrbl
+                    <* variables
+                    | NOT ((schema_prefix + 'BOUND_VARIABLE_SEMANTICS') IN TYPEOF(vrbl.interpretation.semantics)))) =
+       0;
+END_ENTITY;
+
+ENTITY quasi_uniform_curve
+  SUBTYPE OF (b_spline_curve);
+END_ENTITY;
+
+ENTITY quasi_uniform_surface
+  SUBTYPE OF (b_spline_surface);
+END_ENTITY;
+
+ENTITY quasi_uniform_volume
+  SUBTYPE OF (b_spline_volume);
+END_ENTITY;
+
+ENTITY rack_and_pinion_pair
+  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
+  pinion_radius : length_measure;
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY rack_and_pinion_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : rack_and_pinion_pair;
+  actual_displacement             : length_measure;
+DERIVE
+  actual_rotation : plane_angle_measure := 0.0;
+END_ENTITY;
+
+ENTITY rack_and_pinion_pair_with_range
+  SUBTYPE OF (rack_and_pinion_pair);
+  lower_limit_rack_displacement : OPTIONAL length_measure;
+  upper_limit_rack_displacement : OPTIONAL length_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_rack_displacement) OR NOT EXISTS(upper_limit_rack_displacement)) XOR
+       (lower_limit_rack_displacement < upper_limit_rack_displacement);
+END_ENTITY;
+
+ENTITY radioactivity_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIOACTIVITY_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY radioactivity_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.becquerel);
+END_ENTITY;
+
+ENTITY radius_dimension
+  SUBTYPE OF (dimension_curve_directed_callout);
+WHERE
+  WR1: SIZEOF(QUERY(con
+                    <* SELF.contents
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_CURVE' IN TYPEOF(con))) <=
+       1;
+END_ENTITY;
+
+ENTITY radius_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF radial_geometry_constraint_element;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+END_ENTITY;
+
+ENTITY range_characteristic
+  SUBTYPE OF (representation, descriptive_representation_item);
+WHERE
+  WR1: NOT (SELF\representation.name IN
+            ['tolerance',
+             'minimum tolerance',
+             'maximum tolerance',
+             'nominal tolerance',
+             'plus minus tolerance',
+             'symmetrical tolerance',
+             'statistical tolerance']);
+END_ENTITY;
+
+ENTITY ratio_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY ratio_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY rational_b_spline_curve
+  SUBTYPE OF (b_spline_curve);
+  weights_data : LIST [2 : ?] OF REAL;
+DERIVE
+  weights : ARRAY [0 : upper_index_on_control_points] OF REAL := list_to_array(weights_data, 0,
+                                                                               upper_index_on_control_points);
+WHERE
+  WR1: SIZEOF(weights_data) = SIZEOF(SELF\b_spline_curve.control_points_list);
+  WR2: curve_weights_positive(SELF);
+END_ENTITY;
+
+ENTITY rational_b_spline_surface
+  SUBTYPE OF (b_spline_surface);
+  weights_data : LIST [2 : ?] OF LIST [2 : ?] OF REAL;
+DERIVE
+  weights : ARRAY [0 : u_upper] OF ARRAY [0 : v_upper] OF REAL := make_array_of_array(weights_data, 0, u_upper, 0,
+                                                                                      v_upper);
+WHERE
+  WR1: (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_surface.control_points_list)) AND
+       (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_surface.control_points_list[1]));
+  WR2: surface_weights_positive(SELF);
+END_ENTITY;
+
+ENTITY rational_b_spline_volume
+  SUBTYPE OF (b_spline_volume);
+  weights_data : LIST [2 : ?] OF LIST [2 : ?] OF LIST [2 : ?] OF REAL;
+DERIVE
+  weights : ARRAY [0 : u_upper] OF ARRAY [0 : v_upper] OF ARRAY [0 : w_upper] OF REAL := make_array_of_array_of_array(weights_data,
+                                                                                                                      0,
+                                                                                                                      u_upper,
+                                                                                                                      0,
+                                                                                                                      v_upper,
+                                                                                                                      0,
+                                                                                                                      w_upper);
+WHERE
+  WR1: (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_volume.control_points_list)) AND
+       (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1])) AND
+       (SIZEOF(weights_data[1][1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1][1]));
+  WR2: volume_weights_positive(SELF);
+END_ENTITY;
+
+ENTITY rational_locally_refined_spline_curve
+  SUBTYPE OF (locally_refined_spline_curve);
+  weights_data : LIST [2 : ?] OF REAL;
+WHERE
+  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_curve.control_points_list);
+  WR2: weights_positive(SELF.weights_data);
+END_ENTITY;
+
+ENTITY rational_locally_refined_spline_surface
+  SUBTYPE OF (locally_refined_spline_surface);
+  weights_data : LIST [4 : ?] OF REAL;
+WHERE
+  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_surface.control_points_list);
+  WR2: weights_positive(SELF.weights_data);
+END_ENTITY;
+
+ENTITY rational_locally_refined_spline_volume
+  SUBTYPE OF (locally_refined_spline_volume);
+  weights_data : LIST [8 : ?] OF REAL;
+WHERE
+  WR1: SIZEOF(weights_data) = SIZEOF(SELF\locally_refined_spline_volume.control_points_list);
+  WR2: weights_positive(SELF.weights_data);
+END_ENTITY;
+
+ENTITY rational_representation_item
+  SUBTYPE OF (representation_item, slash_expression);
+WHERE
+  WR1: SIZEOF(QUERY(operand
+                    <* SELF\binary_generic_expression.operands
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_LITERAL' IN TYPEOF(operand)))) =
+       0;
+END_ENTITY;
+
+ENTITY rationalize_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+DERIVE
+  fun : maths_function := SELF\unary_generic_expression.operand;
+WHERE
+  WR1: (space_dimension(fun.domain) = 1) AND (space_dimension(fun.range) = 1);
+  WR2: number_tuple_subspace_check(factor1(fun.range));
+  WR3: space_dimension(factor1(fun.range)) > 1;
+END_ENTITY;
+
+ENTITY real_defined_function
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (numeric_defined_function);
+END_ENTITY;
+
+ENTITY real_interval_from_min
+  SUBTYPE OF (maths_space, generic_literal);
+  min         : REAL;
+  min_closure : open_closed;
+END_ENTITY;
+
+ENTITY real_interval_to_max
+  SUBTYPE OF (maths_space, generic_literal);
+  max         : REAL;
+  max_closure : open_closed;
+END_ENTITY;
+
+ENTITY real_literal
+  SUBTYPE OF (literal_number);
+  SELF\literal_number.the_value : REAL;
+END_ENTITY;
+
+ENTITY real_numeric_variable
+  SUBTYPE OF (numeric_variable);
+END_ENTITY;
+
+ENTITY real_representation_item
+  SUBTYPE OF (representation_item, real_literal);
+END_ENTITY;
+
+ENTITY real_tuple_literal
+  SUBTYPE OF (generic_literal);
+  lit_value : LIST [1 : ?] OF REAL;
+END_ENTITY;
+
+ENTITY rectangular_area
+  SUBTYPE OF (primitive_2d);
+  position : axis2_placement_2d;
+  x        : positive_length_measure;
+  y        : positive_length_measure;
+END_ENTITY;
+
+ENTITY rectangular_array_placement_group_component
+  SUBTYPE OF (array_placement_group);
+END_ENTITY;
+
+ENTITY rectangular_closed_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                          TYPEOF(pdr.used_representation))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT ((SIZEOF(impl_rep.used_representation.items) >= 3) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 4)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR (srwp_i.name = 'length') OR
+                                                     (srwp_i.name = 'width') OR (srwp_i.name = 'corner radius'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'orientation'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'width'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'length'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'corner radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY rectangular_composite_surface
+  SUBTYPE OF (bounded_surface);
+  segments : LIST [1 : ?] OF LIST [1 : ?] OF surface_patch;
+DERIVE
+  n_u : INTEGER := SIZEOF(segments);
+  n_v : INTEGER := SIZEOF(segments[1]);
+WHERE
+  WR1: SIZEOF(QUERY(s <* segments | n_v <> SIZEOF(s))) = 0;
+  WR2: constraints_rectangular_composite_surface(SELF);
+END_ENTITY;
+
+ENTITY rectangular_composite_surface_transition_locator
+  SUBTYPE OF (founded_item);
+  basis_surface      : rectangular_composite_surface;
+  surface_parameter  : u_or_v_parameter;
+  u_transition_index : INTEGER;
+  v_transition_index : INTEGER;
+WHERE
+  WR1: SIZEOF(using_representations(SELF.basis_surface) * relating_shape_representations_of_extreme_values(SELF)) > 0;
+END_ENTITY;
+
+ENTITY rectangular_pattern
+  SUBTYPE OF (replicate_feature);
+WHERE
+  WR1: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                                                                    | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                              TYPEOF(sdr.related_shape_aspect)))) =
+                                              1)))) <=
+                             5)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'row layout direction')))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'column layout direction')))) =
+                             1)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 5)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                   TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                  (it.name = 'number of rows')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                   TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                  (it.name = 'number of columns')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR8: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'row spacing')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR9: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'column spacing')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR10: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'orientation')))) =
+                                                   1)))) =
+                              0)))) =
+         0);
+END_ENTITY;
+
+ENTITY rectangular_pyramid
+  SUBTYPE OF (geometric_representation_item);
+  position : axis2_placement_3d;
+  xlength  : positive_length_measure;
+  ylength  : positive_length_measure;
+  height   : positive_length_measure;
+END_ENTITY;
+
+ENTITY rectangular_trimmed_surface
+  SUBTYPE OF (bounded_surface);
+  basis_surface : surface;
+  u1            : parameter_value;
+  u2            : parameter_value;
+  v1            : parameter_value;
+  v2            : parameter_value;
+  usense        : BOOLEAN;
+  vsense        : BOOLEAN;
+WHERE
+  WR1: u1 <> u2;
+  WR2: v1 <> v2;
+  WR3: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(basis_surface)) AND
+        (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(basis_surface)))) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_REVOLUTION' IN TYPEOF(basis_surface)) OR
+       (usense = (u2 > u1));
+  WR4: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE' IN TYPEOF(basis_surface)) OR
+        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOROIDAL_SURFACE' IN TYPEOF(basis_surface))) OR
+       (vsense = (v2 > v1));
+END_ENTITY;
+
+ENTITY referenced_modified_datum
+  SUBTYPE OF (datum_reference);
+  modifier : limit_condition;
+END_ENTITY;
+
+ENTITY regular_table_function
+  SUBTYPE OF (linearized_table_function);
+  increments : LIST [1 : ?] OF INTEGER;
+WHERE
+  WR1: SIZEOF(increments) = SIZEOF(SELF\explicit_table_function.shape);
+  WR2: extremal_position_check(SELF);
+END_ENTITY;
+
+ENTITY reindexed_array_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  starting_indices                      : LIST [1 : ?] OF INTEGER;
+WHERE
+  WR1: function_is_array(SELF\unary_generic_expression.operand);
+  WR2: SIZEOF(starting_indices) = SIZEOF(shape_of_array(SELF\unary_generic_expression.operand));
+END_ENTITY;
+
+ENTITY reinforcement_orientation_basis
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : 1] OF basis_11_direction_member;
+END_ENTITY;
+
+ENTITY relative_event_occurrence
+  SUBTYPE OF (event_occurrence);
+  base_event : event_occurrence;
+  offset     : time_measure_with_unit;
+END_ENTITY;
+
+ENTITY removal_volume
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'shape volume occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'volume shape usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (sdr.relating_shape_aspect.description =
+                                                              'volume shape'))) =
+                                              1)))) =
+                             1)))) =
+        0);
+END_ENTITY;
+
+ENTITY rep_item_group
+  SUBTYPE OF (group, representation_item);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_LAYER_ASSIGNMENT.ASSIGNED_ITEMS')) >
+       0;
+  WR2: SIZEOF(QUERY(r
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS')
+                    | r.name = 'group representation')) >
+       0;
+  WR3: SIZEOF(QUERY(ga
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GROUP_ASSIGNMENT.ASSIGNED_GROUP')
+                    | ga.role.name <> 'group membership')) =
+       0;
+  WR4: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOPOLOGICAL_REPRESENTATION_ITEM',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM'] *
+              TYPEOF(SELF)) =
+       1;
+END_ENTITY;
+
+ENTITY repackaging_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_function;
+  input_repack                          : repackage_options;
+  output_repack                         : repackage_options;
+  selected_output                       : nonnegative_integer;
+WHERE
+  WR1: (input_repack <> ro_wrap_as_tuple) OR
+       ((space_dimension(operand.domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(operand.domain))));
+  WR2: (output_repack <> ro_unwrap_tuple) OR
+       ((space_dimension(operand.range) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(operand.range))));
+  WR3: selected_output <= space_dimension(repackage(operand.range, output_repack));
+END_ENTITY;
+
+ENTITY reparametrised_composite_curve_segment
+  SUBTYPE OF (composite_curve_segment);
+  param_length : parameter_value;
+WHERE
+  WR1: param_length > 0.0;
+END_ENTITY;
+
+ENTITY replicate_feature
+  SUPERTYPE OF (ONEOF(circular_pattern, rectangular_pattern, feature_pattern))
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR2: (SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                 TYPEOF(sar)))
+                     | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPLICATE_FEATURE',
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCED_FEATURE'] *
+                                TYPEOF(fcr.related_shape_aspect)) >=
+                         1) AND
+                        (fcr.name = 'pattern basis')))) =
+        1);
+  WR3: ((SIZEOF(QUERY(sar
+                      <* USEDIN(SELF,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                      | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                              TYPEOF(sar))))) +
+         SIZEOF(QUERY(sar
+                      <* USEDIN(SELF,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                      | (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                              TYPEOF(sar)))))) =
+        0);
+END_ENTITY;
+
+ENTITY repositioned_neutral_sketch
+  SUBTYPE OF (mapped_item, geometric_representation_item);
+DERIVE
+  map : representation_map := SELF\mapped_item.mapping_source;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION' IN
+       TYPEOF(map.mapped_representation);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN TYPEOF(map.mapping_origin);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN TYPEOF(SELF\mapped_item.mapping_target);
+END_ENTITY;
+
+ENTITY repositioned_tessellated_item
+  SUBTYPE OF (tessellated_item);
+  location : axis2_placement_3d;
+WHERE
+  WR1: NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_CURVE_SET',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_GEOMETRIC_SET',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_POINT_SET',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SURFACE_SET',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_WIRE'] *
+                   TYPEOF(SELF)) =
+            0);
+END_ENTITY;
+
+ENTITY representation
+  SUPERTYPE OF ((ONEOF(reinforcement_orientation_basis, ply_angle_representation)) ANDOR
+                (ONEOF(interpolated_configuration_representation, link_motion_representation_along_path)) ANDOR
+                (ONEOF(kinematic_link_representation, kinematic_topology_structure,
+                       kinematic_topology_directed_structure, kinematic_topology_network_structure,
+                       mechanism_representation, shape_representation)) ANDOR
+                (ONEOF(kinematic_topology_structure, kinematic_topology_directed_structure,
+                       kinematic_topology_network_structure)));
+  name             : label;
+  items            : SET [1 : ?] OF representation_item;
+  context_of_items : representation_context;
+DERIVE
+  id          : identifier := get_id_value(SELF);
+  description : text       := get_description_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+  WR2: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY representation_context;
+  context_identifier : identifier;
+  context_type       : text;
+INVERSE
+  representations_in_context : SET [1:?] OF representation FOR context_of_items;
+END_ENTITY;
+
+ENTITY representation_context_reference;
+  context_identifier : identifier;
+INVERSE
+  representations_in_context : SET [1:?] OF representation_reference FOR context_of_items;
+END_ENTITY;
+
+ENTITY representation_item
+  SUPERTYPE OF ((ONEOF(compound_representation_item, mapped_item,
+                       value_representation_item)) ANDOR
+                ((ONEOF(boolean_representation_item, date_representation_item, date_time_representation_item,
+                        integer_representation_item, logical_representation_item, rational_representation_item,
+                        real_representation_item))) ANDOR
+                (ONEOF(mapped_item, styled_item)));
+  name : label;
+WHERE
+  WR1: SIZEOF(using_representations(SELF)) > 0;
+END_ENTITY;
+
+ENTITY representation_item_relationship;
+  name                         : label;
+  description                  : OPTIONAL text;
+  relating_representation_item : representation_item;
+  related_representation_item  : representation_item;
+END_ENTITY;
+
+ENTITY representation_map;
+  mapping_origin        : representation_item;
+  mapped_representation : representation;
+INVERSE
+  map_usage : SET [1:?] OF mapped_item FOR mapping_source;
+WHERE
+  WR1: item_in_context(mapping_origin, mapped_representation\representation.context_of_items);
+END_ENTITY;
+
+ENTITY representation_proxy_item
+  SUBTYPE OF (representation_item);
+  item : representation_proxy_select;
+END_ENTITY;
+
+ENTITY representation_reference;
+  id               : identifier;
+  context_of_items : representation_context_reference;
+END_ENTITY;
+
+ENTITY representation_relationship;
+  name        : label;
+  description : OPTIONAL text;
+  rep_1       : representation_or_representation_reference;
+  rep_2       : representation_or_representation_reference;
+END_ENTITY;
+
+ENTITY representation_relationship_with_transformation
+  SUBTYPE OF (representation_relationship);
+  transformation_operator : transformation;
+WHERE
+  WR1: SELF\representation_relationship.rep_1.context_of_items :<>:
+       SELF\representation_relationship.rep_2.context_of_items;
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ITEM_DEFINED_TRANSFORMATION' IN
+            TYPEOF(transformation_operator)) OR
+           (item_in_context(transformation_operator\item_defined_transformation.transform_item_1,
+                            SELF\representation_relationship.rep_1.context_of_items) AND
+            item_in_context(transformation_operator\item_defined_transformation.transform_item_2,
+                            SELF\representation_relationship.rep_2.context_of_items));
+END_ENTITY;
+
+ENTITY representative_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: unique_in_product_definition(SELF) OR unique_in_shape_aspect(SELF);
+END_ENTITY;
+
+ENTITY requirement_assigned_object
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : requirement_assignment;
+  items                                : SET [1 : 1] OF requirement_assigned_item;
+END_ENTITY;
+
+ENTITY requirement_assignment
+  SUBTYPE OF (characterized_object, group);
+END_ENTITY;
+
+ENTITY requirement_for_action_resource
+  SUBTYPE OF (action_resource_requirement);
+  resources : SET [1 : ?] OF action_resource;
+END_ENTITY;
+
+ENTITY requirement_source
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY requirement_view_definition_relationship
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY resistance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RESISTANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY resistance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensions_for_si_unit(si_unit_name.ohm);
+END_ENTITY;
+
+ENTITY resource_property;
+  name        : label;
+  description : text;
+  resource    : characterized_resource_definition;
+END_ENTITY;
+
+ENTITY resource_property_representation;
+  name           : label;
+  description    : text;
+  property       : resource_property;
+  representation : representation;
+END_ENTITY;
+
+ENTITY resource_requirement_type;
+  name        : label;
+  description : text;
+END_ENTITY;
+
+ENTITY restriction_function
+  SUBTYPE OF (maths_function, unary_generic_expression);
+  SELF\unary_generic_expression.operand : maths_space;
+END_ENTITY;
+
+ENTITY resulting_path
+  SUBTYPE OF (link_motion_representation_along_path);
+  controlling_joints : SET [1 : ?] OF kinematic_joint;
+END_ENTITY;
+
+ENTITY retention
+  SUBTYPE OF (action);
+WHERE
+  WR1: SIZEOF(QUERY(aa
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_ASSIGNMENT.ASSIGNED_ACTION')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ACTION_ASSIGNMENT' IN TYPEOF(aa)) AND
+                      (aa.role.name = 'retention'))) >=
+       1;
+  WR2: (SIZEOF(QUERY(atia
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS')
+                     | (atia.role.name = 'minimum retention period'))) =
+        1) AND
+       (SIZEOF(QUERY(atia
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS')
+                     | (atia.role.name = 'maximum retention period'))) =
+        1) AND
+       (SIZEOF(QUERY(atia1
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS')
+                     | (atia1.role.name = 'minimum retention period') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_INTERVAL_WITH_BOUNDS' IN
+                        TYPEOF(atia1.assigned_time_interval)) AND
+                       (EXISTS(atia1.assigned_time_interval\time_interval_with_bounds.secondary_bound) OR
+                        EXISTS(atia1.assigned_time_interval\time_interval_with_bounds.duration)) AND
+                       (SIZEOF(QUERY(atia2
+                                     <* USEDIN(SELF,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_TIME_INTERVAL_ASSIGNMENT.ITEMS')
+                                     | (atia2.role.name = 'maximum retention period') AND
+                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_INTERVAL_WITH_BOUNDS' IN
+                                        TYPEOF(atia2.assigned_time_interval)) AND
+                                       (EXISTS(atia2.assigned_time_interval\time_interval_with_bounds.secondary_bound) OR
+                                        EXISTS(atia2.assigned_time_interval\time_interval_with_bounds.duration)) AND
+                                       (atia1.assigned_time_interval\time_interval_with_bounds.primary_bound :=:
+                                        atia2.assigned_time_interval\time_interval_with_bounds.primary_bound))) =
+                        1))) =
+        1);
+  WR3: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATING_ACTION')) +
+       SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_RELATIONSHIP.RELATED_ACTION')) =
+       0;
+END_ENTITY;
+
+ENTITY revolute_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY revolute_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : revolute_pair;
+  actual_rotation                 : plane_angle_measure;
+END_ENTITY;
+
+ENTITY revolute_pair_with_range
+  SUBTYPE OF (revolute_pair);
+  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR
+       (lower_limit_actual_rotation < upper_limit_actual_rotation);
+END_ENTITY;
+
+ENTITY revolved_area_solid
+  SUBTYPE OF (swept_area_solid);
+  axis  : axis1_placement;
+  angle : plane_angle_measure;
+DERIVE
+  axis_line : line := representation_item('') || geometric_representation_item() || curve() ||
+                      line(axis.location,
+                           representation_item('') || geometric_representation_item() || vector(axis.z, 1.0));
+END_ENTITY;
+
+ENTITY revolved_face_solid
+  SUBTYPE OF (swept_face_solid);
+  axis  : axis1_placement;
+  angle : plane_angle_measure;
+DERIVE
+  axis_line : line := representation_item('') || geometric_representation_item() || curve() ||
+                      line(axis.location,
+                           representation_item('') || geometric_representation_item() || vector(axis.z, 1.0));
+END_ENTITY;
+
+ENTITY revolved_face_solid_with_trim_conditions
+  SUBTYPE OF (revolved_face_solid);
+  first_trim_condition  : trim_condition_select;
+  second_trim_condition : trim_condition_select;
+WHERE
+  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(first_trim_condition)) OR
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(second_trim_condition)));
+  WR2: NOT ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+              TYPEOF(first_trim_condition)) AND
+             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+              TYPEOF(second_trim_condition))) AND
+            (first_trim_condition = second_trim_condition));
+END_ENTITY;
+
+ENTITY revolved_profile
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SELF\characterized_object.description IN ['groove','flat','round','open profile']);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                             0)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'removal direction'))) =
+       1;
+  WR5: ((NOT (SELF\characterized_object.description = 'open profile')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'outer edge shape occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE' IN
+                                                                TYPEOF(sdr.relating_shape_aspect)) AND
+                                                               (sdr.relating_shape_aspect.description =
+                                                                'outer edge shape')))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR6: (NOT (SELF\characterized_object.description = 'flat')) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'flat edge shape occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'profile usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINEAR_PROFILE' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.relating_shape_aspect.description =
+                                                               'flat edge shape')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR7: ((NOT (SELF\characterized_object.description = 'round')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'rounded edge shape occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN
+                                                                TYPEOF(sdr.relating_shape_aspect)) AND
+                                                               (sdr.relating_shape_aspect.description =
+                                                                'rounded edge shape')))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR8: ((NOT (SELF\characterized_object.description = 'groove')) OR
+        (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'sweep occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'profile usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] *
+                                                                       TYPEOF(sdr.relating_shape_aspect)) =
+                                                                1) AND
+                                                               (sdr.relating_shape_aspect.description = 'sweep')))) =
+                                               1)))) =
+                              1)))) =
+         0));
+  WR9: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+END_ENTITY;
+
+ENTITY rgc_with_dimension
+  SUBTYPE OF (radius_geometric_constraint);
+  radius_value : positive_length_measure;
+END_ENTITY;
+
+ENTITY rib_top
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                               TYPEOF(pd))
+                    | NOT (SIZEOF(QUERY(sa_occ
+                                        <* USEDIN(pds,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                        | (sa_occ.description = 'rib top condition occurrence') AND
+                                          (SIZEOF(QUERY(sdr
+                                                        <* QUERY(sar
+                                                                 <* USEDIN(sa_occ,
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                 | (sar.description = 'rib top usage') AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                    TYPEOF(sar)))
+                                                        | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP_FLOOR' IN
+                                                            TYPEOF(sdr.relating_shape_aspect)) AND
+                                                           ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP' IN
+                                                            TYPEOF(sdr.related_shape_aspect.of_shape.definition))))) =
+                                           1))) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'removal direction'))) =
+                           1))) =
+       1;
+  WR3: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+END_ENTITY;
+
+ENTITY rib_top_floor
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['planar','complex'];
+  WR3: SIZEOF(QUERY(fcr
+                    <* QUERY(sar
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                             | (sar.description = 'rib top usage') AND
+                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                TYPEOF(sar)))
+                    | ((fcr.related_shape_aspect.description = 'rib top condition occurrence') AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP' IN
+                        TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND
+                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIB_TOP_FLOOR' IN
+                        TYPEOF(fcr.relating_shape_aspect))))) >=
+       1;
+  WR4: (NOT (SELF.description = 'complex')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                            TYPEOF(pdr.used_representation)) AND
+                                           (pdr.used_representation.name = 'rib top face'))) =
+                            1))) =
+        0);
+  WR5: (NOT (SELF.description = 'planar')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                            TYPEOF(pdr.used_representation)) AND
+                                           (pdr.used_representation.name = 'rib top face'))) =
+                            1))) =
+        0);
+  WR6: (NOT (SELF.description = 'planar')) OR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd))
+                     | NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | (sa_occ.description = 'boundary occurrence') AND
+                                           (SIZEOF(QUERY(sdr
+                                                         <* QUERY(sar
+                                                                  <* USEDIN(sa_occ,
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                  | (sar.description = 'profile usage') AND
+                                                                    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                     TYPEOF(sar)))
+                                                         | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NGON_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_CLOSED_PROFILE',
+                                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_PATH_PROFILE'] *
+                                                                   TYPEOF(sdr.relating_shape_aspect)) =
+                                                            1) AND
+                                                           (sdr.relating_shape_aspect.description =
+                                                            'rib top floor boundary'))) =
+                                            1))) =
+                            1))) =
+        0);
+END_ENTITY;
+
+ENTITY right_angular_wedge
+  SUBTYPE OF (geometric_representation_item);
+  position : axis2_placement_3d;
+  x        : positive_length_measure;
+  y        : positive_length_measure;
+  z        : positive_length_measure;
+  ltx      : length_measure;
+WHERE
+  WR1: ((0.0 <= ltx) AND (ltx < x));
+END_ENTITY;
+
+ENTITY right_circular_cone
+  SUBTYPE OF (geometric_representation_item);
+  position   : axis1_placement;
+  height     : positive_length_measure;
+  radius     : length_measure;
+  semi_angle : plane_angle_measure;
+WHERE
+  WR1: radius >= 0.0;
+END_ENTITY;
+
+ENTITY right_circular_cylinder
+  SUBTYPE OF (geometric_representation_item);
+  position : axis1_placement;
+  height   : positive_length_measure;
+  radius   : positive_length_measure;
+END_ENTITY;
+
+ENTITY right_to_usage_association
+  SUBTYPE OF (action_method_relationship);
+  SELF\action_method_relationship.relating_method : information_usage_right;
+  SELF\action_method_relationship.related_method  : information_right;
+DERIVE
+  right_applied : information_right       := SELF\action_method_relationship.related_method;
+  right_usage   : information_usage_right := SELF\action_method_relationship.relating_method;
+END_ENTITY;
+
+ENTITY rigid_link_representation
+  SUBTYPE OF (kinematic_link_representation);
+END_ENTITY;
+
+ENTITY rigid_subsketch
+  SUBTYPE OF (subsketch);
+END_ENTITY;
+
+ENTITY role_association;
+  role           : object_role;
+  item_with_role : role_select;
+END_ENTITY;
+
+ENTITY rolling_curve_pair
+  SUBTYPE OF (planar_curve_pair);
+END_ENTITY;
+
+ENTITY rolling_curve_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : rolling_curve_pair;
+  actual_point_on_curve_1         : point_on_curve;
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_1 :=: actual_point_on_curve_1.basis_curve;
+END_ENTITY;
+
+ENTITY rolling_surface_pair
+  SUBTYPE OF (surface_pair);
+END_ENTITY;
+
+ENTITY rolling_surface_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : rolling_surface_pair;
+  actual_point_on_surface         : point_on_surface;
+  actual_rotation                 : plane_angle_measure;
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\surface_pair.surface_1 :=: actual_point_on_surface.basis_surface;
+END_ENTITY;
+
+ENTITY rotation_about_direction
+  SUBTYPE OF (geometric_representation_item);
+  direction_of_axis : direction;
+  rotation_angle    : plane_angle_measure;
+WHERE
+  WR1: SIZEOF(direction_of_axis.direction_ratios) = 3;
+END_ENTITY;
+
+ENTITY round_hole
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'diameter occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'profile usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_CLOSED_PROFILE' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.name = 'diameter')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'hole depth occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description =
+                                                                        'path feature component usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.name = 'hole depth') AND
+                                                              (sdr.relating_shape_aspect.description = 'linear')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'bottom condition occurrence') AND
+                                             (SIZEOF(QUERY(fcr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'hole bottom usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HOLE_BOTTOM' IN
+                                                               TYPEOF(fcr.relating_shape_aspect)) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN
+                                                               TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR4: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'change in diameter occurrence') AND
+                                             (SIZEOF(QUERY(fcr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'taper usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAPER' IN
+                                                               TYPEOF(fcr.relating_shape_aspect)) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUND_HOLE' IN
+                                                               TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) =
+                                              1)))) <=
+                             1)))) =
+        0);
+  WR5: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_ROUND_HOLE' IN TYPEOF(SELF)) XOR
+       (SIZEOF(QUERY(pdr
+                     <* get_property_definition_representations(SELF)
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                        TYPEOF(pdr.used_representation)))) =
+        1);
+END_ENTITY;
+
+ENTITY rounded_end
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'partial circular boundary occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'profile usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE' IN
+                                                               TYPEOF(sdr.relating_shape_aspect))))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'course of travel occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description =
+                                                                        'path feature component usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.relating_shape_aspect.description = 'linear')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+END_ENTITY;
+
+ENTITY rounded_u_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | (NOT (SIZEOF(impl_rep.used_representation.items) >= 1) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 2)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR (srwp_i.name = 'depth'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'width')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'profile limit'))) <=
+                           1))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'depth'))) <=
+                                               1))) =
+                           0))) =
+       0;
+END_ENTITY;
+
+ENTITY roundness_tolerance
+  SUBTYPE OF (geometric_tolerance);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY row_representation_item
+  SUBTYPE OF (compound_representation_item);
+  SELF\compound_representation_item.item_element : list_representation_item;
+END_ENTITY;
+
+ENTITY row_value
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY row_variable
+  SUBTYPE OF (abstract_variable);
+END_ENTITY;
+
+ENTITY rule_action
+  SUBTYPE OF (action);
+END_ENTITY;
+
+ENTITY rule_condition
+  SUBTYPE OF (atomic_formula);
+END_ENTITY;
+
+ENTITY rule_definition
+  SUBTYPE OF (rule_software_definition);
+END_ENTITY;
+
+ENTITY rule_set
+  SUBTYPE OF (rule_software_definition);
+END_ENTITY;
+
+ENTITY rule_set_group
+  SUBTYPE OF (rule_software_definition);
+END_ENTITY;
+
+ENTITY rule_software_definition
+  SUBTYPE OF (product_definition);
+END_ENTITY;
+
+ENTITY rule_superseded_assignment
+  SUBTYPE OF (action_assignment);
+  items : SET [1 : ?] OF rule_superseded_item;
+END_ENTITY;
+
+ENTITY rule_supersedence
+  SUBTYPE OF (rule_action);
+END_ENTITY;
+
+ENTITY ruled_surface_swept_area_solid
+  SUBTYPE OF (surface_curve_swept_area_solid);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(SELF.reference_surface)) AND
+       (SELF.reference_surface\b_spline_surface.u_degree = 1);
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF.directrix)) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN
+         TYPEOF(SELF.directrix\surface_curve.curve_3d)) AND
+        (SELF.directrix\surface_curve.curve_3d\b_spline_curve.degree =
+         SELF.reference_surface\b_spline_surface.v_degree));
+END_ENTITY;
+
+ENTITY runout_zone_definition
+  SUBTYPE OF (tolerance_zone_definition);
+  orientation : runout_zone_orientation;
+END_ENTITY;
+
+ENTITY runout_zone_orientation;
+  angle : plane_angle_measure_with_unit;
+END_ENTITY;
+
+ENTITY runout_zone_orientation_reference_direction
+  SUBTYPE OF (runout_zone_orientation);
+  orientation_defining_relationship : shape_aspect_relationship;
+END_ENTITY;
+
+ENTITY same_as_external_item_assignment
+  SUBTYPE OF (external_identification_assignment);
+  items : SET [0 : ?] OF same_as_item;
+END_ENTITY;
+
+ENTITY satisfied_requirement
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : satisfies_requirement;
+  items                                : SET [1 : 1] OF product_definition;
+END_ENTITY;
+
+ENTITY satisfies_requirement
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY satisfying_item
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : satisfies_requirement;
+  items                                : SET [1 : 1] OF requirement_satisfaction_item;
+END_ENTITY;
+
+ENTITY scalar_variable
+  SUBTYPE OF (abstract_variable);
+END_ENTITY;
+
+ENTITY scan_3d_model
+  SUBTYPE OF (scanned_data_item);
+  scanner_info   : SET [1 : ?] OF scanner_property;
+  scanned_points : SET [1 : ?] OF scanned_data_item;
+WHERE
+  WR1: SIZEOF(QUERY(tmp
+                    <* scanned_points
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SCAN_3D_MODEL' IN TYPEOF(tmp))) =
+       0;
+END_ENTITY;
+
+ENTITY scan_data_shape_representation
+  SUBTYPE OF (shape_representation);
+  SELF\representation.items : SET [1 : ?] OF scanned_data_item;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN
+       TYPEOF(SELF\representation.context_of_items);
+END_ENTITY;
+
+ENTITY scanned_data_item
+  SUPERTYPE OF (ONEOF(point_cloud_dataset, point_cloud_superdataset, triangulated_point_cloud_dataset, scan_3d_model))
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(using_rep
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SCAN_DATA_SHAPE_REPRESENTATION' IN
+                           TYPEOF(using_rep)))) =
+       0;
+END_ENTITY;
+
+ENTITY scanner_basic_properties
+  SUBTYPE OF (scanner_property);
+  scanner_identification : label;
+  scanner_location       : axis2_placement_3d;
+  scanner_uncertainty    : OPTIONAL positive_length_measure;
+END_ENTITY;
+
+ENTITY scanner_property
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (representation_item);
+END_ENTITY;
+
+ENTITY screw_pair
+  SUBTYPE OF (low_order_kinematic_pair_with_motion_coupling);
+  pitch : length_measure;
+WHERE
+  WR1: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY screw_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : screw_pair;
+  actual_rotation                 : plane_angle_measure;
+DERIVE
+  actual_translation : length_measure := SELF\pair_value.applies_to_pair\screw_pair.pitch *
+                                         plane_angle_for_pair_in_radian(SELF\pair_value.applies_to_pair,
+                                                                        actual_rotation) /
+                                         (2 * PI);
+END_ENTITY;
+
+ENTITY screw_pair_with_range
+  SUBTYPE OF (screw_pair);
+  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR
+       (lower_limit_actual_rotation < upper_limit_actual_rotation);
+END_ENTITY;
+
+ENTITY sculptured_solid
+  SUBTYPE OF (modified_solid);
+  sculpturing_element : generalized_surface_select;
+  positive_side       : BOOLEAN;
+END_ENTITY;
+
+ENTITY sdgc_with_dimension
+  SUBTYPE OF (surface_distance_geometric_constraint);
+  distance_value : non_negative_length_measure;
+END_ENTITY;
+
+ENTITY seam_curve
+  SUBTYPE OF (surface_curve);
+WHERE
+  WR1: SIZEOF(SELF\surface_curve.associated_geometry) = 2;
+  WR2: associated_surface(SELF\surface_curve.associated_geometry[1]) =
+       associated_surface(SELF\surface_curve.associated_geometry[2]);
+  WR3: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[1]);
+  WR4: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[2]);
+END_ENTITY;
+
+ENTITY seam_edge
+  SUBTYPE OF (oriented_edge);
+  pcurve_reference : pcurve;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN TYPEOF(edge_element)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SEAM_CURVE' IN TYPEOF(edge_element\edge_curve.edge_geometry));
+  WR2: pcurve_reference IN edge_element\edge_curve.edge_geometry\surface_curve.associated_geometry;
+END_ENTITY;
+
+ENTITY security_classification;
+  name           : label;
+  purpose        : text;
+  security_level : security_classification_level;
+END_ENTITY;
+
+ENTITY security_classification_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_security_classification : security_classification;
+DERIVE
+  role : object_role := get_role(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
+END_ENTITY;
+
+ENTITY security_classification_level;
+  name : label;
+END_ENTITY;
+
+ENTITY selector_function
+  SUBTYPE OF (maths_function, generic_literal);
+  selector         : input_selector;
+  source_of_domain : maths_space_or_function;
+WHERE
+  WR1: no_cyclic_domain_reference(source_of_domain, [SELF]);
+  WR2: expression_is_constant(domain_from(source_of_domain));
+END_ENTITY;
+
+ENTITY self_intersecting_curve
+  SUBTYPE OF (self_intersecting_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  arc_length_separation_factor                               : REAL;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY self_intersecting_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(self_intersecting_curve, self_intersecting_surface))
+  SUBTYPE OF (inapt_geometry);
+END_ENTITY;
+
+ENTITY self_intersecting_loop
+  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  arc_length_distance_factor                                 : REAL;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY self_intersecting_shell
+  SUBTYPE OF (topology_related_to_self_intersecting_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  geodesic_separation_factor                                 : REAL;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_FACE_SURFACE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY self_intersecting_surface
+  SUBTYPE OF (self_intersecting_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+  geodesic_separation_factor                                 : REAL;
+  interference_tolerance                                     : length_measure;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE',
+                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY serial_numbered_effectivity
+  SUBTYPE OF (effectivity);
+  effectivity_start_id : identifier;
+  effectivity_end_id   : OPTIONAL identifier;
+END_ENTITY;
+
+ENTITY series_composed_function
+  SUBTYPE OF (maths_function, multiple_arity_generic_expression);
+  SELF\multiple_arity_generic_expression.operands : LIST [2 : ?] OF maths_function;
+WHERE
+  WR1: composable_sequence(SELF\multiple_arity_generic_expression.operands);
+END_ENTITY;
+
+ENTITY shape_aspect
+  SUPERTYPE OF ((ONEOF(shape_aspect_occurrence, component_path_shape_aspect) ANDOR constituent_shape_aspect) ANDOR
+                (ONEOF(harness_node, harness_segment)) ANDOR
+                (ONEOF(contacting_feature, datum, datum_feature, datum_target, datum_system,
+                       general_datum_reference)) ANDOR
+                (ONEOF(assembly_shape_constraint, assembly_shape_joint, connectivity_definition, contact_feature,
+                       transport_feature)));
+  name                 : label;
+  description          : OPTIONAL text;
+  of_shape             : product_definition_shape;
+  product_definitional : LOGICAL;
+DERIVE
+  id : identifier := get_id_value(SELF);
+UNIQUE
+  UR1: id, of_shape;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY shape_aspect_associativity
+  SUBTYPE OF (shape_aspect_relationship);
+WHERE
+  WR1: SELF.relating_shape_aspect.product_definitional;
+  WR2: NOT (SELF.related_shape_aspect.product_definitional);
+END_ENTITY;
+
+ENTITY shape_aspect_deriving_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+  SELF\shape_aspect_relationship.relating_shape_aspect : derived_shape_aspect;
+END_ENTITY;
+
+ENTITY shape_aspect_occurrence
+  SUBTYPE OF (shape_aspect);
+  definition : shape_aspect_or_characterized_object;
+WHERE
+  WR1: acyclic_shape_aspect_occurrence(SELF, definition);
+END_ENTITY;
+
+ENTITY shape_aspect_relationship
+  SUPERTYPE OF (ONEOF(assembly_shape_joint_item_relationship, assembly_shape_constraint_item_relationship,
+                      connectivity_definition_item_relationship, shape_feature_fit_relationship));
+  name                  : label;
+  description           : OPTIONAL text;
+  relating_shape_aspect : shape_aspect;
+  related_shape_aspect  : shape_aspect;
+DERIVE
+  id : identifier := get_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+END_ENTITY;
+
+ENTITY shape_aspect_relationship_representation_association;
+  represented_shape_aspect_relationship    : shape_aspect_relationship;
+  representing_representation_relationship : representation_relationship;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+        TYPEOF(representing_representation_relationship\representation_relationship.rep_1)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+        TYPEOF(representing_representation_relationship\representation_relationship.rep_2));
+  WR2: (represented_shape_aspect_relationship.relating_shape_aspect IN
+        using_shape_aspect_of_shape_representation(representing_representation_relationship.rep_1)) AND
+       (represented_shape_aspect_relationship.related_shape_aspect IN
+        using_shape_aspect_of_shape_representation(representing_representation_relationship.rep_2));
+  WR3: ((find_representative_shape_representation_of_product_definition(using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect)).context_of_items) :=:
+        (find_representative_shape_representation_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect).context_of_items)) AND
+       ((find_representative_shape_representation_of_product_definition(using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect)).context_of_items) :=:
+        (find_representative_shape_representation_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect).context_of_items));
+  WR4: using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect) :<>:
+       using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect);
+  WR5: find_assembly_root([using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.relating_shape_aspect)]) :=:
+       find_assembly_root([using_product_definition_of_shape_aspect(represented_shape_aspect_relationship.related_shape_aspect)]);
+END_ENTITY;
+
+ENTITY shape_criteria_representation_with_accuracy
+  SUBTYPE OF (shape_data_quality_criteria_representation);
+  required_general_accuracy : SET [1 : ?] OF shape_measurement_accuracy;
+END_ENTITY;
+
+ENTITY shape_data_quality_assessment_by_logical_test
+  SUBTYPE OF (data_quality_assessment_specification);
+END_ENTITY;
+
+ENTITY shape_data_quality_assessment_by_numerical_test
+  SUBTYPE OF (data_quality_assessment_specification);
+  threshold : shape_data_quality_value_limit_type_select;
+END_ENTITY;
+
+ENTITY shape_data_quality_criteria_representation
+  SUBTYPE OF (data_quality_criteria_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_CRITERION' IN TYPEOF(q))) >
+       0;
+END_ENTITY;
+
+ENTITY shape_data_quality_criterion
+  SUPERTYPE OF (ONEOF(erroneous_data, inapt_data))
+  SUBTYPE OF (data_quality_criterion, data_quality_measurement_requirement);
+  assessment_specification : shape_data_quality_assessment_specification_select;
+WHERE
+  WR1: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_ASSESSMENT_ASSOCIATION.CRITERION')) =
+       0;
+  WR2: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATED_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+  WR3: SIZEOF(QUERY(i1
+                    <* bag_to_set(USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM_RELATIONSHIP.RELATING_REPRESENTATION_ITEM'))
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_CRITERION_MEASUREMENT_ASSOCIATION' IN
+                      TYPEOF(i1))) =
+       0;
+END_ENTITY;
+
+ENTITY shape_data_quality_criterion_and_accuracy_association;
+  required_specific_accuracy   : shape_measurement_accuracy;
+  shape_data_quality_criterion : shape_data_quality_criterion;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspected_shape_and_result_relationship
+  SUBTYPE OF (shape_representation_relationship);
+  SELF\representation_relationship.rep_1 : shape_representation;
+  SELF\representation_relationship.rep_2 : shape_data_quality_inspection_result_representation;
+WHERE
+  WR1: SIZEOF(using_product_definition_of_shape_representation(SELF.rep_1) *
+              bag_to_set(inspected_product_definition(SELF.rep_2))) >
+       0;
+  WR2: SELF.rep_1\representation.context_of_items :=: SELF.rep_2\representation.context_of_items;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspection_criterion_report
+  SUBTYPE OF (data_quality_inspection_criterion_report);
+  representative_measured_value : measured_value_select;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspection_instance_report
+  SUBTYPE OF (data_quality_inspection_instance_report);
+  SELF\data_quality_inspection_instance_report.inspected_instances : LIST [1 : ?] OF shape_data_quality_inspection_instance_report_item;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspection_instance_report_item
+  SUBTYPE OF (data_quality_inspection_instance_report_item);
+  SELF\data_quality_inspection_instance_report_item.inspected_elements : SET [1 : ?] OF inspected_shape_element_select;
+  measured_value                                                       : measured_value_select;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspection_result
+  SUBTYPE OF (data_quality_inspection_result);
+  SELF\data_quality_inspection_result.criterion_inspected : shape_data_quality_criterion;
+END_ENTITY;
+
+ENTITY shape_data_quality_inspection_result_representation
+  SUBTYPE OF (data_quality_inspection_result_representation);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN
+                      TYPEOF(q))) >
+       0;
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_CONTEXT' IN
+       TYPEOF(SELF\representation.context_of_items);
+  WR3: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTED_SHAPE_AND_RESULT_RELATIONSHIP.REP_2')) >
+       0;
+END_ENTITY;
+
+ENTITY shape_data_quality_lower_value_limit
+  SUBTYPE OF (shape_data_quality_value_limit);
+WHERE
+  WR1: SELF\qualified_representation_item.qualifiers[1].name = 'minimum';
+END_ENTITY;
+
+ENTITY shape_data_quality_upper_value_limit
+  SUBTYPE OF (shape_data_quality_value_limit);
+WHERE
+  WR1: SELF\qualified_representation_item.qualifiers[1].name = 'maximum';
+END_ENTITY;
+
+ENTITY shape_data_quality_value_limit
+  ABSTRACT SUPERTYPE OF (ONEOF(shape_data_quality_upper_value_limit, shape_data_quality_lower_value_limit))
+  SUBTYPE OF (measure_representation_item, qualified_representation_item);
+END_ENTITY;
+
+ENTITY shape_data_quality_value_range
+  SUBTYPE OF (compound_representation_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SET_REPRESENTATION_ITEM' IN
+        TYPEOF(SELF\compound_representation_item.item_element)) AND
+       ((SIZEOF(SELF\compound_representation_item.item_element) = 2) AND
+        ((SIZEOF(QUERY(i1
+                       <* SELF\compound_representation_item.item_element
+                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                          TYPEOF(i1)))) =
+          2) OR
+         (SIZEOF(QUERY(i2
+                       <* SELF\compound_representation_item.item_element
+                       | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+                          TYPEOF(i2)))) =
+          2)));
+  WR2: (SIZEOF(QUERY(i <* SELF\compound_representation_item.item_element | (i.name = 'upper limit'))) = 1) AND
+       (SIZEOF(QUERY(i <* SELF\compound_representation_item.item_element | (i.name = 'lower limit'))) = 1);
+  WR3: (SIZEOF(QUERY(i1
+                     <* SELF\compound_representation_item.item_element
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                        TYPEOF(i1)) AND
+                       (SIZEOF(QUERY(i2
+                                     <* SELF\compound_representation_item.item_element
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                        TYPEOF(i2)) AND
+                                       (i1 :<>: i2) AND
+                                       (i1\measure_with_unit.unit_component :=:
+                                        i2\measure_with_unit.unit_component))) =
+                        1))) =
+        2) OR
+       (SIZEOF(QUERY(i1
+                     <* SELF\compound_representation_item.item_element
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN TYPEOF(i1)) AND
+                       (SIZEOF(QUERY(i2
+                                     <* SELF\compound_representation_item.item_element
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+                                        TYPEOF(i2)) AND
+                                       (i1 :<>: i2) AND
+                                       (TYPEOF(i1\value_representation_item.value_component) =
+                                        TYPEOF(i2\value_representation_item.value_component)))) =
+                        1))) =
+        2);
+END_ENTITY;
+
+ENTITY shape_defining_relationship
+  SUBTYPE OF (shape_aspect_relationship);
+END_ENTITY;
+
+ENTITY shape_definition_representation
+  SUBTYPE OF (property_definition_representation);
+  SELF\property_definition_representation.definition          : property_definition;
+  SELF\property_definition_representation.used_representation : shape_representation;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(definition)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION' IN
+        TYPEOF(definition\property_definition.definition));
+END_ENTITY;
+
+ENTITY shape_dimension_representation
+  SUBTYPE OF (shape_representation);
+  SELF\representation.items : SET [1 : ?] OF shape_dimension_representation_item;
+END_ENTITY;
+
+ENTITY shape_feature_definition
+  SUBTYPE OF (feature_definition);
+END_ENTITY;
+
+ENTITY shape_feature_definition_element_relationship
+  SUBTYPE OF (shape_aspect_relationship, characterized_object);
+DERIVE
+  SELF\characterized_object.name        : label := SELF\shape_aspect_relationship.name;
+  SELF\characterized_object.description : text  := SELF\shape_aspect_relationship.description;
+END_ENTITY;
+
+ENTITY shape_feature_definition_fit_relationship
+  SUBTYPE OF (shape_feature_definition_relationship);
+END_ENTITY;
+
+ENTITY shape_feature_definition_relationship
+  SUBTYPE OF (characterized_object_relationship, characterized_object);
+  SELF\characterized_object_relationship.relating_object : shape_feature_definition;
+  SELF\characterized_object_relationship.related_object  : shape_feature_definition;
+DERIVE
+  SELF\characterized_object.name        : label := SELF\characterized_object_relationship.name;
+  SELF\characterized_object.description : text  := SELF\characterized_object_relationship.description;
+END_ENTITY;
+
+ENTITY shape_feature_fit_relationship
+  SUBTYPE OF (shape_aspect_relationship, characterized_object);
+DERIVE
+  SELF\characterized_object.name        : label := SELF\shape_aspect_relationship.name;
+  SELF\characterized_object.description : text  := SELF\shape_aspect_relationship.description;
+END_ENTITY;
+
+ENTITY shape_inspection_result_accuracy_association;
+  applied_specific_accuracy : shape_measurement_accuracy;
+  shape_data_quality_result : shape_data_quality_inspection_result;
+END_ENTITY;
+
+ENTITY shape_inspection_result_representation_with_accuracy
+  SUBTYPE OF (shape_data_quality_inspection_result_representation);
+  applied_general_accuracy : SET [1 : ?] OF shape_measurement_accuracy;
+END_ENTITY;
+
+ENTITY shape_measurement_accuracy;
+  description : text;
+  range       : shape_data_quality_value_limit_type_select;
+END_ENTITY;
+
+ENTITY shape_representation
+  SUBTYPE OF (representation);
+END_ENTITY;
+
+ENTITY shape_representation_reference
+  SUBTYPE OF (representation_reference);
+END_ENTITY;
+
+ENTITY shape_representation_relationship
+  SUBTYPE OF (representation_relationship);
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_REFERENCE'] *
+              (TYPEOF(SELF\representation_relationship.rep_1) + TYPEOF(SELF\representation_relationship.rep_2))) >=
+       1;
+END_ENTITY;
+
+ENTITY shape_representation_with_parameters
+  SUBTYPE OF (shape_representation);
+  SELF\representation.items : SET [1 : ?] OF shape_representation_with_parameters_items;
+END_ENTITY;
+
+ENTITY shape_summary_request_with_representative_value
+  SUBTYPE OF (summary_report_request);
+END_ENTITY;
+
+ENTITY shell_based_surface_model
+  SUBTYPE OF (geometric_representation_item);
+  sbsm_boundary : SET [1 : ?] OF shell;
+WHERE
+  WR1: constraints_geometry_shell_based_surface_model(SELF);
+END_ENTITY;
+
+ENTITY shell_based_wireframe_model
+  SUBTYPE OF (geometric_representation_item);
+  sbwm_boundary : SET [1 : ?] OF shell;
+WHERE
+  WR1: constraints_geometry_shell_based_wireframe_model(SELF);
+END_ENTITY;
+
+ENTITY shell_based_wireframe_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D'] *
+                                  TYPEOF(it)) =
+                           1))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM'] *
+                              TYPEOF(it)) =
+                       1))) >=
+       1;
+  WR3: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(eloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT (SIZEOF(QUERY(el
+                                                                                <* eloop\path.edge_list
+                                                                                | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE' IN
+                                                                                       TYPEOF(el.edge_element)))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(eloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT (SIZEOF(QUERY(pline_el
+                                                                                <* QUERY(el
+                                                                                         <* eloop\path.edge_list
+                                                                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                                                                                            TYPEOF(el.edge_element\edge_curve.edge_geometry)))
+                                                                                | NOT (SIZEOF(pline_el.edge_element\edge_curve.edge_geometry\polyline.points) >
+                                                                                       2))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR5: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(eloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT (SIZEOF(QUERY(el
+                                                                                <* eloop\path.edge_list
+                                                                                | NOT valid_wireframe_edge_curve(el.edge_element\edge_curve.edge_geometry))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(eloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT (SIZEOF(QUERY(el
+                                                                                <* eloop\path.edge_list
+                                                                                | NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                        TYPEOF(el.edge_element.edge_start)) AND
+                                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                                        TYPEOF(el.edge_element.edge_end))))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(eloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT (SIZEOF(QUERY(el
+                                                                                <* eloop\path.edge_list
+                                                                                | NOT (valid_wireframe_vertex_point(el.edge_element.edge_start\vertex_point.vertex_geometry) AND
+                                                                                       valid_wireframe_vertex_point(el.edge_element.edge_end\vertex_point.vertex_geometry)))) =
+                                                                   0))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(vloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                                   TYPEOF(vloop\vertex_loop.loop_vertex)))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(sbwm
+                    <* QUERY(it
+                             <* SELF.items
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                TYPEOF(it)))
+                    | NOT (SIZEOF(QUERY(ws
+                                        <* QUERY(sb
+                                                 <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN
+                                                    TYPEOF(sb)))
+                                        | NOT (SIZEOF(QUERY(vloop
+                                                            <* QUERY(wsb
+                                                                     <* ws\wire_shell.wire_shell_extent
+                                                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_LOOP' IN
+                                                                        TYPEOF(wsb)))
+                                                            | NOT valid_wireframe_vertex_point(vloop\vertex_loop.loop_vertex\vertex_point.vertex_geometry))) =
+                                               0))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(sbwm
+                     <* QUERY(it
+                              <* SELF.items
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                 TYPEOF(it)))
+                     | NOT (SIZEOF(QUERY(vs
+                                         <* QUERY(sb
+                                                  <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN
+                                                     TYPEOF(sb)))
+                                         | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN
+                                                TYPEOF(vs\vertex_shell.vertex_shell_extent.loop_vertex)))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(sbwm
+                     <* QUERY(it
+                              <* SELF.items
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN
+                                 TYPEOF(it)))
+                     | NOT (SIZEOF(QUERY(vs
+                                         <* QUERY(sb
+                                                  <* sbwm\shell_based_wireframe_model.sbwm_boundary
+                                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN
+                                                     TYPEOF(sb)))
+                                         | NOT valid_wireframe_vertex_point(vs\vertex_shell.vertex_shell_extent.loop_vertex\vertex_point.vertex_geometry))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(mi
+                     <* QUERY(it
+                              <* SELF.items
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION' IN
+                            TYPEOF(mi\mapped_item.mapping_source.mapped_representation)))) =
+        0;
+  WR13: SELF.context_of_items\geometric_representation_context.coordinate_space_dimension = 3;
+END_ENTITY;
+
+ENTITY shelled_solid
+  SUPERTYPE OF (ONEOF(double_offset_shelled_solid, complex_shelled_solid))
+  SUBTYPE OF (modified_solid);
+  deleted_face_set : SET [1 : ?] OF face_surface;
+  thickness        : length_measure;
+WHERE
+  WR1: thickness <> 0;
+END_ENTITY;
+
+ENTITY short_length_curve
+  SUBTYPE OF (nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY short_length_curve_segment
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE_SEGMENT']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY short_length_edge
+  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_CURVE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY si_absorbed_dose_unit
+  SUBTYPE OF (absorbed_dose_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.gray;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_capacitance_unit
+  SUBTYPE OF (capacitance_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.farad;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_conductance_unit
+  SUBTYPE OF (conductance_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.siemens;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_dose_equivalent_unit
+  SUBTYPE OF (dose_equivalent_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.sievert;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_electric_charge_unit
+  SUBTYPE OF (electric_charge_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.coulomb;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_electric_potential_unit
+  SUBTYPE OF (electric_potential_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.volt;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_energy_unit
+  SUBTYPE OF (energy_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.joule;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_force_unit
+  SUBTYPE OF (force_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.newton;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_frequency_unit
+  SUBTYPE OF (frequency_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.hertz;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_illuminance_unit
+  SUBTYPE OF (illuminance_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.lux;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_inductance_unit
+  SUBTYPE OF (inductance_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.henry;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_magnetic_flux_density_unit
+  SUBTYPE OF (magnetic_flux_density_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.tesla;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_magnetic_flux_unit
+  SUBTYPE OF (magnetic_flux_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.weber;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_power_unit
+  SUBTYPE OF (power_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.watt;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_pressure_unit
+  SUBTYPE OF (pressure_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.pascal;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_radioactivity_unit
+  SUBTYPE OF (radioactivity_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.becquerel;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_resistance_unit
+  SUBTYPE OF (resistance_unit, si_unit);
+WHERE
+  WR1: SELF\si_unit.name = si_unit_name.ohm;
+  WR2: NOT EXISTS(SELF\derived_unit.name);
+END_ENTITY;
+
+ENTITY si_unit
+  SUBTYPE OF (named_unit);
+  prefix : OPTIONAL si_prefix;
+  name   : si_unit_name;
+DERIVE
+  SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit(name);
+WHERE
+  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MASS_UNIT' IN TYPEOF(SELF)) AND
+            (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DERIVED_UNIT_ELEMENT.UNIT')) > 0)) OR
+           (prefix = si_prefix.kilo);
+END_ENTITY;
+
+ENTITY simple_boolean_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(boolean_literal, boolean_variable))
+  SUBTYPE OF (boolean_expression, simple_generic_expression);
+END_ENTITY;
+
+ENTITY simple_clause
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY simple_generic_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(generic_literal, generic_variable))
+  SUBTYPE OF (generic_expression);
+END_ENTITY;
+
+ENTITY simple_numeric_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(literal_number, numeric_variable))
+  SUBTYPE OF (numeric_expression, simple_generic_expression);
+END_ENTITY;
+
+ENTITY simple_string_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(string_literal, string_variable))
+  SUBTYPE OF (string_expression, simple_generic_expression);
+END_ENTITY;
+
+ENTITY simplified_counterbore_hole_definition
+  SUBTYPE OF (counterbore_hole_definition);
+WHERE
+  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
+END_ENTITY;
+
+ENTITY simplified_counterdrill_hole_definition
+  SUBTYPE OF (counterdrill_hole_definition);
+WHERE
+  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
+END_ENTITY;
+
+ENTITY simplified_countersink_hole_definition
+  SUBTYPE OF (countersink_hole_definition);
+WHERE
+  WR1: SIZEOF(SELF\explicit_composite_hole.placement\representation.items) = 1;
+END_ENTITY;
+
+ENTITY simplified_spotface_hole_definition
+  SUBTYPE OF (spotface_hole_definition, simplified_counterbore_hole_definition);
+END_ENTITY;
+
+ENTITY simultaneous_constraint_group
+  SUBTYPE OF (variational_representation_item);
+  constraint_group : SET [2 : ?] OF constraint_group_member;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* using_representations(SELF)
+                    | SIZEOF(QUERY(r
+                                   <* q.items
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMULTANEOUS_CONSTRAINT_GROUP' IN
+                                      TYPEOF(r)) AND
+                                     (SIZEOF(QUERY(s
+                                                   <* constraint_group
+                                                   | (s IN r\simultaneous_constraint_group.constraint_group) AND
+                                                     NOT (r :=: SELF))) >
+                                      0))) >
+                      0)) =
+       0;
+  WR2: SIZEOF(QUERY(q
+                    <* using_representations(constraint_group[1])
+                    | (SIZEOF(QUERY(r <* constraint_group | item_in_context(r, q.context_of_items))) =
+                       SIZEOF(constraint_group)))) >
+       0;
+  WR3: SIZEOF(QUERY(q
+                    <* constraint_group
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_CONSTRAINT' IN TYPEOF(q)) AND
+                       (SIZEOF(QUERY(r
+                                     <* q.constrained_elements
+                                     | SIZEOF(QUERY(s <* constraint_group | r IN s.reference_elements)) > 0)) >
+                        0)))) =
+       0;
+END_ENTITY;
+
+ENTITY sin_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY single_area_csg_2d_shape_representation
+  SUBTYPE OF (csg_2d_shape_representation);
+  SELF\representation.items : SET [1 : ?] OF csg_2d_area_select;
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(it)))) =
+       0;
+  WR2: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SOLID_2D' IN TYPEOF(it)))) =
+       1;
+END_ENTITY;
+
+ENTITY single_boundary_csg_2d_shape_representation
+  SUBTYPE OF (single_area_csg_2d_shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(it
+                    <* SELF.items
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_PRIMITIVE_SOLID_2D' IN TYPEOF(it)) AND
+                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY') IN
+                        TYPEOF(it\csg_primitive_solid_2d.tree_root_expression))))) =
+       0;
+END_ENTITY;
+
+ENTITY single_property_is_definition
+  SUBTYPE OF (property_definition);
+  SELF\property_definition.definition : product_definition;
+UNIQUE
+  UR1: definition;
+END_ENTITY;
+
+ENTITY single_texture_style_tessellation_specification
+  SUBTYPE OF (texture_style_tessellation_specification);
+  texture_image       : label;
+  texture_coordinates : LIST [1 : ?] OF LIST [2 : 2] OF non_negative_real;
+  texture_format      : texture_file_type;
+  repeating_pattern   : BOOLEAN;
+END_ENTITY;
+
+ENTITY skew_line_distance_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : 2] OF line;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 1] OF line;
+  distance_value                                : non_negative_length_measure;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) = 2;
+END_ENTITY;
+
+ENTITY slash_expression
+  SUBTYPE OF (binary_numeric_expression);
+END_ENTITY;
+
+ENTITY sliding_curve_pair
+  SUBTYPE OF (planar_curve_pair);
+END_ENTITY;
+
+ENTITY sliding_curve_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : sliding_curve_pair;
+  actual_point_on_curve_1         : point_on_curve;
+  actual_point_on_curve_2         : point_on_curve;
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_1 :=: actual_point_on_curve_1.basis_curve;
+  WR2: SELF\pair_value.applies_to_pair\planar_curve_pair.curve_2 :=: actual_point_on_curve_2.basis_curve;
+END_ENTITY;
+
+ENTITY sliding_surface_pair
+  SUBTYPE OF (surface_pair);
+END_ENTITY;
+
+ENTITY sliding_surface_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : sliding_surface_pair;
+  actual_point_on_surface_1       : point_on_surface;
+  actual_point_on_surface_2       : point_on_surface;
+  actual_rotation                 : plane_angle_measure;
+WHERE
+  WR1: SELF\pair_value.applies_to_pair\surface_pair.surface_1 :=: actual_point_on_surface_1.basis_surface;
+  WR2: SELF\pair_value.applies_to_pair\surface_pair.surface_2 :=: actual_point_on_surface_2.basis_surface;
+END_ENTITY;
+
+ENTITY slot
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | (NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                     TYPEOF(pdr.used_representation)))
+                                         | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                            0)))) =
+       0;
+  WR2: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd)))
+                    | (NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | ((sa_occ.description = 'swept shape occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | ((sar.description = 'profile usage') AND
+                                                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                       TYPEOF(sar))))
+                                                          | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_U_PROFILE',
+                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARTIAL_CIRCULAR_PROFILE',
+                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDED_U_PROFILE',
+                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE',
+                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEE_PROFILE',
+                                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_PATH_PROFILE'] *
+                                                                    TYPEOF(sdr.relating_shape_aspect)) =
+                                                             1))) =
+                                             1)))) =
+                            1)))) =
+       0;
+  WR3: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd)))
+                    | (NOT (SIZEOF(QUERY(sa_occ
+                                         <* USEDIN(pds,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                         | ((sa_occ.description = 'course of travel occurrence') AND
+                                            (SIZEOF(QUERY(sdr
+                                                          <* QUERY(sar
+                                                                   <* USEDIN(sa_occ,
+                                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                   | ((sar.description =
+                                                                       'path feature component usage') AND
+                                                                      ((sar.name = 'course of travel') AND
+                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                        TYPEOF(sar)))))
+                                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                             TYPEOF(sdr.relating_shape_aspect)))) =
+                                             1)))) =
+                            1)))) =
+       0;
+  WR4: SIZEOF(QUERY(pds
+                    <* QUERY(pd
+                             <* USEDIN(SELF,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                TYPEOF(pd)))
+                    | (NOT ((SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'end condition occurrence') AND
+                                             (SIZEOF(QUERY(fcr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | (((sar.description = 'slot end usage') AND
+                                                                        (sar.name IN
+                                                                         ['course of travel start',
+                                                                          'course of travel end'])) AND
+                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                        TYPEOF(sar))))
+                                                           | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN
+                                                                TYPEOF(fcr.relating_shape_aspect)) AND
+                                                               (fcr.relating_shape_aspect.description IN
+                                                                ['open','radiused','flat','woodruff'])) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN
+                                                               TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) =
+                                              1)))) =
+                             2) OR
+                            (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'end condition occurrence') AND
+                                             (SIZEOF(QUERY(fcr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | (((sar.description = 'slot end usage') AND
+                                                                        (sar.name IN
+                                                                         ['course of travel start',
+                                                                          'course of travel end'])) AND
+                                                                       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                        TYPEOF(sar))))
+                                                           | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN
+                                                                TYPEOF(fcr.relating_shape_aspect)) AND
+                                                               (fcr.relating_shape_aspect.description IN ['loop'])) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN
+                                                               TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) =
+                                              1)))) =
+                             1))))) =
+       0;
+  WR5: (NOT (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                      TYPEOF(pd)))
+                          | (NOT (SIZEOF(QUERY(sa_occ
+                                               <* USEDIN(pds,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                               | ((sa_occ.description = 'end condition occurrence') AND
+                                                  (SIZEOF(QUERY(fcr
+                                                                <* QUERY(sar
+                                                                         <* USEDIN(sa_occ,
+                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                         | (((sar.description = 'slot end usage') AND
+                                                                             (sar.name IN
+                                                                              ['course of travel start',
+                                                                               'course of travel end'])) AND
+                                                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                                             TYPEOF(sar))))
+                                                                | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN
+                                                                     TYPEOF(fcr.relating_shape_aspect)) AND
+                                                                    (fcr.relating_shape_aspect.description IN
+                                                                     ['loop'])) AND
+                                                                   ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN
+                                                                    TYPEOF(fcr.related_shape_aspect.of_shape.definition))))) =
+                                                   1)))) =
+                                  1)))) =
+             0) OR
+            (SIZEOF(QUERY(pds
+                          <* QUERY(pd
+                                   <* USEDIN(SELF,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                      TYPEOF(pd)))
+                          | (NOT (SIZEOF(QUERY(sa_occ
+                                               <* USEDIN(pds,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                               | ((sa_occ.description = 'course of travel occurrence') AND
+                                                  (SIZEOF(QUERY(sdr
+                                                                <* QUERY(sar
+                                                                         <* USEDIN(sa_occ,
+                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                         | ((sar.description =
+                                                                             'path feature component usage') AND
+                                                                            ((sar.name = 'course of travel') AND
+                                                                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP' IN
+                                                                              TYPEOF(sar)))))
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                                    TYPEOF(sdr.relating_shape_aspect)) AND
+                                                                   (sdr.relating_shape_aspect.description IN
+                                                                    ['complex','complete circular'])))) =
+                                                   1)))) =
+                                  1)))) =
+             0));
+  WR6: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                        TYPEOF(pdr.used_representation)) AND
+                       (pdr.used_representation.name = 'maximum feature limit')))) >=
+       0;
+END_ENTITY;
+
+ENTITY slot_end
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SELF.description IN ['open','radiused','flat','woodruff','loop'];
+  WR3: (NOT (SELF.description IN ['open','radiused','loop'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             0)))) =
+        0);
+  WR4: (NOT (SELF.description IN ['flat','woodruff'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR5: (NOT (SELF.description IN ['flat'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)))) =
+                             0)))) =
+        0);
+  WR6: (NOT (SELF.description = 'flat')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'first radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (NOT (SELF.description = 'flat')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'second radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR8: (NOT (SELF.description = 'woodruff')) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR9: (NOT (SELF.description IN ['woodruff'])) OR
+       (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR10: SIZEOF(QUERY(fcr
+                     <* QUERY(sar
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT')
+                              | (((sar.description = 'slot end usage') AND
+                                  (sar.name IN ['course of travel start','course of travel end'])) AND
+                                 ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                  TYPEOF(sar))))
+                     | (((fcr.related_shape_aspect.description = 'end condition occurrence') AND
+                         ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT' IN
+                          TYPEOF(fcr.related_shape_aspect.of_shape.definition))) AND
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLOT_END' IN
+                         TYPEOF(fcr.relating_shape_aspect))))) >=
+        1;
+END_ENTITY;
+
+ENTITY small_area_face
+  SUBTYPE OF (topology_related_to_nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY small_area_surface
+  SUBTYPE OF (nearly_degenerate_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY small_area_surface_patch
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_PATCH']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE']);
+END_ENTITY;
+
+ENTITY small_volume_solid
+  SUBTYPE OF (inapt_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE']);
+END_ENTITY;
+
+ENTITY software_for_data_quality_check;
+  description      : text;
+  software_name    : text;
+  software_version : text;
+  data_quality     : data_quality_definition_representation_relationship;
+END_ENTITY;
+
+ENTITY solid_angle_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_ANGLE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY solid_angle_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY solid_curve_font
+  SUBTYPE OF (pre_defined_curve_font);
+END_ENTITY;
+
+ENTITY solid_model
+  SUPERTYPE OF (ONEOF(csg_solid, manifold_solid_brep, swept_face_solid, swept_area_solid, swept_disk_solid,
+                      solid_replica))
+  SUBTYPE OF (geometric_representation_item);
+END_ENTITY;
+
+ENTITY solid_replica
+  SUBTYPE OF (solid_model);
+  parent_solid   : solid_model;
+  transformation : cartesian_transformation_operator_3d;
+WHERE
+  WR1: acyclic_solid_replica(SELF, parent_solid);
+  WR2: parent_solid\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY solid_with_angle_based_chamfer
+  SUBTYPE OF (solid_with_chamfered_edges);
+  offset_distance : positive_length_measure;
+  left_offset     : BOOLEAN;
+  offset_angle    : positive_plane_angle_measure;
+END_ENTITY;
+
+ENTITY solid_with_chamfered_edges
+  ABSTRACT SUPERTYPE OF (ONEOF(solid_with_single_offset_chamfer, solid_with_double_offset_chamfer,
+                               solid_with_angle_based_chamfer))
+  SUBTYPE OF (edge_blended_solid);
+END_ENTITY;
+
+ENTITY solid_with_circular_pattern
+  SUPERTYPE OF (solid_with_incomplete_circular_pattern)
+  SUBTYPE OF (solid_with_shape_element_pattern);
+  replicate_count  : positive_integer;
+  angular_spacing  : plane_angle_measure;
+  radial_alignment : BOOLEAN;
+  reference_point  : point;
+END_ENTITY;
+
+ENTITY solid_with_circular_pocket
+  SUBTYPE OF (solid_with_pocket);
+  pocket_radius : positive_length_measure;
+WHERE
+  WR1: SELF\solid_with_pocket.floor_blend_radius <= pocket_radius;
+END_ENTITY;
+
+ENTITY solid_with_circular_protrusion
+  SUBTYPE OF (solid_with_protrusion);
+  protrusion_radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_constant_radius_edge_blend
+  SUBTYPE OF (edge_blended_solid);
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_depression
+  ABSTRACT SUPERTYPE OF (solid_with_through_depression ANDOR
+                         ONEOF(solid_with_hole, solid_with_pocket, solid_with_groove))
+  SUBTYPE OF (modified_solid_with_placed_configuration);
+  depth : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_double_offset_chamfer
+  SUBTYPE OF (solid_with_chamfered_edges);
+  left_offset_distance  : positive_length_measure;
+  right_offset_distance : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_excessive_number_of_voids
+  SUBTYPE OF (inapt_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY solid_with_general_pocket
+  SUBTYPE OF (solid_with_pocket);
+  profile         : positioned_sketch;
+  reference_point : point;
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE'] *
+              TYPEOF(profile.sketch_basis)) =
+       1;
+  WR2: profile IN using_items(reference_point, []);
+END_ENTITY;
+
+ENTITY solid_with_general_protrusion
+  SUBTYPE OF (solid_with_protrusion);
+  profile         : positioned_sketch;
+  reference_point : point;
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE'] *
+              TYPEOF(profile.sketch_basis)) =
+       1;
+  WR2: profile IN using_items(reference_point, []);
+END_ENTITY;
+
+ENTITY solid_with_groove
+  SUBTYPE OF (solid_with_depression);
+  groove_radius       : positive_length_measure;
+  groove_width        : positive_length_measure;
+  draft_angle         : plane_angle_measure;
+  floor_fillet_radius : non_negative_length_measure;
+  external_groove     : BOOLEAN;
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_THROUGH_DEPRESSION' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY solid_with_incomplete_circular_pattern
+  SUBTYPE OF (solid_with_circular_pattern);
+  omitted_instances : SET [1 : ?] OF positive_integer;
+WHERE
+  WR1: SIZEOF(omitted_instances) < SELF\solid_with_circular_pattern.replicate_count;
+  WR2: SIZEOF(QUERY(q <* omitted_instances | q > SELF\solid_with_circular_pattern.replicate_count)) = 0;
+END_ENTITY;
+
+ENTITY solid_with_incomplete_rectangular_pattern
+  SUBTYPE OF (solid_with_rectangular_pattern);
+  omitted_instances : SET [1 : ?] OF LIST [2 : 2] OF positive_integer;
+WHERE
+  WR1: NOT ([1,1] IN omitted_instances);
+  WR2: SIZEOF(omitted_instances) <
+       ((SELF\solid_with_rectangular_pattern.row_count * SELF\solid_with_rectangular_pattern.column_count) - 1);
+  WR3: SIZEOF(QUERY(q
+                    <* omitted_instances
+                    | ((q[1] > SELF\solid_with_rectangular_pattern.row_count) OR
+                       (q[2] > SELF\solid_with_rectangular_pattern.column_count)))) =
+       0;
+END_ENTITY;
+
+ENTITY solid_with_pocket
+  ABSTRACT SUPERTYPE OF (ONEOF(solid_with_rectangular_pocket, solid_with_circular_pocket, solid_with_general_pocket))
+  SUBTYPE OF (solid_with_depression);
+  floor_blend_radius : non_negative_length_measure;
+  draft_angle        : plane_angle_measure;
+END_ENTITY;
+
+ENTITY solid_with_protrusion
+  ABSTRACT SUPERTYPE OF (ONEOF(solid_with_circular_protrusion, solid_with_rectangular_protrusion,
+                               solid_with_general_protrusion))
+  SUBTYPE OF (modified_solid_with_placed_configuration);
+  protrusion_height      : positive_length_measure;
+  protrusion_draft_angle : plane_angle_measure;
+END_ENTITY;
+
+ENTITY solid_with_rectangular_pattern
+  SUPERTYPE OF (solid_with_incomplete_rectangular_pattern)
+  SUBTYPE OF (solid_with_shape_element_pattern);
+  row_count      : positive_integer;
+  column_count   : positive_integer;
+  row_spacing    : length_measure;
+  column_spacing : length_measure;
+WHERE
+  WR1: (row_count * column_count) > 1;
+END_ENTITY;
+
+ENTITY solid_with_rectangular_pocket
+  SUBTYPE OF (solid_with_pocket);
+  pocket_length : positive_length_measure;
+  pocket_width  : positive_length_measure;
+  corner_radius : non_negative_length_measure;
+WHERE
+  WR1: (corner_radius < pocket_width / 2) AND (corner_radius < pocket_length / 2);
+END_ENTITY;
+
+ENTITY solid_with_rectangular_protrusion
+  SUBTYPE OF (solid_with_protrusion);
+  protrusion_length        : positive_length_measure;
+  protrusion_width         : positive_length_measure;
+  protrusion_corner_radius : non_negative_length_measure;
+WHERE
+  WR1: (protrusion_corner_radius <= protrusion_width / 2) AND (protrusion_corner_radius <= protrusion_length / 2);
+END_ENTITY;
+
+ENTITY solid_with_shape_element_pattern
+  ABSTRACT SUPERTYPE OF (ONEOF(solid_with_circular_pattern, solid_with_rectangular_pattern))
+  SUBTYPE OF (modified_solid_with_placed_configuration);
+  replicated_element : modified_solid_with_placed_configuration;
+END_ENTITY;
+
+ENTITY solid_with_single_offset_chamfer
+  SUBTYPE OF (solid_with_chamfered_edges);
+  offset_distance : positive_length_measure;
+END_ENTITY;
+
+ENTITY solid_with_variable_radius_edge_blend
+  SUBTYPE OF (track_blended_solid);
+  point_list         : LIST [2 : ?] OF point;
+  radius_list        : LIST [2 : ?] OF positive_length_measure;
+  edge_function_list : LIST [1 : ?] OF blend_radius_variation_type;
+WHERE
+  WR1: SIZEOF(point_list) = SIZEOF(radius_list);
+  WR2: SIZEOF(edge_function_list) = SIZEOF(radius_list) - 1;
+  WR3: NOT ((point_list[1] = point_list[HIINDEX(point_list)]) AND
+            NOT (radius_list[1] = radius_list[HIINDEX(radius_list)]));
+END_ENTITY;
+
+ENTITY solid_with_wrong_number_of_voids
+  SUBTYPE OF (erroneous_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
+  WR3: validate_locations_of_extreme_value_type(SELF, []);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY source_for_requirement
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : requirement_source;
+  items                                : SET [1 : 1] OF requirement_source_item;
+END_ENTITY;
+
+ENTITY sourced_requirement
+  SUBTYPE OF (group_assignment);
+  SELF\group_assignment.assigned_group : requirement_source;
+  items                                : SET [1 : 1] OF product_definition;
+END_ENTITY;
+
+ENTITY specification_definition
+  SUBTYPE OF (product_definition);
+END_ENTITY;
+
+ENTITY specified_higher_usage_occurrence
+  SUBTYPE OF (assembly_component_usage);
+  upper_usage : assembly_component_usage;
+  next_usage  : next_assembly_usage_occurrence;
+UNIQUE
+  UR1: upper_usage, next_usage;
+WHERE
+  WR1: SELF :<>: upper_usage;
+  WR2: SELF\product_definition_relationship.relating_product_definition :=: upper_usage.relating_product_definition;
+  WR3: SELF\product_definition_relationship.related_product_definition :=: next_usage.related_product_definition;
+  WR4: (upper_usage.related_product_definition :=: next_usage.relating_product_definition) OR
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(upper_usage.related_product_definition,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                     | pdr.relating_product_definition :=: next_usage.relating_product_definition)) =
+        1);
+  WR5: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEXT_ASSEMBLY_USAGE_OCCURRENCE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPECIFIED_HIGHER_USAGE_OCCURRENCE'] *
+              TYPEOF(upper_usage)) =
+       1;
+END_ENTITY;
+
+ENTITY sphere
+  SUBTYPE OF (geometric_representation_item);
+  radius : positive_length_measure;
+  centre : point;
+END_ENTITY;
+
+ENTITY spherical_cap
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) =
+                             0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'radius')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'internal angle')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY spherical_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY spherical_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : spherical_pair_select;
+  input_orientation               : spatial_rotation;
+DERIVE
+  actual_orientation : ypr_rotation := convert_spatial_to_ypr_rotation(SELF\pair_value.applies_to_pair,
+                                                                       input_orientation);
+END_ENTITY;
+
+ENTITY spherical_pair_with_pin
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := false;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY spherical_pair_with_pin_and_range
+  SUBTYPE OF (spherical_pair_with_pin);
+  lower_limit_yaw  : OPTIONAL plane_angle_measure;
+  upper_limit_yaw  : OPTIONAL plane_angle_measure;
+  lower_limit_roll : OPTIONAL plane_angle_measure;
+  upper_limit_roll : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
+  WR2: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
+END_ENTITY;
+
+ENTITY spherical_pair_with_range
+  SUBTYPE OF (spherical_pair);
+  lower_limit_yaw   : OPTIONAL plane_angle_measure;
+  upper_limit_yaw   : OPTIONAL plane_angle_measure;
+  lower_limit_pitch : OPTIONAL plane_angle_measure;
+  upper_limit_pitch : OPTIONAL plane_angle_measure;
+  lower_limit_roll  : OPTIONAL plane_angle_measure;
+  upper_limit_roll  : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
+  WR2: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
+  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
+END_ENTITY;
+
+ENTITY spherical_point
+  SUBTYPE OF (cartesian_point);
+  r     : length_measure;
+  theta : plane_angle_measure;
+  phi   : plane_angle_measure;
+DERIVE
+  SELF\cartesian_point.coordinates : LIST [3 : 3] OF length_measure := [r * SIN(theta) * COS(phi),
+                                                                        r * SIN(theta) * SIN(phi),
+                                                                        r * COS(theta)];
+WHERE
+  WR1: r >= 0.0;
+END_ENTITY;
+
+ENTITY spherical_surface
+  SUBTYPE OF (elementary_surface);
+  radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY spherical_volume
+  SUBTYPE OF (volume);
+  position : axis2_placement_3d;
+  radius   : positive_length_measure;
+END_ENTITY;
+
+ENTITY spotface_definition
+  SUBTYPE OF (explicit_round_hole);
+  spotface_radius           : positive_length_measure_with_unit;
+  spotface_radius_tolerance : OPTIONAL tolerance_value;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(spotface_radius_tolerance\tolerance_value.lower_bound);
+  WR2: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+       TYPEOF(spotface_radius_tolerance\tolerance_value.upper_bound);
+END_ENTITY;
+
+ENTITY spotface_hole_definition
+  SUBTYPE OF (counterbore_hole_definition);
+  SELF\counterbore_hole_definition.counterbore : LIST [1 : ?] OF UNIQUE spotface_definition;
+DERIVE
+  spotface : LIST [1 : ?] OF UNIQUE spotface_definition := SELF\counterbore_hole_definition.counterbore;
+END_ENTITY;
+
+ENTITY spotface_occurrence
+  SUBTYPE OF (counterbore_hole_occurrence);
+  SELF\counterbore_hole_occurrence.definition : spotface_hole_definition;
+END_ENTITY;
+
+ENTITY spotface_occurrence_in_assembly
+  SUBTYPE OF (counterbore_hole_occurrence_in_assembly);
+  SELF\counterbore_hole_occurrence.definition : spotface_hole_definition;
+END_ENTITY;
+
+ENTITY sql_mappable_defined_function
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (defined_function);
+END_ENTITY;
+
+ENTITY square_root_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY square_u_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                          TYPEOF(pdr.used_representation))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | (NOT (SIZEOF(impl_rep.used_representation.items) >= 4) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 7)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR
+                                                     (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR
+                                                     (srwp_i.name = 'first radius') OR
+                                                     (srwp_i.name = 'second radius') OR
+                                                     (srwp_i.name = 'profile limit') OR (srwp_i.name = 'depth'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'orientation'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'width'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'first radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'second radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'first angle'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'second angle'))) =
+                                                1))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                            TYPEOF(pdr.used_representation)) AND
+                                           (pdr.used_representation.name = 'profile limit'))) <=
+                            1))) =
+        0;
+  WR12: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'depth'))) <=
+                                                1))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY standard_table_function
+  SUBTYPE OF (linearized_table_function);
+  order : ordering_type;
+WHERE
+  WR1: extremal_position_check(SELF);
+END_ENTITY;
+
+ENTITY standard_uncertainty
+  SUPERTYPE OF (expanded_uncertainty)
+  SUBTYPE OF (uncertainty_qualifier);
+  uncertainty_value : REAL;
+END_ENTITY;
+
+ENTITY start_request
+  SUBTYPE OF (action_request_assignment);
+  items : SET [1 : ?] OF start_request_item;
+END_ENTITY;
+
+ENTITY start_work
+  SUBTYPE OF (action_assignment);
+  items : SET [1 : ?] OF work_item;
+END_ENTITY;
+
+ENTITY state_definition_to_state_assignment_relationship
+  SUBTYPE OF (ascribable_state_relationship);
+  relation_type : STRING;
+WHERE
+  WR1: acyclic_state_definition_to_state_assignment_relationship(SELF,
+                                                                 [SELF\ascribable_state_relationship.related_ascribable_state],
+                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_DEFINITION_TO_STATE_ASSIGNMENT_RELATIONSHIP');
+END_ENTITY;
+
+ENTITY state_observed;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY state_observed_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_state_observed : state_observed;
+  role                    : state_observed_role;
+END_ENTITY;
+
+ENTITY state_observed_relationship;
+  name                    : label;
+  description             : OPTIONAL text;
+  relating_state_observed : SET [1 : ?] OF state_observed;
+  related_state_observed  : SET [1 : ?] OF state_observed;
+END_ENTITY;
+
+ENTITY state_observed_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY state_predicted
+  SUBTYPE OF (state_observed);
+END_ENTITY;
+
+ENTITY state_type;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY state_type_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_state_type : state_type;
+  role                : state_type_role;
+END_ENTITY;
+
+ENTITY state_type_relationship;
+  name                : label;
+  description         : OPTIONAL text;
+  relating_state_type : SET [1 : ?] OF state_type;
+  related_state_type  : SET [1 : ?] OF state_type;
+END_ENTITY;
+
+ENTITY state_type_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY statechar_applied_object
+  SUBTYPE OF (characterized_object, state_observed_assignment);
+END_ENTITY;
+
+ENTITY statechar_object
+  SUBTYPE OF (characterized_object, state_observed);
+END_ENTITY;
+
+ENTITY statechar_relationship_object
+  SUBTYPE OF (characterized_object, state_observed_relationship);
+END_ENTITY;
+
+ENTITY statechar_type_applied_object
+  SUBTYPE OF (characterized_object, state_type_assignment);
+END_ENTITY;
+
+ENTITY statechar_type_object
+  SUBTYPE OF (characterized_object, state_type);
+END_ENTITY;
+
+ENTITY statechar_type_relationship_object
+  SUBTYPE OF (characterized_object, state_type_relationship);
+END_ENTITY;
+
+ENTITY steep_angle_between_adjacent_edges
+  SUBTYPE OF (steep_geometry_transition_across_edge);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_LOOP']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
+END_ENTITY;
+
+ENTITY steep_angle_between_adjacent_faces
+  SUBTYPE OF (steep_geometry_transition_across_edge);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_EDGE_CURVE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
+END_ENTITY;
+
+ENTITY steep_geometry_transition_across_edge
+  ABSTRACT SUPERTYPE OF (ONEOF(steep_angle_between_adjacent_edges, steep_angle_between_adjacent_faces))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY step
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR2: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'course of travel occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description =
+                                                                        'path feature component usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_FEATURE_COMPONENT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)) AND
+                                                              (sdr.relating_shape_aspect.description = 'linear')))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pds
+                     <* QUERY(pd
+                              <* USEDIN(SELF,
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                              | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                 TYPEOF(pd)))
+                     | (NOT (SIZEOF(QUERY(sa_occ
+                                          <* USEDIN(pds,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                          | ((sa_occ.description = 'removal boundary occurrence') AND
+                                             (SIZEOF(QUERY(sdr
+                                                           <* QUERY(sar
+                                                                    <* USEDIN(sa_occ,
+                                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                    | ((sar.description = 'profile usage') AND
+                                                                       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                        TYPEOF(sar))))
+                                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VEE_PROFILE' IN
+                                                              TYPEOF(sdr.relating_shape_aspect)))) =
+                                              1)))) =
+                             1)))) =
+        0);
+  WR4: SIZEOF(QUERY(pdr
+                    <* get_property_definition_representations(SELF)
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                       TYPEOF(pdr.used_representation)) AND
+                      (pdr.used_representation.name = 'maximum feature limit'))) >=
+       0;
+  WR5: SIZEOF(QUERY(pds
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND
+                       (SIZEOF(QUERY(csa
+                                     <* USEDIN(pds,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHAPE_ASPECT' IN
+                                         TYPEOF(csa)) AND
+                                        (csa.name = 'uncut volume') AND
+                                        (SIZEOF(QUERY(sar
+                                                      <* csa.component_relationships
+                                                      | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_RELATIONSHIP' IN
+                                                          TYPEOF(sar)) AND
+                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOSS',
+                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROTRUSION'] *
+                                                                 TYPEOF(sar.related_shape_aspect)) =
+                                                          1)))) =
+                                         1)))) <=
+                        1)))) =
+       1;
+END_ENTITY;
+
+ENTITY straightness_tolerance
+  SUBTYPE OF (geometric_tolerance);
+WHERE
+  WR1: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY strict_triangular_matrix
+  SUBTYPE OF (triangular_matrix);
+  main_diagonal_value : maths_value;
+END_ENTITY;
+
+ENTITY string_defined_function
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (defined_function, string_expression);
+END_ENTITY;
+
+ENTITY string_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(simple_string_expression, index_expression, substring_expression, concat_expression,
+                               format_function, string_defined_function))
+  SUBTYPE OF (expression);
+END_ENTITY;
+
+ENTITY string_literal
+  SUBTYPE OF (simple_string_expression, generic_literal);
+  the_value : STRING;
+END_ENTITY;
+
+ENTITY string_variable
+  SUBTYPE OF (simple_string_expression, variable);
+END_ENTITY;
+
+ENTITY structured_dimension_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(TYPEOF(SELF) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_FEATURE_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICAL_TOLERANCE_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LEADER_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROJECTION_DIRECTED_CALLOUT',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CURVE_DIRECTED_CALLOUT']) =
+       0;
+  WR2: SIZEOF(QUERY(ato
+                    <* QUERY(con
+                             <* SELF.contents
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                TYPEOF(con)))
+                    | NOT (ato.name IN
+                           ['dimension value','tolerance value','unit text','prefix text','suffix text']))) =
+       0;
+  WR3: SIZEOF(QUERY(ato
+                    <* QUERY(con
+                             <* SELF.contents
+                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                TYPEOF(con)))
+                    | (ato.name = 'dimension value'))) >=
+       1;
+  WR4: SIZEOF(QUERY(dcr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN
+                       TYPEOF(dcr)) AND
+                      (dcr.name = 'prefix'))) <=
+       1;
+  WR5: SIZEOF(QUERY(dcr
+                    <* USEDIN(SELF,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN
+                       TYPEOF(dcr)) AND
+                      (dcr.name = 'suffix'))) <=
+       1;
+  WR6: NOT ((SIZEOF(QUERY(ato
+                          <* QUERY(con
+                                   <* SELF.contents
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                      TYPEOF(con)))
+                          | (ato.name = 'prefix text'))) >
+             0)) OR
+           (SIZEOF(QUERY(dcr
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN
+                            TYPEOF(dcr)) AND
+                           (dcr.name = 'prefix'))) =
+            1);
+  WR7: NOT (SIZEOF(QUERY(ato
+                         <* QUERY(con
+                                  <* SELF.contents
+                                  | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE' IN
+                                     TYPEOF(con)))
+                         | (ato.name = 'suffix text'))) >
+            0) OR
+           (SIZEOF(QUERY(dcr
+                         <* USEDIN(SELF,
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DRAUGHTING_CALLOUT_RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT')
+                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP' IN
+                            TYPEOF(dcr)) AND
+                           (dcr.name = 'suffix'))) =
+            1);
+END_ENTITY;
+
+ENTITY structured_message
+  SUBTYPE OF (product);
+END_ENTITY;
+
+ENTITY structured_text_composition
+  SUBTYPE OF (compound_representation_item);
+END_ENTITY;
+
+ENTITY structured_text_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF string_representation_item_select;
+END_ENTITY;
+
+ENTITY styled_item
+  SUBTYPE OF (representation_item);
+  styles : SET [0 : ?] OF presentation_style_assignment;
+  item   : styled_item_target;
+WHERE
+  WR1: (SIZEOF(styles) = 0) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_TESSELLATED_ITEM_WITH_COLOURS' IN TYPEOF(SELF)) OR
+       (SIZEOF(styles) = 1) OR
+       (SIZEOF(styles) > 1) AND
+       (SIZEOF(QUERY(pres_style
+                     <* styles
+                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESENTATION_STYLE_BY_CONTEXT' IN
+                            TYPEOF(pres_style)))) =
+        0);
+  WR2: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STYLED_ITEM' IN TYPEOF(item));
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(item)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(item)) OR
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_OVER_RIDING_STYLED_ITEM' IN TYPEOF(SELF));
+END_ENTITY;
+
+ENTITY styled_tessellated_item_with_colours
+  SUBTYPE OF (styled_item);
+  SELF\styled_item.item : tessellated_surface_item;
+  colour_type           : colour_type_enum;
+  colour_values         : LIST [1 : ?] OF LIST [3 : 4] OF unsigned_8_bit_integer;
+DERIVE
+  coloured_coordinate_values : coordinates_list := get_coordinate_values(item);
+WHERE
+  WR1: SIZEOF(SELF\styled_item.styles) = 0;
+  WR2: ((colour_type = rgb8) AND (SIZEOF(QUERY(clist <* colour_values | NOT (SIZEOF(clist) = 3))) = 0)) OR
+       ((colour_type = rgbt8) AND (SIZEOF(QUERY(clist <* colour_values | NOT (SIZEOF(clist) = 4))) = 0));
+  WR3: SIZEOF(colour_values) = coloured_coordinate_values\coordinates_list.npoints;
+END_ENTITY;
+
+ENTITY su_parameters
+  SUBTYPE OF (geometric_representation_item);
+  a     : length_measure;
+  alpha : plane_angle_measure;
+  b     : length_measure;
+  beta  : plane_angle_measure;
+  c     : length_measure;
+  gamma : plane_angle_measure;
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY subedge
+  SUBTYPE OF (edge);
+  parent_edge : edge;
+END_ENTITY;
+
+ENTITY subface
+  SUBTYPE OF (face);
+  parent_face : face;
+WHERE
+  WR1: NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF)) + list_to_set(list_face_loops(parent_face))));
+END_ENTITY;
+
+ENTITY subsketch
+  SUBTYPE OF (geometric_representation_item);
+  subsketch_elements : SET [1 : ?] OF sketch_element_select;
+  owning_sketch      : sketch_type_select;
+WHERE
+  WR1: (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION' IN TYPEOF(owning_sketch)) AND
+        (SIZEOF(QUERY(q <* subsketch_elements | NOT (owning_sketch IN using_representations(q)))) = 0)) XOR
+       ((SIZEOF(TYPEOF(owning_sketch) *
+                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIONED_SKETCH',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBSKETCH']) =
+         1) AND
+        (SIZEOF(QUERY(q <* subsketch_elements | NOT (owning_sketch IN using_items(q, [])))) = 0));
+END_ENTITY;
+
+ENTITY substring_expression
+  SUBTYPE OF (string_expression, multiple_arity_generic_expression);
+DERIVE
+  operand : generic_expression := SELF\multiple_arity_generic_expression.operands[1];
+  index1  : generic_expression := SELF\multiple_arity_generic_expression.operands[2];
+  index2  : generic_expression := SELF\multiple_arity_generic_expression.operands[3];
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_EXPRESSION' IN TYPEOF(operand)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index1)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_EXPRESSION' IN TYPEOF(index2));
+  WR2: SIZEOF(SELF\multiple_arity_generic_expression.operands) = 3;
+  WR3: is_int_expr(index1);
+  WR4: is_int_expr(index2);
+END_ENTITY;
+
+ENTITY summary_report_request
+  SUBTYPE OF (data_quality_report_request);
+  summary_report_request_type : summary_report_type;
+END_ENTITY;
+
+ENTITY summary_report_request_with_number_of_instances
+  SUBTYPE OF (data_equivalence_report_request);
+  report_request_type : SET [1 : 3] OF summary_report_style_type;
+END_ENTITY;
+
+ENTITY supplied_part_relationship
+  SUBTYPE OF (product_definition_relationship);
+END_ENTITY;
+
+ENTITY surface
+  SUPERTYPE OF (ONEOF(elementary_surface, swept_surface, bounded_surface, offset_surface, surface_replica))
+  SUBTYPE OF (geometric_representation_item);
+END_ENTITY;
+
+ENTITY surface_condition_callout
+  SUBTYPE OF (draughting_callout);
+WHERE
+  WR1: SIZEOF(QUERY(c
+                    <* SELF.contents
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_CURVE_OCCURRENCE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL_OCCURRENCE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_OCCURRENCE'] *
+                             TYPEOF(c)) <>
+                      1)) =
+       0;
+END_ENTITY;
+
+ENTITY surface_curve
+  SUPERTYPE OF (ONEOF(intersection_curve, seam_curve) ANDOR bounded_surface_curve)
+  SUBTYPE OF (curve);
+  curve_3d              : curve;
+  associated_geometry   : LIST [1 : 2] OF pcurve_or_surface;
+  master_representation : preferred_surface_curve_representation;
+DERIVE
+  basis_surface : SET [1 : 2] OF surface := get_basis_surface(SELF);
+WHERE
+  WR1: curve_3d.dim = 3;
+  WR2: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[1])) OR
+       (master_representation <> pcurve_s1);
+  WR3: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(associated_geometry[2])) OR
+       (master_representation <> pcurve_s2);
+  WR4: NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(curve_3d));
+END_ENTITY;
+
+ENTITY surface_curve_swept_area_solid
+  SUBTYPE OF (swept_area_solid);
+  directrix         : curve;
+  start_param       : REAL;
+  end_param         : REAL;
+  reference_surface : surface;
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(directrix))) OR
+       (reference_surface IN (directrix\surface_curve.basis_surface));
+END_ENTITY;
+
+ENTITY surface_curve_swept_surface
+  SUBTYPE OF (swept_surface);
+  directrix         : curve;
+  reference_surface : surface;
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(directrix))) OR
+       (reference_surface IN (directrix\surface_curve.basis_surface));
+END_ENTITY;
+
+ENTITY surface_distance_assembly_constraint_with_dimension
+  SUBTYPE OF (binary_assembly_constraint, sdgc_with_dimension);
+END_ENTITY;
+
+ENTITY surface_distance_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : 2] OF surface;
+  SELF\explicit_constraint.reference_elements   : SET [0 : 4] OF point_curve_or_surface_constraint_element;
+  near_points                                   : SET [0 : 4] OF near_point_relationship;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND
+        (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
+  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
+  WR3: SIZEOF(QUERY(q
+                    <* near_points
+                    | NOT (q\representation_item_relationship.relating_representation_item IN
+                           SELF\explicit_constraint.reference_elements))) =
+       0;
+END_ENTITY;
+
+ENTITY surface_of_linear_extrusion
+  SUBTYPE OF (swept_surface);
+  extrusion_axis : vector;
+END_ENTITY;
+
+ENTITY surface_of_revolution
+  SUBTYPE OF (swept_surface);
+  axis_position : axis1_placement;
+DERIVE
+  axis_line : line := representation_item('') || geometric_representation_item() || curve() ||
+                      line(axis_position.location,
+                           representation_item('') || geometric_representation_item() || vector(axis_position.z, 1.0));
+END_ENTITY;
+
+ENTITY surface_pair
+  ABSTRACT SUPERTYPE OF (ONEOF(sliding_surface_pair, rolling_surface_pair) ANDOR surface_pair_with_range)
+  SUBTYPE OF (high_order_kinematic_pair);
+  surface_1   : surface;
+  surface_2   : surface;
+  orientation : BOOLEAN;
+WHERE
+  WR1: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_1 | NOT (surface_1 IN r.items))) = 0;
+  WR2: SIZEOF(QUERY(r <* SELF\kinematic_pair.associated_link_representations_2 | NOT (surface_2 IN r.items))) = 0;
+  WR3: SIZEOF(QUERY(lr
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RIGID_LINK_REPRESENTATION' IN
+                           TYPEOF(lr)))) =
+       0;
+END_ENTITY;
+
+ENTITY surface_pair_with_range
+  SUBTYPE OF (surface_pair);
+  range_on_surface_1          : rectangular_trimmed_surface;
+  range_on_surface_2          : rectangular_trimmed_surface;
+  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
+  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: SELF\surface_pair.surface_1 :=: range_on_surface_1.basis_surface;
+  WR2: SELF\surface_pair.surface_2 :=: range_on_surface_2.basis_surface;
+  WR3: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR
+       (lower_limit_actual_rotation < upper_limit_actual_rotation);
+  WR4: SIZEOF(QUERY(r
+                    <* SELF\kinematic_pair.associated_link_representations_1
+                    | NOT (range_on_surface_1 IN r.items))) =
+       0;
+  WR5: SIZEOF(QUERY(r
+                    <* SELF\kinematic_pair.associated_link_representations_2
+                    | NOT (range_on_surface_2 IN r.items))) =
+       0;
+END_ENTITY;
+
+ENTITY surface_patch
+  SUBTYPE OF (founded_item);
+  parent_surface : bounded_surface;
+  u_transition   : transition_code;
+  v_transition   : transition_code;
+  u_sense        : BOOLEAN;
+  v_sense        : BOOLEAN;
+INVERSE
+  using_surfaces : BAG [1:?] OF rectangular_composite_surface FOR segments;
+WHERE
+  WR1: (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(parent_surface)));
+END_ENTITY;
+
+ENTITY surface_patch_set
+  SUBTYPE OF (geometric_representation_item);
+  patches : SET [1 : ?] OF surface_patch;
+END_ENTITY;
+
+ENTITY surface_profile_tolerance
+  SUBTYPE OF (geometric_tolerance);
+END_ENTITY;
+
+ENTITY surface_rendering_properties;
+  rendered_colour : colour;
+END_ENTITY;
+
+ENTITY surface_replica
+  SUBTYPE OF (surface);
+  parent_surface : surface;
+  transformation : cartesian_transformation_operator_3d;
+WHERE
+  WR1: acyclic_surface_replica(SELF, parent_surface);
+END_ENTITY;
+
+ENTITY surface_side_style
+  SUBTYPE OF (founded_item);
+  name   : label;
+  styles : SET [1 : 7] OF surface_style_element_select;
+WHERE
+  WR1: SIZEOF(QUERY(style1
+                    <* styles
+                    | SIZEOF(QUERY(style2 <* styles - style1 | TYPEOF(style1) = TYPEOF(style2))) > 0)) =
+       0;
+END_ENTITY;
+
+ENTITY surface_smoothness_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : 1] OF surface_patch_set;
+  u_smoothness                                  : transition_code;
+  v_smoothness                                  : transition_code;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+END_ENTITY;
+
+ENTITY surface_style_boundary
+  SUBTYPE OF (founded_item);
+  style_of_boundary : curve_or_render;
+END_ENTITY;
+
+ENTITY surface_style_control_grid
+  SUBTYPE OF (founded_item);
+  style_of_control_grid : curve_or_render;
+END_ENTITY;
+
+ENTITY surface_style_fill_area
+  SUBTYPE OF (founded_item);
+  fill_area : fill_area_style;
+END_ENTITY;
+
+ENTITY surface_style_parameter_line
+  SUBTYPE OF (founded_item);
+  style_of_parameter_lines : curve_or_render;
+  direction_counts         : SET [1 : 2] OF direction_count_select;
+WHERE
+  WR1: (HIINDEX(direction_counts) = 1) XOR (TYPEOF(direction_counts[1]) <> TYPEOF(direction_counts[2]));
+END_ENTITY;
+
+ENTITY surface_style_reflectance_ambient;
+  ambient_reflectance : REAL;
+END_ENTITY;
+
+ENTITY surface_style_reflectance_ambient_diffuse
+  SUBTYPE OF (surface_style_reflectance_ambient);
+  diffuse_reflectance : REAL;
+END_ENTITY;
+
+ENTITY surface_style_reflectance_ambient_diffuse_specular
+  SUBTYPE OF (surface_style_reflectance_ambient_diffuse);
+  specular_reflectance : REAL;
+  specular_exponent    : REAL;
+  specular_colour      : colour;
+END_ENTITY;
+
+ENTITY surface_style_rendering;
+  rendering_method : shading_surface_method;
+  surface_colour   : colour;
+END_ENTITY;
+
+ENTITY surface_style_rendering_with_properties
+  SUBTYPE OF (surface_style_rendering);
+  properties : SET [1 : 2] OF rendering_properties_select;
+WHERE
+  WR1: (HIINDEX(properties) = 1) XOR (TYPEOF(properties[1]) <> TYPEOF(properties[2]));
+END_ENTITY;
+
+ENTITY surface_style_segmentation_curve
+  SUBTYPE OF (founded_item);
+  style_of_segmentation_curve : curve_or_render;
+END_ENTITY;
+
+ENTITY surface_style_silhouette
+  SUBTYPE OF (founded_item);
+  style_of_silhouette : curve_or_render;
+END_ENTITY;
+
+ENTITY surface_style_transparent;
+  transparency : REAL;
+WHERE
+  WR1: {0.0 <= transparency <= 1.0};
+END_ENTITY;
+
+ENTITY surface_style_usage
+  SUBTYPE OF (founded_item);
+  side  : surface_side;
+  style : surface_side_style_select;
+END_ENTITY;
+
+ENTITY surface_texture_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM'] *
+                             TYPEOF(i)) <>
+                      1)) =
+       0;
+  WR2: (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                       TYPEOF(i))) =
+        1) AND
+       (SIZEOF(QUERY(i
+                     <* SELF.items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                        TYPEOF(i)) AND
+                       (i.name = 'measuring method'))) =
+        1);
+  WR3: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                             TYPEOF(i)) =
+                      1)) >
+       0;
+  WR4: (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')) <=
+        1) AND
+       (SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2')) =
+        0) AND
+       (SIZEOF(QUERY(rr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')
+                     | rr.rep_2.name = 'measuring direction')) =
+        SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_1')));
+  WR5: (SIZEOF(USEDIN(SELF,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | SIZEOF(QUERY(gpa
+                                    <* USEDIN(pdr.definition,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN
+                                       TYPEOF(gpa.base_definition)) AND
+                                      (gpa\general_property_association.base_definition\general_property.name =
+                                       'surface_condition'))) =
+                       1)) =
+        1);
+END_ENTITY;
+
+ENTITY surface_with_excessive_patches_in_one_direction
+  SUBTYPE OF (overcomplex_geometry);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF,
+                                        ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT']);
+  WR4: validate_locations_of_extreme_value_type(SELF, []);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY surface_with_small_curvature_radius
+  SUBTYPE OF (geometry_with_local_near_degeneracy);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY surfaced_open_shell
+  SUBTYPE OF (open_shell);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\connected_face_set.cfs_faces
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(q)))) =
+       0;
+END_ENTITY;
+
+ENTITY swept_area_solid
+  SUPERTYPE OF (ONEOF(revolved_area_solid, extruded_area_solid, surface_curve_swept_area_solid))
+  SUBTYPE OF (solid_model);
+  swept_area : curve_bounded_surface;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(swept_area.basis_surface);
+END_ENTITY;
+
+ENTITY swept_curve_surface_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF surface;
+  SELF\explicit_constraint.reference_elements   : SET [1 : 1] OF swept_surface_or_solid;
+END_ENTITY;
+
+ENTITY swept_disk_solid
+  SUBTYPE OF (solid_model);
+  directrix    : curve;
+  radius       : positive_length_measure;
+  inner_radius : OPTIONAL positive_length_measure;
+  start_param  : REAL;
+  end_param    : REAL;
+WHERE
+  WR1: directrix.dim = 3;
+  WR2: (NOT EXISTS(inner_radius)) OR (radius > inner_radius);
+END_ENTITY;
+
+ENTITY swept_face_solid
+  SUPERTYPE OF (ONEOF(extruded_face_solid, revolved_face_solid))
+  SUBTYPE OF (solid_model);
+  swept_face : face_surface;
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(swept_face.face_geometry);
+END_ENTITY;
+
+ENTITY swept_point_curve_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF curve;
+  SELF\explicit_constraint.reference_elements   : SET [1 : 1] OF swept_face_solid;
+END_ENTITY;
+
+ENTITY swept_surface
+  SUPERTYPE OF (ONEOF(surface_of_linear_extrusion, surface_of_revolution, surface_curve_swept_surface,
+                      fixed_reference_swept_surface))
+  SUBTYPE OF (surface);
+  swept_curve : curve;
+END_ENTITY;
+
+ENTITY symbol
+  SUBTYPE OF (representation_item);
+END_ENTITY;
+
+ENTITY symbol_colour;
+  colour_of_symbol : colour;
+END_ENTITY;
+
+ENTITY symbol_representation
+  SUBTYPE OF (representation);
+END_ENTITY;
+
+ENTITY symbol_representation_map
+  SUBTYPE OF (representation_map);
+  SELF\representation_map.mapped_representation : symbol_representation;
+  SELF\representation_map.mapping_origin        : axis2_placement;
+WHERE
+  WR1: SIZEOF(QUERY(mi
+                    <* SELF\representation_map.map_usage
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_SYMBOL' IN TYPEOF(mi)))) =
+       0;
+END_ENTITY;
+
+ENTITY symbol_style
+  SUBTYPE OF (founded_item);
+  name            : label;
+  style_of_symbol : symbol_style_select;
+END_ENTITY;
+
+ENTITY symbol_target
+  SUBTYPE OF (geometric_representation_item);
+  placement : axis2_placement;
+  x_scale   : positive_ratio_measure;
+  y_scale   : positive_ratio_measure;
+END_ENTITY;
+
+ENTITY symmetric_banded_matrix
+  SUBTYPE OF (symmetric_matrix);
+  default_entry : maths_value;
+  above         : nonnegative_integer;
+WHERE
+  WR1: member_of(default_entry, factor1(SELF\linearized_table_function.source.range));
+END_ENTITY;
+
+ENTITY symmetric_matrix
+  SUBTYPE OF (linearized_table_function);
+  symmetry : symmetry_type;
+  triangle : lower_upper;
+  order    : ordering_type;
+WHERE
+  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
+  WR2: SELF\explicit_table_function.shape[1] = SELF\explicit_table_function.shape[2];
+  WR3: NOT (symmetry = symmetry_type.skew) OR
+           ((space_dimension(SELF\linearized_table_function.source.range) = 1) AND
+            subspace_of_es(factor1(SELF\linearized_table_function.source.range), es_numbers));
+  WR4: NOT ((symmetry = symmetry_type.hermitian) OR (symmetry = symmetry_type.skew_hermitian)) OR
+           ((space_dimension(SELF\linearized_table_function.source.range) = 1) AND
+            subspace_of_es(factor1(SELF\linearized_table_function.source.range), es_complex_numbers));
+END_ENTITY;
+
+ENTITY symmetric_shape_aspect
+  SUBTYPE OF (shape_aspect);
+INVERSE
+  basis_relationships : SET [1:?] OF shape_aspect_deriving_relationship FOR related_shape_aspect;
+END_ENTITY;
+
+ENTITY symmetry_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [2 : 2] OF geometric_representation_item;
+  mirror_element                                : linear_geometry_constraint_element;
+WHERE
+  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
+  WR2: SIZEOF(TYPEOF(mirror_element) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR']) =
+       0;
+  WR3: NOT ((SELF\geometric_representation_item.dim = 2) AND
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(mirror_element)));
+END_ENTITY;
+
+ENTITY symmetry_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY system_breakdown_context
+  SUBTYPE OF (breakdown_context);
+END_ENTITY;
+
+ENTITY system_element_usage
+  SUBTYPE OF (breakdown_element_usage);
+END_ENTITY;
+
+ENTITY table_representation_item
+  SUBTYPE OF (compound_representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(itet
+                    <* SELF\compound_representation_item.item_element
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROW_REPRESENTATION_ITEM' IN
+                           TYPEOF(itet)))) =
+       0;
+END_ENTITY;
+
+ENTITY tactile_appearance_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: SIZEOF(QUERY(i
+                    <* SELF.items
+                    | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                             TYPEOF(i)) <>
+                      1)) =
+       0;
+  WR2: SIZEOF(QUERY(i <* SELF.items | name = 'depth')) <= 1;
+  WR3: (SIZEOF(USEDIN(SELF,
+                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) =
+        1) AND
+       (SIZEOF(QUERY(pdr
+                     <* USEDIN(SELF,
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                     | SIZEOF(QUERY(gpa
+                                    <* USEDIN(pdr.definition,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN
+                                       TYPEOF(gpa.base_definition)) AND
+                                      (gpa\general_property_association.base_definition\general_property.name =
+                                       'surface_condition'))) =
+                       1)) =
+        1);
+END_ENTITY;
+
+ENTITY tagged_text_format
+  SUBTYPE OF (representation_context);
+END_ENTITY;
+
+ENTITY tagged_text_item
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY tan_function
+  SUBTYPE OF (unary_function_call);
+END_ENTITY;
+
+ENTITY tangent
+  SUBTYPE OF (derived_shape_aspect);
+WHERE
+  WR1: SIZEOF(SELF\derived_shape_aspect.deriving_relationships) = 1;
+END_ENTITY;
+
+ENTITY tangent_assembly_constraint
+  SUBTYPE OF (binary_assembly_constraint, tangent_geometric_constraint);
+END_ENTITY;
+
+ENTITY tangent_geometric_constraint
+  SUBTYPE OF (explicit_geometric_constraint);
+  SELF\explicit_constraint.constrained_elements : SET [1 : ?] OF curve_or_surface_constraint_element;
+  SELF\explicit_constraint.reference_elements   : SET [0 : ?] OF curve_or_surface_constraint_element;
+  near_points                                   : SET [0 : ?] OF near_point_relationship;
+  tangent_contact                               : tangent_contact_type;
+WHERE
+  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR
+       (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
+  WR2: NOT ((SELF\geometric_representation_item.dim = 2) AND (tangent_contact = surface_contact));
+  WR3: SIZEOF(QUERY(q
+                    <* near_points
+                    | NOT (q\representation_item_relationship.relating_representation_item IN
+                           SELF\explicit_constraint.reference_elements))) =
+       0;
+END_ENTITY;
+
+ENTITY taper
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+        TYPEOF(SELF.of_shape.definition));
+  WR2: (SELF.description IN ['angle taper','diameter taper','directed taper']);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)))) =
+                             0)))) =
+        0);
+  WR5: ((NOT (SELF.description = 'angle taper')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'taper angle')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR6: ((NOT (SELF.description = 'diameter taper')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'final diameter')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR7: ((NOT (SELF.description = 'directed taper')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'angle')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR8: ((NOT (SELF.description = 'directed taper')) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(pdr
+                                           <* USEDIN(pd,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION' IN
+                                              TYPEOF(pdr.used_representation)) AND
+                                             (pdr.used_representation.name = 'direction'))) =
+                              1)))) =
+         0));
+END_ENTITY;
+
+ENTITY tee_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                          TYPEOF(pdr.used_representation))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | (NOT (SIZEOF(impl_rep.used_representation.items) >= 9) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 10)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR
+                                                     (srwp_i.name = 'depth') OR (srwp_i.name = 'cross bar width') OR
+                                                     (srwp_i.name = 'cross bar depth') OR
+                                                     (srwp_i.name = 'first offset') OR
+                                                     (srwp_i.name = 'second offset') OR
+                                                     (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR
+                                                     (srwp_i.name = 'radius'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'orientation'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'width'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'depth'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'cross bar width'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'cross bar depth'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR10: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'first offset'))) =
+                                                1))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'second offset'))) =
+                                                1))) =
+                            0))) =
+        0;
+  WR12: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'first angle'))) =
+                                                1))) =
+                            0))) =
+        0;
+  WR13: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'second angle'))) =
+                                                1))) =
+                            0))) =
+        0;
+  WR14: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                       TYPEOF(it)) =
+                                                                2) AND
+                                                               (it.name = 'radius'))) <=
+                                                1))) =
+                            0))) =
+        0;
+  WR15: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(pdr
+                                         <* USEDIN(pd,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                         | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                            TYPEOF(pdr.used_representation)) AND
+                                           (pdr.used_representation.name = 'profile limit'))) <=
+                            1))) =
+        0;
+END_ENTITY;
+
+ENTITY terminal_feature
+  SUBTYPE OF (contact_feature);
+END_ENTITY;
+
+ENTITY terminal_location_group
+  SUBTYPE OF (terminal_feature);
+END_ENTITY;
+
+ENTITY terminator_symbol
+  SUBTYPE OF (annotation_symbol_occurrence);
+  annotated_curve : annotation_curve_occurrence;
+END_ENTITY;
+
+ENTITY tessellated_annotation_occurrence
+  SUBTYPE OF (annotation_occurrence);
+  SELF\styled_item.item : tessellated_geometric_set;
+END_ENTITY;
+
+ENTITY tessellated_connecting_edge
+  SUBTYPE OF (tessellated_edge);
+  smooth           : LOGICAL;
+  face1            : tessellated_face;
+  face2            : tessellated_face;
+  line_strip_face1 : LIST [2 : ?] OF INTEGER;
+  line_strip_face2 : LIST [2 : ?] OF INTEGER;
+WHERE
+  WR1: SIZEOF(line_strip_face1) = SIZEOF(line_strip_face2);
+  WR2: SIZEOF(line_strip_face1) = SIZEOF(SELF\tessellated_edge.line_strip);
+  WR3: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face1));
+  WR4: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face2));
+END_ENTITY;
+
+ENTITY tessellated_curve_set
+  SUBTYPE OF (tessellated_item);
+  coordinates : coordinates_list;
+  line_strips : LIST [1 : ?] OF LIST [2 : ?] OF INTEGER;
+END_ENTITY;
+
+ENTITY tessellated_edge
+  SUPERTYPE OF (ONEOF(tessellated_connecting_edge, cubic_bezier_tessellated_edge))
+  SUBTYPE OF (tessellated_structured_item);
+  coordinates    : coordinates_list;
+  geometric_link : OPTIONAL edge_or_curve;
+  line_strip     : LIST [2 : ?] OF INTEGER;
+END_ENTITY;
+
+ENTITY tessellated_face
+  ABSTRACT SUPERTYPE OF (ONEOF(triangulated_face, complex_triangulated_face, cubic_bezier_triangulated_face))
+  SUBTYPE OF (tessellated_structured_item);
+  coordinates    : coordinates_list;
+  pnmax          : INTEGER;
+  normals        : LIST [0 : ?] OF LIST [3 : 3] OF REAL;
+  geometric_link : OPTIONAL face_or_surface;
+WHERE
+  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
+END_ENTITY;
+
+ENTITY tessellated_geometric_set
+  SUBTYPE OF (tessellated_item);
+  children : SET [1 : ?] OF tessellated_item;
+END_ENTITY;
+
+ENTITY tessellated_item
+  ABSTRACT SUPERTYPE OF (ONEOF(coordinates_list, tessellated_solid, tessellated_shell, tessellated_wire,
+                               tessellated_geometric_set, tessellated_curve_set, tessellated_point_set,
+                               tessellated_surface_set, tessellated_structured_item))
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(using_rep
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHAPE_REPRESENTATION' IN
+                           TYPEOF(using_rep)))) =
+       0;
+END_ENTITY;
+
+ENTITY tessellated_point_set
+  SUBTYPE OF (tessellated_item);
+  coordinates : coordinates_list;
+  point_list  : LIST [1 : ?] OF INTEGER;
+END_ENTITY;
+
+ENTITY tessellated_shape_representation
+  SUBTYPE OF (shape_representation);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN
+       TYPEOF(SELF\representation.context_of_items);
+  WR2: NOT (SIZEOF(QUERY(it
+                         <* SELF.items
+                         | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_ITEM' IN TYPEOF(it))) =
+            0);
+END_ENTITY;
+
+ENTITY tessellated_shape_representation_with_accuracy_parameters
+  SUBTYPE OF (tessellated_shape_representation);
+  tessellation_accuracy_parameters : SET [1 : ?] OF tessellation_accuracy_parameter_item;
+END_ENTITY;
+
+ENTITY tessellated_shell
+  SUBTYPE OF (tessellated_item);
+  items            : SET [1 : ?] OF tessellated_structured_item;
+  topological_link : OPTIONAL connected_face_set;
+END_ENTITY;
+
+ENTITY tessellated_solid
+  SUBTYPE OF (tessellated_item);
+  items          : SET [1 : ?] OF tessellated_structured_item;
+  geometric_link : OPTIONAL manifold_solid_brep;
+END_ENTITY;
+
+ENTITY tessellated_structured_item
+  SUPERTYPE OF (ONEOF(tessellated_face, tessellated_edge, tessellated_vertex))
+  SUBTYPE OF (tessellated_item);
+END_ENTITY;
+
+ENTITY tessellated_surface_set
+  ABSTRACT SUPERTYPE OF (ONEOF(triangulated_surface_set, complex_triangulated_surface_set))
+  SUBTYPE OF (tessellated_item);
+  coordinates : coordinates_list;
+  pnmax       : INTEGER;
+  normals     : LIST [0 : ?] OF LIST [3 : 3] OF REAL;
+WHERE
+  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
+END_ENTITY;
+
+ENTITY tessellated_vertex
+  SUBTYPE OF (tessellated_structured_item);
+  coordinates      : coordinates_list;
+  topological_link : OPTIONAL vertex_point;
+  point_index      : INTEGER;
+END_ENTITY;
+
+ENTITY tessellated_wire
+  SUBTYPE OF (tessellated_item);
+  items                : SET [1 : ?] OF tessellated_edge_or_vertex;
+  geometric_model_link : OPTIONAL path_or_composite_curve;
+END_ENTITY;
+
+ENTITY tetrahedron
+  SUBTYPE OF (faceted_primitive);
+WHERE
+  WR1: SIZEOF(points) = 4;
+  WR2: above_plane(points[1], points[2], points[3], points[4]) <> 0.0;
+END_ENTITY;
+
+ENTITY tetrahedron_volume
+  SUBTYPE OF (volume);
+  point_1 : cartesian_point;
+  point_2 : cartesian_point;
+  point_3 : cartesian_point;
+  point_4 : cartesian_point;
+WHERE
+  WR1: point_1.dim = 3;
+  WR2: above_plane(point_1, point_2, point_3, point_4) <> 0.0;
+END_ENTITY;
+
+ENTITY text_font;
+  id          : identifier;
+  name        : label;
+  description : text;
+INVERSE
+  glyphs : SET [1:?] OF character_glyph_font_usage FOR font;
+END_ENTITY;
+
+ENTITY text_font_family;
+  id          : identifier;
+  name        : label;
+  description : text;
+INVERSE
+  fonts : SET [1:?] OF text_font_in_family FOR family;
+END_ENTITY;
+
+ENTITY text_font_in_family;
+  font   : text_font;
+  family : text_font_family;
+END_ENTITY;
+
+ENTITY text_literal
+  SUBTYPE OF (geometric_representation_item);
+  literal   : presentable_text;
+  placement : axis2_placement;
+  alignment : text_alignment;
+  path      : text_path;
+  font      : font_select;
+END_ENTITY;
+
+ENTITY text_literal_with_associated_curves
+  SUBTYPE OF (text_literal);
+  associated_curves : SET [1 : ?] OF curve;
+END_ENTITY;
+
+ENTITY text_literal_with_blanking_box
+  SUBTYPE OF (text_literal);
+  blanking : planar_box;
+END_ENTITY;
+
+ENTITY text_literal_with_delineation
+  SUBTYPE OF (text_literal);
+  delineation : text_delineation;
+END_ENTITY;
+
+ENTITY text_literal_with_extent
+  SUBTYPE OF (text_literal);
+  extent : planar_extent;
+END_ENTITY;
+
+ENTITY text_string_representation
+  SUBTYPE OF (representation);
+  SELF\representation.items : SET [1 : ?] OF text_string_representation_item;
+WHERE
+  WR1: SIZEOF(QUERY(item
+                    <* SELF\representation.items
+                    | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_CHARACTER',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEFINED_CHARACTER_GLYPH',
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT'] *
+                                  TYPEOF(item)) =
+                           0))) >=
+       1;
+  WR2: SIZEOF(QUERY(a2p
+                    <* QUERY(item
+                             <* SELF\representation.items
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT' IN TYPEOF(item))
+                    | NOT ((SIZEOF(QUERY(at
+                                         <* QUERY(item
+                                                  <* SELF\representation.items
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN
+                                                    TYPEOF(item))
+                                         | (at\mapped_item.mapping_target :=: a2p))) >=
+                            1) OR
+                           (SIZEOF(QUERY(atc
+                                         <* QUERY(item
+                                                  <* SELF\representation.items
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT_CHARACTER' IN
+                                                    TYPEOF(item))
+                                         | (atc\mapped_item.mapping_target :=: a2p))) >=
+                            1)))) =
+       0;
+END_ENTITY;
+
+ENTITY text_style
+  SUBTYPE OF (founded_item);
+  name                 : label;
+  character_appearance : character_style_select;
+END_ENTITY;
+
+ENTITY text_style_for_defined_font;
+  text_colour : colour;
+END_ENTITY;
+
+ENTITY text_style_with_box_characteristics
+  SUBTYPE OF (text_style);
+  characteristics : SET [1 : 4] OF box_characteristic_select;
+WHERE
+  WR1: SIZEOF(QUERY(c1 <* characteristics | SIZEOF(QUERY(c2 <* characteristics - c1 | TYPEOF(c1) = TYPEOF(c2))) > 0)) =
+       0;
+END_ENTITY;
+
+ENTITY text_style_with_mirror
+  SUBTYPE OF (text_style);
+  mirror_placement : axis2_placement;
+END_ENTITY;
+
+ENTITY text_style_with_spacing
+  SUBTYPE OF (text_style);
+  character_spacing : character_spacing_select;
+END_ENTITY;
+
+ENTITY texture_style_specification
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (founded_item);
+END_ENTITY;
+
+ENTITY texture_style_tessellation_specification
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (texture_style_specification);
+END_ENTITY;
+
+ENTITY thermal_component
+  SUBTYPE OF (assembly_component);
+END_ENTITY;
+
+ENTITY thermal_resistance_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THERMAL_RESISTANCE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY thermal_resistance_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(-1.0, -1.0, -3.0, 0.0, 1.0, 0.0, 0.0);
+END_ENTITY;
+
+ENTITY thermodynamic_temperature_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THERMODYNAMIC_TEMPERATURE_UNIT' IN
+       TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY thermodynamic_temperature_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 1.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY thickened_face_solid
+  SUBTYPE OF (solid_model);
+  base_element : generalized_surface_select;
+  offset1      : length_measure;
+  offset2      : length_measure;
+WHERE
+  WR1: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN TYPEOF(base_element)) AND
+            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_SURFACE' IN TYPEOF(base_element))));
+  WR2: offset1 <> offset2;
+END_ENTITY;
+
+ENTITY thread
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (SIZEOF(QUERY(pdr
+                                     <* USEDIN(pd,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                     | ((('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                         TYPEOF(pdr.used_representation)) AND
+                                        (8 <= SIZEOF(pdr.used_representation.items)) AND
+                                        (SIZEOF(pdr.used_representation.items) <= 11)))) =
+                        1))) =
+        1);
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'major diameter')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'minor diameter')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'pitch diameter')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'number of threads')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'fit class')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'form')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR8: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'hand') AND
+                                                                  (it.description IN ['left','right'])))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR9: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'qualifier')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR10: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'thread side') AND
+                                                                   ((it.description = 'internal') OR
+                                                                    (it.description = 'external'))))) =
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR11: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'crest')))) <=
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR12: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'partial area occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'applied area usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) =
+                                               1)))) =
+                              1)))) =
+         0);
+  WR13: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'applied shape') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) =
+                                               1)))) =
+                              1)))) =
+         0);
+  WR14: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                    TYPEOF(it)) AND
+                                                                   (it.name = 'fit class 2')))) <=
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR15: (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'nominal size')))) <=
+                                                   1)))) =
+                              0)))) =
+         0);
+  WR16: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'thread runout') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'thread runout usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THREAD_RUNOUT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) <=
+                                               1)))) =
+                              1)))) =
+         0);
+END_ENTITY;
+
+ENTITY thread_runout
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
+  WR2: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(pdr
+                                          <* USEDIN(pd,
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                             TYPEOF(pdr.used_representation)))) =
+                             1)))) =
+        0);
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)))) =
+                             0)))) =
+        0);
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | (SIZEOF(QUERY(pdr
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                       TYPEOF(pdr.used_representation)) AND
+                                      (SIZEOF(QUERY(srwp_i
+                                                    <* pdr.used_representation.items
+                                                    | NOT (srwp_i.name IN
+                                                           ['length of runout',
+                                                            'pitch or dimension',
+                                                            'included or extra']))) >
+                                       0))) =
+                       0))) =
+       0;
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'length of runout')))) =
+                                                  1)))) =
+                             0)))) <=
+        1);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'pitch or dimension') AND
+                                                                  (it.description IN
+                                                                   ['pitch','pitch or dimension'])))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  (it.name = 'included or extra') AND
+                                                                  (it.description IN ['included','extra'])))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+END_ENTITY;
+
+ENTITY time_interval;
+  id          : identifier;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY time_interval_assignment
+  ABSTRACT SUPERTYPE;
+  assigned_time_interval : time_interval;
+  role                   : time_interval_role;
+END_ENTITY;
+
+ENTITY time_interval_based_effectivity
+  SUBTYPE OF (effectivity);
+  effectivity_period : time_interval;
+END_ENTITY;
+
+ENTITY time_interval_relationship;
+  name                   : label;
+  description            : OPTIONAL text;
+  relating_time_interval : time_interval;
+  related_time_interval  : time_interval;
+END_ENTITY;
+
+ENTITY time_interval_role;
+  name        : label;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY time_interval_with_bounds
+  SUBTYPE OF (time_interval);
+  primary_bound   : OPTIONAL date_time_or_event_occurrence;
+  secondary_bound : OPTIONAL date_time_or_event_occurrence;
+  duration        : OPTIONAL time_measure_with_unit;
+WHERE
+  WR1: EXISTS(primary_bound) OR EXISTS(secondary_bound);
+  WR2: NOT (EXISTS(primary_bound) AND EXISTS(secondary_bound) AND EXISTS(duration));
+  WR3: EXISTS(primary_bound) AND
+       NOT EXISTS(secondary_bound) AND (NOT EXISTS(duration) OR duration_is_positive(duration));
+  WR4: EXISTS(secondary_bound) AND NOT EXISTS(primary_bound) AND EXISTS(duration) AND duration_is_negative(duration);
+END_ENTITY;
+
+ENTITY time_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY time_unit
+  SUBTYPE OF (named_unit);
+WHERE
+  WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.time_exponent = 1.0) AND
+       (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND
+       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0);
+END_ENTITY;
+
+ENTITY tolerance_value;
+  lower_bound : measure_with_unit;
+  upper_bound : measure_with_unit;
+DERIVE
+  ubvc : REAL := upper_bound\measure_with_unit.value_component;
+  lbvc : REAL := lower_bound\measure_with_unit.value_component;
+WHERE
+  WR1: ubvc > lbvc;
+  WR2: upper_bound\measure_with_unit.unit_component = lower_bound\measure_with_unit.unit_component;
+END_ENTITY;
+
+ENTITY tolerance_zone
+  SUBTYPE OF (shape_aspect);
+  defining_tolerance : SET [1 : ?] OF tolerance_zone_target;
+  form               : tolerance_zone_form;
+END_ENTITY;
+
+ENTITY tolerance_zone_definition
+  SUPERTYPE OF (ONEOF(projected_zone_definition, non_uniform_zone_definition, runout_zone_definition));
+  zone       : tolerance_zone;
+  boundaries : SET [0 : ?] OF shape_aspect;
+END_ENTITY;
+
+ENTITY tolerance_zone_form;
+  name : label;
+END_ENTITY;
+
+ENTITY tolerance_zone_with_datum
+  SUPERTYPE OF (ONEOF(directed_tolerance_zone, oriented_tolerance_zone))
+  SUBTYPE OF (tolerance_zone);
+  datum_reference : datum_system;
+END_ENTITY;
+
+ENTITY topological_representation_item
+  SUPERTYPE OF (ONEOF(vertex, edge, face_bound, face, vertex_shell, wire_shell, connected_edge_set, connected_face_set,
+                      connected_volume_set, volume_with_faces, (loop ANDOR path)))
+  SUBTYPE OF (representation_item);
+DERIVE
+  permanent_id           : identifier := get_id_value(SELF);
+  permanent_aggregate_id : identifier := get_aggregate_id_value(SELF);
+WHERE
+  WR1: SIZEOF(USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
+  WR2: SIZEOF(USEDIN(SELF,
+                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGGREGATE_ID_ATTRIBUTE.IDENTIFIED_ITEM')) <=
+       1;
+END_ENTITY;
+
+ENTITY topology_related_to_multiply_defined_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(multiply_defined_faces, multiply_defined_vertices, multiply_defined_edges))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY topology_related_to_nearly_degenerate_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(short_length_edge, small_area_face, entirely_narrow_face))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY topology_related_to_overlapping_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(partly_overlapping_faces, partly_overlapping_edges))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY topology_related_to_self_intersecting_geometry
+  ABSTRACT SUPERTYPE OF (ONEOF(self_intersecting_loop, self_intersecting_shell, intersecting_connected_face_sets))
+  SUBTYPE OF (inapt_topology_and_geometry_relationship);
+END_ENTITY;
+
+ENTITY toroidal_surface
+  SUBTYPE OF (elementary_surface);
+  major_radius : positive_length_measure;
+  minor_radius : positive_length_measure;
+END_ENTITY;
+
+ENTITY toroidal_volume
+  SUBTYPE OF (volume);
+  position     : axis2_placement_3d;
+  major_radius : positive_length_measure;
+  minor_radius : positive_length_measure;
+WHERE
+  WR1: minor_radius < major_radius;
+END_ENTITY;
+
+ENTITY torus
+  SUBTYPE OF (geometric_representation_item);
+  position     : axis1_placement;
+  major_radius : positive_length_measure;
+  minor_radius : positive_length_measure;
+WHERE
+  WR1: major_radius > minor_radius;
+END_ENTITY;
+
+ENTITY total_runout_tolerance
+  SUBTYPE OF (geometric_tolerance_with_datum_reference);
+END_ENTITY;
+
+ENTITY track_blended_solid
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (edge_blended_solid);
+WHERE
+  WR1: check_continuous_edges(SELF\edge_blended_solid.blended_edges);
+END_ENTITY;
+
+ENTITY track_blended_solid_with_end_conditions
+  SUBTYPE OF (track_blended_solid);
+  end_conditions : LIST [2 : 2] OF blend_end_condition_select;
+WHERE
+  WR1: SIZEOF(TYPEOF(SELF) *
+              ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_CONSTANT_RADIUS_EDGE_BLEND',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_VARIABLE_RADIUS_EDGE_BLEND',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_WITH_CHAMFERED_EDGES']) =
+       1;
+  WR2: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[1])) AND
+            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[2])));
+  WR3: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[1])) AND
+            (NOT ((end_conditions[1] :=: SELF\edge_blended_solid.blended_edges[1].edge_start) XOR
+                  (end_conditions[1] :=: SELF\edge_blended_solid.blended_edges[1].edge_end))));
+  WR4: NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX' IN TYPEOF(end_conditions[2])) AND
+            (NOT ((end_conditions[2] :=:
+                   SELF\edge_blended_solid.blended_edges[HIINDEX(SELF\edge_blended_solid.blended_edges)].edge_start) XOR
+                  (end_conditions[2] :=:
+                   SELF\edge_blended_solid.blended_edges[HIINDEX(SELF\edge_blended_solid.blended_edges)].edge_end))));
+END_ENTITY;
+
+ENTITY transformation_with_derived_angle
+  SUPERTYPE OF (ONEOF(draped_defined_transformation, laid_defined_transformation))
+  SUBTYPE OF (item_defined_transformation);
+  SELF\item_defined_transformation.transform_item_1 : angle_direction_reference_with_a2p3d_select;
+  SELF\item_defined_transformation.transform_item_2 : axis2_placement_3d;
+DERIVE
+  orientation_angle : plane_angle_measure := derive_angle(SELF\item_defined_transformation.transform_item_1,
+                                                          SELF\item_defined_transformation.transform_item_2);
+WHERE
+  WR1: (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[1] =
+        SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[1]) AND
+       (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[2] =
+        SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[2]) AND
+       (SELF\item_defined_transformation.transform_item_1\axis2_placement_3d.p[3].direction_ratios[3] =
+        SELF\item_defined_transformation.transform_item_2\axis2_placement_3d.p[3].direction_ratios[3]);
+END_ENTITY;
+
+ENTITY transition_feature
+  SUPERTYPE OF (ONEOF(chamfer, edge_round, fillet))
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_FEATURE'] *
+              TYPEOF(SELF.of_shape.definition)) =
+       1;
+  WR2: SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHAMFER',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_ROUND',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FILLET'] *
+              TYPEOF(SELF)) =
+       1;
+END_ENTITY;
+
+ENTITY transport_feature
+  SUBTYPE OF (shape_aspect);
+END_ENTITY;
+
+ENTITY triangular_matrix
+  SUBTYPE OF (linearized_table_function);
+  default_entry : maths_value;
+  lo_up         : lower_upper;
+  order         : ordering_type;
+WHERE
+  WR1: SIZEOF(SELF\explicit_table_function.shape) = 2;
+  WR2: member_of(default_entry, SELF\maths_function.range);
+END_ENTITY;
+
+ENTITY triangulated_face
+  SUBTYPE OF (tessellated_face);
+  pnindex   : LIST [0 : ?] OF INTEGER;
+  triangles : LIST [1 : ?] OF LIST [3 : 3] OF INTEGER;
+WHERE
+  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
+  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> coordinates.npoints));
+END_ENTITY;
+
+ENTITY triangulated_point_cloud_dataset
+  SUBTYPE OF (scanned_data_item);
+  points    : point_cloud_set_or_superset;
+  triangles : LIST [1 : ?] OF LIST [3 : 3] OF INTEGER;
+END_ENTITY;
+
+ENTITY triangulated_surface_set
+  SUBTYPE OF (tessellated_surface_set);
+  pnindex   : LIST [0 : ?] OF INTEGER;
+  triangles : LIST [1 : ?] OF LIST [3 : 3] OF INTEGER;
+WHERE
+  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
+  WR2: NOT ((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> coordinates.npoints));
+END_ENTITY;
+
+ENTITY trimmed_curve
+  SUBTYPE OF (bounded_curve);
+  basis_curve           : curve;
+  trim_1                : SET [1 : 2] OF trimming_select;
+  trim_2                : SET [1 : 2] OF trimming_select;
+  sense_agreement       : BOOLEAN;
+  master_representation : trimming_preference;
+WHERE
+  WR1: (HIINDEX(trim_1) = 1) OR (TYPEOF(trim_1[1]) <> TYPEOF(trim_1[2]));
+  WR2: (HIINDEX(trim_2) = 1) OR (TYPEOF(trim_2[1]) <> TYPEOF(trim_2[2]));
+END_ENTITY;
+
+ENTITY turned_knurl
+  SUBTYPE OF (feature_definition);
+WHERE
+  WR1: (SELF\characterized_object.description IN ['diamond','diagonal','straight']);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     ({6 <= SIZEOF(pdr.used_representation.items) <= 9}))) =
+                      1)) =
+       1;
+  WR3: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                   TYPEOF(it)) AND
+                                                                  ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+                                                                   TYPEOF(it\measure_with_unit.value_component)) AND
+                                                                  (it.name = 'number of teeth')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR4: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'major diameter')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR5: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'nominal diameter')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR6: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'tooth depth')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR7: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'root fillet')))) <=
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR8: (SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | (NOT (SIZEOF(QUERY(impl_rep
+                                          <* QUERY(pdr
+                                                   <* USEDIN(pd,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                   | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                      TYPEOF(pdr.used_representation)))
+                                          | (NOT (SIZEOF(QUERY(it
+                                                               <* impl_rep.used_representation.items
+                                                               | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                          TYPEOF(it)) =
+                                                                   2) AND
+                                                                  (it.name = 'diametral pitch')))) =
+                                                  1)))) =
+                             0)))) =
+        0);
+  WR9: ((NOT (SELF\characterized_object.description IN ['diamond','diagonal'])) OR
+        (SIZEOF(QUERY(pd
+                      <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                      | (NOT (SIZEOF(QUERY(impl_rep
+                                           <* QUERY(pdr
+                                                    <* USEDIN(pd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                       TYPEOF(pdr.used_representation)))
+                                           | (NOT (SIZEOF(QUERY(it
+                                                                <* impl_rep.used_representation.items
+                                                                | ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                           TYPEOF(it)) =
+                                                                    2) AND
+                                                                   (it.name = 'helix angle')))) =
+                                                   1)))) =
+                              0)))) =
+         0));
+  WR10: ((NOT (SELF\characterized_object.description = 'diagonal')) OR
+         (SIZEOF(QUERY(pd
+                       <* USEDIN(SELF,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                       | (NOT (SIZEOF(QUERY(impl_rep
+                                            <* QUERY(pdr
+                                                     <* USEDIN(pd,
+                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                     | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN
+                                                        TYPEOF(pdr.used_representation)))
+                                            | (NOT (SIZEOF(QUERY(it
+                                                                 <* impl_rep.used_representation.items
+                                                                 | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                                                     TYPEOF(it)) AND
+                                                                    (it.name = 'helix hand')))) =
+                                                    1)))) =
+                               0)))) =
+          0));
+  WR11: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((sa_occ.description = 'partial area occurrence') AND
+                                              (SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'applied area usage') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_AREA' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) =
+                                               1)))) =
+                              1)))) =
+         0);
+  WR12: (SIZEOF(QUERY(pds
+                      <* QUERY(pd
+                               <* USEDIN(SELF,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                               | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                                  TYPEOF(pd)))
+                      | (NOT (SIZEOF(QUERY(sa_occ
+                                           <* USEDIN(pds,
+                                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE')
+                                           | ((SIZEOF(QUERY(sdr
+                                                            <* QUERY(sar
+                                                                     <* USEDIN(sa_occ,
+                                                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')
+                                                                     | ((sar.description = 'applied shape') AND
+                                                                        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINING_RELATIONSHIP') IN
+                                                                         TYPEOF(sar))))
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+                                                               TYPEOF(sdr.relating_shape_aspect)))) =
+                                               1)))) =
+                              1)))) =
+         0);
+END_ENTITY;
+
+ENTITY twisted_cross_sectional_group_shape_element
+  SUBTYPE OF (cross_sectional_group_shape_element);
+END_ENTITY;
+
+ENTITY two_direction_repeat_factor
+  SUBTYPE OF (one_direction_repeat_factor);
+  second_repeat_factor : vector;
+END_ENTITY;
+
+ENTITY type_qualifier;
+  name : label;
+END_ENTITY;
+
+ENTITY unary_boolean_expression
+  ABSTRACT SUPERTYPE OF (ONEOF(not_expression, odd_function))
+  SUBTYPE OF (boolean_expression, unary_generic_expression);
+END_ENTITY;
+
+ENTITY unary_function_call
+  ABSTRACT SUPERTYPE OF (ONEOF(abs_function, minus_function, sin_function, cos_function, tan_function, asin_function,
+                               acos_function, exp_function, log_function, log2_function, log10_function,
+                               square_root_function))
+  SUBTYPE OF (unary_numeric_expression);
+END_ENTITY;
+
+ENTITY unary_generic_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (generic_expression);
+  operand : generic_expression;
+END_ENTITY;
+
+ENTITY unary_numeric_expression
+  ABSTRACT SUPERTYPE
+  SUBTYPE OF (numeric_expression, unary_generic_expression);
+  SELF\unary_generic_expression.operand : numeric_expression;
+END_ENTITY;
+
+ENTITY unbound_parameter_environment
+  SUBTYPE OF (environment);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER' IN
+        TYPEOF(SELF\environment.syntactic_representation)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER_SEMANTICS' IN
+        TYPEOF(SELF\environment.semantics));
+END_ENTITY;
+
+ENTITY unbound_variational_parameter
+  SUBTYPE OF (variational_parameter);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_PARAMETER_ENVIRONMENT' IN
+       TYPEOF(SELF\generic_variable.interpretation);
+END_ENTITY;
+
+ENTITY unbound_variational_parameter_semantics
+  SUBTYPE OF (variable_semantics);
+END_ENTITY;
+
+ENTITY uncertainty_assigned_representation
+  SUBTYPE OF (representation);
+  uncertainty : SET [1 : ?] OF uncertainty_measure_with_unit;
+END_ENTITY;
+
+ENTITY uncertainty_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+  name        : label;
+  description : OPTIONAL text;
+WHERE
+  WR1: valid_measure_value(SELF\measure_with_unit.value_component);
+END_ENTITY;
+
+ENTITY uncertainty_qualifier
+  SUPERTYPE OF (ONEOF(standard_uncertainty, qualitative_uncertainty));
+  measure_name : label;
+  description  : text;
+END_ENTITY;
+
+ENTITY unconstrained_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN := true;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN := true;
+END_ENTITY;
+
+ENTITY unconstrained_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : unconstrained_pair;
+  actual_placement                : axis2_placement_3d;
+END_ENTITY;
+
+ENTITY unequally_disposed_geometric_tolerance
+  SUBTYPE OF (geometric_tolerance);
+  displacement : length_measure_with_unit;
+WHERE
+  WR1: 'NUMBER' IN TYPEOF(displacement\measure_with_unit.value_component);
+END_ENTITY;
+
+ENTITY uniform_curve
+  SUBTYPE OF (b_spline_curve);
+END_ENTITY;
+
+ENTITY uniform_product_space
+  SUBTYPE OF (maths_space, generic_literal);
+  base     : maths_space;
+  exponent : positive_integer;
+WHERE
+  WR1: expression_is_constant(base);
+  WR2: no_cyclic_space_reference(SELF, []);
+  WR3: base <> the_empty_space;
+END_ENTITY;
+
+ENTITY uniform_resource_identifier
+  SUBTYPE OF (descriptive_representation_item);
+END_ENTITY;
+
+ENTITY uniform_surface
+  SUBTYPE OF (b_spline_surface);
+END_ENTITY;
+
+ENTITY uniform_volume
+  SUBTYPE OF (b_spline_volume);
+END_ENTITY;
+
+ENTITY universal_pair
+  SUBTYPE OF (low_order_kinematic_pair);
+  input_skew_angle : OPTIONAL plane_angle_measure;
+DERIVE
+  SELF\low_order_kinematic_pair.t_x : BOOLEAN             := false;
+  SELF\low_order_kinematic_pair.t_y : BOOLEAN             := false;
+  SELF\low_order_kinematic_pair.t_z : BOOLEAN             := false;
+  SELF\low_order_kinematic_pair.r_x : BOOLEAN             := true;
+  SELF\low_order_kinematic_pair.r_y : BOOLEAN             := false;
+  SELF\low_order_kinematic_pair.r_z : BOOLEAN             := true;
+  skew_angle                        : plane_angle_measure := NVL(input_skew_angle, 0.0);
+WHERE
+  WR1: COS(plane_angle_for_pair_in_radian(SELF, skew_angle)) > 0.0;
+END_ENTITY;
+
+ENTITY universal_pair_value
+  SUBTYPE OF (pair_value);
+  SELF\pair_value.applies_to_pair : universal_pair;
+  first_rotation_angle            : plane_angle_measure;
+  second_rotation_angle           : plane_angle_measure;
+END_ENTITY;
+
+ENTITY universal_pair_with_range
+  SUBTYPE OF (universal_pair);
+  lower_limit_first_rotation  : OPTIONAL plane_angle_measure;
+  upper_limit_first_rotation  : OPTIONAL plane_angle_measure;
+  lower_limit_second_rotation : OPTIONAL plane_angle_measure;
+  upper_limit_second_rotation : OPTIONAL plane_angle_measure;
+WHERE
+  WR1: (NOT EXISTS(lower_limit_first_rotation) OR NOT EXISTS(upper_limit_first_rotation)) XOR
+       (lower_limit_first_rotation < upper_limit_first_rotation);
+  WR2: (NOT EXISTS(lower_limit_second_rotation) OR NOT EXISTS(upper_limit_second_rotation)) XOR
+       (lower_limit_second_rotation < upper_limit_second_rotation);
+END_ENTITY;
+
+ENTITY unused_patches
+  SUBTYPE OF (overcomplex_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_LOWER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE_STRIP']);
+  WR5: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY unused_shape_element
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
+END_ENTITY;
+
+ENTITY usage_association
+  SUBTYPE OF (action_method_relationship);
+  SELF\action_method_relationship.relating_method : information_usage_right;
+  SELF\action_method_relationship.related_method  : information_usage_right;
+DERIVE
+  related  : information_usage_right := SELF\action_method_relationship.related_method;
+  relating : information_usage_right := SELF\action_method_relationship.relating_method;
+END_ENTITY;
+
+ENTITY user_defined_11
+  SUBTYPE OF (representation_item);
+END_ENTITY;
+
+ENTITY user_defined_curve_font
+  SUBTYPE OF (curve_style_font, mapped_item);
+END_ENTITY;
+
+ENTITY user_defined_marker
+  SUBTYPE OF (mapped_item, pre_defined_marker);
+END_ENTITY;
+
+ENTITY user_defined_terminator_symbol
+  SUBTYPE OF (mapped_item, pre_defined_symbol);
+END_ENTITY;
+
+ENTITY user_selected_elements
+  SUBTYPE OF (representation_item);
+  picked_items : SET [1 : ?] OF representation_item;
+END_ENTITY;
+
+ENTITY user_selected_shape_elements
+  SUBTYPE OF (user_selected_elements);
+  SELF\user_selected_elements.picked_items : SET [1 : ?] OF shape_representation_item;
+END_ENTITY;
+
+ENTITY validation
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY validation_software_identification;
+  id                             : identifier;
+  name                           : label;
+  description                    : OPTIONAL text;
+  software_name                  : label;
+  additional_name                : label;
+  validation_criteria_or_results : validation_criteria_or_results_select;
+END_ENTITY;
+
+ENTITY value_format_type_qualifier;
+  format_type : value_format_type;
+END_ENTITY;
+
+ENTITY value_function
+  SUPERTYPE OF (int_value_function)
+  SUBTYPE OF (numeric_expression, unary_generic_expression);
+  SELF\unary_generic_expression.operand : string_expression;
+END_ENTITY;
+
+ENTITY value_range
+  SUBTYPE OF (compound_representation_item);
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SET_REPRESENTATION_ITEM' IN TYPEOF(item_element)) AND
+       value_range_wr1(item_element);
+  WR2: value_range_wr2(item_element);
+  WR3: value_range_wr3(item_element);
+END_ENTITY;
+
+ENTITY value_representation_item
+  SUBTYPE OF (representation_item);
+  value_component : measure_value;
+WHERE
+  WR1: SIZEOF(QUERY(rep
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN
+                           TYPEOF(rep.context_of_items)))) =
+       0;
+END_ENTITY;
+
+ENTITY variable
+  ABSTRACT SUPERTYPE OF (ONEOF(numeric_variable, boolean_variable, string_variable))
+  SUBTYPE OF (generic_variable);
+END_ENTITY;
+
+ENTITY variable_expression
+  SUBTYPE OF (variable_semantics);
+  property_associated : property_variable_rep_select;
+END_ENTITY;
+
+ENTITY variable_semantics
+  ABSTRACT SUPERTYPE;
+END_ENTITY;
+
+ENTITY variational_current_representation_relationship
+  SUBTYPE OF (representation_relationship);
+  SELF\representation_relationship.rep_1 : variational_representation;
+  current_result                         : representation;
+UNIQUE
+  UR1: current_result;
+WHERE
+  WR1: QUERY(q
+             <* SELF\representation_relationship.rep_1.items
+             | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN TYPEOF(q))) =
+       SELF\representation_relationship.rep_2.items;
+  WR2: SELF\representation_relationship.rep_1.context_of_items :=:
+       SELF\representation_relationship.rep_2.context_of_items;
+  WR3: SIZEOF(QUERY(q
+                    <* SELF\representation_relationship.rep_2.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN
+                      TYPEOF(q))) =
+       0;
+  WR4: TYPEOF(SELF\representation_relationship.rep_1) - TYPEOF(SELF\representation_relationship.rep_2) =
+       ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION'];
+  WR5: current_result :=: SELF\representation_relationship.rep_2;
+END_ENTITY;
+
+ENTITY variational_parameter
+  ABSTRACT SUPERTYPE OF (ONEOF(bound_variational_parameter, unbound_variational_parameter))
+  SUBTYPE OF (variational_representation_item, maths_variable);
+  parameter_description   : OPTIONAL text;
+  parameter_current_value : maths_value;
+WHERE
+  WR1: member_of(parameter_current_value, SELF\maths_variable.values_space);
+  WR2: SELF\maths_variable.name = SELF\representation_item.name;
+END_ENTITY;
+
+ENTITY variational_representation
+  SUBTYPE OF (representation);
+INVERSE
+  cm_link : variational_current_representation_relationship FOR rep_1;
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* SELF\representation.items
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION_ITEM' IN
+                      TYPEOF(q))) >
+       0;
+  WR2: SIZEOF(QUERY(q <* (SELF\representation.items - cm_link.rep_2.items) | invalidate_vrep_item(q))) = 0;
+END_ENTITY;
+
+ENTITY variational_representation_item
+  ABSTRACT SUPERTYPE OF (auxiliary_geometric_representation_item)
+  SUBTYPE OF (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(q
+                    <* using_representations(SELF)
+                    | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VARIATIONAL_REPRESENTATION' IN
+                           TYPEOF(q)))) =
+       0;
+  WR2: SIZEOF(QUERY(q <* using_representations(SELF) | NOT (SELF IN q.items))) = 0;
+END_ENTITY;
+
+ENTITY vector
+  SUBTYPE OF (geometric_representation_item);
+  orientation : direction;
+  magnitude   : length_measure;
+WHERE
+  WR1: magnitude >= 0.0;
+END_ENTITY;
+
+ENTITY vector_style
+  SUBTYPE OF (curve_style, pre_defined_terminator_symbol);
+END_ENTITY;
+
+ENTITY vee_profile
+  SUBTYPE OF (shape_aspect);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FEATURE_COMPONENT_DEFINITION' IN
+       TYPEOF(SELF.of_shape.definition);
+  WR2: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                          TYPEOF(pdr.used_representation))) =
+                           1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | (NOT (SIZEOF(impl_rep.used_representation.items) >= 3) AND
+                                               (SIZEOF(impl_rep.used_representation.items) <= 6)))) =
+                           0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | SIZEOF(QUERY(pdr
+                                   <* USEDIN(pd,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                      TYPEOF(pdr.used_representation)) AND
+                                     (SIZEOF(QUERY(srwp_i
+                                                   <* pdr.used_representation.items
+                                                   | (srwp_i.name = 'orientation') OR
+                                                     (srwp_i.name = 'profile angle') OR (srwp_i.name = 'tilt angle') OR
+                                                     (srwp_i.name = 'profile radius') OR
+                                                     (srwp_i.name = 'first length') OR
+                                                     (srwp_i.name = 'second length'))) =
+                                      SIZEOF(pdr.used_representation.items)))) =
+                      1)) =
+       1;
+  WR5: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN
+                                                               TYPEOF(it)) AND
+                                                              (it.name = 'orientation'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                               TYPEOF(it)) AND
+                                                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                                                               TYPEOF(it\measure_with_unit.value_component)) AND
+                                                              (it.name = 'profile radius'))) <=
+                                               1))) =
+                           0))) =
+       0;
+  WR7: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'profile angle'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR8: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(impl_rep
+                                        <* QUERY(pdr
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                   TYPEOF(pdr.used_representation))
+                                        | NOT (SIZEOF(QUERY(it
+                                                            <* impl_rep.used_representation.items
+                                                            | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE_WITH_UNIT'] *
+                                                                      TYPEOF(it)) =
+                                                               2) AND
+                                                              (it.name = 'tilt angle'))) =
+                                               1))) =
+                           0))) =
+       0;
+  WR9: SIZEOF(QUERY(pd
+                    <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                    | NOT (SIZEOF(QUERY(pdr
+                                        <* USEDIN(pd,
+                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                        | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION' IN
+                                           TYPEOF(pdr.used_representation)) AND
+                                          (pdr.used_representation.name = 'profile limit'))) <=
+                           1))) =
+       0;
+  WR10: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                TYPEOF(it)) AND
+                                                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                                                                TYPEOF(it\measure_with_unit.value_component)) AND
+                                                               (it.name = 'first length'))) <=
+                                                1))) =
+                            0))) =
+        0;
+  WR11: SIZEOF(QUERY(pd
+                     <* USEDIN(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                     | NOT (SIZEOF(QUERY(impl_rep
+                                         <* QUERY(pdr
+                                                  <* USEDIN(pd,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                                    TYPEOF(pdr.used_representation))
+                                         | NOT (SIZEOF(QUERY(it
+                                                             <* impl_rep.used_representation.items
+                                                             | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                TYPEOF(it)) AND
+                                                               ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT' IN
+                                                                TYPEOF(it\measure_with_unit.value_component)) AND
+                                                               (it.name = 'second length'))) <=
+                                                1))) =
+                            0))) =
+        0;
+END_ENTITY;
+
+ENTITY velocity_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VELOCITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY velocity_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0);
+END_ENTITY;
+
+ENTITY verification
+  SUBTYPE OF (group);
+END_ENTITY;
+
+ENTITY verification_relationship
+  SUBTYPE OF (group_relationship);
+  SELF\group_relationship.relating_group : verification;
+  SELF\group_relationship.related_group  : verification;
+END_ENTITY;
+
+ENTITY versioned_action_request;
+  id          : identifier;
+  version     : OPTIONAL label;
+  purpose     : text;
+  description : OPTIONAL text;
+END_ENTITY;
+
+ENTITY versioned_action_request_relationship;
+  id                                : identifier;
+  name                              : label;
+  description                       : OPTIONAL text;
+  relating_versioned_action_request : versioned_action_request;
+  related_versioned_action_request  : versioned_action_request;
+END_ENTITY;
+
+ENTITY vertex
+  SUBTYPE OF (topological_representation_item);
+END_ENTITY;
+
+ENTITY vertex_loop
+  SUBTYPE OF (loop);
+  loop_vertex : vertex;
+END_ENTITY;
+
+ENTITY vertex_on_edge
+  SUBTYPE OF (vertex);
+  parent_edge         : edge_with_length;
+  distance_from_start : positive_length_measure;
+WHERE
+  WR1: distance_from_start < parent_edge.edge_length;
+END_ENTITY;
+
+ENTITY vertex_point
+  SUBTYPE OF (vertex, geometric_representation_item);
+  vertex_geometry : point;
+END_ENTITY;
+
+ENTITY vertex_shell
+  SUBTYPE OF (topological_representation_item);
+  vertex_shell_extent : vertex_loop;
+END_ENTITY;
+
+ENTITY view_volume
+  SUBTYPE OF (founded_item);
+  projection_type            : central_or_parallel;
+  projection_point           : cartesian_point;
+  view_plane_distance        : length_measure;
+  front_plane_distance       : length_measure;
+  front_plane_clipping       : BOOLEAN;
+  back_plane_distance        : length_measure;
+  back_plane_clipping        : BOOLEAN;
+  view_volume_sides_clipping : BOOLEAN;
+  view_window                : planar_box;
+INVERSE
+  camera_usages : SET [1:?] OF camera_model_d3 FOR perspective_of_volume;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_2D' IN
+        TYPEOF(SELF\view_volume.view_window.placement)) OR
+       (dot_product((representation_item(' ') || geometric_representation_item() || direction([0.0,0.0,1.0])),
+                    view_window\planar_box.placement\axis2_placement_3d.p[3]) =
+        1.0);
+  WR2: view_plane_distance = view_window.placement\placement.location.coordinates[3];
+END_ENTITY;
+
+ENTITY visual_appearance_representation
+  SUBTYPE OF (representation);
+WHERE
+  WR1: ({3 <= SIZEOF(SELF.items) <= 9}) AND
+       (SIZEOF(QUERY(i
+                     <* items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                        TYPEOF(i)) AND
+                       (i.name IN ['colour id','colour name','lustre','pattern','transparency','orientation']))) +
+        SIZEOF(QUERY(i
+                     <* items
+                     | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                               TYPEOF(i)) =
+                        1) AND
+                       (i.name IN ['refraction index','opacity']))) +
+        SIZEOF(QUERY(i
+                     <* items
+                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_FILE' IN TYPEOF(i)) AND
+                       (i.name IN ['texture map']))) =
+        SIZEOF(SELF.items));
+  WR2: SIZEOF(QUERY(i <* SELF.items | i.name = 'colour id')) = 1;
+  WR3: SIZEOF(QUERY(i <* SELF.items | i.name = 'lustre')) = 1;
+  WR4: SIZEOF(QUERY(i <* SELF.items | i.name = 'colour name')) <= 1;
+  WR5: SIZEOF(QUERY(i <* SELF.items | i.name = 'pattern')) <= 1;
+  WR6: SIZEOF(QUERY(i <* SELF.items | i.name = 'transparency')) <= 1;
+  WR7: SIZEOF(QUERY(i <* SELF.items | i.name = 'texture map')) <= 1;
+  WR8: SIZEOF(QUERY(i <* SELF.items | i.name = 'refraction index')) <= 1;
+  WR9: SIZEOF(QUERY(i <* SELF.items | i.name = 'opacity')) <= 1;
+  WR10: SIZEOF(QUERY(i <* SELF.items | i.name = 'orientation')) <= 1;
+  WR11: (SIZEOF(USEDIN(SELF,
+                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) =
+         1) AND
+        (SIZEOF(QUERY(pdr
+                      <* USEDIN(SELF,
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                      | SIZEOF(QUERY(gpa
+                                     <* USEDIN(pdr.definition,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_PROPERTY' IN
+                                        TYPEOF(gpa.base_definition)) AND
+                                       (gpa\general_property_association.base_definition\general_property.name =
+                                        'surface_condition'))) =
+                        1)) =
+         1);
+END_ENTITY;
+
+ENTITY volume
+  SUPERTYPE OF (ONEOF(block_volume, wedge_volume, spherical_volume, cylindrical_volume, eccentric_conical_volume,
+                      toroidal_volume, pyramid_volume, b_spline_volume, ellipsoid_volume, tetrahedron_volume,
+                      hexahedron_volume, locally_refined_spline_volume))
+  SUBTYPE OF (geometric_representation_item);
+WHERE
+  WR1: SELF\geometric_representation_item.dim = 3;
+END_ENTITY;
+
+ENTITY volume_measure_with_unit
+  SUBTYPE OF (measure_with_unit);
+WHERE
+  WR1: 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
+END_ENTITY;
+
+ENTITY volume_unit
+  SUBTYPE OF (derived_unit);
+WHERE
+  WR1: derive_dimensional_exponents(SELF) = dimensional_exponents(3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+END_ENTITY;
+
+ENTITY volume_with_faces
+  ABSTRACT SUPERTYPE OF (ONEOF(volume_with_shell, volume_with_parametric_boundary))
+  SUBTYPE OF (geometric_representation_item, topological_representation_item);
+  volume_geometry : volume;
+END_ENTITY;
+
+ENTITY volume_with_parametric_boundary
+  SUBTYPE OF (volume_with_faces);
+  outer_bound : LIST [6 : 6] OF face;
+END_ENTITY;
+
+ENTITY volume_with_shell
+  SUBTYPE OF (volume_with_faces);
+  outer_bound : closed_shell;
+END_ENTITY;
+
+ENTITY wedge_volume
+  SUBTYPE OF (volume);
+  position : axis2_placement_3d;
+  x        : positive_length_measure;
+  y        : positive_length_measure;
+  z        : positive_length_measure;
+  ltx      : length_measure;
+WHERE
+  WR1: ((0.0 <= ltx) AND (ltx < x));
+END_ENTITY;
+
+ENTITY week_of_year_and_day_date
+  SUBTYPE OF (date);
+  week_component : week_in_year_number;
+  day_component  : OPTIONAL day_in_week_number;
+WHERE
+  WR1: NOT (leap_year(SELF\date.year_component)) OR {1 <= (day_component + (7 * (week_component - 1))) <= 366};
+  WR2: leap_year(SELF\date.year_component) OR {1 <= (day_component + (7 * (week_component - 1))) <= 365};
+END_ENTITY;
+
+ENTITY wire_shell
+  SUBTYPE OF (topological_representation_item);
+  wire_shell_extent : SET [1 : ?] OF loop;
+WHERE
+  WR1: NOT mixed_loop_type_set(wire_shell_extent);
+END_ENTITY;
+
+ENTITY wrong_element_name
+  SUBTYPE OF (externally_conditioned_data_quality_criterion);
+WHERE
+  WR1: validate_ecdq_inspected_elements_type(SELF,
+                                             ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM']);
+END_ENTITY;
+
+ENTITY wrongly_oriented_void
+  SUBTYPE OF (erroneous_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY wrongly_placed_loop
+  SUBTYPE OF (erroneous_topology_and_geometry_relationship);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE']);
+  WR3: validate_locations_of_extreme_value_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BOUND']);
+  WR4: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE']);
+END_ENTITY;
+
+ENTITY wrongly_placed_void
+  SUBTYPE OF (erroneous_manifold_solid_brep);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_logical_test;
+WHERE
+  WR1: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE');
+  WR2: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BREP_WITH_VOIDS']);
+  WR3: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL']);
+  WR4: validate_accuracy_types(SELF, []);
+END_ENTITY;
+
+ENTITY xor_expression
+  SUBTYPE OF (binary_boolean_expression);
+  SELF\binary_generic_expression.operands : LIST [2 : 2] OF boolean_expression;
+END_ENTITY;
+
+ENTITY year_month
+  SUBTYPE OF (date);
+  month_component : month_in_year_number;
+END_ENTITY;
+
+ENTITY zero_surface_normal
+  SUBTYPE OF (geometry_with_local_irregularity);
+  SELF\shape_data_quality_criterion.assessment_specification : shape_data_quality_assessment_by_numerical_test;
+WHERE
+  WR1: ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_UPPER_VALUE_LIMIT' IN
+        TYPEOF(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold)) AND
+       ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN
+        value_limit_type(SELF\shape_data_quality_criterion.assessment_specification\shape_data_quality_assessment_by_numerical_test.threshold));
+  WR2: validate_measured_data_type(SELF, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE');
+  WR3: validate_inspected_elements_type(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE']);
+  WR4: validate_locations_of_extreme_value_type(SELF,
+                                                ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE']);
+  WR5: validate_accuracy_types(SELF, ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE']);
+END_ENTITY;
+
+ENTITY zone_breakdown_context
+  SUBTYPE OF (breakdown_context);
+END_ENTITY;
+
+ENTITY zone_element_usage
+  SUBTYPE OF (breakdown_element_usage);
+END_ENTITY;
+
+FUNCTION a3ma_get_accuracy_types(ei : SET [0 : ?] OF a3m_equivalence_accuracy_association) : SET [0 : ?] OF a3ma_accuracy_type_name;
+LOCAL
+  type_out : a3ma_measured_data_type_name;
+  retval   : SET OF a3ma_accuracy_type_name := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(ei);
+    type_out := a3ma_get_value_limit_type(ei[i].specific_accuracy.range);
+    retval := retval + [atna_others];
+  END_REPEAT;
+  RETURN(retval);
+END_FUNCTION;
+
+FUNCTION a3ma_get_detected_difference_type(ei : LIST [0 : ?] OF equivalence_detected_difference_select) : a3ma_detected_difference_type_name;
+LOCAL
+  type_out : SET OF STRING;
+  sizeei   : INTEGER;
+END_LOCAL;
+  sizeei := SIZEOF(ei);
+  IF (sizeei = 0)
+  THEN
+    RETURN(ddna_no_element);
+  END_IF;
+  type_out := TYPEOF(ei[1]);
+  IF (SIZEOF(ei) > 1)
+  THEN
+    RETURN(ddna_others);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN type_out)
+  THEN
+    RETURN(ddna_assembly_component_usage);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BINARY_ASSEMBLY_CONSTRAINT' IN type_out)
+  THEN
+    RETURN(ddna_binary_assembly_constraint);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN type_out)
+  THEN
+    RETURN(ddna_cartesian_point);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION' IN type_out)
+  THEN
+    RETURN(ddna_context_dependent_shape_representation);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
+  THEN
+    RETURN(ddna_count_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTI_LEVEL_REFERENCE_DESIGNATOR' IN type_out)
+  THEN
+    RETURN(ddna_multi_level_reference_designator);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+  THEN
+    RETURN(ddna_volume_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MS_INSPECTED_EQUIVALENCE_ELEMENT_SELECT' IN type_out)
+  THEN
+    RETURN(ddna_a3ms_inspected_equivalence_element_select);
+  END_IF;
+  RETURN(ddna_others);
+END_FUNCTION;
+
+FUNCTION a3ma_get_element_type(ei : SET [1 : ?] OF inspected_equivalence_element_select) : a3ma_element_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := TYPEOF(ei[1]);
+  IF (SIZEOF(ei) > 1)
+  THEN
+    RETURN(etna_others);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OR_REFERENCE' IN type_out)
+  THEN
+    RETURN(etna_product_definition_or_reference);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN type_out)
+  THEN
+    RETURN(etna_shape_representation);
+  END_IF;
+  RETURN(etna_others);
+END_FUNCTION;
+
+FUNCTION a3ma_get_measured_type(ei : equivalence_measured_value_select) : a3ma_measured_data_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := TYPEOF(ei);
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
+  THEN
+    RETURN(mdna_boolean_value);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_context_dependent_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_length_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3MA_LENGTH_MEASURE_AND_CONTEXT_DEPENDENT_MEASURE_PAIR' IN
+      type_out)
+  THEN
+    RETURN(mdna_length_measure_and_context_dependent_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_plane_angle_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_volume_measure);
+  END_IF;
+  RETURN(mdna_others);
+END_FUNCTION;
+
+FUNCTION a3ma_get_value_limit_type(ei : shape_data_quality_value_limit_type_select) : a3ma_measured_data_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := value_limit_type(ei);
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTEXT_DEPENDENT_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_context_dependent_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_length_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_plane_angle_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+  THEN
+    RETURN(mdna_volume_measure);
+  END_IF;
+  RETURN(mdna_others);
+END_FUNCTION;
+
+FUNCTION a3ma_validate_accuracy_types(ei : accuracy_associated_target_select;
+                                      cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
+LOCAL
+  aeaa : SET OF a3m_equivalence_accuracy_association;
+  rp   : SET OF representation;
+  tp   : SET OF a3ma_accuracy_type_name              := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(cr.accuracy_types);
+    tp := tp + [cr.accuracy_types[i]];
+  END_REPEAT;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(ei))
+  THEN
+    aeaa := bag_to_set(USEDIN(ei,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
+    IF (SIZEOF(cr.accuracy_types) = 0)
+    THEN
+      IF (SIZEOF(aeaa) = 0)
+      THEN
+        RETURN(true);
+      ELSE
+        RETURN(false);
+      END_IF;
+    END_IF;
+    IF (a3ma_get_accuracy_types(aeaa) = tp)
+    THEN
+      RETURN(true);
+    END_IF;
+    rp := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'));
+  ELSE
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION' IN TYPEOF(ei))
+    THEN
+      rp := [ei];
+    ELSE
+      rp := [];
+    END_IF;
+  END_IF;
+  aeaa := [];
+  REPEAT i := 1 TO SIZEOF(rp);
+    aeaa := aeaa +
+            bag_to_set(USEDIN(rp[i],
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
+  END_REPEAT;
+  IF (a3ma_get_accuracy_types(aeaa) >= tp)
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION a3ma_validate_detected_difference_types(ei : data_equivalence_inspection_report;
+                                                 cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
+LOCAL
+  deiir   : data_equivalence_inspection_instance_report;
+  eiriwei : equivalence_instance_report_item_with_notable_instances;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        eiriwei := deiir.inspected_instances[i];
+        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
+          IF (NOT (a3ma_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements) IN
+                   cr.detected_difference_types))
+          THEN
+            RETURN(false);
+          END_IF;
+          IF (NOT (a3ma_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
+                   cr.detected_difference_types))
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION a3ma_validate_element_types(ei : data_equivalence_inspection_report;
+                                     cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
+LOCAL
+  compared_et  : a3ma_element_type_name;
+  comparing_et : a3ma_element_type_name;
+  deiir        : data_equivalence_inspection_instance_report;
+  aeiiri       : a3m_equivalence_inspection_instance_report_item;
+  deiep        : data_equivalence_inspected_element_pair;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        aeiiri := deiir.inspected_instances[i];
+        deiep := aeiiri.inspected_element;
+        compared_et := a3ma_get_element_type(deiep.compared_elements);
+        comparing_et := a3ma_get_element_type(deiep.comparing_elements);
+        IF (NOT (compared_et IN cr.compared_element_types) OR NOT (comparing_et IN cr.comparing_element_types))
+        THEN
+          RETURN(false);
+        END_IF;
+        IF (compared_et <> comparing_et)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION a3ma_validate_measured_type(ei : data_equivalence_inspection_report;
+                                     cr : a3m_equivalence_criterion_for_assembly) : LOGICAL;
+LOCAL
+  amdtn   : a3ma_measured_data_type_name;
+  deicr   : data_equivalence_inspection_criterion_report;
+  acriwmv : a3m_equivalence_criterion_report_item_with_measured_value;
+  deiir   : data_equivalence_inspection_instance_report;
+  aeiiri  : a3m_equivalence_inspection_instance_report_item;
+  eiriwei : equivalence_instance_report_item_with_notable_instances;
+END_LOCAL;
+  amdtn := cr.measured_data_type;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_CRITERION_REPORT' IN TYPEOF(ei))
+  THEN
+    deicr := ei;
+    REPEAT i := 1 TO SIZEOF(deicr.statistical_values);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION_REPORT_ITEM_WITH_MEASURED_VALUE' IN
+          TYPEOF(deicr.statistical_values[i]))
+      THEN
+        acriwmv := deicr.statistical_values[i];
+        IF (a3ma_get_measured_type(acriwmv.representative_measured_value) <> amdtn)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        aeiiri := deiir.inspected_instances[i];
+        IF (a3ma_get_measured_type(aeiiri.measured_value_for_inspected_element) <> amdtn)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        eiriwei := deiir.inspected_instances[i];
+        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
+          IF (a3ma_get_measured_type(eiriwei.notable_instances[j].measured_value) <> amdtn)
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION a3ms_get_accuracy_types(ei : SET [0 : ?] OF a3m_equivalence_accuracy_association) : SET [0 : ?] OF a3ms_accuracy_type_name;
+LOCAL
+  type_out : a3ms_measured_data_type_name;
+  retval   : SET OF a3ms_accuracy_type_name := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(ei);
+    type_out := a3ms_get_value_limit_type(ei[i].specific_accuracy.range);
+    IF (type_out = mdns_area_measure)
+    THEN
+      retval := retval + [atns_area_measure];
+    ELSE
+      IF (type_out = mdns_length_measure)
+      THEN
+        retval := retval + [atns_length_measure];
+      ELSE
+        IF (type_out = mdns_plane_angle_measure)
+        THEN
+          retval := retval + [atns_plane_angle_measure];
+        ELSE
+          IF (type_out = mdns_volume_measure)
+          THEN
+            retval := retval + [atns_volume_measure];
+          ELSE
+            retval := retval + [atns_others];
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_REPEAT;
+  RETURN(retval);
+END_FUNCTION;
+
+FUNCTION a3ms_get_detected_difference_type(ei : LIST [0 : ?] OF equivalence_detected_difference_select) : a3ms_detected_difference_type_name;
+LOCAL
+  type_out : SET OF STRING;
+  sizeei   : INTEGER;
+END_LOCAL;
+  sizeei := SIZEOF(ei);
+  IF (sizeei = 0)
+  THEN
+    RETURN(ddns_no_element);
+  ELSE
+    type_out := TYPEOF(ei[1]);
+    REPEAT i := 2 TO sizeei;
+      IF (TYPEOF(ei[i]) <> type_out)
+      THEN
+        RETURN(ddns_others);
+      END_IF;
+    END_REPEAT;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_area_measure);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_cartesian_point);
+      ELSE
+        IF (sizeei = 2)
+        THEN
+          RETURN(ddns_two_cartesian_points);
+        ELSE
+          RETURN(ddns_others);
+        END_IF;
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_connected_face_set);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COUNT_MEASURE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_count_measure);
+      ELSE
+        IF (sizeei = 2)
+        THEN
+          RETURN(ddns_two_count_measure);
+        ELSE
+          IF (sizeei = 3)
+          THEN
+            RETURN(ddns_three_count_measure);
+          ELSE
+            IF (sizeei = 4)
+            THEN
+              RETURN(ddns_four_count_measure);
+            ELSE
+              IF (sizeei = 5)
+              THEN
+                RETURN(ddns_five_count_measure);
+              ELSE
+                RETURN(ddns_others);
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_edge);
+      ELSE
+        RETURN(ddns_several_edges);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_face);
+      ELSE
+        RETURN(ddns_several_faces);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_length_measure);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_point_on_curve);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_point_on_surface);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+    THEN
+      IF (sizeei = 1)
+      THEN
+        RETURN(ddns_volume_measure);
+      ELSE
+        RETURN(ddns_others);
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(ddns_others);
+END_FUNCTION;
+
+FUNCTION a3ms_get_element_type(ei : SET [1 : ?] OF inspected_equivalence_element_select) : a3ms_element_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := TYPEOF(ei[1]);
+  IF (SIZEOF(ei) > 1)
+  THEN
+    RETURN(etns_others);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_EDGE_SET' IN type_out)
+  THEN
+    RETURN(etns_connected_edge_set);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONNECTED_FACE_SET' IN type_out)
+  THEN
+    RETURN(etns_connected_face_set);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SOLID_BREP' IN type_out)
+  THEN
+    RETURN(etns_manifold_solid_brep);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_CLOUD_DATASET' IN type_out)
+  THEN
+    RETURN(etns_point_cloud_dataset);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_SURFACE_MODEL' IN type_out)
+  THEN
+    RETURN(etns_shell_based_surface_model);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_MODEL' IN type_out)
+  THEN
+    RETURN(etns_shell_based_wireframe_model);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_POINT' IN type_out)
+  THEN
+    RETURN(etns_vertex_point);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_REPRESENTATION_ITEM' IN type_out)
+  THEN
+    RETURN(etns_external_representation_item);
+  END_IF;
+  RETURN(etns_others);
+END_FUNCTION;
+
+FUNCTION a3ms_get_measured_type(ei : equivalence_measured_value_select) : a3ms_measured_data_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := TYPEOF(ei);
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_area_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
+  THEN
+    RETURN(mdns_boolean_value);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_length_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_plane_angle_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_volume_measure);
+  END_IF;
+  RETURN(mdns_others);
+END_FUNCTION;
+
+FUNCTION a3ms_get_value_limit_type(ei : shape_data_quality_value_limit_type_select) : a3ms_measured_data_type_name;
+LOCAL
+  type_out : SET OF STRING;
+END_LOCAL;
+  type_out := value_limit_type(ei);
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_area_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_VALUE' IN type_out)
+  THEN
+    RETURN(mdns_boolean_value);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_length_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_plane_angle_measure);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN type_out)
+  THEN
+    RETURN(mdns_volume_measure);
+  END_IF;
+  RETURN(mdns_others);
+END_FUNCTION;
+
+FUNCTION a3ms_validate_accuracy_types(ei : accuracy_associated_target_select;
+                                      cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
+LOCAL
+  aeaa : SET OF a3m_equivalence_accuracy_association;
+  rp   : SET OF representation;
+  tp   : SET OF a3ms_accuracy_type_name              := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(cr.accuracy_types);
+    tp := tp + [cr.accuracy_types[i]];
+  END_REPEAT;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(ei))
+  THEN
+    aeaa := bag_to_set(USEDIN(ei,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
+    IF (SIZEOF(cr.accuracy_types) = 0)
+    THEN
+      IF (SIZEOF(aeaa) = 0)
+      THEN
+        RETURN(true);
+      ELSE
+        RETURN(false);
+      END_IF;
+    END_IF;
+    IF (a3ms_get_accuracy_types(aeaa) = tp)
+    THEN
+      RETURN(true);
+    END_IF;
+    rp := bag_to_set(USEDIN(ei, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'));
+  ELSE
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION' IN TYPEOF(ei))
+    THEN
+      rp := [ei];
+    ELSE
+      rp := [];
+    END_IF;
+  END_IF;
+  aeaa := [];
+  REPEAT i := 1 TO SIZEOF(rp);
+    aeaa := aeaa +
+            bag_to_set(USEDIN(rp[i],
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_ACCURACY_ASSOCIATION.EQUIVALENCE_TARGET'));
+  END_REPEAT;
+  IF (a3ms_get_accuracy_types(aeaa) >= tp)
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION a3ms_validate_detected_difference_types(ei : data_equivalence_inspection_report;
+                                                 cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
+LOCAL
+  deiir   : data_equivalence_inspection_instance_report;
+  eiriwei : equivalence_instance_report_item_with_notable_instances;
+  addtn   : a3ms_detected_difference_type_name;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        eiriwei := deiir.inspected_instances[i];
+        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
+          IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MISMATCH_OF_POINT_CLOUD_AND_RELATED_GEOMETRY' IN
+              TYPEOF(cr))
+          THEN
+            addtn := a3ms_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements);
+            IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) = etns_connected_edge_set)
+            THEN
+              IF (addtn <> ddns_point_on_curve)
+              THEN
+                RETURN(false);
+              END_IF;
+            ELSE
+              IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) = etns_connected_face_set)
+              THEN
+                IF (addtn <> ddns_point_on_surface)
+                THEN
+                  RETURN(false);
+                END_IF;
+              ELSE
+                IF (a3ms_get_element_type(eiriwei.inspected_element.comparing_elements) <>
+                    etns_external_representation_item)
+                THEN
+                  RETURN(false);
+                END_IF;
+              END_IF;
+            END_IF;
+            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
+                     cr.detected_difference_types))
+            THEN
+              RETURN(false);
+            END_IF;
+          ELSE
+            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].comparing_elements) IN
+                     cr.detected_difference_types))
+            THEN
+              RETURN(false);
+            END_IF;
+            IF (NOT (a3ms_get_detected_difference_type(eiriwei.notable_instances[j].compared_elements) IN
+                     cr.detected_difference_types))
+            THEN
+              RETURN(false);
+            END_IF;
+          END_IF;
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION a3ms_validate_element_types(ei : data_equivalence_inspection_report;
+                                     cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
+LOCAL
+  compared_et  : a3ms_element_type_name;
+  comparing_et : a3ms_element_type_name;
+  deiir        : data_equivalence_inspection_instance_report;
+  aeiiri       : a3m_equivalence_inspection_instance_report_item;
+  deiep        : data_equivalence_inspected_element_pair;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        aeiiri := deiir.inspected_instances[i];
+        deiep := aeiiri.inspected_element;
+        compared_et := a3ms_get_element_type(deiep.compared_elements);
+        comparing_et := a3ms_get_element_type(deiep.comparing_elements);
+        IF ((NOT (compared_et IN cr.compared_element_types) AND (compared_et <> etns_external_representation_item)) OR
+            (NOT (comparing_et IN cr.comparing_element_types) AND (comparing_et <> etns_external_representation_item)))
+        THEN
+          RETURN(false);
+        END_IF;
+        IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MISMATCH_OF_POINT_CLOUD_AND_RELATED_GEOMETRY' IN
+            TYPEOF(cr))
+        THEN
+          IF (((comparing_et <> etns_external_representation_item) AND
+               (compared_et <> etns_external_representation_item)) AND
+              (compared_et = comparing_et))
+          THEN
+            RETURN(false);
+          END_IF;
+        ELSE
+          IF (((comparing_et <> etns_external_representation_item) AND
+               (compared_et <> etns_external_representation_item)) AND
+              (compared_et <> comparing_et))
+          THEN
+            RETURN(false);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION a3ms_validate_measured_type(ei : data_equivalence_inspection_report;
+                                     cr : a3m_equivalence_criterion_for_shape) : LOGICAL;
+LOCAL
+  amdtn   : a3ms_measured_data_type_name;
+  deicr   : data_equivalence_inspection_criterion_report;
+  acriwmv : a3m_equivalence_criterion_report_item_with_measured_value;
+  deiir   : data_equivalence_inspection_instance_report;
+  aeiiri  : a3m_equivalence_inspection_instance_report_item;
+  eiriwei : equivalence_instance_report_item_with_notable_instances;
+END_LOCAL;
+  amdtn := cr.measured_data_type;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_CRITERION_REPORT' IN TYPEOF(ei))
+  THEN
+    deicr := ei;
+    REPEAT i := 1 TO SIZEOF(deicr.statistical_values);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_CRITERION_REPORT_ITEM_WITH_MEASURED_VALUE' IN
+          TYPEOF(deicr.statistical_values[i]))
+      THEN
+        acriwmv := deicr.statistical_values[i];
+        IF (a3ms_get_measured_type(acriwmv.representative_measured_value) <> amdtn)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_EQUIVALENCE_INSPECTION_INSTANCE_REPORT' IN TYPEOF(ei))
+  THEN
+    deiir := ei;
+    REPEAT i := 1 TO SIZEOF(deiir.inspected_instances);
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.A3M_EQUIVALENCE_INSPECTION_INSTANCE_REPORT_ITEM' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        aeiiri := deiir.inspected_instances[i];
+        IF (a3ms_get_measured_type(aeiiri.measured_value_for_inspected_element) <> amdtn)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUIVALENCE_INSTANCE_REPORT_ITEM_WITH_NOTABLE_INSTANCES' IN
+          TYPEOF(deiir.inspected_instances[i]))
+      THEN
+        eiriwei := deiir.inspected_instances[i];
+        REPEAT j := 1 TO SIZEOF(eiriwei.notable_instances);
+          IF (a3ms_get_measured_type(eiriwei.notable_instances[j].measured_value) <> amdtn)
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION above_plane(p1 : cartesian_point;
+                     p2 : cartesian_point;
+                     p3 : cartesian_point;
+                     p4 : cartesian_point) : REAL;
+LOCAL
+  dir2 : direction := dummy_gri || direction([1.0,0.0,0.0]);
+  dir3 : direction := dummy_gri || direction([1.0,0.0,0.0]);
+  dir4 : direction := dummy_gri || direction([1.0,0.0,0.0]);
+  val  : REAL;
+  mag  : REAL;
+END_LOCAL;
+  IF (p1.dim <> 3)
+  THEN
+    RETURN(?);
+  END_IF;
+  REPEAT i := 1 TO 3;
+    dir2.direction_ratios[i] := p2.coordinates[i] - p1.coordinates[i];
+    dir3.direction_ratios[i] := p3.coordinates[i] - p1.coordinates[i];
+    dir4.direction_ratios[i] := p4.coordinates[i] - p1.coordinates[i];
+    mag := dir4.direction_ratios[i] * dir4.direction_ratios[i];
+  END_REPEAT;
+  mag := SQRT(mag);
+  val := mag * dot_product(dir4, cross_product(dir2, dir3).orientation);
+  RETURN(val);
+END_FUNCTION;
+
+FUNCTION acyclic(arg1 : generic_expression;
+                 arg2 : SET OF generic_expression) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_GENERIC_EXPRESSION' IN TYPEOF(arg1))
+  THEN
+    RETURN(true);
+  END_IF;
+  IF arg1 IN arg2
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNARY_GENERIC_EXPRESSION' IN TYPEOF(arg1)
+  THEN
+    RETURN(acyclic(arg1\unary_generic_expression.operand, arg2 + [arg1]));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BINARY_GENERIC_EXPRESSION' IN TYPEOF(arg1)
+  THEN
+    RETURN(acyclic(arg1\binary_generic_expression.operands[1], arg2 + [arg1]) AND
+           acyclic(arg1\binary_generic_expression.operands[2], arg2 + [arg1]));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTIPLE_ARITY_GENERIC_EXPRESSION' IN TYPEOF(arg1)
+  THEN
+    result := true;
+    REPEAT i := 1 TO SIZEOF(arg1\multiple_arity_generic_expression.operands);
+      result := result AND acyclic(arg1\multiple_arity_generic_expression.operands[i], arg2 + [arg1]);
+    END_REPEAT;
+    RETURN(result);
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION acyclic_action_directive_relationship(relation : action_directive_relationship;
+                                               relatives : SET [1 : ?] OF action_directive;
+                                               specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF action_directive_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(adr
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACTION_DIRECTIVE_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(adr));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_action_directive_relationship(x[i], relatives + relation.relating, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_alternative_solution_relationship(relation : alternative_solution_relationship;
+                                                   relatives : SET [1 : ?] OF product_definition_formation;
+                                                   specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF alternative_solution_relationship;
+END_LOCAL;
+  IF relation.relating_product_definition_formation IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(asr
+             <* bag_to_set(USEDIN(relation.relating_product_definition_formation,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ALTERNATIVE_SOLUTION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION_FORMATION'))
+             | specific_relation IN TYPEOF(asr));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_alternative_solution_relationship(x[i], relatives + relation.relating_product_definition_formation,
+                                                     specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_assignment_object_relationship(relation : assignment_object_relationship;
+                                                relatives : SET [1 : ?] OF assignment_object_select;
+                                                specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF assignment_object_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(aor
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSIGNMENT_OBJECT_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(aor));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_assignment_object_relationship(x[i], relatives + relation.relating, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_classification_assignment_relationship(relation : classification_assignment_relationship;
+                                                        relatives : SET [1 : ?] OF classification_assignment;
+                                                        specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF classification_assignment_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(car
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFICATION_ASSIGNMENT_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(car));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_classification_assignment_relationship(x[i], relatives + relation.relating, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_composite_text(start_composite : composite_text;
+                                child_text : SET [1 : ?] OF text_or_character) : LOGICAL;
+LOCAL
+  i                     : INTEGER;
+  local_composite_text  : SET [0 : ?] OF composite_text;
+  local_annotation_text : SET [0 : ?] OF annotation_text;
+  local_children        : SET [0 : ?] OF text_or_character;
+END_LOCAL;
+  local_composite_text := QUERY(child
+                                <* child_text
+                                | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT' IN TYPEOF(child)));
+  IF (SIZEOF(local_composite_text) > 0)
+  THEN
+    REPEAT i := 1 TO HIINDEX(local_composite_text);
+      IF (start_composite :=: local_composite_text[i])
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  local_children := child_text;
+  IF (SIZEOF(local_composite_text)) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(local_composite_text);
+      local_children := local_children + local_composite_text[i].collected_text;
+    END_REPEAT;
+  END_IF;
+  local_annotation_text := QUERY(child
+                                 <* child_text
+                                 | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN
+                                    TYPEOF(child)));
+  IF (SIZEOF(local_annotation_text) > 0)
+  THEN
+    REPEAT i := 1 TO HIINDEX(local_annotation_text);
+      local_children := local_children +
+                        QUERY(item
+                              <* local_annotation_text[i]\mapped_item.mapping_source.mapped_representation.items
+                              | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT',
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_TEXT'] *
+                                       TYPEOF(item)) >
+                                0);
+    END_REPEAT;
+  END_IF;
+  IF (local_children :<>: child_text)
+  THEN
+    RETURN(acyclic_composite_text(start_composite, local_children));
+  ELSE
+    RETURN(true);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_curve_replica(rep : curve_replica;
+                               parent : curve) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA') IN TYPEOF(parent))
+  THEN
+    RETURN(true);
+  END_IF;
+  (* Return TRUE if the parent is not of type curve_replica *)
+  IF (parent :=: rep)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_curve_replica(rep, parent\curve_replica.parent_curve));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_description_text_assignment_relationship(relation : description_text_assignment_relationship;
+                                                          relatives : SET [1 : ?] OF description_text_assignment;
+                                                          specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF description_text_assignment_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(dtar
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_TEXT_ASSIGNMENT_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(dtar));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_description_text_assignment_relationship(x[i], relatives + relation.relating, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_external_identification_assignment_relationship(relation : external_identification_assignment_relationship;
+                                                                 relatives : SET [1 : ?] OF external_identification_assignment;
+                                                                 specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF external_identification_assignment_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(eiar
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(eiar));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_external_identification_assignment_relationship(x[i], relatives + relation.relating,
+                                                                   specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_generic_property_relationship(relation : generic_property_relationship;
+                                               relatives : SET [1 : ?] OF generic_property_definition_select;
+                                               specific_relation : STRING) : LOGICAL;
+LOCAL
+  x : SET OF generic_property_relationship;
+END_LOCAL;
+  IF relation.relating IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(gpr
+             <* bag_to_set(USEDIN(relation.relating,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_PROPERTY_RELATIONSHIP.RELATED'))
+             | specific_relation IN TYPEOF(gpr));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_generic_property_relationship(x[i], relatives + relation.relating, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_geometric_tolerance_relationship(relation : geometric_tolerance_relationship;
+                                                  relatives : SET [1 : ?] OF geometric_tolerance;
+                                                  specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF geometric_tolerance_relationship;
+END_LOCAL;
+  IF relation.relating_geometric_tolerance IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(geotol
+             <* bag_to_set(USEDIN(relation.relating_geometric_tolerance,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE_RELATIONSHIP.RELATED_GEOMETRIC_TOLERANCE'))
+             | specific_relation IN TYPEOF(geotol));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_geometric_tolerance_relationship(x[i], relatives + relation.relating_geometric_tolerance,
+                                                    specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_mapped_representation(mi : mapped_item) : BOOLEAN;
+LOCAL
+  rms : SET OF representation_map;
+  mis : SET OF mapped_item;
+  rs1 : SET OF representation;
+  rs2 : SET OF representation;
+END_LOCAL;
+  rs1 := using_representations(mi);
+  rs2 := [];
+  REPEAT WHILE SIZEOF(rs1) > 0;
+    REPEAT i := 1 TO HIINDEX(rs1);
+      rms := bag_to_set(USEDIN(rs1[i],
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
+      IF SIZEOF(rms) > 0
+      THEN
+        REPEAT j := 1 TO HIINDEX(rms);
+          mis := bag_to_set(USEDIN(rms[i],
+                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE'));
+          IF SIZEOF(mis) > 0
+          THEN
+            REPEAT j := 1 TO HIINDEX(mis);
+              IF mis[i] :=: mi
+              THEN
+                RETURN(false);
+              END_IF;
+              rs2 := rs2 + using_representations(mis[i]);
+            END_REPEAT;
+          END_IF;
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+    rs1 := rs2;
+    rs2 := [];
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_point_replica(rep : point_replica;
+                               parent : point) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA') IN TYPEOF(parent))
+  THEN
+    RETURN(true);
+  END_IF;
+  (* Return TRUE if the parent is not of type point_replica *)
+  IF (parent :=: rep)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_point_replica(rep, parent\point_replica.parent_pt));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_product_category_relationship(relation : product_category_relationship;
+                                               children : SET OF product_category) : BOOLEAN;
+LOCAL
+  x              : SET OF product_category_relationship;
+  local_children : SET OF product_category;
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(children);
+    IF relation.category :=: children[i]
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  x := bag_to_set(USEDIN(relation.category,
+                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY'));
+  local_children := children + relation.category;
+  IF SIZEOF(x) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(x);
+      IF NOT acyclic_product_category_relationship(x[i], local_children)
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_product_definition_relationship(relation : product_definition_relationship;
+                                                 relatives : SET [1 : ?] OF product_definition_or_reference;
+                                                 specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF product_definition_relationship;
+END_LOCAL;
+  IF relation.relating_product_definition IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(pd
+             <* bag_to_set(USEDIN(relation.relating_product_definition,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION'))
+             | specific_relation IN TYPEOF(pd));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_product_definition_relationship(x[i], relatives + relation.relating_product_definition,
+                                                   specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_product_definition_specified_occurrence(pdso : product_definition_specified_occurrence;
+                                                         definition : product_definition_occurrence) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE') IN
+          TYPEOF(definition))
+  THEN
+    RETURN(true);
+  END_IF;
+  IF (definition :=: pdso)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_product_definition_specified_occurrence(pdso, definition\product_definition_occurrence.definition));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_representation_relationship(relation : representation_relationship;
+                                             relatives : SET [1 : ?] OF representation;
+                                             specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF representation_relationship;
+END_LOCAL;
+  IF relation.rep_1 IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(r
+             <* bag_to_set(USEDIN(relation.rep_1,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP.REP_2'))
+             | specific_relation IN TYPEOF(r));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_representation_relationship(x[i], relatives + relation.rep_1, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_shape_aspect_occurrence(sao : shape_aspect_occurrence;
+                                         definition : shape_aspect_or_characterized_object) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_OCCURRENCE') IN TYPEOF(definition))
+  THEN
+    RETURN(true);
+  END_IF;
+  IF (definition :=: sao)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_shape_aspect_occurrence(sao, definition\shape_aspect_occurrence.definition));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_shape_aspect_relationship(relation : shape_aspect_relationship;
+                                           relatives : SET [1 : ?] OF shape_aspect;
+                                           specific_relation : STRING) : BOOLEAN;
+LOCAL
+  x : SET OF shape_aspect_relationship;
+END_LOCAL;
+  IF relation.relating_shape_aspect IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(sa
+             <* bag_to_set(USEDIN(relation.relating_shape_aspect,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'))
+             | specific_relation IN TYPEOF(sa));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_shape_aspect_relationship(x[i], relatives + relation.relating_shape_aspect, specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_solid_replica(rep : solid_replica;
+                               parent : solid_model) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_REPLICA') IN TYPEOF(parent))
+  THEN
+    RETURN(true);
+  END_IF;
+  (* Return TRUE if the parent is not of type solid_replica. *)
+  IF (parent :=: rep)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_solid_replica(rep, parent\solid_replica.parent_solid));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION acyclic_state_definition_to_state_assignment_relationship(relation : state_definition_to_state_assignment_relationship;
+                                                                   relatives : SET [1 : ?] OF ascribable_state;
+                                                                   specific_relation : STRING) : LOGICAL;
+LOCAL
+  x : SET OF state_definition_to_state_assignment_relationship;
+END_LOCAL;
+  IF relation.relating_ascribable_state IN relatives
+  THEN
+    RETURN(false);
+  END_IF;
+  x := QUERY(sdtsar
+             <* bag_to_set(USEDIN(relation.relating_ascribable_state,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STATE_DEFINITION_TO_STATE_ASSIGNMENT_RELATIONSHIP.RELATED_ASCRIBABLE_STATE'))
+             | specific_relation IN TYPEOF(sdtsar));
+  REPEAT i := 1 TO HIINDEX(x);
+    IF NOT acyclic_state_definition_to_state_assignment_relationship(x[i],
+                                                                     relatives + relation.relating_ascribable_state,
+                                                                     specific_relation)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION acyclic_surface_replica(rep : surface_replica;
+                                 parent : surface) : BOOLEAN;
+  IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA') IN TYPEOF(parent))
+  THEN
+    RETURN(true);
+  END_IF;
+  (* Return TRUE if the parent is not of type surface_replica *)
+  IF (parent :=: rep)
+  THEN
+    RETURN(false);
+  ELSE
+    RETURN(acyclic_surface_replica(rep, parent\surface_replica.parent_surface));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION advanced_face_properties(testface : face) : BOOLEAN;
+(* return TRUE if testface is of type advanced_face *)
+  (* return TRUE if testface is of type advanced_face *)
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_FACE' IN TYPEOF(testface)
+  THEN
+    RETURN(true);
+  END_IF;
+  (* if testface is a subface recursively test the parent_face,
+     return FALSE for all other types of face *)
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBFACE' IN TYPEOF(testface))
+  THEN
+    RETURN(advanced_face_properties(testface\subface.parent_face));
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION all_members_of_es(sv : SET OF maths_value;
+                           es : elementary_space_enumerators) : LOGICAL;
+
+CONSTANT
+  base_types : SET OF STRING :=
+               ['NUMBER',
+                'COMPLEX_NUMBER_LITERAL',
+                'REAL',
+                'INTEGER',
+                'LOGICAL',
+                'BOOLEAN',
+                'STRING',
+                'BINARY',
+                'MATHS_SPACE',
+                'MATHS_FUNCTION',
+                'LIST',
+                'ELEMENTARY_SPACE_ENUMERATORS',
+                'ORDERING_TYPE',
+                'LOWER_UPPER',
+                'SYMMETRY_TYPE',
+                'ELEMENTARY_FUNCTION_ENUMERATORS',
+                'OPEN_CLOSED',
+                'SPACE_CONSTRAINT_TYPE',
+                'REPACKAGE_OPTIONS',
+                'EXTENSION_OPTIONS'];
+END_CONSTANT;
+LOCAL
+  v        : maths_value;
+  key_type : STRING             := '';
+  types    : SET OF STRING;
+  ge       : generic_expression;
+  cum      : LOGICAL            := true;
+  vspc     : maths_space;
+END_LOCAL;
+  IF NOT EXISTS(sv) OR NOT EXISTS(es)
+  THEN
+    RETURN(false);
+  END_IF;
+  CASE es OF
+    es_numbers : key_type := 'NUMBER';
+    es_complex_numbers : key_type := 'COMPLEX_NUMBER_LITERAL';
+    es_reals : key_type := 'REAL';
+    es_integers : key_type := 'INTEGER';
+    es_logicals : key_type := 'LOGICAL';
+    es_booleans : key_type := 'BOOLEAN';
+    es_strings : key_type := 'STRING';
+    es_binarys : key_type := 'BINARY';
+    es_maths_spaces : key_type := 'MATHS_SPACE';
+    es_maths_functions : key_type := 'MATHS_FUNCTION';
+    es_generics : RETURN(true);
+  END_CASE;
+  REPEAT i := 1 TO SIZEOF(sv);
+    IF NOT EXISTS(sv[i])
+    THEN
+      RETURN(false);
+    END_IF;
+    v := simplify_maths_value(sv[i]);
+    types := stripped_typeof(v);
+    IF key_type IN types
+    THEN
+      SKIP;
+    END_IF;
+    IF (es = es_numbers) AND ('COMPLEX_NUMBER_LITERAL' IN types)
+    THEN
+      SKIP;
+    END_IF;
+    IF SIZEOF(base_types * types) > 0
+    THEN
+      RETURN(false);
+    END_IF;
+    ge := v;
+    IF has_values_space(ge)
+    THEN
+      vspc := values_space_of(ge);
+      IF NOT subspace_of_es(vspc, es)
+      THEN
+        IF NOT compatible_spaces(vspc, make_elementary_space(es))
+        THEN
+          RETURN(false);
+        END_IF;
+        cum := unknown;
+      END_IF;
+    ELSE
+      cum := unknown;
+    END_IF;
+    IF cum = false
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(cum);
+END_FUNCTION;
+
+FUNCTION any_space_satisfies(sc : space_constraint_type;
+                             spc : maths_space) : BOOLEAN;
+LOCAL
+  spc_id : elementary_space_enumerators;
+END_LOCAL;
+  IF (sc = sc_equal) OR NOT ('ELEMENTARY_SPACE' IN stripped_typeof(spc))
+  THEN
+    RETURN(false);
+  END_IF;
+  spc_id := spc\elementary_space.space_id;
+  IF sc = sc_subspace
+  THEN
+    RETURN(bool(spc_id = es_generics));
+  END_IF;
+  IF sc = sc_member
+  THEN
+    RETURN(bool((spc_id = es_generics) OR (spc_id = es_maths_spaces)));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION aspect_ratio(p : planar_box) : positive_ratio_measure;
+  IF (p.size_in_x > 0.) AND (p.size_in_y > 0.)
+  THEN
+    RETURN(p.size_in_x / p.size_in_y);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION assembly_leaf(item : product_definition) : BOOLEAN;
+LOCAL
+  local_relation  : SET OF assembly_component_usage := [];
+  local_relation2 : BAG OF assembly_component_usage := [];
+END_LOCAL;
+  local_relation2 := local_relation2 +
+                     QUERY(pdr
+                           <* USEDIN(item,
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATING_PRODUCT_DEFINITION')
+                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(pdr));
+  local_relation := bag_to_set(local_relation2);
+  IF (SIZEOF(local_relation) = 0)
+  THEN
+    RETURN(true);
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION assembly_root(item : product_definition) : BOOLEAN;
+-- extraction of related assembly_component_relationships --
+  IF (SIZEOF(QUERY(pdr
+                   <* USEDIN(item,
+                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN TYPEOF(pdr))) =
+      0)
+  THEN
+    RETURN(true);
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION assoc_product_space(ts1 : tuple_space;
+                             ts2 : tuple_space) : tuple_space;
+LOCAL
+  types1  : SET OF STRING         := stripped_typeof(ts1);
+  types2  : SET OF STRING         := stripped_typeof(ts2);
+  up1     : uniform_product_space := make_uniform_product_space(the_reals, 1);
+  up2     : uniform_product_space := make_uniform_product_space(the_reals, 1);
+  lp1     : listed_product_space  := the_zero_tuple_space;
+  lp2     : listed_product_space  := the_zero_tuple_space;
+  lps     : listed_product_space  := the_zero_tuple_space;
+  et1     : extended_tuple_space  := the_tuples;
+  et2     : extended_tuple_space  := the_tuples;
+  ets     : extended_tuple_space  := the_tuples;
+  use_up1 : BOOLEAN;
+  use_up2 : BOOLEAN;
+  use_lp1 : BOOLEAN;
+  use_lp2 : BOOLEAN;
+  factors : LIST OF maths_space   := [];
+  tspace  : tuple_space;
+END_LOCAL;
+  IF 'UNIFORM_PRODUCT_SPACE' IN types1
+  THEN
+    up1 := ts1;
+    use_up1 := true;
+    use_lp1 := false;
+  ELSE
+    IF 'LISTED_PRODUCT_SPACE' IN types1
+    THEN
+      lp1 := ts1;
+      use_up1 := false;
+      use_lp1 := true;
+    ELSE
+      IF NOT ('EXTENDED_TUPLE_SPACE' IN types1)
+      THEN
+        RETURN(?);
+      END_IF;
+      et1 := ts1;
+      use_up1 := false;
+      use_lp1 := false;
+    END_IF;
+  END_IF;
+  IF 'UNIFORM_PRODUCT_SPACE' IN types2
+  THEN
+    up2 := ts2;
+    use_up2 := true;
+    use_lp2 := false;
+  ELSE
+    IF 'LISTED_PRODUCT_SPACE' IN types2
+    THEN
+      lp2 := ts2;
+      use_up2 := false;
+      use_lp2 := true;
+    ELSE
+      IF NOT ('EXTENDED_TUPLE_SPACE' IN types2)
+      THEN
+        RETURN(?);
+      END_IF;
+      et2 := ts2;
+      use_up2 := false;
+      use_lp2 := false;
+    END_IF;
+  END_IF;
+  IF use_up1
+  THEN
+    IF use_up2
+    THEN
+      IF up1.base = up2.base
+      THEN
+        tspace := make_uniform_product_space(up1.base, up1.exponent + up2.exponent);
+      ELSE
+        factors := [up1.base:up1.exponent,up2.base:up2.exponent];
+        tspace := make_listed_product_space(factors);
+      END_IF;
+    ELSE
+      IF use_lp2
+      THEN
+        factors := [up1.base:up1.exponent];
+        factors := factors + lp2.factors;
+        tspace := make_listed_product_space(factors);
+      ELSE
+        tspace := assoc_product_space(up1, et2.base);
+        tspace := make_extended_tuple_space(tspace, et2.extender);
+      END_IF;
+    END_IF;
+  ELSE
+    IF use_lp1
+    THEN
+      IF use_up2
+      THEN
+        factors := [up2.base:up2.exponent];
+        factors := lp1.factors + factors;
+        tspace := make_listed_product_space(factors);
+      ELSE
+        IF use_lp2
+        THEN
+          tspace := make_listed_product_space(lp1.factors + lp2.factors);
+        ELSE
+          tspace := assoc_product_space(lp1, et2.base);
+          tspace := make_extended_tuple_space(tspace, et2.extender);
+        END_IF;
+      END_IF;
+    ELSE
+      IF use_up2
+      THEN
+        IF et1.extender = up2.base
+        THEN
+          tspace := assoc_product_space(et1.base, up2);
+          tspace := make_extended_tuple_space(tspace, et1.extender);
+        ELSE
+          RETURN(?);
+        END_IF;
+      ELSE
+        IF use_lp2
+        THEN
+          factors := lp2.factors;
+          REPEAT i := 1 TO SIZEOF(factors);
+            IF et1.extender <> factors[i]
+            THEN
+              RETURN(?);
+            END_IF;
+          END_REPEAT;
+          tspace := assoc_product_space(et1.base, lp2);
+          tspace := make_extended_tuple_space(tspace, et1.extender);
+        ELSE
+          IF et1.extender = et2.extender
+          THEN
+            tspace := assoc_product_space(et1, et2.base);
+          ELSE
+            RETURN(?);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(tspace);
+END_FUNCTION;
+
+FUNCTION associated_surface(arg : pcurve_or_surface) : surface;
+LOCAL
+  surf : surface;
+END_LOCAL;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(arg)
+  THEN
+    surf := arg\pcurve.basis_surface;
+  ELSE
+    surf := arg;
+  END_IF;
+  RETURN(surf);
+END_FUNCTION;
+
+FUNCTION atan2(y : REAL;
+               x : REAL) : REAL;
+LOCAL
+  r : REAL;
+END_LOCAL;
+  IF (y = 0.0) AND (x = 0.0)
+  THEN
+    RETURN(?);
+  END_IF;
+  r := ATAN(y, x);
+  IF x < 0.0
+  THEN
+    IF y < 0.0
+    THEN
+      r := r - PI;
+    ELSE
+      r := r + PI;
+    END_IF;
+  END_IF;
+  RETURN(r);
+END_FUNCTION;
+
+FUNCTION bag_to_set(the_bag : BAG OF GENERIC : INTYPE) : SET OF GENERIC : INTYPE;
+LOCAL
+  the_set : SET OF GENERIC : INTYPE := [];
+END_LOCAL;
+  IF SIZEOF(the_bag) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(the_bag);
+      the_set := the_set + the_bag[i];
+    END_REPEAT;
+  END_IF;
+  RETURN(the_set);
+END_FUNCTION;
+
+FUNCTION base_axis(dim : INTEGER;
+                   axis1 : direction;
+                   axis2 : direction;
+                   axis3 : direction) : LIST [2 : 3] OF direction;
+LOCAL
+  u      : LIST [2 : 3] OF direction;
+  factor : REAL;
+  d1     : direction;
+  d2     : direction;
+END_LOCAL;
+  IF (dim = 3)
+  THEN
+    d1 := NVL(normalise(axis3), dummy_gri || direction([0.0,0.0,1.0]));
+    d2 := first_proj_axis(d1, axis1);
+    u := [d2,second_proj_axis(d1, d2, axis2),d1];
+  ELSE
+    IF EXISTS(axis1)
+    THEN
+      d1 := normalise(axis1);
+      u := [d1,orthogonal_complement(d1)];
+      IF EXISTS(axis2)
+      THEN
+        factor := dot_product(axis2, u[2]);
+        IF (factor < 0.0)
+        THEN
+          u[2].direction_ratios[1] := -u[2].direction_ratios[1];
+          u[2].direction_ratios[2] := -u[2].direction_ratios[2];
+        END_IF;
+      END_IF;
+    ELSE
+      IF EXISTS(axis2)
+      THEN
+        d1 := normalise(axis2);
+        u := [orthogonal_complement(d1),d1];
+        u[1].direction_ratios[1] := -u[1].direction_ratios[1];
+        u[1].direction_ratios[2] := -u[1].direction_ratios[2];
+      ELSE
+        u := [dummy_gri || direction([1.0,0.0]),dummy_gri || direction([0.0,1.0])];
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(u);
+END_FUNCTION;
+
+FUNCTION bool(lgcl : LOGICAL) : BOOLEAN;
+  IF NOT EXISTS(lgcl)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF lgcl <> true
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION boolean_choose(b : BOOLEAN;
+                        choice1 : GENERIC : ITEM;
+                        choice2 : GENERIC : ITEM) : GENERIC : ITEM;
+  IF b
+  THEN
+    RETURN(choice1);
+  ELSE
+    RETURN(choice2);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION build_2axes(ref_direction : direction) : LIST [2 : 2] OF direction;
+LOCAL
+  d : direction := NVL(normalise(ref_direction), dummy_gri || direction([1.0,0.0]));
+END_LOCAL;
+  RETURN([d,orthogonal_complement(d)]);
+END_FUNCTION;
+
+FUNCTION build_axes(axis : direction;
+                    ref_direction : direction) : LIST [3 : 3] OF direction;
+LOCAL
+  d1 : direction;
+  d2 : direction;
+END_LOCAL;
+  d1 := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0]));
+  d2 := first_proj_axis(d1, ref_direction);
+  RETURN([d2,normalise(cross_product(d1, d2))\vector.orientation,d1]);
+END_FUNCTION;
+
+FUNCTION categories_of_product(obj : product) : SET OF STRING;
+LOCAL
+  category_assignments : BAG OF product_category;
+  categories           : SET OF STRING           := [];
+END_LOCAL;
+  category_assignments := USEDIN(obj,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS');
+  REPEAT i := LOINDEX(category_assignments) TO HIINDEX(category_assignments) BY 1;
+    categories := categories + category_assignments[i].name;
+  END_REPEAT;
+  RETURN(categories);
+END_FUNCTION;
+
+FUNCTION cc_design_person_and_organization_correlation(e : cc_design_person_and_organization_assignment) : BOOLEAN;
+LOCAL
+  po_role : STRING;
+END_LOCAL;
+  po_role := e\person_and_organization_assignment.role.name;
+  CASE po_role OF
+    'request_recipient' : IF SIZEOF(e.items) <>
+                             SIZEOF(QUERY(x
+                                          <* e.items
+                                          | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_REQUEST',
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_REQUEST'] *
+                                                   TYPEOF(x)) =
+                                            1))
+    THEN
+      RETURN(false);
+    END_IF;
+    'initiator' : IF SIZEOF(e.items) <>
+                     SIZEOF(QUERY(x
+                                  <* e.items
+                                  | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE_REQUEST',
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_REQUEST',
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.START_WORK',
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHANGE'] *
+                                           TYPEOF(x)) =
+                                    1))
+    THEN
+      RETURN(false);
+    END_IF;
+    'creator' : IF SIZEOF(e.items) <>
+                   SIZEOF(QUERY(x
+                                <* e.items
+                                | SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION',
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION'] *
+                                         TYPEOF(x)) =
+                                  1))
+    THEN
+      RETURN(false);
+    END_IF;
+    'part_supplier' : IF SIZEOF(e.items) <>
+                         SIZEOF(QUERY(x
+                                      <* e.items
+                                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
+                                        TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    'design_supplier' : IF SIZEOF(e.items) <>
+                           SIZEOF(QUERY(x
+                                        <* e.items
+                                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
+                                          TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    'design_owner' : IF SIZEOF(e.items) <>
+                        SIZEOF(QUERY(x
+                                     <* e.items
+                                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    'configuration_manager' : IF SIZEOF(e.items) <>
+                                 SIZEOF(QUERY(x
+                                              <* e.items
+                                              | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_ITEM' IN
+                                                TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    'contractor' : IF SIZEOF(e.items) <>
+                      SIZEOF(QUERY(x
+                                   <* e.items
+                                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONTRACT' IN TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    'classification_officer' : IF SIZEOF(e.items) <>
+                                  SIZEOF(QUERY(x
+                                               <* e.items
+                                               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SECURITY_CLASSIFICATION' IN
+                                                 TYPEOF(x)))
+    THEN
+      RETURN(false);
+    END_IF;
+    OTHERWISE: RETURN(true);
+  END_CASE;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION check_continuous_edges(edges : LIST OF UNIQUE edge_curve) : BOOLEAN;
+LOCAL
+  i           : INTEGER;
+  next_vertex : vertex;
+END_LOCAL;
+  IF (SIZEOF(edges) = 1)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ((edges[2].edge_start :=: edges[1].edge_end) XOR (edges[2].edge_start :=: edges[1].edge_start))
+  THEN
+    next_vertex := edges[2].edge_end;
+  ELSE
+    IF ((edges[2].edge_end :=: edges[1].edge_end) XOR (edges[2].edge_end :=: edges[1].edge_start))
+    THEN
+      next_vertex := edges[2].edge_start;
+    ELSE
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF (SIZEOF(edges) = 2)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 3 TO HIINDEX(edges);
+    IF (edges[i].edge_start :=: next_vertex)
+    THEN
+      next_vertex := edges[i].edge_end;
+    ELSE
+      IF (edges[i].edge_end :=: next_vertex)
+      THEN
+        next_vertex := edges[i].edge_start;
+      ELSE
+        RETURN(false);
+      END_IF;
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION check_curve_planarity(checked_curve : curve) : BOOLEAN;
+LOCAL
+  crv    : curve   := checked_curve;
+  i      : INTEGER;
+  j      : INTEGER;
+  result : BOOLEAN := false;
+END_LOCAL;
+  IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
+             TYPEOF(crv)) >
+      0)
+  THEN
+    result := true;
+  ELSE
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(crv)) AND
+        check_curve_planarity(crv\trimmed_curve.basis_curve))
+    THEN
+      result := true;
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(crv)) AND
+          ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN TYPEOF(crv\pcurve.basis_surface)))
+      THEN
+        result := true;
+      ELSE
+        IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(crv))
+        THEN
+          BEGIN  
+                 REPEAT j := 1 TO HIINDEX(crv\surface_curve.basis_surface);
+                   IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                       TYPEOF(crv\surface_curve.basis_surface[j]))
+                   THEN
+                     result := true;
+                   END_IF;
+                 END_REPEAT;
+          END;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION check_geometric_dimension(capt : SET [0 : ?] OF cartesian_point;
+                                   dir : SET [0 : ?] OF direction;
+                                   grc : SET [0 : ?] OF geometric_representation_context) : BOOLEAN;
+LOCAL
+  globaldim : INTEGER                       := 0;
+  reps      : SET [0 : ?] OF representation := [];
+  result    : BOOLEAN                       := true;
+END_LOCAL;
+  IF (SIZEOF(grc) = 0)
+  THEN
+    RETURN(false);
+  END_IF;
+  globaldim := geometric_dimensionalities_in_contexts(grc);
+  IF (globaldim > 0)
+  THEN
+    IF (SIZEOF(capt) > 0)
+    THEN
+      REPEAT i := 1 TO HIINDEX(capt);
+        IF (HIINDEX(capt[i].coordinates) <> globaldim)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+    IF (SIZEOF(dir) > 0)
+    THEN
+      REPEAT i := 1 TO HIINDEX(dir);
+        IF (HIINDEX(dir[i].direction_ratios) <> globaldim)
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+    RETURN(result);
+  ELSE
+    IF (SIZEOF(capt) > 0)
+    THEN
+      REPEAT i := 1 TO HIINDEX(capt);
+        reps := using_representations(capt[i]);
+        IF (SIZEOF(reps) > 0)
+        THEN
+          REPEAT j := 1 TO HIINDEX(reps);
+            IF (HIINDEX(capt[i].coordinates) <>
+                reps[j].context_of_items\geometric_representation_context.coordinate_space_dimension)
+            THEN
+              RETURN(false);
+            END_IF;
+          END_REPEAT;
+        ELSE
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+    IF (SIZEOF(dir) > 0)
+    THEN
+      REPEAT i := 1 TO HIINDEX(dir);
+        reps := using_representations(dir[i]);
+        IF (SIZEOF(reps) > 0)
+        THEN
+          REPEAT j := 1 TO HIINDEX(reps);
+            IF (HIINDEX(dir[i].direction_ratios) <>
+                reps[j].context_of_items\geometric_representation_context.coordinate_space_dimension)
+            THEN
+              RETURN(false);
+            END_IF;
+          END_REPEAT;
+        ELSE
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION check_sparse_index_domain(idxdom : tuple_space;
+                                   base : zero_or_one;
+                                   shape : LIST [1 : ?] OF positive_integer;
+                                   order : ordering_type) : BOOLEAN;
+LOCAL
+  mthspc   : maths_space;
+  interval : finite_integer_interval;
+  i        : INTEGER;
+END_LOCAL;
+  mthspc := factor1(idxdom);
+  interval := mthspc;
+  IF order = by_rows
+  THEN
+    i := 1;
+  ELSE
+    i := 2;
+  END_IF;
+  RETURN(bool((interval.min <= base) AND (interval.max >= base + shape[i])));
+END_FUNCTION;
+
+FUNCTION check_sparse_index_to_loc(index_range : tuple_space;
+                                   loc_domain : tuple_space) : BOOLEAN;
+LOCAL
+  temp         : maths_space;
+  idx_rng_itvl : finite_integer_interval;
+  loc_dmn_itvl : finite_integer_interval;
+END_LOCAL;
+  temp := factor1(index_range);
+  IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(temp)
+  THEN
+    temp := factor1(temp);
+  END_IF;
+  IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  idx_rng_itvl := temp;
+  temp := factor1(loc_domain);
+  IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(temp)
+  THEN
+    temp := factor1(temp);
+  END_IF;
+  IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  loc_dmn_itvl := temp;
+  RETURN(bool((loc_dmn_itvl.min <= idx_rng_itvl.min) AND (idx_rng_itvl.max <= loc_dmn_itvl.max + 1)));
+END_FUNCTION;
+
+FUNCTION check_sparse_loc_range(locrng : tuple_space;
+                                base : zero_or_one;
+                                shape : LIST [1 : ?] OF positive_integer;
+                                order : ordering_type) : BOOLEAN;
+LOCAL
+  mthspc   : maths_space;
+  interval : finite_integer_interval;
+  i        : INTEGER;
+END_LOCAL;
+  IF space_dimension(locrng) <> 1
+  THEN
+    RETURN(false);
+  END_IF;
+  mthspc := factor1(locrng);
+  IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(mthspc))
+  THEN
+    RETURN(false);
+  END_IF;
+  interval := mthspc;
+  IF order = by_rows
+  THEN
+    i := 2;
+  ELSE
+    i := 1;
+  END_IF;
+  RETURN(bool((interval.min >= base) AND (interval.max <= base + shape[i] - 1)));
+END_FUNCTION;
+
+FUNCTION check_text_alignment(ct : composite_text) : BOOLEAN;
+LOCAL
+  a : SET OF text_alignment := [];
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(ct.collected_text);
+    a := a + [ct.collected_text[i]\text_literal.alignment];
+  END_REPEAT;
+  RETURN(SIZEOF(a) = 1);
+END_FUNCTION;
+
+FUNCTION check_text_font(ct : composite_text) : BOOLEAN;
+LOCAL
+  f : SET OF font_select := [];
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(ct.collected_text);
+    f := f + [ct.collected_text[i]\text_literal.font];
+  END_REPEAT;
+  RETURN(SIZEOF(f) <= 1);
+END_FUNCTION;
+
+FUNCTION class_assignment_is_valid(aia : applied_classification_assignment) : BOOLEAN;
+LOCAL
+  item : classification_item;
+  role : classification_role;
+END_LOCAL;
+  role := aia\classification_assignment.role;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS_SYSTEM' IN
+      TYPEOF(aia\classification_assignment.assigned_class))
+  THEN
+    IF (role\classification_role.name <> 'class system membership')
+    THEN
+      RETURN(false);
+    END_IF;
+    REPEAT i := LOINDEX(aia\applied_classification_assignment.items) TO HIINDEX(aia\applied_classification_assignment.items);
+      item := aia\applied_classification_assignment.items[i];
+      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_CLASS'] * TYPEOF(item)) = 0)
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CHARACTERIZED_CLASS' IN
+      TYPEOF(aia\classification_assignment.assigned_class))
+  THEN
+    IF NOT (role\classification_role.name IN ['definitional','non-definitional',''])
+    THEN
+      RETURN(false);
+    END_IF;
+    REPEAT i := LOINDEX(aia\applied_classification_assignment.items) TO HIINDEX(aia\applied_classification_assignment.items);
+      item := aia\applied_classification_assignment.items[i];
+      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASSIFIED_ITEM'] * TYPEOF(item)) = 0)
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF (role\classification_role.name = 'definitional')
+  THEN
+    IF NOT (SIZEOF(QUERY(it
+                         <* aia\applied_classification_assignment.items
+                         | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT',
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION',
+                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION'] *
+                                       TYPEOF(it)) =
+                                1))) =
+            0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION closed_shell_reversed(a_shell : closed_shell) : oriented_closed_shell;
+LOCAL
+  the_reverse : oriented_closed_shell;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_CLOSED_SHELL' IN TYPEOF(a_shell))
+  THEN
+    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || closed_shell() ||
+                   oriented_closed_shell(a_shell\oriented_closed_shell.closed_shell_element,
+                                         NOT (a_shell\oriented_closed_shell.orientation));
+  ELSE
+    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || closed_shell() ||
+                   oriented_closed_shell(a_shell, false);
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION collect_joints(items : SET [1 : ?] OF pair_representation_relationship) : SET OF kinematic_joint;
+LOCAL
+  result : SET OF kinematic_joint := [];
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(items);
+    result := result + items[i].transformation_operator.joint;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION compare_basis_and_coef(basis : LIST [1 : ?] OF b_spline_basis;
+                                coef : maths_function) : BOOLEAN;
+LOCAL
+  shape : LIST OF positive_integer;
+END_LOCAL;
+  IF NOT EXISTS(basis) OR NOT EXISTS(coef)
+  THEN
+    RETURN(false);
+  END_IF;
+  shape := shape_of_array(coef);
+  IF NOT EXISTS(shape)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF SIZEOF(shape) < SIZEOF(basis)
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(basis);
+    IF (basis[i].num_basis = shape[i]) <> true
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION compatible_complex_number_regions(sp1 : maths_space;
+                                           sp2 : maths_space) : BOOLEAN;
+LOCAL
+  typenames   : SET OF STRING                   := stripped_typeof(sp1);
+  crgn1       : cartesian_complex_number_region;
+  crgn2       : cartesian_complex_number_region;
+  prgn1       : polar_complex_number_region;
+  prgn2       : polar_complex_number_region;
+  prgn1c2     : polar_complex_number_region;
+  prgn2c1     : polar_complex_number_region;
+  sp1_is_crgn : BOOLEAN;
+  sp2_is_crgn : BOOLEAN;
+END_LOCAL;
+  IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN typenames
+  THEN
+    sp1_is_crgn := true;
+    crgn1 := sp1;
+  ELSE
+    IF 'POLAR_COMPLEX_NUMBER_REGION' IN typenames
+    THEN
+      sp1_is_crgn := false;
+      prgn1 := sp1;
+    ELSE
+      RETURN(true);
+    END_IF;
+  END_IF;
+  typenames := stripped_typeof(sp2);
+  IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN typenames
+  THEN
+    sp2_is_crgn := true;
+    crgn2 := sp2;
+  ELSE
+    IF 'POLAR_COMPLEX_NUMBER_REGION' IN typenames
+    THEN
+      sp2_is_crgn := false;
+      prgn2 := sp2;
+    ELSE
+      RETURN(true);
+    END_IF;
+  END_IF;
+  IF sp1_is_crgn AND sp2_is_crgn
+  THEN
+    RETURN(compatible_intervals(crgn1.real_constraint, crgn2.real_constraint) AND
+           compatible_intervals(crgn1.imag_constraint, crgn2.imag_constraint));
+  END_IF;
+  IF NOT sp1_is_crgn AND
+         NOT sp2_is_crgn AND (prgn1.centre.real_part = prgn2.centre.real_part) AND
+             (prgn1.centre.imag_part = prgn2.centre.imag_part)
+  THEN
+    IF NOT compatible_intervals(prgn1.distance_constraint, prgn2.distance_constraint)
+    THEN
+      RETURN(false);
+    END_IF;
+    IF compatible_intervals(prgn1.direction_constraint, prgn2.direction_constraint)
+    THEN
+      RETURN(true);
+    END_IF;
+    IF (prgn1.direction_constraint.max > PI) AND (prgn2.direction_constraint.max < PI)
+    THEN
+      RETURN(compatible_intervals(prgn2.direction_constraint,
+                                  make_finite_real_interval(-PI, open, prgn1.direction_constraint.max - 2.0 * PI,
+                                                            prgn1.direction_constraint.max_closure)));
+    END_IF;
+    IF (prgn2.direction_constraint.max > PI) AND (prgn1.direction_constraint.max < PI)
+    THEN
+      RETURN(compatible_intervals(prgn1.direction_constraint,
+                                  make_finite_real_interval(-PI, open, prgn2.direction_constraint.max - 2.0 * PI,
+                                                            prgn2.direction_constraint.max_closure)));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF sp1_is_crgn AND NOT sp2_is_crgn
+  THEN
+    crgn2 := enclose_pregion_in_cregion(prgn2);
+    prgn1 := enclose_cregion_in_pregion(crgn1, prgn2.centre);
+    RETURN(compatible_complex_number_regions(crgn1, crgn2) AND compatible_complex_number_regions(prgn1, prgn2));
+  END_IF;
+  IF NOT sp1_is_crgn AND sp2_is_crgn
+  THEN
+    crgn1 := enclose_pregion_in_cregion(prgn1);
+    prgn2 := enclose_cregion_in_pregion(crgn2, prgn1.centre);
+    RETURN(compatible_complex_number_regions(crgn1, crgn2) AND compatible_complex_number_regions(prgn1, prgn2));
+  END_IF;
+  prgn1c2 := enclose_pregion_in_pregion(prgn1, prgn2.centre);
+  prgn2c1 := enclose_pregion_in_pregion(prgn2, prgn1.centre);
+  RETURN(compatible_complex_number_regions(prgn1, prgn2c1) AND compatible_complex_number_regions(prgn1c2, prgn2));
+END_FUNCTION;
+
+FUNCTION compatible_es_values(esval1 : elementary_space_enumerators;
+                              esval2 : elementary_space_enumerators) : BOOLEAN;
+LOCAL
+  esval1_is_numeric : LOGICAL;
+  esval2_is_numeric : LOGICAL;
+END_LOCAL;
+  IF (esval1 = esval2) OR (esval1 = es_generics) OR (esval2 = es_generics)
+  THEN
+    RETURN(true);
+  END_IF;
+  esval1_is_numeric := (esval1 >= es_numbers) AND (esval1 <= es_integers);
+  esval2_is_numeric := (esval2 >= es_numbers) AND (esval2 <= es_integers);
+  IF (esval1_is_numeric AND (esval2 = es_numbers)) OR (esval2_is_numeric AND (esval1 = es_numbers))
+  THEN
+    RETURN(true);
+  END_IF;
+  IF esval1_is_numeric XOR esval2_is_numeric
+  THEN
+    RETURN(false);
+  END_IF;
+  IF ((esval1 = es_logicals) AND (esval2 = es_booleans)) OR ((esval1 = es_booleans) AND (esval2 = es_logicals))
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION compatible_intervals(sp1 : maths_space;
+                              sp2 : maths_space) : BOOLEAN;
+LOCAL
+  amin : REAL;
+  amax : REAL;
+END_LOCAL;
+  IF min_exists(sp1) AND max_exists(sp2)
+  THEN
+    amin := real_min(sp1);
+    amax := real_max(sp2);
+    IF amin > amax
+    THEN
+      RETURN(false);
+    END_IF;
+    IF amin = amax
+    THEN
+      RETURN(min_included(sp1) AND max_included(sp2));
+    END_IF;
+  END_IF;
+  IF min_exists(sp2) AND max_exists(sp1)
+  THEN
+    amin := real_min(sp2);
+    amax := real_max(sp1);
+    IF amin > amax
+    THEN
+      RETURN(false);
+    END_IF;
+    IF amin = amax
+    THEN
+      RETURN(min_included(sp2) AND max_included(sp1));
+    END_IF;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION compatible_spaces(sp1 : maths_space;
+                           sp2 : maths_space) : BOOLEAN;
+LOCAL
+  types1 : SET OF STRING := stripped_typeof(sp1);
+  types2 : SET OF STRING := stripped_typeof(sp2);
+  lgcl   : LOGICAL       := unknown;
+  m      : INTEGER;
+  n      : INTEGER;
+  s1     : maths_space;
+  s2     : maths_space;
+END_LOCAL;
+  IF 'FINITE_SPACE' IN types1
+  THEN
+    REPEAT i := 1 TO SIZEOF(sp1\finite_space.members);
+      lgcl := member_of(sp1\finite_space.members[i], sp2);
+      IF lgcl <> false
+      THEN
+        RETURN(true);
+      END_IF;
+    END_REPEAT;
+    RETURN(false);
+  END_IF;
+  IF 'FINITE_SPACE' IN types2
+  THEN
+    REPEAT i := 1 TO SIZEOF(sp2\finite_space.members);
+      lgcl := member_of(sp2\finite_space.members[i], sp1);
+      IF lgcl <> false
+      THEN
+        RETURN(true);
+      END_IF;
+    END_REPEAT;
+    RETURN(false);
+  END_IF;
+  IF 'ELEMENTARY_SPACE' IN types1
+  THEN
+    IF sp1\elementary_space.space_id = es_generics
+    THEN
+      RETURN(true);
+    END_IF;
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      RETURN(compatible_es_values(sp1\elementary_space.space_id, sp2\elementary_space.space_id));
+    END_IF;
+    IF ('FINITE_INTEGER_INTERVAL' IN types2) OR ('INTEGER_INTERVAL_FROM_MIN' IN types2) OR
+       ('INTEGER_INTERVAL_TO_MAX' IN types2)
+    THEN
+      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_integers));
+    END_IF;
+    IF ('FINITE_REAL_INTERVAL' IN types2) OR ('REAL_INTERVAL_FROM_MIN' IN types2) OR ('REAL_INTERVAL_TO_MAX' IN types2)
+    THEN
+      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_reals));
+    END_IF;
+    IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types2) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types2)
+    THEN
+      RETURN(compatible_es_values(sp1\elementary_space.space_id, es_complex_numbers));
+    END_IF;
+    IF 'TUPLE_SPACE' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'FUNCTION_SPACE' IN types2
+    THEN
+      RETURN(bool(sp1\elementary_space.space_id = es_maths_functions));
+    END_IF;
+    RETURN(true);
+  END_IF;
+  IF 'ELEMENTARY_SPACE' IN types2
+  THEN
+    IF sp2\elementary_space.space_id = es_generics
+    THEN
+      RETURN(true);
+    END_IF;
+    IF ('FINITE_INTEGER_INTERVAL' IN types1) OR ('INTEGER_INTERVAL_FROM_MIN' IN types1) OR
+       ('INTEGER_INTERVAL_TO_MAX' IN types1)
+    THEN
+      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_integers));
+    END_IF;
+    IF ('FINITE_REAL_INTERVAL' IN types1) OR ('REAL_INTERVAL_FROM_MIN' IN types1) OR ('REAL_INTERVAL_TO_MAX' IN types1)
+    THEN
+      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_reals));
+    END_IF;
+    IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types1) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types1)
+    THEN
+      RETURN(compatible_es_values(sp2\elementary_space.space_id, es_complex_numbers));
+    END_IF;
+    IF 'TUPLE_SPACE' IN types1
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'FUNCTION_SPACE' IN types1
+    THEN
+      RETURN(bool(sp2\elementary_space.space_id = es_maths_functions));
+    END_IF;
+    RETURN(true);
+  END_IF;
+  IF subspace_of_es(sp1, es_integers)
+  THEN
+    IF subspace_of_es(sp2, es_integers)
+    THEN
+      RETURN(compatible_intervals(sp1, sp2));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(sp2, es_integers)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(sp1, es_reals)
+  THEN
+    IF subspace_of_es(sp2, es_reals)
+    THEN
+      RETURN(compatible_intervals(sp1, sp2));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(sp2, es_reals)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(sp1, es_complex_numbers)
+  THEN
+    IF subspace_of_es(sp2, es_complex_numbers)
+    THEN
+      RETURN(compatible_complex_number_regions(sp1, sp2));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(sp2, es_complex_numbers)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'UNIFORM_PRODUCT_SPACE' IN types1
+  THEN
+    IF 'UNIFORM_PRODUCT_SPACE' IN types2
+    THEN
+      IF sp1\uniform_product_space.exponent <> sp2\uniform_product_space.exponent
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(compatible_spaces(sp1\uniform_product_space.base, sp2\uniform_product_space.base));
+    END_IF;
+    IF 'LISTED_PRODUCT_SPACE' IN types2
+    THEN
+      n := SIZEOF(sp2\listed_product_space.factors);
+      IF sp1\uniform_product_space.exponent <> n
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO n;
+        IF NOT compatible_spaces(sp1\uniform_product_space.base, sp2\listed_product_space.factors[i])
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(true);
+    END_IF;
+    IF 'EXTENDED_TUPLE_SPACE' IN types2
+    THEN
+      m := sp1\uniform_product_space.exponent;
+      n := space_dimension(sp2\extended_tuple_space.base);
+      IF m < n
+      THEN
+        RETURN(false);
+      END_IF;
+      IF m = n
+      THEN
+        RETURN(compatible_spaces(sp1, sp2\extended_tuple_space.base));
+      END_IF;
+      RETURN(compatible_spaces(sp1,
+                               assoc_product_space(sp2\extended_tuple_space.base,
+                                                   make_uniform_product_space(sp2\extended_tuple_space.extender,
+                                                                              m - n))));
+    END_IF;
+    IF 'FUNCTION_SPACE' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    RETURN(true);
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN types1
+  THEN
+    n := SIZEOF(sp1\listed_product_space.factors);
+    IF 'UNIFORM_PRODUCT_SPACE' IN types2
+    THEN
+      IF n <> sp2\uniform_product_space.exponent
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO n;
+        IF NOT compatible_spaces(sp2\uniform_product_space.base, sp1\listed_product_space.factors[i])
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(true);
+    END_IF;
+    IF 'LISTED_PRODUCT_SPACE' IN types2
+    THEN
+      IF n <> SIZEOF(sp2\listed_product_space.factors)
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO n;
+        IF NOT compatible_spaces(sp1\listed_product_space.factors[i], sp2\listed_product_space.factors[i])
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(true);
+    END_IF;
+    IF 'EXTENDED_TUPLE_SPACE' IN types2
+    THEN
+      m := space_dimension(sp2\extended_tuple_space.base);
+      IF n < m
+      THEN
+        RETURN(false);
+      END_IF;
+      IF n = m
+      THEN
+        RETURN(compatible_spaces(sp1, sp2\extended_tuple_space.base));
+      END_IF;
+      RETURN(compatible_spaces(sp1,
+                               assoc_product_space(sp2\extended_tuple_space.base,
+                                                   make_uniform_product_space(sp2\extended_tuple_space.extender,
+                                                                              n - m))));
+    END_IF;
+    IF (schema_prefix + 'FUNCTION_SPACE') IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    RETURN(true);
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN types1
+  THEN
+    IF ('UNIFORM_PRODUCT_SPACE' IN types2) OR ('LISTED_PRODUCT_SPACE' IN types2)
+    THEN
+      RETURN(compatible_spaces(sp2, sp1));
+    END_IF;
+    IF 'EXTENDED_TUPLE_SPACE' IN types2
+    THEN
+      IF NOT compatible_spaces(sp1\extended_tuple_space.extender, sp2\extended_tuple_space.extender)
+      THEN
+        RETURN(false);
+      END_IF;
+      n := space_dimension(sp1\extended_tuple_space.base);
+      m := space_dimension(sp2\extended_tuple_space.base);
+      IF n < m
+      THEN
+        RETURN(compatible_spaces(assoc_product_space(sp1\extended_tuple_space.base,
+                                                     make_uniform_product_space(sp1\extended_tuple_space.extender,
+                                                                                m - n)),
+                                 sp2\extended_tuple_space.base));
+      END_IF;
+      IF n = m
+      THEN
+        RETURN(compatible_spaces(sp1\extended_tuple_space.base, sp2\extended_tuple_space.base));
+      END_IF;
+      IF n > m
+      THEN
+        RETURN(compatible_spaces(sp1\extended_tuple_space.base,
+                                 assoc_product_space(sp2\extended_tuple_space.base,
+                                                     make_uniform_product_space(sp2\extended_tuple_space.extender,
+                                                                                n - m))));
+      END_IF;
+    END_IF;
+    IF 'FUNCTION_SPACE' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    RETURN(true);
+  END_IF;
+  IF 'FUNCTION_SPACE' IN types1
+  THEN
+    IF 'FUNCTION_SPACE' IN types2
+    THEN
+      s1 := sp1\function_space.domain_argument;
+      s2 := sp2\function_space.domain_argument;
+      CASE sp1\function_space.domain_constraint OF
+        sc_equal : BEGIN  
+                          CASE sp2\function_space.domain_constraint OF
+                            sc_equal : lgcl := subspace_of(s1, s2) AND subspace_of(s2, s1);
+                            sc_subspace : lgcl := subspace_of(s1, s2);
+                            sc_member : lgcl := member_of(s1, s2);
+                          END_CASE;
+        END;
+        sc_subspace : BEGIN  
+                             CASE sp2\function_space.domain_constraint OF
+                               sc_equal : lgcl := subspace_of(s2, s1);
+                               sc_subspace : lgcl := compatible_spaces(s1, s2);
+                               sc_member : lgcl := unknown;
+                             END_CASE;
+        END;
+        sc_member : BEGIN  
+                           CASE sp2\function_space.domain_constraint OF
+                             sc_equal : lgcl := member_of(s2, s1);
+                             sc_subspace : lgcl := unknown;
+                             sc_member : lgcl := compatible_spaces(s1, s2);
+                           END_CASE;
+        END;
+      END_CASE;
+      IF lgcl = false
+      THEN
+        RETURN(false);
+      END_IF;
+      s1 := sp1\function_space.range_argument;
+      s2 := sp2\function_space.range_argument;
+      CASE sp1\function_space.range_constraint OF
+        sc_equal : BEGIN  
+                          CASE sp2\function_space.range_constraint OF
+                            sc_equal : lgcl := subspace_of(s1, s2) AND subspace_of(s2, s1);
+                            sc_subspace : lgcl := subspace_of(s1, s2);
+                            sc_member : lgcl := member_of(s1, s2);
+                          END_CASE;
+        END;
+        sc_subspace : BEGIN  
+                             CASE sp2\function_space.range_constraint OF
+                               sc_equal : lgcl := subspace_of(s2, s1);
+                               sc_subspace : lgcl := compatible_spaces(s1, s2);
+                               sc_member : lgcl := unknown;
+                             END_CASE;
+        END;
+        sc_member : BEGIN  
+                           CASE sp2\function_space.range_constraint OF
+                             sc_equal : lgcl := member_of(s2, s1);
+                             sc_subspace : lgcl := unknown;
+                             sc_member : lgcl := compatible_spaces(s1, s2);
+                           END_CASE;
+        END;
+      END_CASE;
+      IF lgcl = false
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(true);
+    END_IF;
+    RETURN(true);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION composable_sequence(operands : LIST [2 : ?] OF maths_function) : BOOLEAN;
+  REPEAT i := 1 TO SIZEOF(operands) - 1;
+    IF NOT compatible_spaces(operands[i].range, operands[i + 1].domain)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION compute_total_depth(swsrh : solid_with_stepped_round_hole) : positive_length_measure;
+LOCAL
+  i  : positive_integer;
+  n  : positive_integer        := swsrh.segments;
+  td : positive_length_measure := swsrh.segment_depths[1];
+END_LOCAL;
+  IF n = 1
+  THEN
+    RETURN(td);
+  ELSE
+    REPEAT i := 2 TO n;
+      td := td + swsrh.segment_depths[i];
+    END_REPEAT;
+  END_IF;
+  RETURN(td);
+END_FUNCTION;
+
+FUNCTION conditional_reverse(p : BOOLEAN;
+                             an_item : reversible_topology) : reversible_topology;
+  IF p
+  THEN
+    RETURN(an_item);
+  ELSE
+    RETURN(topology_reversed(an_item));
+  END_IF;
+END_FUNCTION;
+
+FUNCTION consistent_sizes(max : INTEGER;
+                          point_lists : LIST OF point_cloud_dataset) : BOOLEAN;
+LOCAL
+  ndatasets : INTEGER := SIZEOF(point_lists);
+  result    : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO (ndatasets - 1);
+    IF (SIZEOF(point_lists[i].point_coordinates) <> max)
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  IF (SIZEOF(point_lists[ndatasets].point_coordinates) > max)
+  THEN
+    result := false;
+    RETURN(result);
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION constraints_composite_curve_on_surface(c : composite_curve_on_surface) : BOOLEAN;
+LOCAL
+  n_segments : INTEGER := SIZEOF(c.segments);
+END_LOCAL;
+  REPEAT k := 1 TO n_segments;
+    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+             TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
+       (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN
+             TYPEOF(c\composite_curve.segments[k].parent_curve))) AND
+       (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_ON_SURFACE' IN
+             TYPEOF(c\composite_curve.segments[k].parent_curve)))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION constraints_geometry_shell_based_surface_model(m : shell_based_surface_model) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT j := 1 TO SIZEOF(m.sbsm_boundary);
+    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(m.sbsm_boundary[j])) AND
+            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN TYPEOF(m.sbsm_boundary[j]))))
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION constraints_geometry_shell_based_wireframe_model(m : shell_based_wireframe_model) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT j := 1 TO SIZEOF(m.sbwm_boundary);
+    IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.WIRE_SHELL' IN TYPEOF(m.sbwm_boundary[j])) AND
+            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VERTEX_SHELL' IN TYPEOF(m.sbwm_boundary[j]))))
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION constraints_param_b_spline(degree : INTEGER;
+                                    up_knots : INTEGER;
+                                    up_cp : INTEGER;
+                                    knot_mult : LIST [0 : ?] OF INTEGER;
+                                    knots : LIST [0 : ?] OF parameter_value) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+  k      : INTEGER;
+  sum    : INTEGER;
+END_LOCAL;
+  (* Find sum of knot multiplicities. *)
+  sum := knot_mult[1];
+  REPEAT i := 2 TO up_knots;
+    sum := sum + knot_mult[i];
+  END_REPEAT;
+  (* Check limits holding for all B-spline parametrisations *)
+  IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> (degree + up_cp + 2))
+  THEN
+    result := false;
+    RETURN(result);
+  END_IF;
+  k := knot_mult[1];
+  IF (k < 1) OR (k > degree + 1)
+  THEN
+    result := false;
+    RETURN(result);
+  END_IF;
+  REPEAT i := 2 TO up_knots;
+    IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1])
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+    k := knot_mult[i];
+    IF (i < up_knots) AND (k > degree)
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+    IF (i = up_knots) AND (k > degree + 1)
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION constraints_param_local_b_spline(degree : INTEGER;
+                                          knot_mult : LIST OF INTEGER;
+                                          knots : LIST OF INTEGER) : BOOLEAN;
+LOCAL
+  result   : BOOLEAN := true;
+  k        : INTEGER;
+  up_knots : INTEGER;
+  sum      : INTEGER;
+END_LOCAL;
+  (* Find sum of knot multiplicities. *)
+  up_knots := SIZEOF(knots);
+  sum := knot_mult[1];
+  REPEAT i := 2 TO up_knots;
+    sum := sum + knot_mult[i];
+  END_REPEAT;
+  (* Check limits holding for all B-spline parametrisations *)
+  IF (degree < 1) OR (up_knots < 2) OR (sum <> (degree + 2))
+  THEN
+    result := false;
+    RETURN(result);
+  END_IF;
+  k := knot_mult[1];
+  IF (k < 1) OR (k > degree + 1)
+  THEN
+    result := false;
+    RETURN(result);
+  END_IF;
+  (* first pointer shall be 1 or more *)
+  IF (knots[1] < 1)
+  THEN
+    result := false;
+  END_IF;
+  REPEAT i := 2 TO up_knots;
+    IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1])
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+    k := knot_mult[i];
+    IF (i < up_knots) AND (k > degree)
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+    IF (i = up_knots) AND (k > degree + 1)
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION constraints_rectangular_composite_surface(s : rectangular_composite_surface) : BOOLEAN;
+  REPEAT i := 1 TO s.n_u;
+    REPEAT j := 1 TO s.n_v;
+      IF NOT (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN
+               TYPEOF(s.segments[i][j].parent_surface)) OR
+              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_TRIMMED_SURFACE' IN
+               TYPEOF(s.segments[i][j].parent_surface)))
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  (* Check the transition codes, omitting the last row or column *)
+  REPEAT i := 1 TO s.n_u - 1;
+    REPEAT j := 1 TO s.n_v;
+      IF s.segments[i][j].u_transition = discontinuous
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  REPEAT i := 1 TO s.n_u;
+    REPEAT j := 1 TO s.n_v - 1;
+      IF s.segments[i][j].v_transition = discontinuous
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION constraints_scaling(factors : LIST OF REAL) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(factors);
+    IF NOT ({0.0 < factors[i] <= 1.0})
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION control_characters_free(s : STRING) : BOOLEAN;
+LOCAL
+  ch : STRING;
+END_LOCAL;
+  REPEAT i := 1 TO LENGTH(s);
+    ch := s[i];
+    IF (ch = '\x9') OR (ch = '\xA') OR (ch = '\xD')
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION convert_spatial_to_ypr_rotation(pair : kinematic_pair;
+                                         rotation : spatial_rotation) : ypr_rotation;
+LOCAL
+  axis       : direction;
+  angle      : plane_angle_measure;
+  conv_angle : plane_angle_measure;
+  ya         : plane_angle_measure;
+  pa         : plane_angle_measure;
+  ra         : plane_angle_measure;
+  ucf        : REAL;
+  dx         : REAL;
+  dy         : REAL;
+  dz         : REAL;
+  s_a        : REAL;
+  c_a        : REAL;
+  rotmat     : ARRAY [1 : 3] OF ARRAY [1 : 3] OF REAL;
+  cm1        : REAL;
+  s_y        : REAL;
+  c_y        : REAL;
+  s_r        : REAL;
+  c_r        : REAL;
+END_LOCAL;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.YPR_ROTATION' IN TYPEOF(rotation)
+  THEN
+    RETURN(rotation);
+  END_IF;
+  axis := normalise(rotation\rotation_about_direction.direction_of_axis);
+  angle := rotation\rotation_about_direction.rotation_angle;
+  IF (angle = 0.0)
+  THEN
+    RETURN([0.0,0.0,0.0]);
+  END_IF;
+  dx := axis.direction_ratios[1];
+  dy := axis.direction_ratios[2];
+  dz := axis.direction_ratios[3];
+  conv_angle := plane_angle_for_pair_in_radian(pair, angle);
+  IF NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(conv_angle))
+  THEN
+    RETURN(?);
+  END_IF;
+  ucf := angle / conv_angle;
+  s_a := SIN(conv_angle);
+  c_a := COS(conv_angle);
+  IF (dy = 0.0) AND (dx * dz = 0.0)
+  THEN
+    REPEAT WHILE (conv_angle <= -PI);
+      conv_angle := conv_angle + 2.0 * PI;
+    END_REPEAT;
+    REPEAT WHILE (conv_angle > PI);
+      conv_angle := conv_angle - 2.0 * PI;
+    END_REPEAT;
+    ya := ucf * conv_angle;
+    IF (conv_angle <> PI)
+    THEN
+      ra := -ya;
+    ELSE
+      ra := ya;
+    END_IF;
+    IF (dx <> 0.0)
+    THEN
+      IF (dx > 0.0)
+      THEN
+        RETURN([0.0,0.0,ya]);
+      ELSE
+        RETURN([0.0,0.0,ra]);
+      END_IF;
+    ELSE
+      IF (dz > 0.0)
+      THEN
+        RETURN([ya,0.0,0.0]);
+      ELSE
+        RETURN([ra,0.0,0.0]);
+      END_IF;
+    END_IF;
+  END_IF;
+  IF ((dy <> 0.0) AND (dx = 0.0) AND (dz = 0.0))
+  THEN
+    IF (c_a >= 0.0)
+    THEN
+      ya := 0.0;
+      ra := 0.0;
+    ELSE
+      ya := ucf * PI;
+      ra := ya;
+    END_IF;
+    pa := ucf * ATAN(s_a, ABS(c_a));
+    IF (dy < 0.0)
+    THEN
+      pa := -pa;
+    END_IF;
+    RETURN([ya,pa,ra]);
+  END_IF;
+  cm1 := 1.0 - c_a;
+  rotmat := [[dx * dx * cm1 + c_a,dx * dy * cm1 - dz * s_a,dx * dz * cm1 + dy * s_a],
+             [dx * dy * cm1 + dz * s_a,dy * dy * cm1 + c_a,dy * dz * cm1 - dx * s_a],
+             [dx * dz * cm1 - dy * s_a,dy * dz * cm1 + dx * s_a,dz * dz * cm1 + c_a]];
+  IF (ABS(rotmat[1][3]) = 1.0)
+  THEN
+    BEGIN  
+           IF (rotmat[1][3] = 1.0)
+           THEN
+             pa := 0.5 * PI;
+           ELSE
+             pa := -0.5 * PI;
+           END_IF;
+           ra := 0.0;
+           ya := ATAN(rotmat[2][1], rotmat[2][2]);
+           IF (rotmat[2][2] < 0.0)
+           THEN
+             IF ya <= 0.0
+             THEN
+               ya := ya + PI;
+             ELSE
+               ya := ya - PI;
+             END_IF;
+           END_IF;
+    END;
+  ELSE
+    BEGIN  
+           ya := ATAN(-rotmat[1][2], rotmat[1][1]);
+           IF (rotmat[1][1] < 0.0)
+           THEN
+             IF (ya <= 0.0)
+             THEN
+               ya := ya + PI;
+             ELSE
+               ya := ya - PI;
+             END_IF;
+           END_IF;
+           ra := ATAN(-rotmat[2][3], rotmat[3][3]);
+           IF (rotmat[3][3] < 0.0)
+           THEN
+             IF (ra <= 0.0)
+             THEN
+               ra := ra + PI;
+             ELSE
+               ra := ra - PI;
+             END_IF;
+           END_IF;
+           s_y := SIN(ya);
+           c_y := COS(ya);
+           s_r := SIN(ra);
+           c_r := COS(ra);
+           IF ((ABS(s_y) > ABS(c_y)) AND (ABS(s_y) > ABS(s_r)) AND (ABS(s_y) > ABS(c_r)))
+           THEN
+             cm1 := -rotmat[1][2] / s_y;
+           ELSE
+             IF ((ABS(c_y) > ABS(s_r)) AND (ABS(c_y) > ABS(c_r)))
+             THEN
+               cm1 := rotmat[1][1] / c_y;
+             ELSE
+               IF (ABS(s_r) > ABS(c_r))
+               THEN
+                 cm1 := -rotmat[2][3] / s_r;
+               ELSE
+                 cm1 := rotmat[3][3] / c_r;
+               END_IF;
+             END_IF;
+           END_IF;
+           pa := ATAN(rotmat[1][3], cm1);
+    END;
+  END_IF;
+  ya := ya * ucf;
+  pa := pa * ucf;
+  ra := ra * ucf;
+  RETURN([ya,pa,ra]);
+END_FUNCTION;
+
+FUNCTION convert_to_literal(val : maths_atom) : generic_literal;
+LOCAL
+  types : SET OF STRING := TYPEOF(val);
+END_LOCAL;
+  IF 'INTEGER' IN types
+  THEN
+    RETURN(make_int_literal(val));
+  END_IF;
+  IF 'REAL' IN types
+  THEN
+    RETURN(make_real_literal(val));
+  END_IF;
+  IF 'BOOLEAN' IN types
+  THEN
+    RETURN(make_boolean_literal(val));
+  END_IF;
+  IF 'STRING' IN types
+  THEN
+    RETURN(make_string_literal(val));
+  END_IF;
+  IF 'LOGICAL' IN types
+  THEN
+    RETURN(make_logical_literal(val));
+  END_IF;
+  IF 'BINARY' IN types
+  THEN
+    RETURN(make_binary_literal(val));
+  END_IF;
+  IF (schema_prefix + 'MATHS_ENUM_ATOM') IN types
+  THEN
+    RETURN(make_maths_enum_literal(val));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION convert_to_maths_function(func : maths_function_select) : maths_function;
+LOCAL
+  efenum : elementary_function_enumerators;
+  mthfun : maths_function;
+END_LOCAL;
+  IF (schema_prefix + 'MATHS_FUNCTION') IN TYPEOF(func)
+  THEN
+    mthfun := func;
+  ELSE
+    efenum := func;
+    mthfun := make_elementary_function(efenum);
+  END_IF;
+  RETURN(mthfun);
+END_FUNCTION;
+
+FUNCTION convert_to_operand(val : maths_value) : generic_expression;
+LOCAL
+  types : SET OF STRING := stripped_typeof(val);
+END_LOCAL;
+  IF 'GENERIC_EXPRESSION' IN types
+  THEN
+    RETURN(val);
+  END_IF;
+  IF 'MATHS_ATOM' IN types
+  THEN
+    RETURN(convert_to_literal(val));
+  END_IF;
+  IF 'ATOM_BASED_VALUE' IN types
+  THEN
+    RETURN(make_atom_based_literal(val));
+  END_IF;
+  IF 'MATHS_TUPLE' IN types
+  THEN
+    RETURN(make_maths_tuple_literal(val));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION convert_to_operands(values : AGGREGATE OF maths_value) : LIST OF generic_expression;
+LOCAL
+  operands : LIST OF generic_expression := [];
+  loc      : INTEGER                    := 0;
+END_LOCAL;
+  IF NOT EXISTS(values)
+  THEN
+    RETURN(?);
+  END_IF;
+  REPEAT i := LOINDEX(values) TO HIINDEX(values);
+    INSERT(operands, convert_to_operand(values[i]), loc);
+    loc := loc + 1;
+  END_REPEAT;
+  RETURN(operands);
+END_FUNCTION;
+
+FUNCTION convert_to_operands_prcmfn(srcdom : maths_space_or_function;
+                                    prepfun : LIST OF maths_function;
+                                    finfun : maths_function_select) : LIST [2 : ?] OF generic_expression;
+LOCAL
+  operands : LIST OF generic_expression := [];
+END_LOCAL;
+  INSERT(operands, srcdom, 0);
+  REPEAT i := 1 TO SIZEOF(prepfun);
+    INSERT(operands, prepfun[i], i);
+  END_REPEAT;
+  INSERT(operands, convert_to_maths_function(finfun), SIZEOF(prepfun) + 1);
+  RETURN(operands);
+END_FUNCTION;
+
+FUNCTION cross_product(arg1 : direction;
+                       arg2 : direction) : vector;
+LOCAL
+  mag    : REAL;
+  res    : direction;
+  v1     : LIST [3 : 3] OF REAL;
+  v2     : LIST [3 : 3] OF REAL;
+  result : vector;
+END_LOCAL;
+  IF (NOT EXISTS(arg1) OR (arg1.dim = 2)) OR (NOT EXISTS(arg2) OR (arg2.dim = 2))
+  THEN
+    RETURN(?);
+  ELSE
+    BEGIN  
+           v1 := normalise(arg1).direction_ratios;
+           v2 := normalise(arg2).direction_ratios;
+           res := dummy_gri ||
+                  direction([(v1[2] * v2[3] - v1[3] * v2[2]),
+                             (v1[3] * v2[1] - v1[1] * v2[3]),
+                             (v1[1] * v2[2] - v1[2] * v2[1])]);
+           mag := 0.0;
+           REPEAT i := 1 TO 3;
+             mag := mag + res.direction_ratios[i] * res.direction_ratios[i];
+           END_REPEAT;
+           IF (mag > 0.0)
+           THEN
+             result := dummy_gri || vector(res, SQRT(mag));
+           ELSE
+             result := dummy_gri || vector(arg1, 0.0);
+           END_IF;
+           RETURN(result);
+    END;
+  END_IF;
+END_FUNCTION;
+
+FUNCTION curve_weights_positive(b : rational_b_spline_curve) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 0 TO b.upper_index_on_control_points;
+    IF b.weights[i] <= 0.0
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION default_tolerance_table_cell_wr2(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF SIZEOF(agg) <= 5
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION default_tolerance_table_cell_wr3(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(QUERY(i
+                          <* agg
+                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                              TYPEOF(i)) AND
+                             (i\representation_item.name = 'significant number of digits')))) =
+             1) OR
+            ((SIZEOF(QUERY(i
+                           <* agg
+                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                               TYPEOF(i)) AND
+                              (i\representation_item.name = 'lower limit')))) =
+              1) AND
+             (SIZEOF(QUERY(i
+                           <* agg
+                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                               TYPEOF(i)) AND
+                              (i\representation_item.name = 'upper limit')))) =
+              1))
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION default_tolerance_table_cell_wr4(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(QUERY(i
+                          <* agg
+                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                              TYPEOF(i)) AND
+                             (i\representation_item.name = 'plus minus tolerance value')))) =
+             1) OR
+            ((SIZEOF(QUERY(i
+                           <* agg
+                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                               TYPEOF(i)) AND
+                              (i\representation_item.name = 'lower tolerance value')))) =
+              1) AND
+             (SIZEOF(QUERY(i
+                           <* agg
+                           | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                               TYPEOF(i)) AND
+                              (i\representation_item.name = 'upper tolerance value')))) =
+              1))
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION default_tolerance_table_cell_wr5(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(QUERY(i
+                          <* agg
+                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                             TYPEOF(i)))) <=
+             1) AND
+            (SIZEOF(QUERY(i
+                          <* agg
+                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                             TYPEOF(i)))) =
+             SIZEOF(QUERY(i
+                          <* agg
+                          | (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                              TYPEOF(i)) AND
+                             (i\representation_item.name = 'cell description')))))
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION definite_integral_check(domain : tuple_space;
+                                 vrblint : input_selector;
+                                 lowerinf : BOOLEAN;
+                                 upperinf : BOOLEAN) : BOOLEAN;
+LOCAL
+  domn : tuple_space         := domain;
+  fspc : maths_space;
+  dim  : nonnegative_integer;
+  k    : positive_integer;
+END_LOCAL;
+  IF (space_dimension(domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(domain)))
+  THEN
+    domn := factor1(domain);
+  END_IF;
+  dim := space_dimension(domn);
+  k := vrblint;
+  IF k > dim
+  THEN
+    RETURN(false);
+  END_IF;
+  fspc := factor_space(domn, k);
+  IF NOT ((schema_prefix + 'REAL_INTERVAL') IN TYPEOF(fspc))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF lowerinf AND min_exists(fspc)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF upperinf AND max_exists(fspc)
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION definite_integral_expr_check(operands : LIST [2 : ?] OF generic_expression;
+                                      lowerinf : BOOLEAN;
+                                      upperinf : BOOLEAN) : BOOLEAN;
+LOCAL
+  nops : INTEGER             := 2;
+  vspc : maths_space;
+  dim  : nonnegative_integer;
+  k    : positive_integer;
+  bspc : maths_space;
+END_LOCAL;
+  IF NOT lowerinf
+  THEN
+    nops := nops + 1;
+  END_IF;
+  IF NOT upperinf
+  THEN
+    nops := nops + 1;
+  END_IF;
+  IF SIZEOF(operands) <> nops
+  THEN
+    RETURN(false);
+  END_IF;
+  IF NOT ('GENERIC_VARIABLE' IN stripped_typeof(operands[2]))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF NOT has_values_space(operands[2])
+  THEN
+    RETURN(false);
+  END_IF;
+  vspc := values_space_of(operands[2]);
+  IF NOT ('REAL_INTERVAL' IN stripped_typeof(vspc))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF lowerinf
+  THEN
+    IF min_exists(vspc)
+    THEN
+      RETURN(false);
+    END_IF;
+    k := 3;
+  ELSE
+    IF NOT has_values_space(operands[3])
+    THEN
+      RETURN(false);
+    END_IF;
+    bspc := values_space_of(operands[3]);
+    IF NOT compatible_spaces(bspc, vspc)
+    THEN
+      RETURN(false);
+    END_IF;
+    k := 4;
+  END_IF;
+  IF upperinf
+  THEN
+    IF max_exists(vspc)
+    THEN
+      RETURN(false);
+    END_IF;
+  ELSE
+    IF NOT has_values_space(operands[k])
+    THEN
+      RETURN(false);
+    END_IF;
+    bspc := values_space_of(operands[k]);
+    IF NOT compatible_spaces(bspc, vspc)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION dependently_instantiated(set_of_input_instances : SET OF GENERIC : IGEN;
+                                  set_of_input_types : SET OF STRING;
+                                  previous_in_chain : LIST OF GENERIC : CGEN) : BOOLEAN;
+(* 'dependently_instantiated' To test whether all instances in the
+   input set_of_input_instances are referenced by independently
+   instantiable instances. If so, this function returns true.
+   Set_of_input_types includes the type strings for all input instances.
+   The instances in previous_in_chain are used to detect cyclic
+   references during recursive calls to this function. The parameter
+   lists already tested instances in a chain of references.
+    *)
+LOCAL
+  number_of_input_instances     : INTEGER;
+  number_of_referring_instances : INTEGER;
+  bag_of_referring_instances    : BAG OF GENERIC : IGEN  := [];
+  dependently_instantiated_flag : BOOLEAN;
+  previous_in_chain_plus        : LIST OF GENERIC : CGEN := [];
+  result                        : BOOLEAN                := true;
+  set_of_types                  : SET OF STRING          := [];
+END_LOCAL;
+  IF EXISTS(set_of_input_instances)
+  THEN
+    number_of_input_instances := SIZEOF(set_of_input_instances);
+    set_of_input_types := set_of_input_types + 'GENERIC';
+    REPEAT i := 1 TO number_of_input_instances;
+      bag_of_referring_instances := USEDIN(set_of_input_instances[i], '');
+      IF EXISTS(bag_of_referring_instances)
+      THEN
+        number_of_referring_instances := SIZEOF(bag_of_referring_instances);
+        dependently_instantiated_flag := false;
+        REPEAT j := 1 TO number_of_referring_instances;
+          set_of_types := TYPEOF(bag_of_referring_instances[j]);
+          IF set_of_types <= set_of_input_types
+          THEN
+            IF NOT (bag_of_referring_instances[j] IN previous_in_chain)
+            THEN
+              previous_in_chain_plus := previous_in_chain + set_of_input_instances[i];
+              IF dependently_instantiated([bag_of_referring_instances[j]], set_of_input_types, previous_in_chain_plus)
+              THEN
+                dependently_instantiated_flag := true;
+                ESCAPE;
+              ELSE
+                SKIP;
+              END_IF;
+            END_IF;
+          ELSE
+            dependently_instantiated_flag := true;
+            ESCAPE;
+          END_IF;
+        END_REPEAT;
+        IF NOT dependently_instantiated_flag
+        THEN
+          RETURN(false);
+        END_IF;
+      ELSE
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  ELSE
+    RETURN(false);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION derive_angle(placement_1 : axis2_placement_3d;
+                      placement_2 : axis2_placement_3d) : plane_angle_measure;
+LOCAL
+  v1     : direction;
+  v2     : direction;
+  mag_v1 : REAL;
+  mag_v2 : REAL;
+  theta  : plane_angle_measure;
+END_LOCAL;
+  v1 := placement_1.p[1];
+  v2 := placement_2.p[1];
+  mag_v1 := SQRT((v1.direction_ratios[1] * v1.direction_ratios[1]) + (v1.direction_ratios[2] * v1.direction_ratios[2]));
+  mag_v2 := SQRT((v2.direction_ratios[1] * v2.direction_ratios[1]) + (v2.direction_ratios[2] * v2.direction_ratios[2]));
+  IF (mag_v1 = 0) OR (mag_v2 = 0)
+  THEN
+    theta := 0;
+    RETURN(theta);
+  END_IF;
+  theta := ACOS(((v1.direction_ratios[1] * v2.direction_ratios[1]) +
+                 (v1.direction_ratios[2] * v2.direction_ratios[2])) /
+                (mag_v1 * mag_v2));
+  RETURN(theta);
+END_FUNCTION;
+
+FUNCTION derive_definite_integral_domain(igrl : definite_integral_function) : tuple_space;
+-- Internal utility function:
+FUNCTION process_product_space(spc : product_space;
+                               idx : INTEGER;
+                               prefix : INTEGER;
+                               vdomn : maths_space) : product_space;
+LOCAL
+  uspc    : uniform_product_space;
+  expnt   : INTEGER;
+  factors : LIST OF maths_space;
+END_LOCAL;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN TYPEOF(spc)
+  THEN
+    uspc := spc;
+    expnt := uspc.exponent + prefix;
+    IF idx <= uspc.exponent
+    THEN
+      expnt := expnt - 1;
+    END_IF;
+    IF expnt = 0
+    THEN
+      RETURN(make_listed_product_space([]));
+    ELSE
+      RETURN(make_uniform_product_space(uspc.base, expnt));
+    END_IF;
+  ELSE
+    factors := spc\listed_product_space.factors;
+    IF idx <= SIZEOF(factors)
+    THEN
+      REMOVE(factors, idx);
+    END_IF;
+    IF prefix > 0
+    THEN
+      INSERT(factors, vdomn, 0);
+      IF prefix > 1
+      THEN
+        INSERT(factors, vdomn, 0);
+      END_IF;
+    END_IF;
+    RETURN(make_listed_product_space(factors));
+  END_IF;
+END_FUNCTION;
+LOCAL
+  idomn  : tuple_space          := igrl.integrand.domain;
+  types  : SET OF STRING        := TYPEOF(idomn);
+  idx    : INTEGER              := igrl.variable_of_integration;
+  tupled : BOOLEAN              := bool(((space_dimension(idomn) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN types)));
+  prefix : INTEGER              := 0;
+  espc   : extended_tuple_space;
+  vdomn  : maths_space;
+END_LOCAL;
+  IF tupled
+  THEN
+    idomn := factor1(idomn);
+    types := TYPEOF(idomn);
+  END_IF;
+  IF igrl.lower_limit_neg_infinity
+  THEN
+    prefix := prefix + 1;
+  END_IF;
+  IF igrl.upper_limit_pos_infinity
+  THEN
+    prefix := prefix + 1;
+  END_IF;
+  vdomn := factor_space(idomn, idx);
+  IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
+  THEN
+    espc := idomn;
+    idomn := make_extended_tuple_space(process_product_space(espc.base, idx, prefix, vdomn), espc.extender);
+  ELSE
+    idomn := process_product_space(idomn, idx, prefix, vdomn);
+  END_IF;
+  IF tupled
+  THEN
+    RETURN(one_tuples_of(idomn));
+  ELSE
+    RETURN(idomn);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION derive_dimensional_exponents(x : unit) : dimensional_exponents;
+LOCAL
+  result : dimensional_exponents := dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+END_LOCAL;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DERIVED_UNIT' IN TYPEOF(x)
+  THEN
+    REPEAT i := LOINDEX(x\derived_unit.elements) TO HIINDEX(x\derived_unit.elements);
+      result.length_exponent := result.length_exponent +
+                                (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                                 x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.length_exponent);
+      result.mass_exponent := result.mass_exponent +
+                              (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                               x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.mass_exponent);
+      result.time_exponent := result.time_exponent +
+                              (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                               x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.time_exponent);
+      result.electric_current_exponent := result.electric_current_exponent +
+                                          (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                                           x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.electric_current_exponent);
+      result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent +
+                                                   (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                                                    x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.thermodynamic_temperature_exponent);
+      result.amount_of_substance_exponent := result.amount_of_substance_exponent +
+                                             (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                                              x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.amount_of_substance_exponent);
+      result.luminous_intensity_exponent := result.luminous_intensity_exponent +
+                                            (x\derived_unit.elements[i]\derived_unit_element.exponent *
+                                             x\derived_unit.elements[i]\derived_unit_element.unit\named_unit.dimensions.luminous_intensity_exponent);
+    END_REPEAT;
+  ELSE
+    result := x\named_unit.dimensions;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION derive_elementary_function_domain(ef_val : elementary_function_enumerators) : tuple_space;
+  IF NOT EXISTS(ef_val)
+  THEN
+    RETURN(?);
+  END_IF;
+  CASE ef_val OF
+    ef_and : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_logicals));
+    ef_or : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_logicals));
+    ef_not : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_xor : RETURN(make_uniform_product_space(the_logicals, 2));
+    ef_negate_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_add_i : RETURN(the_integer_tuples);
+    ef_subtract_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_multiply_i : RETURN(the_integer_tuples);
+    ef_divide_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_mod_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_exponentiate_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_eq_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_ne_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_gt_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_lt_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_ge_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_le_i : RETURN(make_uniform_product_space(the_integers, 2));
+    ef_abs_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_if_i : RETURN(make_listed_product_space([the_logicals,the_integers,the_integers]));
+    ef_negate_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_reciprocal_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_add_r : RETURN(the_real_tuples);
+    ef_subtract_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_multiply_r : RETURN(the_real_tuples);
+    ef_divide_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_mod_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_exponentiate_r : RETURN(make_listed_product_space([the_nonnegative_reals,the_reals]));
+    ef_exponentiate_ri : RETURN(make_listed_product_space([the_reals,the_integers]));
+    ef_eq_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_ne_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_gt_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_lt_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_ge_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_le_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_abs_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_acos_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
+    ef_asin_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
+    ef_atan2_r : RETURN(make_uniform_product_space(the_reals, 2));
+    ef_cos_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_exp_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_ln_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_log2_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_log10_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_sin_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_sqrt_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_tan_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_if_r : RETURN(make_listed_product_space([the_logicals,the_reals,the_reals]));
+    ef_negate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_reciprocal_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_add_c : RETURN(the_complex_tuples);
+    ef_subtract_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
+    ef_multiply_c : RETURN(the_complex_tuples);
+    ef_divide_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
+    ef_exponentiate_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
+    ef_exponentiate_ci : RETURN(make_listed_product_space([the_complex_numbers,the_integers]));
+    ef_eq_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
+    ef_ne_c : RETURN(make_uniform_product_space(the_complex_numbers, 2));
+    ef_conjugate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_abs_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_arg_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_cos_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_exp_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_ln_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_sin_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_sqrt_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_tan_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_if_c : RETURN(make_listed_product_space([the_logicals,the_complex_numbers,the_complex_numbers]));
+    ef_subscript_s : RETURN(make_listed_product_space([the_strings,the_integers]));
+    ef_eq_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_ne_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_gt_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_lt_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_ge_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_le_s : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_subsequence_s : RETURN(make_listed_product_space([the_strings,the_integers,the_integers]));
+    ef_concat_s : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_strings));
+    ef_size_s : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_format : RETURN(make_listed_product_space([the_numbers,the_strings]));
+    ef_value : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_like : RETURN(make_uniform_product_space(the_strings, 2));
+    ef_if_s : RETURN(make_listed_product_space([the_logicals,the_strings,the_strings]));
+    ef_subscript_b : RETURN(make_listed_product_space([the_binarys,the_integers]));
+    ef_eq_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_ne_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_gt_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_lt_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_ge_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_le_b : RETURN(make_uniform_product_space(the_binarys, 2));
+    ef_subsequence_b : RETURN(make_listed_product_space([the_binarys,the_integers,the_integers]));
+    ef_concat_b : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_binarys));
+    ef_size_b : RETURN(make_uniform_product_space(the_binarys, 1));
+    ef_if_b : RETURN(make_listed_product_space([the_logicals,the_binarys,the_binarys]));
+    ef_subscript_t : RETURN(make_listed_product_space([the_tuples,the_integers]));
+    ef_eq_t : RETURN(make_uniform_product_space(the_tuples, 2));
+    ef_ne_t : RETURN(make_uniform_product_space(the_tuples, 2));
+    ef_concat_t : RETURN(make_extended_tuple_space(the_zero_tuple_space, the_tuples));
+    ef_size_t : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_entuple : RETURN(the_tuples);
+    ef_detuple : RETURN(make_uniform_product_space(the_generics, 1));
+    ef_insert : RETURN(make_listed_product_space([the_tuples,the_generics,the_integers]));
+    ef_remove : RETURN(make_listed_product_space([the_tuples,the_integers]));
+    ef_if_t : RETURN(make_listed_product_space([the_logicals,the_tuples,the_tuples]));
+    ef_sum_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
+    ef_product_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
+    ef_add_it : RETURN(make_extended_tuple_space(the_integer_tuples, the_integer_tuples));
+    ef_subtract_it : RETURN(make_uniform_product_space(the_integer_tuples, 2));
+    ef_scalar_mult_it : RETURN(make_listed_product_space([the_integers,the_integer_tuples]));
+    ef_dot_prod_it : RETURN(make_uniform_product_space(the_integer_tuples, 2));
+    ef_sum_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_product_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_add_rt : RETURN(make_extended_tuple_space(the_real_tuples, the_real_tuples));
+    ef_subtract_rt : RETURN(make_uniform_product_space(the_real_tuples, 2));
+    ef_scalar_mult_rt : RETURN(make_listed_product_space([the_reals,the_real_tuples]));
+    ef_dot_prod_rt : RETURN(make_uniform_product_space(the_real_tuples, 2));
+    ef_norm_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_sum_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_product_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_add_ct : RETURN(make_extended_tuple_space(the_complex_tuples, the_complex_tuples));
+    ef_subtract_ct : RETURN(make_uniform_product_space(the_complex_tuples, 2));
+    ef_scalar_mult_ct : RETURN(make_listed_product_space([the_complex_numbers,the_complex_tuples]));
+    ef_dot_prod_ct : RETURN(make_uniform_product_space(the_complex_tuples, 2));
+    ef_norm_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_if : RETURN(make_listed_product_space([the_logicals,the_generics,the_generics]));
+    ef_ensemble : RETURN(the_tuples);
+    ef_member_of : RETURN(make_listed_product_space([the_generics,the_maths_spaces]));
+    OTHERWISE: RETURN(?);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION derive_elementary_function_range(ef_val : elementary_function_enumerators) : tuple_space;
+  IF NOT EXISTS(ef_val)
+  THEN
+    RETURN(?);
+  END_IF;
+  CASE ef_val OF
+    ef_and : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_or : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_not : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_xor : RETURN(make_uniform_product_space(the_logicals, 2));
+    ef_negate_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_add_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_subtract_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_multiply_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_divide_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_mod_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_exponentiate_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_eq_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_gt_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_lt_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ge_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_le_i : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_abs_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_if_i : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_negate_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_reciprocal_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_add_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_subtract_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_multiply_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_divide_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_mod_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_exponentiate_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_exponentiate_ri : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_eq_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_gt_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_lt_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ge_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_le_r : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_abs_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_acos_r : RETURN(make_uniform_product_space(the_zero_pi_interval, 1));
+    ef_asin_r : RETURN(make_uniform_product_space(the_neghalfpi_halfpi_interval, 1));
+    ef_atan2_r : RETURN(make_uniform_product_space(the_negpi_pi_interval, 1));
+    ef_cos_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
+    ef_exp_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_ln_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_log2_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_log10_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_sin_r : RETURN(make_uniform_product_space(the_neg1_one_interval, 1));
+    ef_sqrt_r : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_tan_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_if_r : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_negate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_reciprocal_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_add_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_subtract_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_multiply_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_divide_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_exponentiate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_exponentiate_ci : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_eq_c : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_c : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_conjugate_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_abs_c : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_arg_c : RETURN(make_uniform_product_space(the_negpi_pi_interval, 1));
+    ef_cos_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_exp_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_ln_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_sin_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_sqrt_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_tan_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_if_c : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_subscript_s : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_eq_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_gt_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_lt_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ge_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_le_s : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_subsequence_s : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_concat_s : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_size_s : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_format : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_value : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_like : RETURN(make_uniform_product_space(the_booleans, 1));
+    ef_if_s : RETURN(make_uniform_product_space(the_strings, 1));
+    ef_subscript_b : RETURN(make_uniform_product_space(the_binarys, 1));
+    ef_eq_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_gt_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_lt_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ge_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_le_b : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_subsequence_b : RETURN(make_uniform_product_space(the_binarys, 1));
+    ef_concat_b : RETURN(make_uniform_product_space(the_binarys, 1));
+    ef_size_b : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_if_b : RETURN(make_uniform_product_space(the_binarys, 1));
+    ef_subscript_t : RETURN(make_uniform_product_space(the_generics, 1));
+    ef_eq_t : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_ne_t : RETURN(make_uniform_product_space(the_logicals, 1));
+    ef_concat_t : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_size_t : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_entuple : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_detuple : RETURN(the_tuples);
+    ef_insert : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_remove : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_if_t : RETURN(make_uniform_product_space(the_tuples, 1));
+    ef_sum_it : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_product_it : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_add_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
+    ef_subtract_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
+    ef_scalar_mult_it : RETURN(make_uniform_product_space(the_integer_tuples, 1));
+    ef_dot_prod_it : RETURN(make_uniform_product_space(the_integers, 1));
+    ef_sum_rt : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_product_rt : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_add_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_subtract_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_scalar_mult_rt : RETURN(make_uniform_product_space(the_real_tuples, 1));
+    ef_dot_prod_rt : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_norm_rt : RETURN(make_uniform_product_space(the_reals, 1));
+    ef_sum_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_product_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_add_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_subtract_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_scalar_mult_ct : RETURN(make_uniform_product_space(the_complex_tuples, 1));
+    ef_dot_prod_ct : RETURN(make_uniform_product_space(the_complex_numbers, 1));
+    ef_norm_ct : RETURN(make_uniform_product_space(the_nonnegative_reals, 1));
+    ef_if : RETURN(make_uniform_product_space(the_generics, 1));
+    ef_ensemble : RETURN(make_uniform_product_space(the_maths_spaces, 1));
+    ef_member_of : RETURN(make_uniform_product_space(the_logicals, 1));
+    OTHERWISE: RETURN(?);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION derive_finite_function_domain(pairs : SET [1 : ?] OF LIST [2 : 2] OF maths_value) : tuple_space;
+LOCAL
+  result : SET OF maths_value := [];
+END_LOCAL;
+  result := result + list_selected_components(pairs, 1);
+  RETURN(one_tuples_of(make_finite_space(result)));
+END_FUNCTION;
+
+FUNCTION derive_finite_function_range(pairs : SET [1 : ?] OF LIST [2 : 2] OF maths_value) : tuple_space;
+LOCAL
+  result : SET OF maths_value := [];
+END_LOCAL;
+  result := result + list_selected_components(pairs, 2);
+  RETURN(one_tuples_of(make_finite_space(result)));
+END_FUNCTION;
+
+FUNCTION derive_function_domain(func : maths_function) : tuple_space;
+LOCAL
+  typenames  : SET OF STRING                   := stripped_typeof(func);
+  tspace     : tuple_space                     := make_listed_product_space([]);
+  shape      : LIST OF positive_integer;
+  sidxs      : LIST OF INTEGER                 := [0];
+  itvl       : finite_integer_interval;
+  factors    : LIST OF finite_integer_interval := [];
+  is_uniform : BOOLEAN                         := true;
+END_LOCAL;
+  IF 'FINITE_FUNCTION' IN typenames
+  THEN
+    RETURN(derive_finite_function_domain(func\finite_function.pairs));
+  END_IF;
+  IF 'CONSTANT_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\constant_function.source_of_domain));
+  END_IF;
+  IF 'SELECTOR_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\selector_function.source_of_domain));
+  END_IF;
+  IF 'ELEMENTARY_FUNCTION' IN typenames
+  THEN
+    RETURN(derive_elementary_function_domain(func\elementary_function.func_id));
+  END_IF;
+  IF 'RESTRICTION_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(func\restriction_function.operand));
+  END_IF;
+  IF 'REPACKAGING_FUNCTION' IN typenames
+  THEN
+    IF func\repackaging_function.input_repack = ro_nochange
+    THEN
+      RETURN(func\repackaging_function.operand.domain);
+    END_IF;
+    IF func\repackaging_function.input_repack = ro_wrap_as_tuple
+    THEN
+      RETURN(factor1(func\repackaging_function.operand.domain));
+    END_IF;
+    IF func\repackaging_function.input_repack = ro_unwrap_tuple
+    THEN
+      RETURN(one_tuples_of(func\repackaging_function.operand.domain));
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF 'REINDEXED_ARRAY_FUNCTION' IN typenames
+  THEN
+    shape := shape_of_array(func\unary_generic_expression.operand);
+    sidxs := func\reindexed_array_function.starting_indices;
+    REPEAT i := 1 TO SIZEOF(shape);
+      itvl := make_finite_integer_interval(sidxs[i], sidxs[i] + shape[i] - 1);
+      INSERT(factors, itvl, i - 1);
+      IF shape[i] <> shape[1]
+      THEN
+        is_uniform := false;
+      END_IF;
+    END_REPEAT;
+    IF is_uniform
+    THEN
+      RETURN(make_uniform_product_space(factors[1], SIZEOF(shape)));
+    END_IF;
+    RETURN(make_listed_product_space(factors));
+  END_IF;
+  IF 'SERIES_COMPOSED_FUNCTION' IN typenames
+  THEN
+    RETURN(func\series_composed_function.operands[1].domain);
+  END_IF;
+  IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\parallel_composed_function.source_of_domain));
+  END_IF;
+  IF 'EXPLICIT_TABLE_FUNCTION' IN typenames
+  THEN
+    shape := func\explicit_table_function.shape;
+    sidxs[1] := func\explicit_table_function.index_base;
+    REPEAT i := 1 TO SIZEOF(shape);
+      itvl := make_finite_integer_interval(sidxs[1], sidxs[1] + shape[i] - 1);
+      INSERT(factors, itvl, i - 1);
+      IF shape[i] <> shape[1]
+      THEN
+        is_uniform := false;
+      END_IF;
+    END_REPEAT;
+    IF is_uniform
+    THEN
+      RETURN(make_uniform_product_space(factors[1], SIZEOF(shape)));
+    END_IF;
+    RETURN(make_listed_product_space(factors));
+  END_IF;
+  IF 'HOMOGENEOUS_LINEAR_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\homogeneous_linear_function.mat.range),
+                                                    func\homogeneous_linear_function.mat\explicit_table_function.shape[func\homogeneous_linear_function.sum_index])));
+  END_IF;
+  IF 'GENERAL_LINEAR_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\general_linear_function.mat.range),
+                                                    func\general_linear_function.mat\explicit_table_function.shape[func\general_linear_function.sum_index] -
+                                                    1)));
+  END_IF;
+  IF 'B_SPLINE_BASIS' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_finite_real_interval(func\b_spline_basis.repeated_knots[func\b_spline_basis.order],
+                                                   closed,
+                                                   func\b_spline_basis.repeated_knots[func\b_spline_basis.num_basis +
+                                                                                      1],
+                                                   closed)));
+  END_IF;
+  IF 'B_SPLINE_FUNCTION' IN typenames
+  THEN
+    REPEAT i := 1 TO SIZEOF(func\b_spline_function.basis);
+      tspace := assoc_product_space(tspace, func\b_spline_function.basis[i].domain);
+    END_REPEAT;
+    RETURN(one_tuples_of(tspace));
+  END_IF;
+  IF 'RATIONALIZE_FUNCTION' IN typenames
+  THEN
+    RETURN(func\rationalize_function.fun.domain);
+  END_IF;
+  IF 'PARTIAL_DERIVATIVE_FUNCTION' IN typenames
+  THEN
+    RETURN(func\partial_derivative_function.derivand.domain);
+  END_IF;
+  IF 'DEFINITE_INTEGRAL_FUNCTION' IN typenames
+  THEN
+    RETURN(derive_definite_integral_domain(func));
+  END_IF;
+  IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN typenames
+  THEN
+    REPEAT i := 1 TO SIZEOF(func\abstracted_expression_function.variables);
+      tspace := assoc_product_space(tspace,
+                                    one_tuples_of(values_space_of(func\abstracted_expression_function.variables[i])));
+    END_REPEAT;
+    RETURN(tspace);
+  END_IF;
+  IF 'EXPRESSION_DENOTED_FUNCTION' IN typenames
+  THEN
+    RETURN(values_space_of(func\expression_denoted_function.expr)\function_space.domain_argument);
+  END_IF;
+  IF 'IMPORTED_POINT_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_listed_product_space([])));
+  END_IF;
+  IF 'IMPORTED_CURVE_FUNCTION' IN typenames
+  THEN
+    RETURN(func\imported_curve_function.parametric_domain);
+  END_IF;
+  IF 'IMPORTED_SURFACE_FUNCTION' IN typenames
+  THEN
+    RETURN(func\imported_surface_function.parametric_domain);
+  END_IF;
+  IF 'IMPORTED_VOLUME_FUNCTION' IN typenames
+  THEN
+    RETURN(func\imported_volume_function.parametric_domain);
+  END_IF;
+  IF 'APPLICATION_DEFINED_FUNCTION' IN typenames
+  THEN
+    RETURN(func\application_defined_function.explicit_domain);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION derive_function_range(func : maths_function) : tuple_space;
+LOCAL
+  typenames : SET OF STRING       := stripped_typeof(func);
+  tspace    : tuple_space         := make_listed_product_space([]);
+  m         : nonnegative_integer := 0;
+  n         : nonnegative_integer := 0;
+  temp      : INTEGER             := 0;
+END_LOCAL;
+  IF 'FINITE_FUNCTION' IN typenames
+  THEN
+    RETURN(derive_finite_function_range(func\finite_function.pairs));
+  END_IF;
+  IF 'CONSTANT_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_finite_space([func\constant_function.sole_output])));
+  END_IF;
+  IF 'SELECTOR_FUNCTION' IN typenames
+  THEN
+    tspace := func.domain;
+    IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(tspace))
+    THEN
+      tspace := factor1(tspace);
+    END_IF;
+    RETURN(one_tuples_of(factor_space(tspace, func\selector_function.selector)));
+  END_IF;
+  IF 'ELEMENTARY_FUNCTION' IN typenames
+  THEN
+    RETURN(derive_elementary_function_range(func\elementary_function.func_id));
+  END_IF;
+  IF 'RESTRICTION_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(func\restriction_function.operand));
+  END_IF;
+  IF 'REPACKAGING_FUNCTION' IN typenames
+  THEN
+    tspace := func\repackaging_function.operand.range;
+    IF func\repackaging_function.output_repack = ro_wrap_as_tuple
+    THEN
+      tspace := one_tuples_of(tspace);
+    END_IF;
+    IF func\repackaging_function.output_repack = ro_unwrap_tuple
+    THEN
+      tspace := factor1(tspace);
+    END_IF;
+    IF func\repackaging_function.selected_output > 0
+    THEN
+      tspace := one_tuples_of(factor_space(tspace, func\repackaging_function.selected_output));
+    END_IF;
+    RETURN(tspace);
+  END_IF;
+  IF 'REINDEXED_ARRAY_FUNCTION' IN typenames
+  THEN
+    RETURN(func\unary_generic_expression.operand\maths_function.range);
+  END_IF;
+  IF 'SERIES_COMPOSED_FUNCTION' IN typenames
+  THEN
+    RETURN(func\series_composed_function.operands[SIZEOF(func\series_composed_function.operands)].range);
+  END_IF;
+  IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
+  THEN
+    RETURN(func\parallel_composed_function.final_function.range);
+  END_IF;
+  IF 'EXPLICIT_TABLE_FUNCTION' IN typenames
+  THEN
+    IF 'LISTED_REAL_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(the_reals));
+    END_IF;
+    IF 'LISTED_INTEGER_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(the_integers));
+    END_IF;
+    IF 'LISTED_LOGICAL_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(the_logicals));
+    END_IF;
+    IF 'LISTED_STRING_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(the_strings));
+    END_IF;
+    IF 'LISTED_COMPLEX_NUMBER_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(the_complex_numbers));
+    END_IF;
+    IF 'LISTED_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(func\listed_data.value_range));
+    END_IF;
+    IF 'EXTERNALLY_LISTED_DATA' IN typenames
+    THEN
+      RETURN(one_tuples_of(func\externally_listed_data.value_range));
+    END_IF;
+    IF 'LINEARIZED_TABLE_FUNCTION' IN typenames
+    THEN
+      RETURN(func\linearized_table_function.source.range);
+    END_IF;
+    IF 'BASIC_SPARSE_MATRIX' IN typenames
+    THEN
+      RETURN(func\basic_sparse_matrix.val.range);
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF 'HOMOGENEOUS_LINEAR_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\homogeneous_linear_function.mat.range),
+                                                    func\homogeneous_linear_function.mat\explicit_table_function.shape[3 -
+                                                                                                                       func\homogeneous_linear_function.sum_index])));
+  END_IF;
+  IF 'GENERAL_LINEAR_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_uniform_product_space(factor1(func\general_linear_function.mat.range),
+                                                    func\general_linear_function.mat\explicit_table_function.shape[3 -
+                                                                                                                   func\general_linear_function.sum_index])));
+  END_IF;
+  IF 'B_SPLINE_BASIS' IN typenames
+  THEN
+    RETURN(one_tuples_of(make_uniform_product_space(the_reals, func\b_spline_basis.num_basis)));
+  END_IF;
+  IF 'B_SPLINE_FUNCTION' IN typenames
+  THEN
+    tspace := factor1(func\b_spline_function.coef.domain);
+    m := SIZEOF(func\b_spline_function.basis);
+    n := space_dimension(tspace);
+    IF m = n
+    THEN
+      RETURN(one_tuples_of(the_reals));
+    END_IF;
+    IF m = n - 1
+    THEN
+      RETURN(one_tuples_of(make_uniform_product_space(the_reals,
+                                                      factor_space(tspace, n)\finite_integer_interval.size)));
+    END_IF;
+    tspace := extract_factors(tspace, m + 1, n);
+    RETURN(one_tuples_of(make_function_space(sc_equal, tspace, sc_subspace,
+                                             number_superspace_of(func\b_spline_function.coef.range))));
+  END_IF;
+  IF 'RATIONALIZE_FUNCTION' IN typenames
+  THEN
+    tspace := factor1(func\rationalize_function.fun.range);
+    n := space_dimension(tspace);
+    RETURN(one_tuples_of(make_uniform_product_space(number_superspace_of(factor1(tspace)), n - 1)));
+  END_IF;
+  IF 'PARTIAL_DERIVATIVE_FUNCTION' IN typenames
+  THEN
+    RETURN(drop_numeric_constraints(func\partial_derivative_function.derivand.range));
+  END_IF;
+  IF 'DEFINITE_INTEGRAL_FUNCTION' IN typenames
+  THEN
+    RETURN(drop_numeric_constraints(func\definite_integral_function.integrand.range));
+  END_IF;
+  IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN typenames
+  THEN
+    RETURN(one_tuples_of(values_space_of(func\abstracted_expression_function.expr)));
+  END_IF;
+  IF 'EXPRESSION_DENOTED_FUNCTION' IN typenames
+  THEN
+    RETURN(values_space_of(func\expression_denoted_function.expr)\function_space.range_argument);
+  END_IF;
+  IF 'IMPORTED_POINT_FUNCTION' IN typenames
+  THEN
+    temp := dimension_of(func\imported_point_function.geometry);
+    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
+  END_IF;
+  IF 'IMPORTED_CURVE_FUNCTION' IN typenames
+  THEN
+    temp := dimension_of(func\imported_curve_function.geometry);
+    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
+  END_IF;
+  IF 'IMPORTED_SURFACE_FUNCTION' IN typenames
+  THEN
+    temp := dimension_of(func\imported_surface_function.geometry);
+    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
+  END_IF;
+  IF 'IMPORTED_VOLUME_FUNCTION' IN typenames
+  THEN
+    temp := dimension_of(func\imported_volume_function.geometry);
+    RETURN(one_tuples_of(make_uniform_product_space(the_reals, temp)));
+  END_IF;
+  IF 'APPLICATION_DEFINED_FUNCTION' IN typenames
+  THEN
+    RETURN(func\application_defined_function.explicit_range);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION dimension_of(item : geometric_representation_item) : dimension_count;
+LOCAL
+  x   : SET OF representation;
+  y   : representation_context;
+  dim : dimension_count;
+END_LOCAL;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(item)
+  THEN
+    dim := SIZEOF(item\cartesian_point.coordinates);
+    RETURN(dim);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION' IN TYPEOF(item)
+  THEN
+    dim := SIZEOF(item\direction.direction_ratios);
+    RETURN(dim);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(item)
+  THEN
+    dim := SIZEOF(item\vector.orientation\direction.direction_ratios);
+    RETURN(dim);
+  END_IF;
+  x := using_representations(item);
+  IF (SIZEOF(x) > 0)
+  THEN
+    y := x[1].context_of_items;
+    dim := y\geometric_representation_context.coordinate_space_dimension;
+    RETURN(dim);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION dimensions_for_si_unit(n : si_unit_name) : dimensional_exponents;
+  CASE n OF
+    metre : RETURN(dimensional_exponents(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+    gram : RETURN(dimensional_exponents(0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+    second : RETURN(dimensional_exponents(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0));
+    ampere : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0));
+    kelvin : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0));
+    mole : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0));
+    candela : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
+    radian : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+    steradian : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+    hertz : RETURN(dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0));
+    newton : RETURN(dimensional_exponents(1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
+    pascal : RETURN(dimensional_exponents(-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
+    joule : RETURN(dimensional_exponents(2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0));
+    watt : RETURN(dimensional_exponents(2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0));
+    coulomb : RETURN(dimensional_exponents(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0));
+    volt : RETURN(dimensional_exponents(2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0));
+    farad : RETURN(dimensional_exponents(-2.0, -1.0, 4.0, 2.0, 0.0, 0.0, 0.0));
+    ohm : RETURN(dimensional_exponents(2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0));
+    siemens : RETURN(dimensional_exponents(-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0));
+    weber : RETURN(dimensional_exponents(2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0));
+    tesla : RETURN(dimensional_exponents(0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0));
+    henry : RETURN(dimensional_exponents(2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0));
+    degree_celsius : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0));
+    lumen : RETURN(dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
+    lux : RETURN(dimensional_exponents(-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0));
+    becquerel : RETURN(dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0));
+    gray : RETURN(dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0));
+    sievert : RETURN(dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0));
+    OTHERWISE: RETURN(?);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION domain_from(ref : maths_space_or_function) : tuple_space;
+LOCAL
+  typenames : SET OF STRING  := stripped_typeof(ref);
+  func      : maths_function;
+END_LOCAL;
+  IF NOT EXISTS(ref)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF 'TUPLE_SPACE' IN typenames
+  THEN
+    RETURN(ref);
+  END_IF;
+  IF 'MATHS_SPACE' IN typenames
+  THEN
+    RETURN(one_tuples_of(ref));
+  END_IF;
+  func := ref;
+  IF 'CONSTANT_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\constant_function.source_of_domain));
+  END_IF;
+  IF 'SELECTOR_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\selector_function.source_of_domain));
+  END_IF;
+  IF 'PARALLEL_COMPOSED_FUNCTION' IN typenames
+  THEN
+    RETURN(domain_from(func\parallel_composed_function.source_of_domain));
+  END_IF;
+  RETURN(func.domain);
+END_FUNCTION;
+
+FUNCTION dot_count(str : STRING) : INTEGER;
+LOCAL
+  n : INTEGER := 0;
+END_LOCAL;
+  REPEAT i := 1 TO LENGTH(str);
+    IF str[i] = '.'
+    THEN
+      n := n + 1;
+    END_IF;
+  END_REPEAT;
+  RETURN(n);
+END_FUNCTION;
+
+FUNCTION dot_product(arg1 : direction;
+                     arg2 : direction) : REAL;
+LOCAL
+  scalar : REAL;
+  vec1   : direction;
+  vec2   : direction;
+  ndim   : INTEGER;
+END_LOCAL;
+  IF NOT EXISTS(arg1) OR NOT EXISTS(arg2)
+  THEN
+    scalar := ?;
+  ELSE
+    IF (arg1.dim <> arg2.dim)
+    THEN
+      scalar := ?;
+    ELSE
+      BEGIN  
+             vec1 := normalise(arg1);
+             vec2 := normalise(arg2);
+             ndim := arg1.dim;
+             scalar := 0.0;
+             REPEAT i := 1 TO ndim;
+               scalar := scalar + vec1.direction_ratios[i] * vec2.direction_ratios[i];
+             END_REPEAT;
+      END;
+    END_IF;
+  END_IF;
+  RETURN(scalar);
+END_FUNCTION;
+
+FUNCTION dotted_identifiers_syntax(str : STRING) : BOOLEAN;
+LOCAL
+  k : positive_integer;
+  m : positive_integer;
+END_LOCAL;
+  IF NOT EXISTS(str)
+  THEN
+    RETURN(false);
+  END_IF;
+  k := parse_express_identifier(str, 1);
+  IF k = 1
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT WHILE k <= LENGTH(str);
+    IF (str[k] <> '.') OR (k = LENGTH(str))
+    THEN
+      RETURN(false);
+    END_IF;
+    m := parse_express_identifier(str, k + 1);
+    IF m = k + 1
+    THEN
+      RETURN(false);
+    END_IF;
+    k := m;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION drop_numeric_constraints(spc : maths_space) : maths_space;
+LOCAL
+  typenames : SET OF STRING        := stripped_typeof(spc);
+  tspc      : listed_product_space;
+  factors   : LIST OF maths_space  := [];
+  xspc      : extended_tuple_space;
+END_LOCAL;
+  IF 'UNIFORM_PRODUCT_SPACE' IN typenames
+  THEN
+    RETURN(make_uniform_product_space(drop_numeric_constraints(spc\uniform_product_space.base),
+                                      spc\uniform_product_space.exponent));
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN typenames
+  THEN
+    tspc := spc;
+    REPEAT i := 1 TO SIZEOF(tspc.factors);
+      INSERT(factors, drop_numeric_constraints(tspc.factors[i]), i - 1);
+    END_REPEAT;
+    RETURN(make_listed_product_space(factors));
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN typenames
+  THEN
+    xspc := spc;
+    RETURN(make_extended_tuple_space(drop_numeric_constraints(xspc.base), drop_numeric_constraints(xspc.extender)));
+  END_IF;
+  IF subspace_of_es(spc, es_numbers)
+  THEN
+    RETURN(number_superspace_of(spc));
+  END_IF;
+  RETURN(spc);
+END_FUNCTION;
+
+FUNCTION duration_is_negative(duration : time_measure_with_unit) : BOOLEAN;
+  IF (duration\measure_with_unit.value_component < 0.0)
+  THEN
+    RETURN(true);
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION duration_is_positive(duration : time_measure_with_unit) : BOOLEAN;
+  IF (duration\measure_with_unit.value_component > 0.0)
+  THEN
+    RETURN(true);
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION edge_reversed(an_edge : edge) : oriented_edge;
+LOCAL
+  the_reverse : oriented_edge;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_EDGE' IN TYPEOF(an_edge))
+  THEN
+    the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) ||
+                   oriented_edge(an_edge\oriented_edge.edge_element, NOT (an_edge\oriented_edge.orientation));
+  ELSE
+    the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge, false);
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION enclose_cregion_in_pregion(crgn : cartesian_complex_number_region;
+                                    centre : complex_number_literal) : polar_complex_number_region;
+-- Find equivalent direction in range -PI < a <= PI.
+FUNCTION angle(a : REAL) : REAL;
+  REPEAT WHILE a > PI;
+    a := a - 2.0 * PI;
+  END_REPEAT;
+  REPEAT WHILE a <= -PI;
+    a := a + 2.0 * PI;
+  END_REPEAT;
+  RETURN(a);
+END_FUNCTION;
+FUNCTION strictly_in(z : REAL;
+                     zitv : real_interval) : LOGICAL;
+  RETURN((NOT min_exists(zitv) OR (z > real_min(zitv))) AND (NOT max_exists(zitv) OR (z < real_max(zitv))));
+END_FUNCTION;
+PROCEDURE angle_minmax(ab : REAL; a : REAL; a_in : BOOLEAN; VAR amin : REAL; VAR amax : REAL; VAR amin_in : BOOLEAN;
+                       VAR amax_in : BOOLEAN);
+  a := angle(a - ab);
+  IF amin = a
+  THEN
+    amin_in := amin_in OR a_in;
+  END_IF;
+  IF amin > a
+  THEN
+    amin := a;
+    amin_in := a_in;
+  END_IF;
+  IF amax = a
+  THEN
+    amax_in := amax_in OR a_in;
+  END_IF;
+  IF amax < a
+  THEN
+    amax := a;
+    amax_in := a_in;
+  END_IF;
+END_PROCEDURE;
+PROCEDURE range_max(r : REAL; incl : BOOLEAN; VAR rmax : REAL; VAR rmax_in : BOOLEAN);
+  IF rmax = r
+  THEN
+    rmax_in := rmax_in OR incl;
+  END_IF;
+  IF rmax < r
+  THEN
+    rmax := r;
+    rmax_in := incl;
+  END_IF;
+END_PROCEDURE;
+PROCEDURE range_min(r : REAL; incl : BOOLEAN; VAR rmin : REAL; VAR rmin_in : BOOLEAN);
+  IF rmin = r
+  THEN
+    rmin_in := rmin_in OR incl;
+  END_IF;
+  IF (rmin < 0.0) OR (rmin > r)
+  THEN
+    rmin := r;
+    rmin_in := incl;
+  END_IF;
+END_PROCEDURE;
+LOCAL
+  xitv        : real_interval;
+  yitv        : real_interval;
+  is_xmin     : BOOLEAN;
+  is_xmax     : BOOLEAN;
+  is_ymin     : BOOLEAN;
+  is_ymax     : BOOLEAN;
+  xmin        : REAL                 := 0.0;
+  xmax        : REAL                 := 0.0;
+  ymin        : REAL                 := 0.0;
+  ymax        : REAL                 := 0.0;
+  xc          : REAL                 := 0.0;
+  yc          : REAL                 := 0.0;
+  xmin_in     : BOOLEAN              := false;
+  xmax_in     : BOOLEAN              := false;
+  ymin_in     : BOOLEAN              := false;
+  ymax_in     : BOOLEAN              := false;
+  rmin        : REAL                 := -1.0;
+  rmax        : REAL                 := -1.0;
+  amin        : REAL                 := 4.0;
+  amax        : REAL                 := -4.0;
+  rmax_exists : BOOLEAN              := true;
+  outside     : BOOLEAN              := true;
+  rmin_in     : BOOLEAN              := false;
+  rmax_in     : BOOLEAN              := false;
+  amin_in     : BOOLEAN              := false;
+  amax_in     : BOOLEAN              := false;
+  ab          : REAL                 := 0.0;
+  a           : REAL                 := 0.0;
+  r           : REAL                 := 0.0;
+  incl        : BOOLEAN;
+  ritv        : real_interval;
+  aitv        : finite_real_interval;
+  minclo      : open_closed          := open;
+  maxclo      : open_closed          := open;
+END_LOCAL;
+  IF NOT EXISTS(crgn) OR NOT EXISTS(centre)
+  THEN
+    RETURN(?);
+  END_IF;
+  xitv := crgn.real_constraint;
+  yitv := crgn.imag_constraint;
+  xc := centre.real_part;
+  yc := centre.imag_part;
+  is_xmin := min_exists(xitv);
+  is_xmax := max_exists(xitv);
+  is_ymin := min_exists(yitv);
+  is_ymax := max_exists(yitv);
+  IF is_xmin
+  THEN
+    xmin := real_min(xitv);
+    xmin_in := min_included(xitv);
+  END_IF;
+  IF is_xmax
+  THEN
+    xmax := real_max(xitv);
+    xmax_in := max_included(xitv);
+  END_IF;
+  IF is_ymin
+  THEN
+    ymin := real_min(yitv);
+    ymin_in := min_included(yitv);
+  END_IF;
+  IF is_ymax
+  THEN
+    ymax := real_max(yitv);
+    ymax_in := max_included(yitv);
+  END_IF;
+  rmax_exists := is_xmin AND is_xmax AND is_ymin AND is_ymax;
+  IF is_xmin AND (xc <= xmin)
+  THEN
+    ab := 0.0;
+  ELSE
+    IF is_ymin AND (yc <= ymin)
+    THEN
+      ab := 0.5 * PI;
+    ELSE
+      IF is_ymax AND (yc >= ymax)
+      THEN
+        ab := -0.5 * PI;
+      ELSE
+        IF is_xmax AND (xc >= xmax)
+        THEN
+          ab := PI;
+        ELSE
+          outside := false;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  IF NOT outside AND NOT rmax_exists
+  THEN
+    RETURN(?);
+  END_IF;
+  IF is_xmin AND (xc <= xmin) AND strictly_in(yc, yitv)
+  THEN
+    rmin := xmin - xc;
+    rmin_in := xmin_in;
+  ELSE
+    IF is_ymin AND (yc <= ymin) AND strictly_in(xc, xitv)
+    THEN
+      rmin := ymin - yc;
+      rmin_in := ymin_in;
+    ELSE
+      IF is_ymax AND (yc >= ymax) AND strictly_in(xc, xitv)
+      THEN
+        rmin := yc - ymax;
+        rmin_in := ymax_in;
+      ELSE
+        IF is_xmax AND (xc >= xmax) AND strictly_in(yc, yitv)
+        THEN
+          rmin := xc - xmax;
+          rmin_in := xmax_in;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  IF is_xmin
+  THEN
+    IF is_ymin
+    THEN
+      r := SQRT((xmin - xc) ** 2 + (ymin - yc) ** 2);
+      incl := xmin_in AND ymin_in;
+      IF rmax_exists
+      THEN
+        range_max(r, incl, rmax, rmax_in);
+      END_IF;
+      IF outside
+      THEN
+        IF r > 0.0
+        THEN
+          range_min(r, incl, rmin, rmin_in);
+          a := angle(atan2(ymin - yc, xmin - xc) - ab);
+          IF xc = xmin
+          THEN
+            incl := xmin_in;
+          END_IF;
+          IF yc = ymin
+          THEN
+            incl := ymin_in;
+          END_IF;
+          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
+        ELSE
+          rmin := 0.0;
+          rmin_in := xmin_in AND ymin_in;
+          amin := angle(0.0 - ab);
+          amin_in := ymin_in;
+          amax := angle(0.5 * PI - ab);
+          amax_in := xmin_in;
+        END_IF;
+      END_IF;
+    ELSE
+      IF xc <= xmin
+      THEN
+        angle_minmax(ab, -0.5 * PI, (xc = xmin) AND xmin_in, amin, amax, amin_in, amax_in);
+      END_IF;
+    END_IF;
+    IF NOT is_ymax AND (xc <= xmin)
+    THEN
+      angle_minmax(ab, 0.5 * PI, (xc = xmin) AND xmin_in, amin, amax, amin_in, amax_in);
+    END_IF;
+  END_IF;
+  IF is_ymin
+  THEN
+    IF is_xmax
+    THEN
+      r := SQRT((xmax - xc) ** 2 + (ymin - yc) ** 2);
+      incl := xmax_in AND ymin_in;
+      IF rmax_exists
+      THEN
+        range_max(r, incl, rmax, rmax_in);
+      END_IF;
+      IF outside
+      THEN
+        IF r > 0.0
+        THEN
+          range_min(r, incl, rmin, rmin_in);
+          a := angle(atan2(ymin - yc, xmax - xc) - ab);
+          IF xc = xmax
+          THEN
+            incl := xmax_in;
+          END_IF;
+          IF yc = ymin
+          THEN
+            incl := ymin_in;
+          END_IF;
+          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
+        ELSE
+          rmin := 0.0;
+          rmin_in := xmax_in AND ymin_in;
+          amin := angle(0.5 * PI - ab);
+          amin_in := ymin_in;
+          amax := angle(PI - ab);
+          amax_in := xmax_in;
+        END_IF;
+      END_IF;
+    ELSE
+      IF yc <= ymin
+      THEN
+        angle_minmax(ab, 0.0, (yc = ymin) AND ymin_in, amin, amax, amin_in, amax_in);
+      END_IF;
+    END_IF;
+    IF NOT is_xmin AND (yc <= ymin)
+    THEN
+      angle_minmax(ab, PI, (yc = ymin) AND ymin_in, amin, amax, amin_in, amax_in);
+    END_IF;
+  END_IF;
+  IF is_xmax
+  THEN
+    IF is_ymax
+    THEN
+      r := SQRT((xmax - xc) ** 2 + (ymax - yc) ** 2);
+      incl := xmax_in AND ymax_in;
+      IF rmax_exists
+      THEN
+        range_max(r, incl, rmax, rmax_in);
+      END_IF;
+      IF outside
+      THEN
+        IF r > 0.0
+        THEN
+          range_min(r, incl, rmin, rmin_in);
+          a := angle(atan2(ymax - yc, xmax - xc) - ab);
+          IF xc = xmax
+          THEN
+            incl := xmax_in;
+          END_IF;
+          IF yc = ymax
+          THEN
+            incl := ymax_in;
+          END_IF;
+          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
+        ELSE
+          rmin := 0.0;
+          rmin_in := xmax_in AND ymax_in;
+          amin := angle(-PI - ab);
+          amin_in := ymax_in;
+          amax := angle(-0.5 * PI - ab);
+          amax_in := xmax_in;
+        END_IF;
+      END_IF;
+    ELSE
+      IF xc >= xmax
+      THEN
+        angle_minmax(ab, 0.5 * PI, (xc = xmax) AND xmax_in, amin, amax, amin_in, amax_in);
+      END_IF;
+    END_IF;
+    IF NOT is_ymin AND (xc >= xmax)
+    THEN
+      angle_minmax(ab, -0.5 * PI, (xc = xmax) AND xmax_in, amin, amax, amin_in, amax_in);
+    END_IF;
+  END_IF;
+  IF is_ymax
+  THEN
+    IF is_xmin
+    THEN
+      r := SQRT((xmin - xc) ** 2 + (ymax - yc) ** 2);
+      incl := xmin_in AND ymax_in;
+      IF rmax_exists
+      THEN
+        range_max(r, incl, rmax, rmax_in);
+      END_IF;
+      IF outside
+      THEN
+        IF r > 0.0
+        THEN
+          range_min(r, incl, rmin, rmin_in);
+          a := angle(atan2(ymax - yc, xmin - xc) - ab);
+          IF xc = xmin
+          THEN
+            incl := xmin_in;
+          END_IF;
+          IF yc = ymax
+          THEN
+            incl := ymax_in;
+          END_IF;
+          angle_minmax(ab, a, incl, amin, amax, amin_in, amax_in);
+        ELSE
+          rmin := 0.0;
+          rmin_in := xmin_in AND ymax_in;
+          amin := angle(0.5 * PI - ab);
+          amin_in := ymax_in;
+          amax := angle(PI - ab);
+          amax_in := xmin_in;
+        END_IF;
+      END_IF;
+    ELSE
+      IF yc >= ymax
+      THEN
+        angle_minmax(ab, PI, (yc = ymax) AND ymax_in, amin, amax, amin_in, amax_in);
+      END_IF;
+    END_IF;
+    IF NOT is_xmax AND (yc >= ymax)
+    THEN
+      angle_minmax(ab, 0.0, (yc = ymax) AND ymax_in, amin, amax, amin_in, amax_in);
+    END_IF;
+  END_IF;
+  IF outside
+  THEN
+    amin := angle(amin + ab);
+    IF amin = PI
+    THEN
+      amin := -PI;
+    END_IF;
+    amax := angle(amax + ab);
+    IF amax <= amin
+    THEN
+      amax := amax + 2.0 * PI;
+    END_IF;
+  ELSE
+    amin := -PI;
+    amin_in := false;
+    amax := PI;
+    amax_in := false;
+  END_IF;
+  IF amin_in
+  THEN
+    minclo := closed;
+  END_IF;
+  IF amax_in
+  THEN
+    maxclo := closed;
+  END_IF;
+  aitv := make_finite_real_interval(amin, minclo, amax, maxclo);
+  minclo := open;
+  IF rmin_in
+  THEN
+    minclo := closed;
+  END_IF;
+  IF rmax_exists
+  THEN
+    maxclo := open;
+    IF rmax_in
+    THEN
+      maxclo := closed;
+    END_IF;
+    ritv := make_finite_real_interval(rmin, minclo, rmax, maxclo);
+  ELSE
+    ritv := make_real_interval_from_min(rmin, minclo);
+  END_IF;
+  RETURN(make_polar_complex_number_region(centre, ritv, aitv));
+END_FUNCTION;
+
+FUNCTION enclose_pregion_in_cregion(prgn : polar_complex_number_region) : cartesian_complex_number_region;
+PROCEDURE nearest_good_direction(acart : REAL; aitv : finite_real_interval; VAR a : REAL; VAR a_in : BOOLEAN);
+  a := acart;
+  a_in := true;
+  IF a < aitv.min
+  THEN
+    IF a + 2.0 * PI < aitv.max
+    THEN
+      RETURN;
+    END_IF;
+    IF a + 2.0 * PI = aitv.max
+    THEN
+      a_in := max_included(aitv);
+      RETURN;
+    END_IF;
+  ELSE
+    IF a = aitv.min
+    THEN
+      a_in := min_included(aitv);
+      RETURN;
+    ELSE
+      IF a < aitv.max
+      THEN
+        RETURN;
+      ELSE
+        IF a = aitv.max
+        THEN
+          a_in := max_included(aitv);
+          RETURN;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  IF COS(acart - aitv.max) >= COS(acart - aitv.min)
+  THEN
+    a := aitv.max;
+    a_in := max_included(aitv);
+  ELSE
+    a := aitv.min;
+    a_in := min_included(aitv);
+  END_IF;
+END_PROCEDURE;
+LOCAL
+  xc          : REAL                 := 0.0;
+  yc          : REAL                 := 0.0;
+  xmin        : REAL                 := 0.0;
+  xmax        : REAL                 := 0.0;
+  ymin        : REAL                 := 0.0;
+  ymax        : REAL                 := 0.0;
+  ritv        : real_interval;
+  xitv        : real_interval;
+  yitv        : real_interval;
+  aitv        : finite_real_interval;
+  xmin_exists : BOOLEAN;
+  xmax_exists : BOOLEAN;
+  ymin_exists : BOOLEAN;
+  ymax_exists : BOOLEAN;
+  xmin_in     : BOOLEAN              := false;
+  xmax_in     : BOOLEAN              := false;
+  ymin_in     : BOOLEAN              := false;
+  ymax_in     : BOOLEAN              := false;
+  a           : REAL                 := 0.0;
+  r           : REAL                 := 0.0;
+  a_in        : BOOLEAN              := false;
+  min_clo     : open_closed          := open;
+  max_clo     : open_closed          := open;
+END_LOCAL;
+  IF NOT EXISTS(prgn)
+  THEN
+    RETURN(?);
+  END_IF;
+  xc := prgn.centre.real_part;
+  yc := prgn.centre.imag_part;
+  ritv := prgn.distance_constraint;
+  aitv := prgn.direction_constraint;
+  nearest_good_direction(PI, aitv, a, a_in);
+  IF COS(a) >= 0.0
+  THEN
+    xmin_exists := true;
+    xmin := xc + real_min(ritv) * COS(a);
+    xmin_in := a_in AND (min_included(ritv) OR (COS(a) = 0.0));
+  ELSE
+    IF max_exists(ritv)
+    THEN
+      xmin_exists := true;
+      xmin := xc + real_max(ritv) * COS(a);
+      xmin_in := a_in AND max_included(ritv);
+    ELSE
+      xmin_exists := false;
+    END_IF;
+  END_IF;
+  nearest_good_direction(0.0, aitv, a, a_in);
+  IF COS(a) <= 0.0
+  THEN
+    xmax_exists := true;
+    xmax := xc + real_min(ritv) * COS(a);
+    xmax_in := a_in AND (min_included(ritv) OR (COS(a) = 0.0));
+  ELSE
+    IF max_exists(ritv)
+    THEN
+      xmax_exists := true;
+      xmax := xc + real_max(ritv) * COS(a);
+      xmax_in := a_in AND max_included(ritv);
+    ELSE
+      xmax_exists := false;
+    END_IF;
+  END_IF;
+  nearest_good_direction(-0.5 * PI, aitv, a, a_in);
+  IF SIN(a) >= 0.0
+  THEN
+    ymin_exists := true;
+    ymin := yc + real_min(ritv) * SIN(a);
+    ymin_in := a_in AND (min_included(ritv) OR (SIN(a) = 0.0));
+  ELSE
+    IF max_exists(ritv)
+    THEN
+      ymin_exists := true;
+      ymin := yc + real_max(ritv) * SIN(a);
+      ymin_in := a_in AND max_included(ritv);
+    ELSE
+      ymin_exists := false;
+    END_IF;
+  END_IF;
+  nearest_good_direction(0.5 * PI, aitv, a, a_in);
+  IF SIN(a) <= 0.0
+  THEN
+    ymax_exists := true;
+    ymax := yc + real_min(ritv) * SIN(a);
+    ymax_in := a_in AND (min_included(ritv) OR (SIN(a) = 0.0));
+  ELSE
+    IF max_exists(ritv)
+    THEN
+      ymax_exists := true;
+      ymax := yc + real_max(ritv) * SIN(a);
+      ymax_in := a_in AND max_included(ritv);
+    ELSE
+      ymax_exists := false;
+    END_IF;
+  END_IF;
+  IF NOT (xmin_exists OR xmax_exists OR ymin_exists OR ymax_exists)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF xmin_exists
+  THEN
+    IF xmin_in
+    THEN
+      min_clo := closed;
+    ELSE
+      min_clo := open;
+    END_IF;
+    IF xmax_exists
+    THEN
+      IF xmax_in
+      THEN
+        max_clo := closed;
+      ELSE
+        max_clo := open;
+      END_IF;
+      xitv := make_finite_real_interval(xmin, min_clo, xmax, max_clo);
+    ELSE
+      xitv := make_real_interval_from_min(xmin, min_clo);
+    END_IF;
+  ELSE
+    IF xmax_exists
+    THEN
+      IF xmax_in
+      THEN
+        max_clo := closed;
+      ELSE
+        max_clo := open;
+      END_IF;
+      xitv := make_real_interval_to_max(xmax, max_clo);
+    ELSE
+      xitv := the_reals;
+    END_IF;
+  END_IF;
+  IF ymin_exists
+  THEN
+    IF ymin_in
+    THEN
+      min_clo := closed;
+    ELSE
+      min_clo := open;
+    END_IF;
+    IF ymax_exists
+    THEN
+      IF ymax_in
+      THEN
+        max_clo := closed;
+      ELSE
+        max_clo := open;
+      END_IF;
+      yitv := make_finite_real_interval(ymin, min_clo, ymax, max_clo);
+    ELSE
+      yitv := make_real_interval_from_min(ymin, min_clo);
+    END_IF;
+  ELSE
+    IF ymax_exists
+    THEN
+      IF ymax_in
+      THEN
+        max_clo := closed;
+      ELSE
+        max_clo := open;
+      END_IF;
+      yitv := make_real_interval_to_max(ymax, max_clo);
+    ELSE
+      yitv := the_reals;
+    END_IF;
+  END_IF;
+  RETURN(make_cartesian_complex_number_region(xitv, yitv));
+END_FUNCTION;
+
+FUNCTION enclose_pregion_in_pregion(prgn : polar_complex_number_region;
+                                    centre : complex_number_literal) : polar_complex_number_region;
+-- Find equivalent direction in range -PI < a <= PI.
+FUNCTION angle(a : REAL) : REAL;
+  REPEAT WHILE a > PI;
+    a := a - 2.0 * PI;
+  END_REPEAT;
+  REPEAT WHILE a <= -PI;
+    a := a + 2.0 * PI;
+  END_REPEAT;
+  RETURN(a);
+END_FUNCTION;
+PROCEDURE angle_range(VAR amin : REAL; VAR amax : REAL);
+  amin := angle(amin);
+  IF amin = PI
+  THEN
+    amin := -PI;
+  END_IF;
+  amax := angle(amax);
+  IF amax <= amin
+  THEN
+    amax := amax + 2.0 * PI;
+  END_IF;
+END_PROCEDURE;
+FUNCTION strictly_in(a : REAL;
+                     aitv : finite_real_interval) : LOGICAL;
+  a := angle(a);
+  RETURN({aitv.min < a < aitv.max} OR {aitv.min < a + 2.0 * PI < aitv.max});
+END_FUNCTION;
+PROCEDURE find_aminmax(ab : REAL; a0 : REAL; a1 : REAL; a2 : REAL; a3 : REAL; in0 : BOOLEAN; in1 : BOOLEAN;
+                       in2 : BOOLEAN; in3 : BOOLEAN; VAR amin : REAL; VAR amax : REAL; VAR amin_in : BOOLEAN;
+                       VAR amax_in : BOOLEAN);
+ LOCAL  
+        a : REAL;
+ END_LOCAL;
+  amin := angle(a0 - ab);
+  amin_in := in0;
+  amax := amin;
+  amax_in := in0;
+  a := angle(a1 - ab);
+  IF a = amin
+  THEN
+    amin_in := amin_in OR in1;
+  END_IF;
+  IF a < amin
+  THEN
+    amin := a;
+    amin_in := in1;
+  END_IF;
+  IF a = amax
+  THEN
+    amax_in := amax_in OR in1;
+  END_IF;
+  IF a > amax
+  THEN
+    amax := a;
+    amax_in := in1;
+  END_IF;
+  a := angle(a2 - ab);
+  IF a = amin
+  THEN
+    amin_in := amin_in OR in2;
+  END_IF;
+  IF a < amin
+  THEN
+    amin := a;
+    amin_in := in2;
+  END_IF;
+  IF a = amax
+  THEN
+    amax_in := amax_in OR in2;
+  END_IF;
+  IF a > amax
+  THEN
+    amax := a;
+    amax_in := in2;
+  END_IF;
+  a := angle(a3 - ab);
+  IF a = amin
+  THEN
+    amin_in := amin_in OR in3;
+  END_IF;
+  IF a < amin
+  THEN
+    amin := a;
+    amin_in := in3;
+  END_IF;
+  IF a = amax
+  THEN
+    amax_in := amax_in OR in3;
+  END_IF;
+  IF a > amax
+  THEN
+    amax := a;
+    amax_in := in3;
+  END_IF;
+  amin := amin + ab;
+  amax := amax + ab;
+  angle_range(amin, amax);
+END_PROCEDURE;
+LOCAL
+  ritp    : real_interval;
+  ritv    : real_interval;
+  aitp    : finite_real_interval;
+  aitv    : finite_real_interval;
+  xp      : REAL                 := 0.0;
+  yp      : REAL                 := 0.0;
+  xc      : REAL                 := 0.0;
+  yc      : REAL                 := 0.0;
+  rmax    : REAL                 := 0.0;
+  rmin    : REAL                 := 0.0;
+  amin    : REAL                 := 0.0;
+  amax    : REAL                 := 0.0;
+  rc      : REAL                 := 0.0;
+  acp     : REAL                 := 0.0;
+  apc     : REAL                 := 0.0;
+  rmax_in : BOOLEAN              := false;
+  rmin_in : BOOLEAN              := false;
+  amin_in : BOOLEAN              := false;
+  amax_in : BOOLEAN              := false;
+  rmxp    : REAL                 := 0.0;
+  rmnp    : REAL                 := 0.0;
+  x       : REAL                 := 0.0;
+  y       : REAL                 := 0.0;
+  r       : REAL                 := 0.0;
+  a       : REAL                 := 0.0;
+  ab      : REAL                 := 0.0;
+  r0      : REAL                 := 0.0;
+  a0      : REAL                 := 0.0;
+  r1      : REAL                 := 0.0;
+  a1      : REAL                 := 0.0;
+  r2      : REAL                 := 0.0;
+  a2      : REAL                 := 0.0;
+  r3      : REAL                 := 0.0;
+  a3      : REAL                 := 0.0;
+  in0     : BOOLEAN              := false;
+  in1     : BOOLEAN              := false;
+  in2     : BOOLEAN              := false;
+  in3     : BOOLEAN              := false;
+  inn     : BOOLEAN              := false;
+  minclo  : open_closed          := open;
+  maxclo  : open_closed          := open;
+END_LOCAL;
+  IF NOT EXISTS(prgn) OR NOT EXISTS(centre)
+  THEN
+    RETURN(?);
+  END_IF;
+  xp := prgn.centre.real_part;
+  yp := prgn.centre.imag_part;
+  ritp := prgn.distance_constraint;
+  aitp := prgn.direction_constraint;
+  xc := centre.real_part;
+  yc := centre.imag_part;
+  IF (xc = xp) AND (yc = yp)
+  THEN
+    RETURN(prgn);
+  END_IF;
+  rc := SQRT((xp - xc) ** 2 + (yp - yc) ** 2);
+  acp := atan2(yp - yc, xp - xc);
+  apc := atan2(yc - yp, xc - xp);
+  rmnp := real_min(ritp);
+  IF max_exists(ritp)
+  THEN
+    rmxp := real_max(ritp);
+    IF aitp.max - aitp.min = 2.0 * PI
+    THEN
+      inn := NOT max_included(aitp);
+      a := angle(aitp.min);
+      rmax := rc + rmxp;
+      rmax_in := max_included(ritp);
+      IF inn AND (acp = a)
+      THEN
+        rmax_in := false;
+      END_IF;
+      IF rc > rmxp
+      THEN
+        a0 := ASIN(rmxp / rc);
+        amin := angle(acp - a0);
+        amin_in := max_included(ritp);
+        IF amin = PI
+        THEN
+          amin := -PI;
+        END_IF;
+        amax := angle(acp + a0);
+        amax_in := amin_in;
+        IF amax < amin
+        THEN
+          amax := amax + 2.0 * PI;
+        END_IF;
+        rmin := rc - rmxp;
+        rmin_in := amin_in;
+        IF inn
+        THEN
+          IF apc = a
+          THEN
+            rmin_in := false;
+          END_IF;
+          IF angle(amin + 0.5 * PI) = a
+          THEN
+            amin_in := false;
+          END_IF;
+          IF angle(amax - 0.5 * PI) = a
+          THEN
+            amax_in := false;
+          END_IF;
+        END_IF;
+      ELSE
+        IF rc = rmxp
+        THEN
+          amin := angle(acp - 0.5 * PI);
+          amin_in := false;
+          IF amin = PI
+          THEN
+            amin := -PI;
+          END_IF;
+          amax := angle(acp + 0.5 * PI);
+          amax_in := false;
+          IF amax < amin
+          THEN
+            amax := amax + 2.0 * PI;
+          END_IF;
+          rmin := 0.0;
+          rmin_in := max_included(ritp);
+          IF inn AND (apc = a)
+          THEN
+            rmin_in := false;
+          END_IF;
+        ELSE
+          IF rc > rmnp
+          THEN
+            IF inn AND (apc = a)
+            THEN
+              rmin := 0.0;
+              rmin_in := false;
+              amin := aitp.min;
+              amin_in := false;
+              amax := aitp.max;
+              amax_in := false;
+            ELSE
+              rmin := 0.0;
+              rmin_in := true;
+              amin := -PI;
+              amin_in := false;
+              amax := PI;
+              amax_in := true;
+            END_IF;
+          ELSE
+            rmin := rmnp - rc;
+            rmin_in := min_included(ritp);
+            amin := -PI;
+            amin_in := false;
+            amax := PI;
+            amax_in := true;
+            IF inn
+            THEN
+              IF apc = a
+              THEN
+                rmin_in := false;
+                amin := aitp.min;
+                amin_in := false;
+                amax := aitp.max;
+                amax_in := false;
+              ELSE
+                IF acp = a
+                THEN
+                  amin := aitp.min;
+                  amin_in := false;
+                  amax := aitp.max;
+                  amax_in := false;
+                END_IF;
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    ELSE
+      x := xp + rmxp * COS(aitp.min) - xc;
+      y := yp + rmxp * SIN(aitp.min) - yc;
+      r0 := SQRT(x ** 2 + y ** 2);
+      in0 := max_included(ritp) AND min_included(aitp);
+      IF r0 <> 0.0
+      THEN
+        a0 := atan2(y, x);
+      END_IF;
+      x := xp + rmxp * COS(aitp.max) - xc;
+      y := yp + rmxp * SIN(aitp.max) - yc;
+      r1 := SQRT(x ** 2 + y ** 2);
+      in1 := max_included(ritp) AND max_included(aitp);
+      IF r1 <> 0.0
+      THEN
+        a1 := atan2(y, x);
+      END_IF;
+      x := xp + rmnp * COS(aitp.max) - xc;
+      y := yp + rmnp * SIN(aitp.max) - yc;
+      r2 := SQRT(x ** 2 + y ** 2);
+      in2 := min_included(ritp) AND max_included(aitp);
+      IF r2 <> 0.0
+      THEN
+        a2 := atan2(y, x);
+      ELSE
+        a2 := a1;
+        in2 := in1;
+      END_IF;
+      IF r1 = 0.0
+      THEN
+        a1 := a2;
+        in1 := in2;
+      END_IF;
+      x := xp + rmnp * COS(aitp.min) - xc;
+      y := yp + rmnp * SIN(aitp.min) - yc;
+      r3 := SQRT(x ** 2 + y ** 2);
+      in3 := min_included(ritp) AND min_included(aitp);
+      IF r3 <> 0.0
+      THEN
+        a3 := atan2(y, x);
+      ELSE
+        a3 := a0;
+        in3 := in0;
+      END_IF;
+      IF r0 = 0.0
+      THEN
+        a0 := a3;
+        in0 := in3;
+      END_IF;
+      IF rmnp = 0.0
+      THEN
+        in2 := min_included(ritp);
+        in3 := in2;
+      END_IF;
+      IF (apc = angle(aitp.min)) OR (acp = angle(aitp.min))
+      THEN
+        in0 := min_included(aitp);
+        in3 := in0;
+      ELSE
+        IF (apc = angle(aitp.max)) OR (acp = angle(aitp.max))
+        THEN
+          in1 := max_included(aitp);
+          in2 := in1;
+        END_IF;
+      END_IF;
+      IF strictly_in(acp, aitp)
+      THEN
+        rmax := rc + rmxp;
+        rmax_in := max_included(ritp);
+      ELSE
+        rmax := r0;
+        rmax_in := in0;
+        IF rmax = r1
+        THEN
+          rmax_in := rmax_in OR in1;
+        END_IF;
+        IF rmax < r1
+        THEN
+          rmax := r1;
+          rmax_in := in1;
+        END_IF;
+        IF rmax = r2
+        THEN
+          rmax_in := rmax_in OR in2;
+        END_IF;
+        IF rmax < r2
+        THEN
+          rmax := r2;
+          rmax_in := in2;
+        END_IF;
+        IF rmax = r3
+        THEN
+          rmax_in := rmax_in OR in3;
+        END_IF;
+        IF rmax < r3
+        THEN
+          rmax := r3;
+          rmax_in := in3;
+        END_IF;
+      END_IF;
+      IF strictly_in(apc, aitp)
+      THEN
+        IF rc >= rmxp
+        THEN
+          rmin := rc - rmxp;
+          rmin_in := max_included(ritp);
+        ELSE
+          IF rc <= rmnp
+          THEN
+            rmin := rmnp - rc;
+            rmin_in := min_included(ritp);
+          ELSE
+            rmin := 0.0;
+            rmin_in := true;
+          END_IF;
+        END_IF;
+      ELSE
+        rmin := r0;
+        rmin_in := in0;
+        a := apc - aitp.min;
+        r := rc * COS(a);
+        IF {rmnp < r < rmxp}
+        THEN
+          rmin := rc * SIN(ABS(a));
+          rmin_in := min_included(aitp);
+        END_IF;
+        a := apc - aitp.max;
+        r := rc * COS(a);
+        IF {rmnp < r < rmxp}
+        THEN
+          r := rc * SIN(ABS(a));
+          inn := max_included(aitp);
+          IF r = rmin
+          THEN
+            rmin_in := rmin_in OR inn;
+          END_IF;
+          IF r < rmin
+          THEN
+            rmin := r;
+            rmin_in := inn;
+          END_IF;
+        END_IF;
+        IF r1 = rmin
+        THEN
+          rmin_in := rmin_in OR in1;
+        END_IF;
+        IF r1 < rmin
+        THEN
+          rmin := r1;
+          rmin_in := in1;
+        END_IF;
+        IF r2 = rmin
+        THEN
+          rmin_in := rmin_in OR in2;
+        END_IF;
+        IF r2 < rmin
+        THEN
+          rmin := r2;
+          rmin_in := in2;
+        END_IF;
+        IF r3 = rmin
+        THEN
+          rmin_in := rmin_in OR in3;
+        END_IF;
+        IF r3 < rmin
+        THEN
+          rmin := r3;
+          rmin_in := in3;
+        END_IF;
+      END_IF;
+      IF rc >= rmxp
+      THEN
+        ab := acp;
+        find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
+        a := ACOS(rmxp / rc);
+        IF strictly_in(apc - a, aitp)
+        THEN
+          amin := ab - ASIN(rmxp / rc);
+          amin_in := max_included(ritp);
+        END_IF;
+        IF strictly_in(apc + a, aitp)
+        THEN
+          amax := ab + ASIN(rmxp / rc);
+          amax_in := max_included(ritp);
+        END_IF;
+        angle_range(amin, amax);
+      ELSE
+        IF rc > rmnp
+        THEN
+          ab := angle(0.5 * (aitp.min + aitp.max));
+          find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
+        ELSE
+          ab := angle(0.5 * (aitp.min + aitp.max));
+          a0 := angle(a0 - ab);
+          a1 := angle(a1 - ab);
+          a2 := angle(a2 - ab);
+          a3 := angle(a3 - ab);
+          IF a3 > a2
+          THEN
+            a2 := a2 + 2.0 * PI;
+          END_IF;
+          IF a0 > a1
+          THEN
+            a0 := a0 + 2.0 * PI;
+          END_IF;
+          IF a3 < a0
+          THEN
+            amin := a3;
+            amin_in := in3;
+          ELSE
+            amin := a0;
+            amin_in := in0;
+          END_IF;
+          IF a2 > a1
+          THEN
+            amax := a2;
+            amax_in := in2;
+          ELSE
+            amax := a1;
+            amax_in := in1;
+          END_IF;
+          IF (amax - amin > 2.0 * PI) OR ((amax - amin = 2.0 * PI) AND (amin_in OR amax_in))
+          THEN
+            amin := -PI;
+            amin_in := false;
+            amax := PI;
+            amax_in := true;
+          ELSE
+            amin := amin + ab;
+            amax := amax + ab;
+            angle_range(amin, amax);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+    IF rmin_in
+    THEN
+      minclo := closed;
+    END_IF;
+    IF rmax_in
+    THEN
+      maxclo := closed;
+    END_IF;
+    ritv := make_finite_real_interval(rmin, minclo, rmax, maxclo);
+  ELSE
+    IF (rc > rmnp) AND strictly_in(apc, aitp)
+    THEN
+      RETURN(?);
+    END_IF;
+    IF aitp.max - aitp.min = 2.0 * PI
+    THEN
+      a := angle(aitp.min);
+      IF rc > rmnp
+      THEN
+        IF max_included(aitp)
+        THEN
+          RETURN(?);
+        END_IF;
+        rmin := 0.0;
+        rmin_in := false;
+        amin := aitp.min;
+        amin_in := false;
+        amax := aitp.max;
+        amax_in := false;
+      ELSE
+        rmin := rmnp - rc;
+        rmin_in := min_included(ritp);
+        amin := -PI;
+        amin_in := false;
+        amax := PI;
+        amax_in := true;
+        IF NOT max_included(aitp)
+        THEN
+          IF apc = a
+          THEN
+            rmin_in := false;
+            amin := aitp.min;
+            amin_in := false;
+            amax := aitp.max;
+            amax_in := false;
+          ELSE
+            IF acp = a
+            THEN
+              amin := aitp.min;
+              amin_in := false;
+              amax := aitp.max;
+              amax_in := false;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    ELSE
+      a0 := angle(aitp.min);
+      in0 := false;
+      a1 := angle(aitp.max);
+      in1 := false;
+      x := xp + rmnp * COS(aitp.max) - xc;
+      y := yp + rmnp * SIN(aitp.max) - yc;
+      r2 := SQRT(x ** 2 + y ** 2);
+      in2 := min_included(ritp) AND max_included(aitp);
+      IF r2 <> 0.0
+      THEN
+        a2 := atan2(y, x);
+      ELSE
+        a2 := a1;
+        in2 := in1;
+      END_IF;
+      x := xp + rmnp * COS(aitp.min) - xc;
+      y := yp + rmnp * SIN(aitp.min) - yc;
+      r3 := SQRT(x ** 2 + y ** 2);
+      in3 := min_included(ritp) AND min_included(aitp);
+      IF r3 <> 0.0
+      THEN
+        a3 := atan2(y, x);
+      ELSE
+        a3 := a0;
+        in3 := in0;
+      END_IF;
+      IF rmnp = 0.0
+      THEN
+        in2 := min_included(ritp);
+        in3 := in2;
+      END_IF;
+      IF (apc = angle(aitp.min)) OR (acp = angle(aitp.min))
+      THEN
+        in0 := min_included(aitp);
+        in3 := in0;
+      ELSE
+        IF (apc = angle(aitp.max)) OR (acp = angle(aitp.max))
+        THEN
+          in1 := max_included(aitp);
+          in2 := in1;
+        END_IF;
+      END_IF;
+      IF strictly_in(apc, aitp)
+      THEN
+        rmin := rmnp - rc;
+        rmin_in := min_included(ritp);
+      ELSE
+        rmin := r2;
+        rmin_in := in2;
+        a := apc - aitp.min;
+        r := rc * COS(a);
+        IF rmnp < r
+        THEN
+          rmin := rc * SIN(ABS(a));
+          rmin_in := min_included(aitp);
+        END_IF;
+        a := apc - aitp.max;
+        r := rc * COS(a);
+        IF rmnp < r
+        THEN
+          r := rc * SIN(ABS(a));
+          inn := max_included(aitp);
+          IF r = rmin
+          THEN
+            rmin_in := rmin_in OR inn;
+          END_IF;
+          IF r < rmin
+          THEN
+            rmin := r;
+            rmin_in := inn;
+          END_IF;
+        END_IF;
+        IF r3 = rmin
+        THEN
+          rmin_in := rmin_in OR in3;
+        END_IF;
+        IF r3 < rmin
+        THEN
+          rmin := r3;
+          rmin_in := in3;
+        END_IF;
+      END_IF;
+      ab := angle(0.5 * (aitp.min + aitp.max));
+      IF rc > rmnp
+      THEN
+        find_aminmax(ab, a0, a1, a2, a3, in0, in1, in2, in3, amin, amax, amin_in, amax_in);
+      ELSE
+        a0 := angle(a0 - ab);
+        a1 := angle(a1 - ab);
+        a2 := angle(a2 - ab);
+        a3 := angle(a3 - ab);
+        IF a3 > a2
+        THEN
+          a2 := a2 + 2.0 * PI;
+        END_IF;
+        IF a0 > a1
+        THEN
+          a0 := a0 + 2.0 * PI;
+        END_IF;
+        IF a3 < a0
+        THEN
+          amin := a3;
+          amin_in := in3;
+        ELSE
+          amin := a0;
+          amin_in := in0;
+        END_IF;
+        IF a2 > a1
+        THEN
+          amax := a2;
+          amax_in := in2;
+        ELSE
+          amax := a1;
+          amax_in := in1;
+        END_IF;
+        IF (amax - amin > 2.0 * PI) OR ((amax - amin = 2.0 * PI) AND (amin_in OR amax_in))
+        THEN
+          amin := -PI;
+          amin_in := false;
+          amax := PI;
+          amax_in := true;
+          IF (rmin = 0.0) AND rmin_in
+          THEN
+            RETURN(?);
+          END_IF;
+        ELSE
+          amin := amin + ab;
+          amax := amax + ab;
+          angle_range(amin, amax);
+        END_IF;
+      END_IF;
+    END_IF;
+    IF rmin_in
+    THEN
+      minclo := closed;
+    END_IF;
+    ritv := make_real_interval_from_min(rmin, minclo);
+  END_IF;
+  minclo := open;
+  maxclo := open;
+  IF amin_in
+  THEN
+    minclo := closed;
+  END_IF;
+  IF amax_in
+  THEN
+    maxclo := closed;
+  END_IF;
+  aitv := make_finite_real_interval(amin, minclo, amax, maxclo);
+  RETURN(make_polar_complex_number_region(centre, ritv, aitv));
+END_FUNCTION;
+
+FUNCTION equal_cregion_pregion(crgn : cartesian_complex_number_region;
+                               prgn : polar_complex_number_region) : LOGICAL;
+LOCAL
+  arng : REAL;
+  amin : REAL;
+  xc   : REAL;
+  yc   : REAL;
+  aitv : real_interval;
+  xitv : real_interval;
+  yitv : real_interval;
+  c_in : BOOLEAN;
+END_LOCAL;
+  IF NOT EXISTS(crgn) OR NOT EXISTS(prgn)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF max_exists(prgn.distance_constraint)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF real_min(prgn.distance_constraint) <> 0.0
+  THEN
+    RETURN(false);
+  END_IF;
+  c_in := min_included(prgn.distance_constraint);
+  aitv := prgn.direction_constraint;
+  amin := aitv.min;
+  arng := aitv.max - amin;
+  xc := prgn.centre.real_part;
+  yc := prgn.centre.imag_part;
+  xitv := crgn.real_constraint;
+  yitv := crgn.imag_constraint;
+  IF arng = 0.5 * PI
+  THEN
+    IF amin = 0.0
+    THEN
+      RETURN(NOT max_exists(xitv) AND
+                 NOT max_exists(yitv) AND min_exists(xitv) AND min_exists(yitv) AND (real_min(xitv) = xc) AND
+                     (real_min(yitv) = yc) AND
+                     ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
+                       min_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
+                               NOT min_included(yitv)) OR
+                      (NOT c_in AND min_included(aitv) AND
+                           NOT max_included(aitv) AND NOT min_included(xitv) AND min_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND
+                               NOT max_included(aitv) AND NOT min_included(xitv) AND NOT min_included(yitv))));
+    END_IF;
+    IF amin = 0.5 * PI
+    THEN
+      RETURN(max_exists(xitv) AND
+             NOT max_exists(yitv) AND
+                 NOT min_exists(xitv) AND min_exists(yitv) AND (real_max(xitv) = xc) AND (real_min(yitv) = yc) AND
+                     ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
+                       min_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
+                               NOT min_included(yitv)) OR
+                      (NOT c_in AND min_included(aitv) AND
+                           NOT max_included(aitv) AND NOT max_included(xitv) AND min_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND
+                               NOT max_included(aitv) AND NOT max_included(xitv) AND NOT min_included(yitv))));
+    END_IF;
+    IF amin = -PI
+    THEN
+      RETURN(max_exists(xitv) AND max_exists(yitv) AND
+             NOT min_exists(xitv) AND
+                 NOT min_exists(yitv) AND (real_max(xitv) = xc) AND (real_max(yitv) = yc) AND
+                     ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
+                       max_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND
+                               NOT max_included(yitv)) OR
+                      (NOT c_in AND min_included(aitv) AND
+                           NOT max_included(aitv) AND NOT max_included(xitv) AND max_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND
+                               NOT max_included(aitv) AND NOT max_included(xitv) AND NOT max_included(yitv))));
+    END_IF;
+    IF amin = -0.5 * PI
+    THEN
+      RETURN(NOT max_exists(xitv) AND max_exists(yitv) AND min_exists(xitv) AND
+                 NOT min_exists(yitv) AND (real_min(xitv) = xc) AND (real_max(yitv) = yc) AND
+                     ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
+                       max_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND
+                               NOT max_included(yitv)) OR
+                      (NOT c_in AND min_included(aitv) AND
+                           NOT max_included(aitv) AND NOT min_included(xitv) AND max_included(yitv)) OR
+                      (NOT c_in AND
+                           NOT min_included(aitv) AND
+                               NOT max_included(aitv) AND NOT min_included(xitv) AND NOT max_included(yitv))));
+    END_IF;
+  END_IF;
+  IF arng = PI
+  THEN
+    IF amin = 0.0
+    THEN
+      RETURN(NOT max_exists(xitv) AND
+                 NOT max_exists(yitv) AND
+                     NOT min_exists(xitv) AND min_exists(yitv) AND (real_min(yitv) = yc) AND
+                         ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(yitv)) OR
+                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(yitv))));
+    END_IF;
+    IF amin = 0.5 * PI
+    THEN
+      RETURN(max_exists(xitv) AND
+             NOT max_exists(yitv) AND
+                 NOT min_exists(xitv) AND
+                     NOT min_exists(yitv) AND (real_max(xitv) = xc) AND
+                         ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv)) OR
+                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv))));
+    END_IF;
+    IF amin = -PI
+    THEN
+      RETURN(NOT max_exists(xitv) AND max_exists(yitv) AND
+                 NOT min_exists(xitv) AND
+                     NOT min_exists(yitv) AND (real_max(yitv) = yc) AND
+                         ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(yitv)) OR
+                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(yitv))));
+    END_IF;
+    IF amin = -0.5 * PI
+    THEN
+      RETURN(NOT max_exists(xitv) AND
+                 NOT max_exists(yitv) AND min_exists(xitv) AND
+                     NOT min_exists(yitv) AND (real_min(xitv) = xc) AND
+                         ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv)) OR
+                          (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv))));
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION equal_maths_functions(fun1 : maths_function;
+                               fun2 : maths_function) : LOGICAL;
+LOCAL
+  cum : LOGICAL;
+END_LOCAL;
+  IF fun1 = fun2
+  THEN
+    RETURN(true);
+  END_IF;
+  cum := equal_maths_spaces(fun1.domain, fun2.domain);
+  IF cum = false
+  THEN
+    RETURN(false);
+  END_IF;
+  cum := cum AND equal_maths_spaces(fun1.range, fun2.range);
+  IF cum = false
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(unknown);
+END_FUNCTION;
+
+FUNCTION equal_maths_spaces(spc1 : maths_space;
+                            spc2 : maths_space) : LOGICAL;
+LOCAL
+  spc1types : SET OF STRING       := stripped_typeof(spc1);
+  spc2types : SET OF STRING       := stripped_typeof(spc2);
+  set1      : SET OF maths_value;
+  set2      : SET OF maths_value;
+  cum       : LOGICAL             := true;
+  base      : maths_space;
+  expnt     : INTEGER;
+  factors   : LIST OF maths_space;
+  factors2  : LIST OF maths_space;
+  fs1       : function_space;
+  fs2       : function_space;
+  cum2      : LOGICAL;
+END_LOCAL;
+  IF spc1 = spc2
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'FINITE_SPACE' IN spc1types
+  THEN
+    set1 := spc1\finite_space.members;
+    IF 'FINITE_SPACE' IN spc2types
+    THEN
+      set2 := spc2\finite_space.members;
+      REPEAT i := 1 TO SIZEOF(set1);
+        cum := cum AND member_of(set1[i], spc2);
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      IF cum = true
+      THEN
+        REPEAT i := 1 TO SIZEOF(set2);
+          cum := cum AND member_of(set2[i], spc1);
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+      END_IF;
+      RETURN(cum);
+    END_IF;
+    IF 'FINITE_INTEGER_INTERVAL' IN spc2types
+    THEN
+      set2 := [];
+      REPEAT i := spc2\finite_integer_interval.min TO spc2\finite_integer_interval.max;
+        set2 := set2 + [i];
+      END_REPEAT;
+      RETURN(equal_maths_spaces(spc1, make_finite_space(set2)));
+    END_IF;
+  END_IF;
+  IF ('FINITE_INTEGER_INTERVAL' IN spc1types) AND ('FINITE_SPACE' IN spc2types)
+  THEN
+    set1 := [];
+    REPEAT i := spc1\finite_integer_interval.min TO spc1\finite_integer_interval.max;
+      set1 := set1 + [i];
+    END_REPEAT;
+    RETURN(equal_maths_spaces(make_finite_space(set1), spc2));
+  END_IF;
+  IF ('CARTESIAN_COMPLEX_NUMBER_REGION' IN spc1types) AND ('POLAR_COMPLEX_NUMBER_REGION' IN spc2types)
+  THEN
+    RETURN(equal_cregion_pregion(spc1, spc2));
+  END_IF;
+  IF ('POLAR_COMPLEX_NUMBER_REGION' IN spc1types) AND ('CARTESIAN_COMPLEX_NUMBER_REGION' IN spc2types)
+  THEN
+    RETURN(equal_cregion_pregion(spc2, spc1));
+  END_IF;
+  IF 'UNIFORM_PRODUCT_SPACE' IN spc1types
+  THEN
+    base := spc1\uniform_product_space.base;
+    expnt := spc1\uniform_product_space.exponent;
+    IF 'UNIFORM_PRODUCT_SPACE' IN spc2types
+    THEN
+      IF expnt <> spc2\uniform_product_space.exponent
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(equal_maths_spaces(base, spc2\uniform_product_space.base));
+    END_IF;
+    IF 'LISTED_PRODUCT_SPACE' IN spc2types
+    THEN
+      factors := spc2\listed_product_space.factors;
+      IF expnt <> SIZEOF(factors)
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO SIZEOF(factors);
+        cum := cum AND equal_maths_spaces(base, factors[i]);
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(cum);
+    END_IF;
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN spc1types
+  THEN
+    factors := spc1\listed_product_space.factors;
+    IF 'UNIFORM_PRODUCT_SPACE' IN spc2types
+    THEN
+      IF spc2\uniform_product_space.exponent <> SIZEOF(factors)
+      THEN
+        RETURN(false);
+      END_IF;
+      base := spc2\uniform_product_space.base;
+      REPEAT i := 1 TO SIZEOF(factors);
+        cum := cum AND equal_maths_spaces(base, factors[i]);
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(cum);
+    END_IF;
+    IF 'LISTED_PRODUCT_SPACE' IN spc2types
+    THEN
+      factors2 := spc2\listed_product_space.factors;
+      IF SIZEOF(factors) <> SIZEOF(factors2)
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO SIZEOF(factors);
+        cum := cum AND equal_maths_spaces(factors[i], factors2[i]);
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(cum);
+    END_IF;
+  END_IF;
+  IF ('EXTENDED_TUPLE_SPACE' IN spc1types) AND ('EXTENDED_TUPLE_SPACE' IN spc2types)
+  THEN
+    RETURN(equal_maths_spaces(spc1\extended_tuple_space.extender, spc2\extended_tuple_space.extender) AND
+           equal_maths_spaces(spc1\extended_tuple_space.base, spc2\extended_tuple_space.base));
+  END_IF;
+  IF ('FUNCTION_SPACE' IN spc1types) AND ('FUNCTION_SPACE' IN spc2types)
+  THEN
+    fs1 := spc1;
+    fs2 := spc2;
+    IF fs1.domain_constraint <> fs2.domain_constraint
+    THEN
+      IF (fs1.domain_constraint = sc_equal) OR (fs2.domain_constraint = sc_equal)
+      THEN
+        RETURN(false);
+      END_IF;
+      IF (fs1.domain_constraint <> sc_subspace)
+      THEN
+        fs1 := spc2;
+        fs2 := spc1;
+      END_IF;
+      IF (fs1.domain_constraint <> sc_subspace) OR (fs2.domain_constraint <> sc_member)
+      THEN
+        RETURN(unknown);
+      END_IF;
+      IF any_space_satisfies(fs1.domain_constraint, fs1.domain_argument) <>
+         any_space_satisfies(fs2.domain_constraint, fs2.domain_argument)
+      THEN
+        RETURN(false);
+      END_IF;
+      IF NOT ('FINITE_SPACE' IN stripped_typeof(fs2.domain_argument))
+      THEN
+        RETURN(false);
+      END_IF;
+      IF SIZEOF(['FINITE_SPACE','FINITE_INTEGER_INTERVAL'] * stripped_typeof(fs1.domain_argument)) = 0
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(unknown);
+    END_IF;
+    cum := equal_maths_spaces(fs1.domain_argument, fs2.domain_argument);
+    IF cum = false
+    THEN
+      RETURN(false);
+    END_IF;
+    IF fs1.range_constraint <> fs2.range_constraint
+    THEN
+      IF (fs1.range_constraint = sc_equal) OR (fs2.range_constraint = sc_equal)
+      THEN
+        RETURN(false);
+      END_IF;
+      IF (fs1.range_constraint <> sc_subspace)
+      THEN
+        fs1 := spc2;
+        fs2 := spc1;
+      END_IF;
+      IF (fs1.range_constraint <> sc_subspace) OR (fs2.range_constraint <> sc_member)
+      THEN
+        RETURN(unknown);
+      END_IF;
+      IF any_space_satisfies(fs1.range_constraint, fs1.range_argument) <>
+         any_space_satisfies(fs2.range_constraint, fs2.range_argument)
+      THEN
+        RETURN(false);
+      END_IF;
+      IF NOT ('FINITE_SPACE' IN stripped_typeof(fs2.range_argument))
+      THEN
+        RETURN(false);
+      END_IF;
+      IF SIZEOF(['FINITE_SPACE','FINITE_INTEGER_INTERVAL'] * stripped_typeof(fs1.range_argument)) = 0
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(unknown);
+    END_IF;
+    cum := cum AND equal_maths_spaces(fs1.range_argument, fs2.range_argument);
+    RETURN(cum);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION equal_maths_values(val1 : maths_value;
+                            val2 : maths_value) : LOGICAL;
+FUNCTION mem_of_vs(val1 : maths_value;
+                   val2 : maths_value) : LOGICAL;
+  IF NOT has_values_space(val2)
+  THEN
+    RETURN(unknown);
+  END_IF;
+  IF NOT member_of(val1, values_space_of(val2))
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(unknown);
+END_FUNCTION;
+LOCAL
+  types1 : SET OF STRING;
+  types2 : SET OF STRING;
+  list1  : LIST OF maths_value;
+  list2  : LIST OF maths_value;
+  cum    : LOGICAL             := true;
+END_LOCAL;
+  IF NOT EXISTS(val1) OR NOT EXISTS(val2)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF val1 = val2
+  THEN
+    RETURN(true);
+  END_IF;
+  types1 := stripped_typeof(val1);
+  types2 := stripped_typeof(val2);
+  IF ('MATHS_ATOM' IN types1) OR ('COMPLEX_NUMBER_LITERAL' IN types1)
+  THEN
+    IF 'MATHS_ATOM' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'COMPLEX_NUMBER_LITERAL' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'LIST' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'MATHS_SPACE' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'MATHS_FUNCTION' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'GENERIC_EXPRESSION' IN types2
+    THEN
+      RETURN(mem_of_vs(val1, val2));
+    END_IF;
+    RETURN(unknown);
+  END_IF;
+  IF ('MATHS_ATOM' IN types2) OR ('COMPLEX_NUMBER_LITERAL' IN types2)
+  THEN
+    RETURN(equal_maths_values(val2, val1));
+  END_IF;
+  IF 'LIST' IN types1
+  THEN
+    IF 'LIST' IN types2
+    THEN
+      list1 := val1;
+      list2 := val2;
+      IF SIZEOF(list1) <> SIZEOF(list2)
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT i := 1 TO SIZEOF(list1);
+        cum := cum AND equal_maths_values(list1[i], list2[i]);
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(cum);
+    END_IF;
+    IF 'MATHS_SPACE' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'MATHS_FUNCTION' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'GENERIC_EXPRESSION' IN types2
+    THEN
+      RETURN(mem_of_vs(val1, val2));
+    END_IF;
+    RETURN(unknown);
+  END_IF;
+  IF 'LIST' IN types2
+  THEN
+    RETURN(equal_maths_values(val2, val1));
+  END_IF;
+  IF 'MATHS_SPACE' IN types1
+  THEN
+    IF 'MATHS_SPACE' IN types2
+    THEN
+      RETURN(equal_maths_spaces(val1, val2));
+    END_IF;
+    IF 'MATHS_FUNCTION' IN types2
+    THEN
+      RETURN(false);
+    END_IF;
+    IF 'GENERIC_EXPRESSION' IN types2
+    THEN
+      RETURN(mem_of_vs(val1, val2));
+    END_IF;
+    RETURN(unknown);
+  END_IF;
+  IF 'MATHS_SPACE' IN types2
+  THEN
+    RETURN(equal_maths_values(val2, val1));
+  END_IF;
+  IF 'MATHS_FUNCTION' IN types1
+  THEN
+    IF 'MATHS_FUNCTION' IN types2
+    THEN
+      RETURN(equal_maths_functions(val1, val2));
+    END_IF;
+    IF 'GENERIC_EXPRESSION' IN types2
+    THEN
+      RETURN(mem_of_vs(val1, val2));
+    END_IF;
+    RETURN(unknown);
+  END_IF;
+  IF 'MATHS_FUNCTION' IN types2
+  THEN
+    RETURN(equal_maths_values(val2, val1));
+  END_IF;
+  IF ('GENERIC_EXPRESSION' IN types1) AND ('GENERIC_EXPRESSION' IN types2)
+  THEN
+    IF NOT has_values_space(val1) OR NOT has_values_space(val2)
+    THEN
+      RETURN(unknown);
+    END_IF;
+    IF NOT compatible_spaces(values_space_of(val1), values_space_of(val2))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  RETURN(unknown);
+END_FUNCTION;
+
+FUNCTION es_subspace_of_es(es1 : elementary_space_enumerators;
+                           es2 : elementary_space_enumerators) : BOOLEAN;
+  IF NOT EXISTS(es1) OR NOT EXISTS(es2)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF es1 = es2
+  THEN
+    RETURN(true);
+  END_IF;
+  IF es2 = es_generics
+  THEN
+    RETURN(true);
+  END_IF;
+  IF (es1 = es_booleans) AND (es2 = es_logicals)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF (es2 = es_numbers) AND ((es1 = es_complex_numbers) OR (es1 = es_reals) OR (es1 = es_integers))
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION expression_is_constant(expr : generic_expression) : BOOLEAN;
+  RETURN(bool(SIZEOF(free_variables_of(expr)) = 0));
+END_FUNCTION;
+
+FUNCTION external_version_assignment_is_valid(aia : applied_external_identification_assignment) : BOOLEAN;
+LOCAL
+  item : external_identification_item;
+  role : identification_role;
+END_LOCAL;
+  role := aia.role;
+  IF role.name = 'version'
+  THEN
+    REPEAT i := LOINDEX(aia\applied_external_identification_assignment.items) TO HIINDEX(aia\applied_external_identification_assignment.items);
+      item := aia\applied_external_identification_assignment.items[i];
+      IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_GENERAL_PROPERTY'] *
+                 TYPEOF(item)) =
+          0)
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  ELSE
+    RETURN(true);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION extract_factors(tspace : tuple_space;
+                         m : INTEGER;
+                         n : INTEGER) : tuple_space;
+LOCAL
+  tsp : tuple_space := the_zero_tuple_space;
+END_LOCAL;
+  REPEAT i := m TO n;
+    tsp := assoc_product_space(tsp, factor_space(tspace, i));
+  END_REPEAT;
+  RETURN(tsp);
+END_FUNCTION;
+
+FUNCTION extremal_position_check(fun : linearized_table_function) : BOOLEAN;
+LOCAL
+  source_domain   : maths_space;
+  source_interval : finite_integer_interval;
+  index           : INTEGER                  := 1;
+  base            : INTEGER;
+  shape           : LIST OF positive_integer;
+  ndim            : positive_integer;
+  slo             : INTEGER;
+  shi             : INTEGER;
+  sublo           : LIST OF INTEGER          := [];
+  subhi           : LIST OF INTEGER          := [];
+END_LOCAL;
+  IF NOT EXISTS(fun)
+  THEN
+    RETURN(false);
+  END_IF;
+  source_domain := factor1(fun.source.domain);
+  IF (schema_prefix + 'TUPLE_SPACE') IN TYPEOF(source_domain)
+  THEN
+    source_domain := factor1(source_domain);
+  END_IF;
+  IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(source_domain))
+  THEN
+    RETURN(false);
+  END_IF;
+  source_interval := source_domain;
+  base := fun\explicit_table_function.index_base;
+  shape := fun\explicit_table_function.shape;
+  IF (schema_prefix + 'STANDARD_TABLE_FUNCTION') IN TYPEOF(fun)
+  THEN
+    REPEAT j := 1 TO SIZEOF(shape);
+      index := index * shape[j];
+    END_REPEAT;
+    index := fun.first + index - 1;
+    RETURN(bool({source_interval.min <= index <= source_interval.max}));
+  END_IF;
+  IF (schema_prefix + 'REGULAR_TABLE_FUNCTION') IN TYPEOF(fun)
+  THEN
+    ndim := SIZEOF(fun\explicit_table_function.shape);
+    REPEAT j := 1 TO ndim;
+      slo := base;
+      shi := base + shape[j] - 1;
+      IF fun\regular_table_function.increments[j] >= 0
+      THEN
+        INSERT(sublo, slo, j - 1);
+        INSERT(subhi, shi, j - 1);
+      ELSE
+        INSERT(sublo, shi, j - 1);
+        INSERT(subhi, slo, j - 1);
+      END_IF;
+    END_REPEAT;
+    index := regular_indexing(sublo, base, shape, fun\regular_table_function.increments, fun.first);
+    IF NOT ({source_interval.min <= index <= source_interval.max})
+    THEN
+      RETURN(false);
+    END_IF;
+    index := regular_indexing(subhi, base, shape, fun\regular_table_function.increments, fun.first);
+    IF NOT ({source_interval.min <= index <= source_interval.max})
+    THEN
+      RETURN(false);
+    END_IF;
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION face_bound_reversed(a_face_bound : face_bound) : face_bound;
+LOCAL
+  the_reverse : face_bound;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_OUTER_BOUND' IN TYPEOF(a_face_bound))
+  THEN
+    the_reverse := dummy_tri || face_bound(a_face_bound\face_bound.bound, NOT (a_face_bound\face_bound.orientation)) ||
+                   face_outer_bound();
+  ELSE
+    the_reverse := dummy_tri || face_bound(a_face_bound.bound, NOT (a_face_bound.orientation));
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION face_reversed(a_face : face) : oriented_face;
+LOCAL
+  the_reverse : oriented_face;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_FACE' IN TYPEOF(a_face))
+  THEN
+    the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) ||
+                   oriented_face(a_face\oriented_face.face_element, NOT (a_face\oriented_face.orientation));
+  ELSE
+    the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face, false);
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION factor_space(tspace : tuple_space;
+                      idx : positive_integer) : maths_space;
+LOCAL
+  typenames : SET OF STRING := TYPEOF(tspace);
+END_LOCAL;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
+  THEN
+    IF idx <= tspace\uniform_product_space.exponent
+    THEN
+      RETURN(tspace\uniform_product_space.base);
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
+  THEN
+    IF idx <= SIZEOF(tspace\listed_product_space.factors)
+    THEN
+      RETURN(tspace\listed_product_space.factors[idx]);
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN typenames
+  THEN
+    IF idx <= space_dimension(tspace\extended_tuple_space.base)
+    THEN
+      RETURN(factor_space(tspace\extended_tuple_space.base, idx));
+    END_IF;
+    RETURN(tspace\extended_tuple_space.extender);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION factor1(tspace : tuple_space) : maths_space;
+LOCAL
+  typenames : SET OF STRING := TYPEOF(tspace);
+END_LOCAL;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
+  THEN
+    RETURN(tspace\uniform_product_space.base);
+  END_IF;
+  IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
+  THEN
+    RETURN(tspace\listed_product_space.factors[1]);
+  END_IF;
+  IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN typenames
+  THEN
+    RETURN(factor1(tspace\extended_tuple_space.base));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION find_assembly_root(constituent : SET OF product_definition) : SET OF product_definition;
+LOCAL
+  local_relation  : SET OF assembly_component_usage := [];
+  local_relation2 : BAG OF assembly_component_usage := [];
+  local_parent    : SET OF product_definition       := [];
+  root            : SET OF product_definition;
+  i               : INTEGER                         := 0;
+  j               : INTEGER                         := 0;
+END_LOCAL;
+  IF ((SIZEOF(constituent) = 1) AND assembly_root(constituent[1]))
+  THEN
+    RETURN([constituent[1]]);
+  ELSE
+    IF (SIZEOF(constituent) = 0)
+    THEN
+      RETURN([]);
+    ELSE
+      REPEAT j := 1 TO HIINDEX(constituent);
+        local_relation2 := local_relation2 +
+                           QUERY(pdr
+                                 <* USEDIN(constituent[j],
+                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASSEMBLY_COMPONENT_USAGE' IN
+                                   TYPEOF(pdr));
+      END_REPEAT;
+      local_relation := bag_to_set(local_relation2);
+      IF (SIZEOF(local_relation) = 0)
+      THEN
+        IF (SIZEOF(constituent) = 1)
+        THEN
+          RETURN([constituent[1]]);
+        ELSE
+          RETURN([]);
+        END_IF;
+      ELSE
+        REPEAT i := 1 TO HIINDEX(local_relation);
+          REPEAT j := 1 TO HIINDEX(constituent);
+            IF (local_relation[i].relating_product_definition <> constituent[j])
+            THEN
+              local_parent := local_parent + local_relation[i].relating_product_definition;
+            END_IF;
+          END_REPEAT;
+        END_REPEAT;
+        IF ((SIZEOF(local_parent) = 1) AND assembly_root(local_parent[1]))
+        THEN
+          RETURN([local_parent[1]]);
+        ELSE
+          IF (SIZEOF(local_parent) = 0)
+          THEN
+            RETURN([]);
+          ELSE
+            root := find_assembly_root(local_parent);
+            IF (SIZEOF(root) = 1)
+            THEN
+              RETURN(root);
+            ELSE
+              IF (SIZEOF(root) = 0)
+              THEN
+                RETURN([]);
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN([]);
+END_FUNCTION;
+
+FUNCTION find_representative_shape_representation_of_product_definition(item : product_definition) : shape_representation;
+LOCAL
+  local_s_r : SET OF shape_representation := [];
+END_LOCAL;
+  local_s_r := QUERY(z
+                     <* find_shape_representation_of_product_definition(item)
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+                       TYPEOF(z));
+  IF (SIZEOF(local_s_r) = 1)
+  THEN
+    RETURN(local_s_r[1]);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION find_representative_shape_representation_of_shape_aspect(item : shape_aspect) : shape_representation;
+LOCAL
+  local_s_r : SET OF shape_representation := [];
+END_LOCAL;
+  local_s_r := QUERY(z
+                     <* find_shape_representation_of_shape_aspect(item)
+                     | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+                       TYPEOF(z));
+  IF (SIZEOF(local_s_r) = 1)
+  THEN
+    RETURN(local_s_r[1]);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION find_shape_representation_of_product_definition(item : product_definition) : SET OF shape_representation;
+LOCAL
+  local_p_d_s  : SET OF product_definition_shape        := [];
+  local_p_d_s2 : BAG OF product_definition_shape        := [];
+  local_s_d_r  : SET OF shape_definition_representation := [];
+  local_s_d_r2 : BAG OF shape_definition_representation := [];
+  local_s_r    : SET OF shape_representation            := [];
+  i            : INTEGER;
+END_LOCAL;
+  local_p_d_s2 := local_p_d_s2 +
+                  QUERY(pd
+                        <* USEDIN(item,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd));
+  local_p_d_s := bag_to_set(local_p_d_s2);
+  REPEAT i := 1 TO HIINDEX(local_p_d_s);
+    local_s_d_r2 := local_s_d_r2 +
+                    QUERY(pdr
+                          <* USEDIN(local_p_d_s[i],
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                            TYPEOF(pdr));
+  END_REPEAT;
+  local_s_d_r := bag_to_set(local_s_d_r2);
+  REPEAT i := 1 TO HIINDEX(local_s_d_r);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+        TYPEOF(local_s_d_r[i].used_representation))
+    THEN
+      local_s_r := local_s_r + local_s_d_r[i].used_representation;
+    END_IF;
+  END_REPEAT;
+  RETURN(local_s_r);
+END_FUNCTION;
+
+FUNCTION find_shape_representation_of_shape_aspect(item : shape_aspect) : SET OF shape_representation;
+LOCAL
+  local_p_d    : SET OF property_definition             := [];
+  local_s_d_r  : SET OF shape_definition_representation := [];
+  local_s_d_r2 : BAG OF shape_definition_representation := [];
+  local_s_r    : SET OF shape_representation            := [];
+  i            : INTEGER;
+END_LOCAL;
+  local_p_d := bag_to_set(USEDIN(item,
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
+  REPEAT i := 1 TO HIINDEX(local_p_d);
+    local_s_d_r2 := local_s_d_r2 +
+                    QUERY(pdr
+                          <* USEDIN(local_p_d[i],
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                          | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                            TYPEOF(pdr));
+  END_REPEAT;
+  local_s_d_r := bag_to_set(local_s_d_r2);
+  REPEAT i := 1 TO HIINDEX(local_s_d_r);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION' IN
+        TYPEOF(local_s_d_r[i].used_representation))
+    THEN
+      local_s_r := local_s_r + local_s_d_r[i].used_representation;
+    END_IF;
+  END_REPEAT;
+  RETURN(local_s_r);
+END_FUNCTION;
+
+FUNCTION first_proj_axis(z_axis : direction;
+                         arg : direction) : direction;
+LOCAL
+  x_axis : direction;
+  v      : direction;
+  z      : direction;
+  x_vec  : vector;
+END_LOCAL;
+  IF (NOT EXISTS(z_axis))
+  THEN
+    RETURN(?);
+  ELSE
+    z := normalise(z_axis);
+    IF NOT EXISTS(arg)
+    THEN
+      IF ((z.direction_ratios <> [1.0,0.0,0.0]) AND (z.direction_ratios <> [-1.0,0.0,0.0]))
+      THEN
+        v := dummy_gri || direction([1.0,0.0,0.0]);
+      ELSE
+        v := dummy_gri || direction([0.0,1.0,0.0]);
+      END_IF;
+    ELSE
+      IF (arg.dim <> 3)
+      THEN
+        RETURN(?);
+      END_IF;
+      IF ((cross_product(arg, z).magnitude) = 0.0)
+      THEN
+        RETURN(?);
+      ELSE
+        v := normalise(arg);
+      END_IF;
+    END_IF;
+    x_vec := scalar_times_vector(dot_product(v, z), z);
+    x_axis := vector_difference(v, x_vec).orientation;
+    x_axis := normalise(x_axis);
+  END_IF;
+  RETURN(x_axis);
+END_FUNCTION;
+
+FUNCTION free_variables_of(expr : generic_expression) : SET OF generic_variable;
+LOCAL
+  typenames : SET OF STRING              := stripped_typeof(expr);
+  result    : SET OF generic_variable    := [];
+  exprs     : LIST OF generic_expression := [];
+END_LOCAL;
+  IF 'GENERIC_LITERAL' IN typenames
+  THEN
+    RETURN(result);
+  END_IF;
+  IF 'GENERIC_VARIABLE' IN typenames
+  THEN
+    result := result + expr;
+    RETURN(result);
+  END_IF;
+  IF 'QUANTIFIER_EXPRESSION' IN typenames
+  THEN
+    exprs := QUERY(ge
+                   <* expr\multiple_arity_generic_expression.operands
+                   | NOT (ge IN expr\quantifier_expression.variables));
+    REPEAT i := 1 TO SIZEOF(exprs);
+      result := result + free_variables_of(exprs[i]);
+    END_REPEAT;
+    REPEAT i := 1 TO SIZEOF(expr\quantifier_expression.variables);
+      result := result - expr\quantifier_expression.variables[i];
+    END_REPEAT;
+    RETURN(result);
+  END_IF;
+  IF 'UNARY_GENERIC_EXPRESSION' IN typenames
+  THEN
+    RETURN(free_variables_of(expr\unary_generic_expression.operand));
+  END_IF;
+  IF 'BINARY_GENERIC_EXPRESSION' IN typenames
+  THEN
+    result := free_variables_of(expr\binary_generic_expression.operands[1]);
+    RETURN(result + free_variables_of(expr\binary_generic_expression.operands[2]));
+  END_IF;
+  IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN typenames
+  THEN
+    REPEAT i := 1 TO SIZEOF(expr\multiple_arity_generic_expression.operands);
+      result := result + free_variables_of(expr\multiple_arity_generic_expression.operands[i]);
+    END_REPEAT;
+    RETURN(result);
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION function_applicability(func : maths_function_select;
+                                arguments : LIST [1 : ?] OF maths_value) : BOOLEAN;
+LOCAL
+  domain       : tuple_space        := convert_to_maths_function(func).domain;
+  domain_types : SET OF STRING      := TYPEOF(domain);
+  narg         : positive_integer   := SIZEOF(arguments);
+  arg          : generic_expression;
+END_LOCAL;
+  IF (schema_prefix + 'PRODUCT_SPACE') IN domain_types
+  THEN
+    IF space_dimension(domain) <> narg
+    THEN
+      RETURN(false);
+    END_IF;
+  ELSE
+    IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN domain_types
+    THEN
+      IF space_dimension(domain) > narg
+      THEN
+        RETURN(false);
+      END_IF;
+    ELSE
+      RETURN(false);
+    END_IF;
+  END_IF;
+  REPEAT i := 1 TO narg;
+    arg := convert_to_operand(arguments[i]);
+    IF NOT has_values_space(arg)
+    THEN
+      RETURN(false);
+    END_IF;
+    IF NOT compatible_spaces(factor_space(domain, i), values_space_of(arg))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION function_is_1d_array(func : maths_function) : BOOLEAN;
+LOCAL
+  temp : maths_space;
+END_LOCAL;
+  IF NOT EXISTS(func)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF space_dimension(func.domain) <> 1
+  THEN
+    RETURN(false);
+  END_IF;
+  temp := factor1(func.domain);
+  IF (schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(temp)
+  THEN
+    IF space_dimension(temp) <> 1
+    THEN
+      RETURN(false);
+    END_IF;
+    temp := factor1(temp);
+  END_IF;
+  IF (schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp)
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION function_is_1d_table(func : maths_function) : BOOLEAN;
+LOCAL
+  temp : maths_space;
+  itvl : finite_integer_interval;
+END_LOCAL;
+  IF NOT EXISTS(func)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF space_dimension(func.domain) <> 1
+  THEN
+    RETURN(false);
+  END_IF;
+  temp := factor1(func.domain);
+  IF (schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(temp)
+  THEN
+    IF space_dimension(temp) <> 1
+    THEN
+      RETURN(false);
+    END_IF;
+    temp := factor1(temp);
+  END_IF;
+  IF (schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp)
+  THEN
+    itvl := temp;
+    RETURN(bool((itvl.min = 0) OR (itvl.min = 1)));
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION function_is_2d_table(func : maths_function) : BOOLEAN;
+LOCAL
+  temp   : maths_space;
+  pspace : product_space;
+  itvl1  : finite_integer_interval;
+  itvl2  : finite_integer_interval;
+END_LOCAL;
+  IF NOT EXISTS(func)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF space_dimension(func.domain) <> 1
+  THEN
+    RETURN(false);
+  END_IF;
+  temp := factor1(func.domain);
+  IF NOT ('PRODUCT_SPACE' IN stripped_typeof(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  pspace := temp;
+  IF space_dimension(pspace) <> 2
+  THEN
+    RETURN(false);
+  END_IF;
+  temp := factor1(pspace);
+  IF NOT ('FINITE_INTEGER_INTERVAL' IN stripped_typeof(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  itvl1 := temp;
+  temp := factor_space(pspace, 2);
+  IF NOT ('FINITE_INTEGER_INTERVAL' IN stripped_typeof(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  itvl2 := temp;
+  RETURN(bool((itvl1.min = itvl2.min) AND ((itvl1.min = 0) OR (itvl1.min = 1))));
+END_FUNCTION;
+
+FUNCTION function_is_array(func : maths_function) : BOOLEAN;
+LOCAL
+  tspace : tuple_space;
+  temp   : maths_space;
+END_LOCAL;
+  IF NOT EXISTS(func)
+  THEN
+    RETURN(false);
+  END_IF;
+  tspace := func.domain;
+  IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
+  THEN
+    tspace := factor1(tspace);
+  END_IF;
+  IF NOT ((schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(tspace))
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT i := 1 TO space_dimension(tspace);
+    temp := factor_space(tspace, i);
+    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION function_is_table(func : maths_function) : BOOLEAN;
+LOCAL
+  tspace : tuple_space;
+  temp   : maths_space;
+  base   : INTEGER;
+END_LOCAL;
+  IF NOT EXISTS(func)
+  THEN
+    RETURN(false);
+  END_IF;
+  tspace := func.domain;
+  IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
+  THEN
+    tspace := factor1(tspace);
+  END_IF;
+  IF NOT ((schema_prefix + 'PRODUCT_SPACE') IN TYPEOF(tspace))
+  THEN
+    RETURN(false);
+  END_IF;
+  temp := factor1(tspace);
+  IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+  THEN
+    RETURN(false);
+  END_IF;
+  base := temp\finite_integer_interval.min;
+  IF (base <> 0) AND (base <> 1)
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT i := 2 TO space_dimension(tspace);
+    temp := factor_space(tspace, i);
+    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+    THEN
+      RETURN(false);
+    END_IF;
+    IF temp\finite_integer_interval.min <> base
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION gbsf_check_curve(cv : representation_item) : BOOLEAN;
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
+            TYPEOF(cv)) >
+     1
+  THEN
+    RETURN(false);
+  END_IF;
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE'] *
+            TYPEOF(cv)) =
+     1
+  THEN
+    RETURN(true);
+  ELSE
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
+        (cv\b_spline_curve.self_intersect = false) OR
+        (cv\b_spline_curve.self_intersect = unknown))
+    THEN
+      RETURN(true);
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(cv)) AND
+          (cv\composite_curve.self_intersect = false) OR
+          (cv\composite_curve.self_intersect = unknown))
+      THEN
+        RETURN(SIZEOF(QUERY(seg <* cv\composite_curve.segments | NOT (gbsf_check_curve(seg.parent_curve)))) = 0);
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
+        THEN
+          RETURN(gbsf_check_curve(cv\curve_replica.parent_curve));
+        ELSE
+          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
+              ((cv\offset_curve_3d.self_intersect = false) OR (cv\offset_curve_3d.self_intersect = unknown)) AND
+              (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                    TYPEOF(cv\offset_curve_3d.basis_curve))))
+          THEN
+            RETURN(gbsf_check_curve(cv\offset_curve_3d.basis_curve));
+          ELSE
+            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
+            THEN
+              RETURN((gbsf_check_curve(cv\pcurve.reference_to_curve\representation.items[1])) AND
+                     (gbsf_check_surface(cv\pcurve.basis_surface)));
+            ELSE
+              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
+              THEN
+                IF (SIZEOF(cv\polyline.points) >= 3)
+                THEN
+                  RETURN(true);
+                END_IF;
+              ELSE
+                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
+                THEN
+                  IF gbsf_check_curve(cv\surface_curve.curve_3d)
+                  THEN
+                    REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
+                      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
+                         TYPEOF(cv\surface_curve.associated_geometry[i])
+                      THEN
+                        IF NOT gbsf_check_surface(cv\surface_curve.associated_geometry[i])
+                        THEN
+                          RETURN(false);
+                        END_IF;
+                      ELSE
+                        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                           TYPEOF(cv\surface_curve.associated_geometry[i])
+                        THEN
+                          IF NOT gbsf_check_curve(cv\surface_curve.associated_geometry[i])
+                          THEN
+                            RETURN(false);
+                          END_IF;
+                        END_IF;
+                      END_IF;
+                    END_REPEAT;
+                    RETURN(true);
+                  END_IF;
+                END_IF;
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION gbsf_check_point(pnt : point) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN TYPEOF(pnt)
+    THEN
+      RETURN(gbsf_check_curve(pnt\point_on_curve.basis_curve));
+    ELSE
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE' IN TYPEOF(pnt)
+      THEN
+        RETURN(gbsf_check_surface(pnt\point_on_surface.basis_surface));
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DEGENERATE_PCURVE' IN TYPEOF(pnt)
+        THEN
+          RETURN((gbsf_check_curve(pnt\degenerate_pcurve.reference_to_curve\representation.items[1])) AND
+                 (gbsf_check_surface(pnt\degenerate_pcurve.basis_surface)));
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION gbsf_check_surface(sf : surface) : BOOLEAN;
+  IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(sf)) AND
+      (sf\b_spline_surface.self_intersect = false) OR
+      (sf\b_spline_surface.self_intersect = unknown))
+  THEN
+    RETURN(true);
+  ELSE
+    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPHERICAL_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOROIDAL_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_TRIMMED_SURFACE'] *
+              TYPEOF(sf)) =
+       1
+    THEN
+      RETURN(true);
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(sf)) AND
+          (sf\offset_surface.self_intersect = false) OR
+          (sf\offset_surface.self_intersect = unknown))
+      THEN
+        RETURN(gbsf_check_surface(sf\offset_surface.basis_surface));
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_COMPOSITE_SURFACE' IN TYPEOF(sf)
+        THEN
+          REPEAT i := 1 TO SIZEOF(sf\rectangular_composite_surface.segments);
+            REPEAT j := 1 TO SIZEOF(sf\rectangular_composite_surface.segments[i]);
+              IF NOT (gbsf_check_surface(sf\rectangular_composite_surface.segments[i][j].parent_surface))
+              THEN
+                RETURN(false);
+              END_IF;
+            END_REPEAT;
+          END_REPEAT;
+          RETURN(true);
+        ELSE
+          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(sf)
+          THEN
+            RETURN(gbsf_check_surface(sf\surface_replica.parent_surface));
+          ELSE
+            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_OF_REVOLUTION' IN TYPEOF(sf)
+            THEN
+              RETURN(gbsf_check_curve(sf\swept_surface.swept_curve));
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION geometric_dimensionalities_in_contexts(grcs : SET [1 : ?] OF geometric_representation_context) : INTEGER;
+LOCAL
+  grcs_1d : INTEGER := 0;
+  grcs_2d : INTEGER := 0;
+  grcs_3d : INTEGER := 0;
+END_LOCAL;
+  IF (SIZEOF(grcs) = 1)
+  THEN
+    RETURN(grcs[1]\geometric_representation_context.coordinate_space_dimension);
+  ELSE
+    REPEAT i := 1 TO HIINDEX(grcs);
+      IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 1)
+      THEN
+        grcs_1d := grcs_1d + 1;
+      ELSE
+        IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 2)
+        THEN
+          grcs_2d := grcs_2d + 1;
+        ELSE
+          IF (grcs[i]\geometric_representation_context.coordinate_space_dimension = 3)
+          THEN
+            grcs_3d := grcs_3d + 1;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF (grcs_1d + grcs_2d = 0)
+  THEN
+    RETURN(3);
+  ELSE
+    IF (grcs_1d + grcs_3d = 0)
+    THEN
+      RETURN(2);
+    ELSE
+      IF (grcs_2d + grcs_3d = 0)
+      THEN
+        RETURN(1);
+      ELSE
+        RETURN(0);
+      END_IF;
+    END_IF;
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_aggregate_id_value(obj : id_attribute_select) : identifier;
+LOCAL
+  aggregate_id_bag : BAG OF aggregate_id_attribute := (USEDIN(obj,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AGGREGATE_ID_ATTRIBUTE.IDENTIFIED_ITEM'));
+END_LOCAL;
+  IF SIZEOF(aggregate_id_bag) = 1
+  THEN
+    RETURN(aggregate_id_bag[1].attribute_value);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_associated_mandatory_document_ids(pdc : product_definition_context) : SET OF STRING;
+LOCAL
+  result        : SET OF STRING                       := [];
+  adrs_raw      : SET OF applied_document_reference   := bag_to_set(USEDIN(pdc,
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_DOCUMENT_REFERENCE.ITEMS'));
+  adrs_filtered : SET OF applied_document_reference   := [];
+  ras           : SET OF role_association;
+  dpas          : SET OF document_product_association;
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(adrs_raw);
+    IF adrs_raw[i]\document_reference.role\object_role.name = 'mandatory'
+    THEN
+      adrs_filtered := adrs_filtered + adrs_raw[i];
+    END_IF;
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(adrs_filtered);
+    dpas := bag_to_set(USEDIN(adrs_filtered[i]\document_reference.assigned_document,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_PRODUCT_ASSOCIATION.RELATING_DOCUMENT'));
+    REPEAT j := 1 TO HIINDEX(dpas);
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOCUMENT_PRODUCT_EQUIVALENCE' IN TYPEOF(dpas[j])
+      THEN
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_FORMATION' IN
+           TYPEOF(dpas[j]\document_product_association.related_product)
+        THEN
+          result := result +
+                    dpas[j]\document_product_association.related_product\product_definition_formation.of_product\product.id;
+        END_IF;
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT' IN TYPEOF(dpas[j].related_product)
+        THEN
+          result := result + dpas[j]\document_product_association.related_product\product.id;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION get_basis_surface(c : curve_on_surface) : SET [0 : 2] OF surface;
+LOCAL
+  surfs : SET [0 : 2] OF surface;
+  n     : INTEGER;
+END_LOCAL;
+  surfs := [];
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(c)
+  THEN
+    surfs := [c\pcurve.basis_surface];
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(c)
+    THEN
+      n := SIZEOF(c\surface_curve.associated_geometry);
+      REPEAT i := 1 TO n;
+        surfs := surfs + associated_surface(c\surface_curve.associated_geometry[i]);
+      END_REPEAT;
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF(c)
+  THEN
+    n := SIZEOF(c\composite_curve.segments);
+    surfs := get_basis_surface(c\composite_curve.segments[1].parent_curve);
+    IF n > 1
+    THEN
+      REPEAT i := 2 TO n;
+        surfs := surfs * get_basis_surface(c\composite_curve.segments[i].parent_curve);
+      END_REPEAT;
+    END_IF;
+  END_IF;
+  RETURN(surfs);
+END_FUNCTION;
+
+FUNCTION get_coordinate_values(source : tessellated_surface_item) : coordinates_list;
+LOCAL
+  coordinate_values : coordinates_list;
+  max               : INTEGER;
+END_LOCAL;
+  (* If source is of type tessellated_face its single coordinates_list is returned *)
+  CASE true OF
+    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
+    TYPEOF(source) : BEGIN  
+                            coordinate_values := source\tessellated_face.coordinates;
+                            RETURN(coordinate_values);
+    END;
+    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SURFACE_SET' IN
+    TYPEOF(source) : BEGIN  
+                            coordinate_values := source\tessellated_surface_set.coordinates;
+                            RETURN(coordinate_values);
+    END;
+    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SOLID' IN
+    TYPEOF(source) : BEGIN  
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
+                               TYPEOF(source\tessellated_solid.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_solid.items[1]\tessellated_face.coordinates;
+                            END_IF;
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
+                               TYPEOF(source\tessellated_solid.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_solid.items[1]\tessellated_edge.coordinates;
+                            END_IF;
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
+                               TYPEOF(source\tessellated_solid.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_solid.items[1]\tessellated_vertex.coordinates;
+                            END_IF;
+                            max := SIZEOF(source\tessellated_solid.items);
+                            IF max = 1
+                            THEN
+                              RETURN(coordinate_values);
+                            ELSE
+                              REPEAT i := 2 TO max;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
+                                   TYPEOF(source\tessellated_solid.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_solid.items[i]\tessellated_face.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
+                                   TYPEOF(source\tessellated_solid.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_solid.items[i]\tessellated_edge.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
+                                   TYPEOF(source\tessellated_solid.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_solid.items[i]\tessellated_vertex.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                              END_REPEAT;
+                              RETURN(coordinate_values);
+                            END_IF;
+    END;
+    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHELL' IN
+    TYPEOF(source) : BEGIN  
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
+                               TYPEOF(source\tessellated_shell.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_shell.items[1]\tessellated_face.coordinates;
+                            END_IF;
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
+                               TYPEOF(source\tessellated_shell.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_shell.items[1]\tessellated_edge.coordinates;
+                            END_IF;
+                            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
+                               TYPEOF(source\tessellated_shell.items[1])
+                            THEN
+                              coordinate_values := source\tessellated_shell.items[1]\tessellated_vertex.coordinates;
+                            END_IF;
+                            max := SIZEOF(source\tessellated_shell.items);
+                            IF max = 1
+                            THEN
+                              RETURN(coordinate_values);
+                            ELSE
+                              REPEAT i := 2 TO max;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_FACE' IN
+                                   TYPEOF(source\tessellated_shell.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_shell.items[i]\tessellated_face.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_EDGE' IN
+                                   TYPEOF(source\tessellated_shell.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_shell.items[i]\tessellated_edge.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_VERTEX' IN
+                                   TYPEOF(source\tessellated_shell.items[i])
+                                THEN
+                                  IF NOT (coordinate_values :=:
+                                          source\tessellated_shell.items[i]\tessellated_vertex.coordinates)
+                                  THEN
+                                    RETURN(?);
+                                  END_IF;
+                                END_IF;
+                              END_REPEAT;
+                              RETURN(coordinate_values);
+                            END_IF;
+    END;
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION get_descendant_occurrences(input : product_definition_occurrence) : SET [0 : ?] OF product_definition_specified_occurrence;
+LOCAL
+  result : SET OF product_definition_specified_occurrence := input.child_occurrences;
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(input.child_occurrences) BY 1;
+    result := result + get_descendant_occurrences(input.child_occurrences[i]);
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION get_description_value(obj : description_attribute_select) : text;
+LOCAL
+  description_bag : BAG OF description_attribute := (USEDIN(obj,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM'));
+END_LOCAL;
+  IF SIZEOF(description_bag) = 1
+  THEN
+    RETURN(description_bag[1].attribute_value);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_directed_link(nodes : LIST OF representation;
+                           undirected_link : LIST OF chained_representation_link) : LIST OF representation_relationship;
+LOCAL
+  directed_link : LIST OF representation_relationship := [];
+END_LOCAL;
+  IF (SIZEOF(nodes) <> SIZEOF(undirected_link) + 1) OR (VALUE_UNIQUE(nodes) = false)
+  THEN
+    RETURN(?);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(undirected_link);
+    CASE true OF
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_CONTEXT' IN TYPEOF(undirected_link[i])) : BEGIN  
+                                                                                                                        IF ((nodes[i]\representation.context_of_items :=:
+                                                                                                                             undirected_link[i]) AND
+                                                                                                                            (nodes[i +
+                                                                                                                                   1]\representation.context_of_items :=:
+                                                                                                                             undirected_link[i]))
+                                                                                                                        THEN
+                                                                                                                          INSERT(directed_link,
+                                                                                                                                 representation_relationship('',
+                                                                                                                                                             '',
+                                                                                                                                                             nodes[i +
+                                                                                                                                                                   1],
+                                                                                                                                                             nodes[i]),
+                                                                                                                                 (i -
+                                                                                                                                  1));
+                                                                                                                        ELSE
+                                                                                                                          RETURN(?);
+                                                                                                                        END_IF;
+      END;
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_RELATIONSHIP' IN
+       TYPEOF(undirected_link[i])) : BEGIN  
+                                            IF (((nodes[i] :=:
+                                                  undirected_link[i]\representation_relationship.rep_1) AND
+                                                 (nodes[i + 1] :=:
+                                                  undirected_link[i]\representation_relationship.rep_2)) OR
+                                                ((nodes[i] :=:
+                                                  undirected_link[i]\representation_relationship.rep_2) AND
+                                                 (nodes[i + 1] :=:
+                                                  undirected_link[i]\representation_relationship.rep_1)))
+                                            THEN
+                                              INSERT(directed_link,
+                                                     representation_relationship('', '', nodes[i + 1], nodes[i]),
+                                                     (i - 1));
+                                            ELSE
+                                              RETURN(?);
+                                            END_IF;
+      END;
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM' IN TYPEOF(undirected_link[i])) : BEGIN  
+                                                                                                             IF ((nodes[i] IN
+                                                                                                                  using_representations(undirected_link[i])) AND
+                                                                                                                 (nodes[i +
+                                                                                                                        1] :=:
+                                                                                                                  undirected_link[i]\mapped_item.mapping_source\representation_map.mapped_representation))
+                                                                                                             THEN
+                                                                                                               INSERT(directed_link,
+                                                                                                                      representation_relationship('',
+                                                                                                                                                  '',
+                                                                                                                                                  nodes[i +
+                                                                                                                                                        1],
+                                                                                                                                                  nodes[i]),
+                                                                                                                      (i -
+                                                                                                                       1));
+                                                                                                             ELSE
+                                                                                                               RETURN(?);
+                                                                                                             END_IF;
+      END;
+      OTHERWISE: RETURN(?);
+    END_CASE;
+  END_REPEAT;
+  IF (VALUE_UNIQUE(directed_link) = false)
+  THEN
+    RETURN(?);
+  END_IF;
+  RETURN(directed_link);
+END_FUNCTION;
+
+FUNCTION get_id_value(obj : id_attribute_select) : identifier;
+LOCAL
+  id_bag : BAG OF id_attribute := (USEDIN(obj,
+                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ID_ATTRIBUTE.IDENTIFIED_ITEM'));
+END_LOCAL;
+  IF SIZEOF(id_bag) = 1
+  THEN
+    RETURN(id_bag[1].attribute_value);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_kinematic_joints_from_kinematic_loops(kls : SET OF kinematic_loop) : SET OF kinematic_joint;
+LOCAL
+  result : SET OF oriented_joint := [];
+END_LOCAL;
+  IF SIZEOF(kls) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(kls);
+      result := result + kls[i].edge_list;
+    END_REPEAT;
+  END_IF;
+  RETURN(get_kinematic_joints_from_oriented_joints(result));
+END_FUNCTION;
+
+FUNCTION get_kinematic_joints_from_oriented_joints(ors : SET OF oriented_joint) : SET OF kinematic_joint;
+LOCAL
+  result : SET OF kinematic_joint := [];
+END_LOCAL;
+  IF SIZEOF(ors) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(ors);
+      result := result + ors[i].edge_element;
+    END_REPEAT;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION get_name_value(obj : name_attribute_select) : label;
+LOCAL
+  name_bag : BAG OF name_attribute := (USEDIN(obj,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NAME_ATTRIBUTE.NAMED_ITEM'));
+END_LOCAL;
+  IF SIZEOF(name_bag) = 1
+  THEN
+    RETURN(name_bag[1].attribute_value);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_plane_of_implicit_geometry(ps : positioned_sketch) : plane;
+LOCAL
+  sb     : sketch_basis_select := ps.sketch_basis;
+  result : plane               := ?;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SURFACE' IN TYPEOF(sb))
+  THEN
+    result := sb\face_surface.face_geometry;
+  ELSE
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_BOUNDED_SURFACE' IN TYPEOF(sb))
+    THEN
+      result := sb\curve_bounded_surface.basis_surface;
+    ELSE
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_CURVE_SELECT' IN TYPEOF(sb))
+      THEN
+        BEGIN  
+               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC' IN TYPEOF(sb))
+               THEN
+                 result := dummy_gri || surface() || elementary_surface(sb\conic.position) || plane();
+               END_IF;
+               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(sb))
+               THEN
+                 BEGIN  
+                        result := get_plane_of_implicit_geometry(dummy_gri ||
+                                                                 positioned_sketch(sb\trimmed_curve.basis_curve, []));
+                 END;
+               END_IF;
+               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(sb))
+               THEN
+                 result := sb\pcurve.basis_surface;
+               END_IF;
+               IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(sb))
+               THEN
+                 BEGIN  
+                        IF ((SIZEOF(sb\surface_curve.basis_surface) = 1) AND
+                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                             TYPEOF(sb\surface_curve.basis_surface[1])))
+                        THEN
+                          result := sb\surface_curve.basis_surface[1];
+                        ELSE
+                          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                               TYPEOF(sb\surface_curve.basis_surface[1])) AND
+                              ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                               TYPEOF(sb\surface_curve.basis_surface[2])))
+                          THEN
+                            result := ?;
+                          ELSE
+                            IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE' IN
+                                TYPEOF(sb\surface_curve.basis_surface[1]))
+                            THEN
+                              result := sb\surface_curve.basis_surface[1];
+                            ELSE
+                              result := sb\surface_curve.basis_surface[2];
+                            END_IF;
+                          END_IF;
+                        END_IF;
+                 END;
+               END_IF;
+        END;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION get_property_definition_representations(c_def_instance : characterized_definition) : SET OF property_definition_representation;
+LOCAL
+  pd_set  : SET OF property_definition                := [];
+  pdr_set : SET OF property_definition_representation := [];
+END_LOCAL;
+  pd_set := bag_to_set(USEDIN(c_def_instance,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
+  IF (SIZEOF(pd_set) < 1)
+  THEN
+    RETURN(pdr_set);
+  END_IF;
+  REPEAT i := 1 TO HIINDEX(pd_set);
+    pdr_set := pdr_set +
+               bag_to_set(USEDIN(pd_set[i],
+                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'));
+  END_REPEAT;
+  RETURN(pdr_set);
+END_FUNCTION;
+
+FUNCTION get_relative_direction_2points(cp1 : cartesian_point;
+                                        cp2 : cartesian_point) : direction;
+LOCAL
+  d1        : REAL;
+  d2        : REAL;
+  d3        : REAL;
+  magnitude : REAL;
+  result    : direction := ?;
+END_LOCAL;
+  IF ((cp1.dim <> 3) OR (cp2.dim <> 3))
+  THEN
+    RETURN(result);
+  ELSE
+    BEGIN  
+           d1 := cp2.coordinates[1] - cp1.coordinates[1];
+           d2 := cp2.coordinates[2] - cp1.coordinates[2];
+           d3 := cp2.coordinates[3] - cp1.coordinates[3];
+           magnitude := SQRT(d1 * d1 + d2 * d2 + d3 * d3);
+           IF (magnitude = 0)
+           THEN
+             RETURN(result);
+           END_IF;
+           result := dummy_gri || direction([d1,d2,d3]);
+    END;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION get_representations_for_items(input : SET OF founded_item_select) : SET OF representation;
+LOCAL
+  r_set : SET OF representation := [];
+END_LOCAL;
+  REPEAT i := LOINDEX(input) TO HIINDEX(input);
+    r_set := r_set + using_representations(input[i]);
+  END_REPEAT;
+  RETURN(r_set);
+END_FUNCTION;
+
+FUNCTION get_role(obj : role_select) : object_role;
+LOCAL
+  role_bag : BAG OF role_association := (USEDIN(obj,
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE'));
+END_LOCAL;
+  IF SIZEOF(role_bag) = 1
+  THEN
+    RETURN(role_bag[1].role);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION get_root_shape_aspect(current : shape_aspect) : product_definition_shape;
+  REPEAT WHILE ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONSTITUENT_SHAPE_ASPECT' IN TYPEOF(current));
+    current := current.parent;
+  END_REPEAT;
+  RETURN(current.of_shape);
+END_FUNCTION;
+
+FUNCTION get_shape_aspect_property_definition_representations(s_a_instance : shape_aspect) : SET OF property_definition_representation;
+LOCAL
+  pd_set  : SET OF property_definition                := [];
+  pdr_set : SET OF property_definition_representation := [];
+END_LOCAL;
+  pd_set := bag_to_set(USEDIN(s_a_instance,
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION'));
+  IF (SIZEOF(pd_set) < 1)
+  THEN
+    RETURN(pdr_set);
+  END_IF;
+  REPEAT i := 1 TO HIINDEX(pd_set);
+    pdr_set := pdr_set +
+               (QUERY(pdr
+                      <* USEDIN(pd_set[i],
+                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                      | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                        TYPEOF(pdr)));
+  END_REPEAT;
+  RETURN(pdr_set);
+END_FUNCTION;
+
+FUNCTION get_shape_aspects(c_def_instance : characterized_definition) : SET OF shape_aspect;
+LOCAL
+  pd_set  : SET OF product_definition_shape := [];
+  pdr_set : SET OF shape_aspect             := [];
+END_LOCAL;
+  pd_set := bag_to_set(QUERY(pd
+                             <* USEDIN(c_def_instance,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                             | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN
+                               TYPEOF(pd)));
+  IF (SIZEOF(pd_set) < 1)
+  THEN
+    RETURN(pdr_set);
+  END_IF;
+  REPEAT i := 1 TO HIINDEX(pd_set);
+    pdr_set := pdr_set +
+               bag_to_set(USEDIN(pd_set[i], 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
+  END_REPEAT;
+  RETURN(pdr_set);
+END_FUNCTION;
+
+FUNCTION has_values_space(expr : generic_expression) : BOOLEAN;
+LOCAL
+  typenames : SET OF STRING := stripped_typeof(expr);
+END_LOCAL;
+  IF 'EXPRESSION' IN typenames
+  THEN
+    RETURN(bool(('NUMERIC_EXPRESSION' IN typenames) OR ('STRING_EXPRESSION' IN typenames) OR
+                ('BOOLEAN_EXPRESSION' IN typenames)));
+  END_IF;
+  IF 'MATHS_FUNCTION' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'FUNCTION_APPLICATION' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'MATHS_SPACE' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'MATHS_VARIABLE' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'DEPENDENT_VARIABLE_DEFINITION' IN typenames
+  THEN
+    RETURN(has_values_space(expr\unary_generic_expression.operand));
+  END_IF;
+  IF 'COMPLEX_NUMBER_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'LOGICAL_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'BINARY_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'MATHS_ENUM_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'REAL_TUPLE_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'INTEGER_TUPLE_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'ATOM_BASED_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'MATHS_TUPLE_LITERAL' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'PARTIAL_DERIVATIVE_EXPRESSION' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'DEFINITE_INTEGRAL_EXPRESSION' IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION increasing_values_in_list(values : LIST [2 : ?] OF REAL) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+  limit  : INTEGER := SIZEOF(values);
+END_LOCAL;
+  REPEAT i := 2 TO limit;
+    IF values[i] <= values[i - 1]
+    THEN
+      result := false;
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION inspected_product_definition(dqir : data_quality_inspection_result_representation) : BAG OF product_definition;
+LOCAL
+  dqdr  : BAG OF data_quality_definition_representation_relationship := [];
+  pdqdr : BAG OF product_data_and_data_quality_relationship          := [];
+  pd    : BAG OF product_definition                                  := [];
+END_LOCAL;
+  dqdr := USEDIN(dqir,
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_DEFINITION_REPRESENTATION_RELATIONSHIP.USED_REPRESENTATION');
+  REPEAT i := 1 TO SIZEOF(dqdr);
+    pdqdr := USEDIN(dqdr[i].definition,
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DATA_AND_DATA_QUALITY_RELATIONSHIP.DATA_QUALITY');
+    REPEAT j := 1 TO SIZEOF(pdqdr);
+      pd := pd + pdqdr[j].product_data;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(pd);
+END_FUNCTION;
+
+FUNCTION invalidate_vrep_item(item : variational_representation_item) : BOOLEAN;
+LOCAL
+  reps : SET [1 : ?] OF representation                  := using_representations(item);
+  svri : SET [1 : ?] OF variational_representation_item;
+  iar  : instance_attribute_reference;
+  i    : INTEGER;
+  n    : INTEGER                                        := HIINDEX(reps);
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item))
+  THEN
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_ATTRIBUTE_REFERENCE' IN
+       TYPEOF(item\generic_variable.interpretation\environment.semantics)
+    THEN
+      BEGIN  
+             iar := item\generic_variable.interpretation\environment.semantics;
+             IF (reps <> using_representations(iar\instance_attribute_reference.owning_instance))
+             THEN
+               RETURN(true);
+             END_IF;
+      END;
+    ELSE
+      RETURN(true);
+    END_IF;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNBOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item))
+  THEN
+    BEGIN  
+           REPEAT i := 1 TO n;
+             svri := QUERY(q
+                           <* reps[i]\representation.items
+                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FREE_FORM_CONSTRAINT' IN TYPEOF(q));
+             IF SIZEOF(QUERY(r
+                             <* svri
+                             | item IN
+                               (r\free_form_constraint.reference_elements +
+                                r\free_form_constraint.constrained_elements))) =
+                0
+             THEN
+               RETURN(true);
+             END_IF;
+           END_REPEAT;
+    END;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FIXED_INSTANCE_ATTRIBUTE_SET' IN TYPEOF(item))
+  THEN
+    REPEAT i := 1 TO SIZEOF(item\fixed_instance_attribute_set.fixed_attributes);
+      IF (reps <>
+          using_representations(item\fixed_instance_attribute_set.fixed_attributes[i]\instance_attribute_reference.owning_instance))
+      THEN
+        RETURN(true);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_CONSTRAINT' IN TYPEOF(item))
+  THEN
+    IF SIZEOF(QUERY(q
+                    <* (item\explicit_constraint.reference_elements + item\explicit_constraint.constrained_elements)
+                    | reps <> using_representations(q))) >
+       0
+    THEN
+      RETURN(true);
+    END_IF;
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AUXILIARY_GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(item))
+  THEN
+    BEGIN  
+           REPEAT i := 1 TO n;
+             svri := QUERY(q
+                           <* reps[i]\representation.items
+                           | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXPLICIT_GEOMETRIC_CONSTRAINT' IN
+                             TYPEOF(q));
+             IF SIZEOF(QUERY(r <* svri | item IN r\explicit_geometric_constraint.reference_elements)) = 0
+             THEN
+               RETURN(true);
+             END_IF;
+           END_REPEAT;
+    END;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION is_acyclic(arg : generic_expression) : BOOLEAN;
+  RETURN(acyclic(arg, []));
+END_FUNCTION;
+
+FUNCTION is_int_expr(arg : numeric_expression) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_LITERAL' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_LITERAL' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_NUMERIC_VARIABLE' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_NUMERIC_VARIABLE' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_int_expr(arg\unary_numeric_expression.operand));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_int_expr(arg\unary_numeric_expression.operand));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINIMUM_FUNCTION' IN TYPEOF(arg))
+  THEN
+    REPEAT i := 1 TO SIZEOF(arg\multiple_arity_numeric_expression.operands);
+      IF NOT is_int_expr(arg\multiple_arity_numeric_expression.operands[i])
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POWER_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(is_int_expr(arg\binary_numeric_expression.operands[1]) AND
+           is_int_expr(arg\binary_numeric_expression.operands[2]));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)
+  THEN
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INT_VALUE_FUNCTION' IN TYPEOF(arg)
+    THEN
+      RETURN(true);
+    ELSE
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTEGER_DEFINED_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REAL_DEFINED_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION is_sql_mappable(arg : expression) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_NUMERIC_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQL_MAPPABLE_DEFINED_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_FUNCTION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_sql_mappable(arg\unary_numeric_expression.operand));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABS_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COS_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TAN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ASIN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACOS_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATAN_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXP_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG2_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOG10_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_FUNCTION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLUS_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULT_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINIMUM_FUNCTION' IN TYPEOF(arg))
+  THEN
+    REPEAT i := 1 TO SIZEOF(arg\multiple_arity_numeric_expression.operands);
+      IF NOT is_sql_mappable(arg\multiple_arity_numeric_expression.operands[i])
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MINUS_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SLASH_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(is_sql_mappable(arg\binary_numeric_expression.operands[1]) AND
+           is_sql_mappable(arg\binary_numeric_expression.operands[2]));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIV_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MOD_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POWER_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_BOOLEAN_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NOT_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_sql_mappable(arg\unary_generic_expression.operand));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ODD_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.XOR_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AND_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OR_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    REPEAT i := 1 TO SIZEOF(arg\multiple_arity_boolean_expression.operands);
+      IF NOT is_sql_mappable(arg\multiple_arity_boolean_expression.operands[i])
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EQUALS_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_sql_mappable(arg\binary_generic_expression.operands[1]) AND
+           is_sql_mappable(arg\binary_generic_expression.operands[2]));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_EQUAL' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_GREATER' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_GREATER_EQUAL' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_LESS' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_LESS_EQUAL' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPARISON_NOT_EQUAL' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LIKE_EXPRESSION' IN TYPEOF(arg))
+  THEN
+    RETURN(is_sql_mappable(arg\comparison_expression.operands[1]) AND
+           is_sql_mappable(arg\comparison_expression.operands[2]));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INTERVAL_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(is_sql_mappable(arg\interval_expression.interval_low) AND
+           is_sql_mappable(arg\interval_expression.interval_high) AND
+           is_sql_mappable(arg\interval_expression.interval_item));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NUMERIC_DEFINED_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRING_DEFINED_FUNCTION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SIMPLE_STRING_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INDEX_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SUBSTRING_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCAT_EXPRESSION' IN TYPEOF(arg)) OR
+     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FORMAT_FUNCTION' IN TYPEOF(arg))
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION item_in_context(item : representation_item;
+                         cntxt : representation_context) : BOOLEAN;
+LOCAL
+  y : BAG OF representation_item;
+END_LOCAL;
+  IF SIZEOF(USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS') *
+            cntxt.representations_in_context) >
+     0
+  THEN
+    RETURN(true);
+  ELSE
+    y := QUERY(z
+               <* USEDIN(item, '')
+               | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z));
+    IF SIZEOF(y) > 0
+    THEN
+      REPEAT i := 1 TO HIINDEX(y);
+        IF item_in_context(y[i], cntxt)
+        THEN
+          RETURN(true);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION leap_year(year : year_number) : BOOLEAN;
+  IF ((((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0))
+  THEN
+    RETURN(true);
+  ELSE
+    RETURN(false);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION list_face_loops(f : face) : LIST [0 : ?] OF loop;
+LOCAL
+  loops : LIST [0 : ?] OF loop := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(f.bounds);
+    loops := loops + (f.bounds[i].bound);
+  END_REPEAT;
+  RETURN(loops);
+END_FUNCTION;
+
+FUNCTION list_of_topology_reversed(a_list : list_of_reversible_topology_item) : list_of_reversible_topology_item;
+LOCAL
+  the_reverse : list_of_reversible_topology_item;
+END_LOCAL;
+  the_reverse := [];
+  REPEAT i := 1 TO SIZEOF(a_list);
+    the_reverse := topology_reversed(a_list[i]) + the_reverse;
+  END_REPEAT;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION list_selected_components(aggr : AGGREGATE OF LIST OF maths_value;
+                                  k : positive_integer) : LIST OF maths_value;
+LOCAL
+  result : LIST OF maths_value := [];
+  j      : INTEGER             := 0;
+END_LOCAL;
+  REPEAT i := LOINDEX(aggr) TO HIINDEX(aggr);
+    IF k <= SIZEOF(aggr[i])
+    THEN
+      INSERT(result, aggr[i][k], j);
+      j := j + 1;
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION list_to_array(lis : LIST [0 : ?] OF GENERIC : T;
+                       low : INTEGER;
+                       u : INTEGER) : ARRAY [low : u] OF GENERIC : T;
+LOCAL
+  n   : INTEGER;
+  res : ARRAY [low : u] OF GENERIC : T;
+END_LOCAL;
+  n := SIZEOF(lis);
+  IF (n <> (u - low + 1))
+  THEN
+    RETURN(?);
+  ELSE
+    res := [lis[1]:n];
+    REPEAT i := 2 TO n;
+      res[low + i - 1] := lis[i];
+    END_REPEAT;
+    RETURN(res);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION list_to_set(l : LIST [0 : ?] OF GENERIC : T) : SET OF GENERIC : T;
+LOCAL
+  s : SET OF GENERIC : T := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(l);
+    s := s + l[i];
+  END_REPEAT;
+  RETURN(s);
+END_FUNCTION;
+
+FUNCTION make_array_of_array(lis : LIST [1 : ?] OF LIST [1 : ?] OF GENERIC : T;
+                             low1 : INTEGER;
+                             u1 : INTEGER;
+                             low2 : INTEGER;
+                             u2 : INTEGER) : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF GENERIC : T;
+LOCAL
+  res : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF GENERIC : T;
+END_LOCAL;
+  (* Check input dimensions for consistency *)
+  IF (u1 - low1 + 1) <> SIZEOF(lis)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF (u2 - low2 + 1) <> SIZEOF(lis[1])
+  THEN
+    RETURN(?);
+  END_IF;
+  (* Initialise res with values from lis[1] *)
+  res := [list_to_array(lis[1], low2, u2):(u1 - low1 + 1)];
+  REPEAT i := 2 TO HIINDEX(lis);
+    IF (u2 - low2 + 1) <> SIZEOF(lis[i])
+    THEN
+      RETURN(?);
+    END_IF;
+    res[low1 + i - 1] := list_to_array(lis[i], low2, u2);
+  END_REPEAT;
+  RETURN(res);
+END_FUNCTION;
+
+FUNCTION make_array_of_array_of_array(lis : LIST [1 : ?] OF LIST [1 : ?] OF LIST [1 : ?] OF GENERIC : T;
+                                      low1 : INTEGER;
+                                      u1 : INTEGER;
+                                      low2 : INTEGER;
+                                      u2 : INTEGER;
+                                      low3 : INTEGER;
+                                      u3 : INTEGER) : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF ARRAY [low3 : u3] OF GENERIC : T;
+LOCAL
+  res : ARRAY [low1 : u1] OF ARRAY [low2 : u2] OF ARRAY [low3 : u3] OF GENERIC : T;
+END_LOCAL;
+  (* Check input dimensions for consistency *)
+  IF (u1 - low1 + 1) <> SIZEOF(lis)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF (u2 - low2 + 1) <> SIZEOF(lis[1])
+  THEN
+    RETURN(?);
+  END_IF;
+  (* Initialise res with values from lis[1] *)
+  res := [make_array_of_array(lis[1], low2, u2, low3, u3):(u1 - low1 + 1)];
+  REPEAT i := 2 TO HIINDEX(lis);
+    IF (u2 - low2 + 1) <> SIZEOF(lis[i])
+    THEN
+      RETURN(?);
+    END_IF;
+    res[low1 + i - 1] := make_array_of_array(lis[i], low2, u2, low3, u3);
+  END_REPEAT;
+  RETURN(res);
+END_FUNCTION;
+
+FUNCTION make_atom_based_literal(lit_value : atom_based_value) : atom_based_literal;
+  RETURN(atom_based_literal(lit_value) || generic_literal() || simple_generic_expression() || generic_expression());
+END_FUNCTION;
+
+FUNCTION make_binary_literal(lit_value : BINARY) : binary_literal;
+  RETURN(binary_literal(lit_value) || generic_literal() || simple_generic_expression() || generic_expression());
+END_FUNCTION;
+
+FUNCTION make_boolean_literal(lit_value : BOOLEAN) : boolean_literal;
+  RETURN(boolean_literal(lit_value) || simple_boolean_expression() || boolean_expression() || expression() ||
+         generic_expression() || simple_generic_expression() || generic_literal());
+END_FUNCTION;
+
+FUNCTION make_cartesian_complex_number_region(real_constraint : real_interval;
+                                              imag_constraint : real_interval) : cartesian_complex_number_region;
+  RETURN(cartesian_complex_number_region(real_constraint, imag_constraint) || maths_space() || generic_expression() ||
+         generic_literal() || simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_complex_number_literal(rpart : REAL;
+                                     ipart : REAL) : complex_number_literal;
+  RETURN(complex_number_literal(rpart, ipart) || generic_literal() || simple_generic_expression() ||
+         generic_expression());
+END_FUNCTION;
+
+FUNCTION make_elementary_function(func_id : elementary_function_enumerators) : elementary_function;
+  RETURN(elementary_function(func_id) || maths_function() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_elementary_space(space_id : elementary_space_enumerators) : elementary_space;
+  RETURN(elementary_space(space_id) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_extended_tuple_space(base : tuple_space;
+                                   extender : maths_space) : extended_tuple_space;
+  RETURN(extended_tuple_space(base, extender) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_finite_integer_interval(min : INTEGER;
+                                      max : INTEGER) : finite_integer_interval;
+  RETURN(finite_integer_interval(min, max) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_finite_real_interval(min : REAL;
+                                   minclo : open_closed;
+                                   max : REAL;
+                                   maxclo : open_closed) : finite_real_interval;
+  RETURN(finite_real_interval(min, minclo, max, maxclo) || maths_space() || generic_expression() ||
+         generic_literal() || simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_finite_space(members : SET OF maths_value) : finite_space;
+  RETURN(finite_space(members) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_function_application(afunction : maths_function_select;
+                                   arguments : LIST [1 : ?] OF maths_value) : function_application;
+  RETURN(function_application(afunction, arguments) ||
+         multiple_arity_generic_expression(convert_to_maths_function(afunction) + convert_to_operands(arguments)) ||
+         generic_expression());
+END_FUNCTION;
+
+FUNCTION make_function_space(domain_constraint : space_constraint_type;
+                             domain_argument : maths_space;
+                             range_constraint : space_constraint_type;
+                             range_argument : maths_space) : function_space;
+  RETURN(function_space(domain_constraint, domain_argument, range_constraint, range_argument) || maths_space() ||
+         generic_expression() || generic_literal() || simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_int_literal(lit_value : INTEGER) : int_literal;
+  RETURN(int_literal() || literal_number(lit_value) || simple_numeric_expression() || numeric_expression() ||
+         expression() || generic_expression() || simple_generic_expression() || generic_literal());
+END_FUNCTION;
+
+FUNCTION make_listed_product_space(factors : LIST OF maths_space) : listed_product_space;
+  RETURN(listed_product_space(factors) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_logical_literal(lit_value : LOGICAL) : logical_literal;
+  RETURN(logical_literal(lit_value) || generic_literal() || simple_generic_expression() || generic_expression());
+END_FUNCTION;
+
+FUNCTION make_maths_enum_literal(lit_value : maths_enum_atom) : maths_enum_literal;
+  RETURN(maths_enum_literal(lit_value) || generic_literal() || simple_generic_expression() || generic_expression());
+END_FUNCTION;
+
+FUNCTION make_maths_tuple_literal(lit_value : LIST OF maths_value) : maths_tuple_literal;
+  RETURN(maths_tuple_literal(lit_value) || generic_literal() || simple_generic_expression() || generic_expression());
+END_FUNCTION;
+
+FUNCTION make_numeric_set(start : maths_number;
+                          delta : maths_number;
+                          incs : positive_integer) : SET [2 : ?] OF maths_number;
+LOCAL
+  i           : INTEGER;
+  numeric_set : SET [2 : ?] OF maths_number := [start,(start + delta)];
+END_LOCAL;
+  IF incs > 1
+  THEN
+    REPEAT i := 2 TO incs;
+      numeric_set := numeric_set + (start + (i * delta));
+    END_REPEAT;
+  END_IF;
+  RETURN(numeric_set);
+END_FUNCTION;
+
+FUNCTION make_parallel_composed_function(srcdom : maths_space_or_function;
+                                         prepfuncs : LIST [2 : ?] OF maths_function;
+                                         finfunc : maths_function_select) : parallel_composed_function;
+  RETURN(parallel_composed_function(srcdom, prepfuncs, finfunc) || maths_function() || generic_expression() ||
+         multiple_arity_generic_expression(convert_to_operands_prcmfn(srcdom, prepfuncs, finfunc)));
+END_FUNCTION;
+
+FUNCTION make_polar_complex_number_region(centre : complex_number_literal;
+                                          dis_constraint : real_interval;
+                                          dir_constraint : finite_real_interval) : polar_complex_number_region;
+  RETURN(polar_complex_number_region(centre, dis_constraint, dir_constraint) || maths_space() ||
+         generic_expression() || generic_literal() || simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_real_interval_from_min(min : REAL;
+                                     minclo : open_closed) : real_interval_from_min;
+  RETURN(real_interval_from_min(min, minclo) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_real_interval_to_max(max : REAL;
+                                   maxclo : open_closed) : real_interval_to_max;
+  RETURN(real_interval_to_max(max, maxclo) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION make_real_literal(lit_value : REAL) : real_literal;
+  RETURN(real_literal() || literal_number(lit_value) || simple_numeric_expression() || numeric_expression() ||
+         expression() || generic_expression() || simple_generic_expression() || generic_literal());
+END_FUNCTION;
+
+FUNCTION make_string_literal(lit_value : STRING) : string_literal;
+  RETURN(string_literal(lit_value) || simple_string_expression() || string_expression() || expression() ||
+         generic_expression() || simple_generic_expression() || generic_literal());
+END_FUNCTION;
+
+FUNCTION make_uniform_product_space(base : maths_space;
+                                    exponent : positive_integer) : uniform_product_space;
+  RETURN(uniform_product_space(base, exponent) || maths_space() || generic_expression() || generic_literal() ||
+         simple_generic_expression());
+END_FUNCTION;
+
+FUNCTION max_exists(spc : maths_space) : BOOLEAN;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  RETURN(bool(((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
+              ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types) OR
+              ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types) OR
+              ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)));
+END_FUNCTION;
+
+FUNCTION max_included(spc : maths_space) : BOOLEAN;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
+  THEN
+    RETURN(bool(spc\finite_real_interval.max_closure = closed));
+  END_IF;
+  IF ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)
+  THEN
+    RETURN(bool(spc\real_interval_to_max.max_closure = closed));
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION md_pmi_name_and_type_correlation(input : annotation_placeholder_occurrence) : BOOLEAN;
+LOCAL
+  pmi_role : STRING                                                    := input\annotation_placeholder_occurrence.item\representation_item.name;
+  dmiawps  : SET OF draughting_model_item_association_with_placeholder := input\annotation_placeholder_occurrence.the_draughting_model_item_association_with_placeholders;
+  v        : SET OF STRING                                             := [];
+END_LOCAL;
+  IF (SIZEOF(dmiawps) = 1)
+  THEN
+    v := TYPEOF(dmiawps[1]\draughting_model_item_association_with_placeholder.definition);
+  ELSE
+    RETURN(false);
+  END_IF;
+  IF NOT (pmi_role IN
+          ['angular dimension',
+           'angularity',
+           'circular runout',
+           'circularity',
+           'coaxiality',
+           'concentricity',
+           'curve dimension',
+           'cylindricity',
+           'datum',
+           'datum target',
+           'diameter dimension',
+           'flatness',
+           'general dimension',
+           'general note',
+           'general tolerance',
+           'label',
+           'linear dimension',
+           'note',
+           'ordinate dimension',
+           'parallelism',
+           'perpendicularity',
+           'position',
+           'profile of line',
+           'profile of surface',
+           'radial dimension',
+           'roundness',
+           'runout',
+           'straightness',
+           'surface roughness',
+           'symmetry',
+           'total runout'])
+  THEN
+    RETURN(?);
+  END_IF;
+  CASE pmi_role OF
+    'angular dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULAR_LOCATION' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'angularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULARITY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'circular runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'circularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'coaxiality' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COAXIALITY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'concentricity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCENTRICITY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'curve dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'cylindricity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CYLINDRICITY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'datum' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'datum target' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATUM_TARGET' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'diameter dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'flatness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FLATNESS_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'general dimension' : IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE',
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION'] *
+                                     v) =
+                              1)
+    THEN
+      RETURN(true);
+    END_IF;
+    'general note' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'general tolerance' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRIC_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'label' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'linear dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'note' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'ordinate dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'parallelism' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARALLELISM_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'perpendicularity' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERPENDICULARITY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'position' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'profile of line' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'profile of surface' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'radial dimension' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'roundness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'straightness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRAIGHTNESS_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'surface roughness' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'symmetry' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMMETRY_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    'total runout' : IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE' IN v
+    THEN
+      RETURN(true);
+    END_IF;
+    OTHERWISE: RETURN(false);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION md_valid_content_in_geometric_set_for_placeholder(input : geometric_set) : BOOLEAN;
+LOCAL
+  pass       : BOOLEAN                := true;
+  boxes      : BAG OF planar_box      := [];
+  texts      : BAG OF annotation_text := [];
+  placements : BAG OF placement       := [];
+  points     : BAG OF point           := [];
+END_LOCAL;
+  REPEAT i := LOINDEX(input\geometric_set.elements) TO HIINDEX(input\geometric_set.elements);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(input\geometric_set.elements[i])) AND
+       NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE',
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_SURFACE'] *
+                   TYPEOF(input\geometric_set.elements[i])) =
+            1)
+    THEN
+      pass := false;
+    ELSE
+      points := points + input\geometric_set.elements[i];
+    END_IF;
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_BOX' IN TYPEOF(input\geometric_set.elements[i])
+    THEN
+      boxes := boxes + input\geometric_set.elements[i];
+    END_IF;
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANNOTATION_TEXT' IN TYPEOF(input\geometric_set.elements[i])
+    THEN
+      texts := texts + input\geometric_set.elements[i];
+    END_IF;
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(input\geometric_set.elements[i])
+    THEN
+      placements := placements + input\geometric_set.elements[i];
+    END_IF;
+  END_REPEAT;
+  IF SIZEOF(boxes) > 1
+  THEN
+    pass := false;
+  END_IF;
+  IF SIZEOF(texts) > 1
+  THEN
+    pass := false;
+  END_IF;
+  IF SIZEOF(points) < 1
+  THEN
+    pass := false;
+  END_IF;
+  IF SIZEOF(placements) <> 1
+  THEN
+    pass := false;
+  END_IF;
+  RETURN(pass);
+END_FUNCTION;
+
+FUNCTION member_of(val : GENERIC : G;
+                   spc : maths_space) : LOGICAL;
+-- Trivial function introduced to avoid NIST Fedex compiler error
+FUNCTION fedex(val : AGGREGATE OF GENERIC : X;
+               i : INTEGER) : GENERIC : X;
+  RETURN(val[i]);
+END_FUNCTION;
+LOCAL
+  v         : maths_value            := simplify_maths_value(convert_to_maths_value(val));
+  vtypes    : SET OF STRING          := stripped_typeof(v);
+  s         : maths_space            := simplify_maths_space(spc);
+  stypes    : SET OF STRING          := stripped_typeof(s);
+  tmp_int   : INTEGER;
+  tmp_real  : REAL;
+  tmp_cmplx : complex_number_literal;
+  lgcl      : LOGICAL;
+  cum       : LOGICAL;
+  vspc      : maths_space;
+  sspc      : maths_space;
+  smem      : SET OF maths_value;
+  factors   : LIST OF maths_space;
+END_LOCAL;
+  IF NOT EXISTS(s)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF NOT EXISTS(v)
+  THEN
+    RETURN(s = the_generics);
+  END_IF;
+  IF ('GENERIC_EXPRESSION' IN vtypes) AND
+     NOT ('MATHS_SPACE' IN vtypes) AND NOT ('MATHS_FUNCTION' IN vtypes) AND NOT ('COMPLEX_NUMBER_LITERAL' IN vtypes)
+  THEN
+    IF has_values_space(v)
+    THEN
+      vspc := values_space_of(v);
+      IF subspace_of(vspc, s)
+      THEN
+        RETURN(true);
+      END_IF;
+      IF NOT compatible_spaces(vspc, s)
+      THEN
+        RETURN(false);
+      END_IF;
+      RETURN(unknown);
+    END_IF;
+    RETURN(unknown);
+  END_IF;
+  IF 'ELEMENTARY_SPACE' IN stypes
+  THEN
+    CASE s\elementary_space.space_id OF
+      es_numbers : RETURN(('NUMBER' IN vtypes) OR ('COMPLEX_NUMBER_LITERAL' IN vtypes));
+      es_complex_numbers : RETURN('COMPLEX_NUMBER_LITERAL' IN vtypes);
+      es_reals : RETURN(('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes));
+      es_integers : RETURN('INTEGER' IN vtypes);
+      es_logicals : RETURN('LOGICAL' IN vtypes);
+      es_booleans : RETURN('BOOLEAN' IN vtypes);
+      es_strings : RETURN('STRING' IN vtypes);
+      es_binarys : RETURN('BINARY' IN vtypes);
+      es_maths_spaces : RETURN('MATHS_SPACE' IN vtypes);
+      es_maths_functions : RETURN('MATHS_FUNCTION' IN vtypes);
+      es_generics : RETURN(true);
+    END_CASE;
+  END_IF;
+  IF 'FINITE_INTEGER_INTERVAL' IN stypes
+  THEN
+    IF 'INTEGER' IN vtypes
+    THEN
+      tmp_int := v;
+      RETURN({s\finite_integer_interval.min <= tmp_int <= s\finite_integer_interval.max});
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'INTEGER_INTERVAL_FROM_MIN' IN stypes
+  THEN
+    IF 'INTEGER' IN vtypes
+    THEN
+      tmp_int := v;
+      RETURN(s\integer_interval_from_min.min <= tmp_int);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'INTEGER_INTERVAL_TO_MAX' IN stypes
+  THEN
+    IF 'INTEGER' IN vtypes
+    THEN
+      tmp_int := v;
+      RETURN(tmp_int <= s\integer_interval_to_max.max);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FINITE_REAL_INTERVAL' IN stypes
+  THEN
+    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
+    THEN
+      tmp_real := v;
+      IF s\finite_real_interval.min_closure = closed
+      THEN
+        IF s\finite_real_interval.max_closure = closed
+        THEN
+          RETURN({s\finite_real_interval.min <= tmp_real <= s\finite_real_interval.max});
+        ELSE
+          RETURN({s\finite_real_interval.min <= tmp_real < s\finite_real_interval.max});
+        END_IF;
+      ELSE
+        IF s\finite_real_interval.max_closure = closed
+        THEN
+          RETURN({s\finite_real_interval.min < tmp_real <= s\finite_real_interval.max});
+        ELSE
+          RETURN({s\finite_real_interval.min < tmp_real < s\finite_real_interval.max});
+        END_IF;
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'REAL_INTERVAL_FROM_MIN' IN stypes
+  THEN
+    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
+    THEN
+      tmp_real := v;
+      IF s\real_interval_from_min.min_closure = closed
+      THEN
+        RETURN(s\real_interval_from_min.min <= tmp_real);
+      ELSE
+        RETURN(s\real_interval_from_min.min < tmp_real);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'REAL_INTERVAL_TO_MAX' IN stypes
+  THEN
+    IF ('REAL' IN vtypes) AND NOT ('INTEGER' IN vtypes)
+    THEN
+      tmp_real := v;
+      IF s\real_interval_to_max.max_closure = closed
+      THEN
+        RETURN(tmp_real <= s\real_interval_to_max.max);
+      ELSE
+        RETURN(tmp_real < s\real_interval_to_max.max);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN stypes
+  THEN
+    IF 'COMPLEX_NUMBER_LITERAL' IN vtypes
+    THEN
+      RETURN(member_of(v\complex_number_literal.real_part, s\cartesian_complex_number_region.real_constraint) AND
+             member_of(v\complex_number_literal.imag_part, s\cartesian_complex_number_region.imag_constraint));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'POLAR_COMPLEX_NUMBER_REGION' IN stypes
+  THEN
+    IF 'COMPLEX_NUMBER_LITERAL' IN vtypes
+    THEN
+      tmp_cmplx := v;
+      tmp_cmplx.real_part := tmp_cmplx.real_part - s\polar_complex_number_region.centre.real_part;
+      tmp_cmplx.imag_part := tmp_cmplx.imag_part - s\polar_complex_number_region.centre.imag_part;
+      tmp_real := SQRT(tmp_cmplx.real_part ** 2 + tmp_cmplx.imag_part ** 2);
+      IF NOT member_of(tmp_real, s\polar_complex_number_region.distance_constraint)
+      THEN
+        RETURN(false);
+      END_IF;
+      IF tmp_real = 0.0
+      THEN
+        RETURN(true);
+      END_IF;
+      tmp_real := atan2(tmp_cmplx.imag_part, tmp_cmplx.real_part);
+      RETURN(member_of(tmp_real, s\polar_complex_number_region.direction_constraint) OR
+             member_of(tmp_real + 2.0 * PI, s\polar_complex_number_region.direction_constraint));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FINITE_SPACE' IN stypes
+  THEN
+    smem := s\finite_space.members;
+    cum := false;
+    REPEAT i := 1 TO SIZEOF(smem);
+      cum := cum OR equal_maths_values(v, smem[i]);
+      IF cum = true
+      THEN
+        RETURN(true);
+      END_IF;
+    END_REPEAT;
+    RETURN(cum);
+  END_IF;
+  IF 'UNIFORM_PRODUCT_SPACE' IN stypes
+  THEN
+    IF 'LIST' IN vtypes
+    THEN
+      IF SIZEOF(v) = s\uniform_product_space.exponent
+      THEN
+        sspc := s\uniform_product_space.base;
+        cum := true;
+        REPEAT i := 1 TO SIZEOF(v);
+          cum := cum AND member_of(v[i], sspc);
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        RETURN(cum);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN stypes
+  THEN
+    IF 'LIST' IN vtypes
+    THEN
+      factors := s\listed_product_space.factors;
+      IF SIZEOF(v) = SIZEOF(factors)
+      THEN
+        cum := true;
+        REPEAT i := 1 TO SIZEOF(v);
+          cum := cum AND member_of(v[i], factors[i]);
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        RETURN(cum);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN stypes
+  THEN
+    IF 'LIST' IN vtypes
+    THEN
+      sspc := s\extended_tuple_space.base;
+      tmp_int := space_dimension(sspc);
+      IF SIZEOF(v) >= tmp_int
+      THEN
+        cum := true;
+        REPEAT i := 1 TO tmp_int;
+          cum := cum AND member_of(v[i], factor_space(sspc, i));
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        sspc := s\extended_tuple_space.extender;
+        REPEAT i := tmp_int + 1 TO SIZEOF(v);
+          cum := cum AND member_of(v[i], sspc);
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        RETURN(cum);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FUNCTION_SPACE' IN stypes
+  THEN
+    IF 'MATHS_FUNCTION' IN vtypes
+    THEN
+      vspc := v\maths_function.domain;
+      sspc := s\function_space.domain_argument;
+      CASE s\function_space.domain_constraint OF
+        sc_equal : cum := equal_maths_spaces(vspc, sspc);
+        sc_subspace : cum := subspace_of(vspc, sspc);
+        sc_member : cum := member_of(vspc, sspc);
+      END_CASE;
+      IF cum = false
+      THEN
+        RETURN(false);
+      END_IF;
+      vspc := v\maths_function.range;
+      sspc := s\function_space.range_argument;
+      CASE s\function_space.range_constraint OF
+        sc_equal : cum := cum AND equal_maths_spaces(vspc, sspc);
+        sc_subspace : cum := cum AND subspace_of(vspc, sspc);
+        sc_member : cum := cum AND member_of(vspc, sspc);
+      END_CASE;
+      RETURN(cum);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  RETURN(unknown);
+END_FUNCTION;
+
+FUNCTION min_exists(spc : maths_space) : BOOLEAN;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  RETURN(bool(((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR
+              ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types) OR
+              ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types) OR
+              ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)));
+END_FUNCTION;
+
+FUNCTION min_included(spc : maths_space) : BOOLEAN;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types) OR ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
+  THEN
+    RETURN(bool(spc\finite_real_interval.min_closure = closed));
+  END_IF;
+  IF ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)
+  THEN
+    RETURN(bool(spc\real_interval_from_min.min_closure = closed));
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION mixed_loop_type_set(l : SET [0 : ?] OF loop) : LOGICAL;
+LOCAL
+  poly_loop_type : LOGICAL;
+END_LOCAL;
+  IF (SIZEOF(l) <= 1)
+  THEN
+    RETURN(false);
+  END_IF;
+  poly_loop_type := ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLY_LOOP' IN TYPEOF(l[1]));
+  REPEAT i := 2 TO SIZEOF(l);
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLY_LOOP' IN TYPEOF(l[i])) <> poly_loop_type)
+    THEN
+      RETURN(true);
+    END_IF;
+  END_REPEAT;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION msb_shells(brep : manifold_solid_brep) : SET [1 : ?] OF closed_shell;
+LOCAL
+  return_set : SET [1 : ?] OF closed_shell := [brep.outer];
+END_LOCAL;
+  IF SIZEOF(QUERY(msbtype <* TYPEOF(brep) | msbtype LIKE '*BREP_WITH_VOIDS')) >= 1
+  THEN
+    return_set := return_set + brep\brep_with_voids.voids;
+  END_IF;
+  RETURN(return_set);
+END_FUNCTION;
+
+FUNCTION msf_curve_check(cv : representation_item) : BOOLEAN;
+(* This function varifies the validity of a curve in the context of a
+   manifold surface model. Representation_items are
+   valid input, however, they are supposed to be curves; otherwise
+   this function will return false.
+    *)
+(* complex subtypes of curve that are both bounded_curve and
+   oneof conic, curve_replica, line, or offset_curve_3d are not
+   valid
+    *)
+  (* This function varifies the validity of a curve in the context of a
+     manifold surface model. Representation_items are
+     valid input, however, they are supposed to be curves; otherwise
+     this function will return false.
+      *)
+  (* complex subtypes of curve that are both bounded_curve and
+     oneof conic, curve_replica, line, or offset_curve_3d are not
+     valid
+      *)
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
+            TYPEOF(cv)) >
+     1
+  THEN
+    RETURN(false);
+  END_IF;
+  (* b_spline_curves shall not self-intersect
+      *)
+  IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
+      (cv\b_spline_curve.self_intersect = false) OR
+      (cv\b_spline_curve.self_intersect = unknown))
+  THEN
+    RETURN(true);
+  ELSE
+    IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
+              TYPEOF(cv)) =
+       1
+    THEN
+      RETURN(true);
+    ELSE
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
+      THEN
+        RETURN(msf_curve_check(cv\curve_replica.parent_curve));
+      ELSE
+        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
+            ((cv\offset_curve_3d.self_intersect = false) OR (cv\offset_curve_3d.self_intersect = unknown)) AND
+            (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                  TYPEOF(cv\offset_curve_3d.basis_curve))))
+        THEN
+          RETURN(msf_curve_check(cv\offset_curve_3d.basis_curve));
+        ELSE
+          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
+          THEN
+            RETURN((msf_curve_check(cv\pcurve.reference_to_curve\representation.items[1])) AND
+                   (msf_surface_check(cv\pcurve.basis_surface)));
+          ELSE
+            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
+            THEN
+              IF msf_curve_check(cv\surface_curve.curve_3d)
+              THEN
+                REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
+                  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
+                     TYPEOF(cv\surface_curve.associated_geometry[i])
+                  THEN
+                    IF NOT msf_surface_check(cv\surface_curve.associated_geometry[i])
+                    THEN
+                      RETURN(false);
+                    END_IF;
+                  ELSE
+                    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                       TYPEOF(cv\surface_curve.associated_geometry[i])
+                    THEN
+                      IF NOT msf_curve_check(cv\surface_curve.associated_geometry[i])
+                      THEN
+                        RETURN(false);
+                      END_IF;
+                    END_IF;
+                  END_IF;
+                END_REPEAT;
+                RETURN(true);
+              END_IF;
+            ELSE
+              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
+              THEN
+                IF (SIZEOF(cv\polyline.points) >= 3)
+                THEN
+                  RETURN(true);
+                END_IF;
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  (* FALSE is returned if the input parameter cv is not a valid curve.
+      *)
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION msf_surface_check(surf : surface) : BOOLEAN;
+(* This function varifies the validity of a surface in the
+   context of a manifold surface model.
+    *)
+(* elementary_surfaces are valid surface types
+    *)
+  (* This function varifies the validity of a surface in the
+     context of a manifold surface model.
+      *)
+  (* elementary_surfaces are valid surface types
+      *)
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf)
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(surf)
+    THEN
+      RETURN(msf_curve_check(surf\swept_surface.swept_curve));
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(surf)) AND
+          (surf\offset_surface.self_intersect = false) OR
+          (surf\offset_surface.self_intersect = unknown))
+      THEN
+        RETURN(msf_surface_check(surf\offset_surface.basis_surface));
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf)
+        THEN
+          RETURN(msf_surface_check(surf\surface_replica.parent_surface));
+        ELSE
+          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND
+              (surf\b_spline_surface.self_intersect = false) OR
+              (surf\b_spline_surface.self_intersect = unknown))
+          THEN
+            RETURN(true);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION nmsf_curve_check(cv : representation_item) : BOOLEAN;
+(* This function varifies the validity of a curve in the context of a
+   non-manifold surface model. Representation_items are
+   valid input, however, they are supposed to be curves; otherwise
+   this function will return false.
+    *)
+(* complex subtypes of curve that are both bounded_curve and
+   oneof conic, curve_replica, line, or offset_curve_3d are not
+   valid
+    *)
+  (* This function varifies the validity of a curve in the context of a
+     non-manifold surface model. Representation_items are
+     valid input, however, they are supposed to be curves; otherwise
+     this function will return false.
+      *)
+  (* complex subtypes of curve that are both bounded_curve and
+     oneof conic, curve_replica, line, or offset_curve_3d are not
+     valid
+      *)
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOUNDED_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D'] *
+            TYPEOF(cv)) >
+     1
+  THEN
+    RETURN(false);
+  ELSE
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE' IN TYPEOF(cv)) AND
+        (cv\b_spline_curve.self_intersect = false) OR
+        (cv\b_spline_curve.self_intersect = unknown))
+    THEN
+      RETURN(true);
+    ELSE
+      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE'] *
+                TYPEOF(cv)) =
+         1
+      THEN
+        RETURN(true);
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(cv)
+        THEN
+          RETURN(nmsf_curve_check(cv\curve_replica.parent_curve));
+        ELSE
+          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND
+              ((cv\offset_curve_3d.self_intersect = false) OR (cv\offset_curve_3d.self_intersect = unknown)) AND
+              (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN
+                    TYPEOF(cv\offset_curve_3d.basis_curve))))
+          THEN
+            RETURN(nmsf_curve_check(cv\offset_curve_3d.basis_curve));
+          ELSE
+            IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN TYPEOF(cv)
+            THEN
+              RETURN((nmsf_curve_check(cv\pcurve.reference_to_curve\representation.items[1])) AND
+                     (nmsf_surface_check(cv\pcurve.basis_surface)));
+            ELSE
+              IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_CURVE' IN TYPEOF(cv)
+              THEN
+                IF nmsf_curve_check(cv\surface_curve.curve_3d)
+                THEN
+                  REPEAT i := 1 TO SIZEOF(cv\surface_curve.associated_geometry);
+                    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE' IN
+                       TYPEOF(cv\surface_curve.associated_geometry[i])
+                    THEN
+                      IF NOT nmsf_surface_check(cv\surface_curve.associated_geometry[i])
+                      THEN
+                        RETURN(false);
+                      END_IF;
+                    ELSE
+                      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PCURVE' IN
+                         TYPEOF(cv\surface_curve.associated_geometry[i])
+                      THEN
+                        IF NOT nmsf_curve_check(cv\surface_curve.associated_geometry[i])
+                        THEN
+                          RETURN(false);
+                        END_IF;
+                      END_IF;
+                    END_IF;
+                  END_REPEAT;
+                  RETURN(true);
+                END_IF;
+              ELSE
+                IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE' IN TYPEOF(cv)
+                THEN
+                  IF (SIZEOF(cv\polyline.points) >= 3)
+                  THEN
+                    RETURN(true);
+                  END_IF;
+                END_IF;
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  (* FALSE is returned if the input parameter cv is not a valid curve.
+      *)
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION nmsf_surface_check(surf : surface) : BOOLEAN;
+(* This function varifies the validity of a surface in the
+   context of a non-manifold surface model.
+    *)
+(* elementary_surfaces are valid surface types
+    *)
+  (* This function varifies the validity of a surface in the
+     context of a non-manifold surface model.
+      *)
+  (* elementary_surfaces are valid surface types
+      *)
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_SURFACE' IN TYPEOF(surf)
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SWEPT_SURFACE' IN TYPEOF(surf)
+    THEN
+      RETURN(nmsf_curve_check(surf\swept_surface.swept_curve));
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_SURFACE' IN TYPEOF(surf)) AND
+          (surf\offset_surface.self_intersect = false) OR
+          (surf\offset_surface.self_intersect = unknown))
+      THEN
+        RETURN(nmsf_surface_check(surf\offset_surface.basis_surface));
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_REPLICA' IN TYPEOF(surf)
+        THEN
+          RETURN(nmsf_surface_check(surf\surface_replica.parent_surface));
+        ELSE
+          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND
+              (surf\b_spline_surface.self_intersect = false) OR
+              (surf\b_spline_surface.self_intersect = unknown))
+          THEN
+            RETURN(true);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION no_cyclic_domain_reference(ref : maths_space_or_function;
+                                    used : SET OF maths_function) : BOOLEAN;
+LOCAL
+  typenames : SET OF STRING  := TYPEOF(ref);
+  func      : maths_function;
+END_LOCAL;
+  IF (NOT EXISTS(ref)) OR (NOT EXISTS(used))
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (schema_prefix + 'MATHS_SPACE') IN typenames
+  THEN
+    RETURN(true);
+  END_IF;
+  func := ref;
+  IF func IN used
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (schema_prefix + 'CONSTANT_FUNCTION') IN typenames
+  THEN
+    RETURN(no_cyclic_domain_reference(func\constant_function.source_of_domain, used + [func]));
+  END_IF;
+  IF (schema_prefix + 'SELECTOR_FUNCTION') IN typenames
+  THEN
+    RETURN(no_cyclic_domain_reference(func\selector_function.source_of_domain, used + [func]));
+  END_IF;
+  IF (schema_prefix + 'PARALLEL_COMPOSED_FUNCTION') IN typenames
+  THEN
+    RETURN(no_cyclic_domain_reference(func\parallel_composed_function.source_of_domain, used + [func]));
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION no_cyclic_space_reference(spc : maths_space;
+                                   refs : SET OF maths_space) : BOOLEAN;
+LOCAL
+  types     : SET OF STRING;
+  refs_plus : SET OF maths_space;
+END_LOCAL;
+  IF (spc IN refs)
+  THEN
+    RETURN(false);
+  END_IF;
+  types := TYPEOF(spc);
+  refs_plus := refs + spc;
+  IF (schema_prefix + 'FINITE_SPACE') IN types
+  THEN
+    RETURN(bool(SIZEOF(QUERY(sp
+                             <* QUERY(mem <* spc\finite_space.members | (schema_prefix + 'MATHS_SPACE') IN TYPEOF(mem))
+                             | NOT no_cyclic_space_reference(sp, refs_plus))) =
+                0));
+  END_IF;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN types
+  THEN
+    RETURN(no_cyclic_space_reference(spc\uniform_product_space.base, refs_plus));
+  END_IF;
+  IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN types
+  THEN
+    RETURN(bool(SIZEOF(QUERY(fac
+                             <* spc\listed_product_space.factors
+                             | NOT no_cyclic_space_reference(fac, refs_plus))) =
+                0));
+  END_IF;
+  IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
+  THEN
+    RETURN(no_cyclic_space_reference(spc\extended_tuple_space.base, refs_plus) AND
+           no_cyclic_space_reference(spc\extended_tuple_space.extender, refs_plus));
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION nondecreasing(lr : LIST OF REAL) : BOOLEAN;
+  IF NOT EXISTS(lr)
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT j := 2 TO SIZEOF(lr);
+    IF lr[j] < lr[j - 1]
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION normalise(arg : vector_or_direction) : vector_or_direction;
+LOCAL
+  ndim   : INTEGER;
+  v      : direction           := dummy_gri || direction([1.0,0.0,0.0]);
+  result : vector_or_direction;
+  vec    : vector              := dummy_gri || vector(v, 1.0);
+  mag    : REAL;
+END_LOCAL;
+  IF NOT EXISTS(arg)
+  THEN
+    result := ?;
+  ELSE
+    ndim := arg.dim;
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg)
+    THEN
+      BEGIN  
+             v := dummy_gri || direction(arg\vector.orientation.direction_ratios);
+             IF arg\vector.magnitude = 0.0
+             THEN
+               RETURN(?);
+             ELSE
+               vec := dummy_gri || vector(v, 1.0);
+             END_IF;
+      END;
+    ELSE
+      v := dummy_gri || direction(arg.direction_ratios);
+    END_IF;
+    mag := 0.0;
+    REPEAT i := 1 TO ndim;
+      mag := mag + v.direction_ratios[i] * v.direction_ratios[i];
+    END_REPEAT;
+    IF mag > 0.0
+    THEN
+      mag := SQRT(mag);
+      REPEAT i := 1 TO ndim;
+        v.direction_ratios[i] := v.direction_ratios[i] / mag;
+      END_REPEAT;
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg)
+      THEN
+        vec.orientation := v;
+        result := vec;
+      ELSE
+        result := v;
+      END_IF;
+    ELSE
+      RETURN(?);
+    END_IF;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION number_superspace_of(spc : maths_space) : elementary_space;
+  IF subspace_of_es(spc, es_integers)
+  THEN
+    RETURN(the_integers);
+  END_IF;
+  IF subspace_of_es(spc, es_reals)
+  THEN
+    RETURN(the_reals);
+  END_IF;
+  IF subspace_of_es(spc, es_complex_numbers)
+  THEN
+    RETURN(the_complex_numbers);
+  END_IF;
+  IF subspace_of_es(spc, es_numbers)
+  THEN
+    RETURN(the_numbers);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION number_tuple_subspace_check(spc : maths_space) : LOGICAL;
+LOCAL
+  types   : SET OF STRING       := stripped_typeof(spc);
+  factors : LIST OF maths_space;
+  cum     : LOGICAL             := true;
+END_LOCAL;
+  IF 'UNIFORM_PRODUCT_SPACE' IN types
+  THEN
+    RETURN(subspace_of_es(spc\uniform_product_space.base, es_numbers));
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN types
+  THEN
+    factors := spc\listed_product_space.factors;
+    REPEAT i := 1 TO SIZEOF(factors);
+      cum := cum AND subspace_of_es(factors[i], es_numbers);
+    END_REPEAT;
+    RETURN(cum);
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN types
+  THEN
+    cum := subspace_of_es(spc\extended_tuple_space.extender, es_numbers);
+    cum := cum AND number_tuple_subspace_check(spc\extended_tuple_space.base);
+    RETURN(cum);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION one_tuples_of(spc : maths_space) : tuple_space;
+  RETURN(make_uniform_product_space(spc, 1));
+END_FUNCTION;
+
+FUNCTION open_path_based_inner_boundary(input : SET OF primitive_2d) : BOOLEAN;
+LOCAL
+  pass : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(input);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_AREA_WITH_PARAMETERS' IN TYPEOF(input[i])) AND
+       (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE' IN
+         TYPEOF(input[i]\mapped_item.mapping_source\representation_map.mapping_origin)) OR
+        (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN
+          TYPEOF(input[i]\mapped_item.mapping_source\representation_map.mapping_origin)) AND
+         (input[i]\mapped_item.mapping_source\representation_map.mapping_origin\composite_curve.closed_curve = true)))
+    THEN
+      pass := false;
+    END_IF;
+  END_REPEAT;
+  RETURN(pass);
+END_FUNCTION;
+
+FUNCTION open_shell_reversed(a_shell : open_shell) : oriented_open_shell;
+LOCAL
+  the_reverse : oriented_open_shell;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_OPEN_SHELL' IN TYPEOF(a_shell))
+  THEN
+    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || open_shell() ||
+                   oriented_open_shell(a_shell\oriented_open_shell.open_shell_element,
+                                       (NOT (a_shell\oriented_open_shell.orientation)));
+  ELSE
+    the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || open_shell() ||
+                   oriented_open_shell(a_shell, false);
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION orthogonal_complement(vec : direction) : direction;
+LOCAL
+  result : direction;
+END_LOCAL;
+  IF (vec.dim <> 2) OR NOT EXISTS(vec)
+  THEN
+    RETURN(?);
+  ELSE
+    result := dummy_gri || direction([-vec.direction_ratios[2],vec.direction_ratios[1]]);
+    RETURN(result);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION parallel_composed_function_composability_check(funcs : LIST OF maths_function;
+                                                        final : maths_function_select) : BOOLEAN;
+LOCAL
+  tplsp  : tuple_space    := the_zero_tuple_space;
+  finfun : maths_function := convert_to_maths_function(final);
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(funcs);
+    tplsp := assoc_product_space(tplsp, funcs[i].range);
+  END_REPEAT;
+  RETURN(compatible_spaces(tplsp, finfun.domain));
+END_FUNCTION;
+
+FUNCTION parallel_composed_function_domain_check(comdom : tuple_space;
+                                                 funcs : LIST OF maths_function) : BOOLEAN;
+  REPEAT i := 1 TO SIZEOF(funcs);
+    IF NOT (compatible_spaces(comdom, funcs[i].domain))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION parse_express_identifier(s : STRING;
+                                  i : positive_integer) : positive_integer;
+LOCAL
+  k : positive_integer;
+END_LOCAL;
+  k := i;
+  IF i <= LENGTH(s)
+  THEN
+    IF (s[i] LIKE '@')
+    THEN
+      REPEAT UNTIL (k > LENGTH(s)) OR ((s[k] <> '_') AND NOT (s[k] LIKE '@') AND NOT (s[k] LIKE '#'));
+        k := k + 1;
+      END_REPEAT;
+    END_IF;
+  END_IF;
+  RETURN(k);
+END_FUNCTION;
+
+FUNCTION partial_derivative_check(domain : tuple_space;
+                                  d_vars : LIST [1 : ?] OF input_selector) : BOOLEAN;
+LOCAL
+  domn : tuple_space := domain;
+  fspc : maths_space;
+  dim  : INTEGER;
+  k    : INTEGER;
+END_LOCAL;
+  IF (space_dimension(domain) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(domain)))
+  THEN
+    domn := factor1(domain);
+  END_IF;
+  dim := space_dimension(domn);
+  REPEAT i := 1 TO SIZEOF(d_vars);
+    k := d_vars[i];
+    IF k > dim
+    THEN
+      RETURN(false);
+    END_IF;
+    fspc := factor_space(domn, k);
+    IF (NOT subspace_of_es(fspc, es_reals)) AND (NOT subspace_of_es(fspc, es_complex_numbers))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION path_head_to_tail(a_path : path) : LOGICAL;
+LOCAL
+  n : INTEGER;
+  p : LOGICAL := true;
+END_LOCAL;
+  n := SIZEOF(a_path.edge_list);
+  REPEAT i := 2 TO n;
+    p := p AND (a_path.edge_list[i - 1].edge_end :=: a_path.edge_list[i].edge_start);
+  END_REPEAT;
+  RETURN(p);
+END_FUNCTION;
+
+FUNCTION path_reversed(a_path : path) : oriented_path;
+LOCAL
+  the_reverse : oriented_path;
+END_LOCAL;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ORIENTED_PATH' IN TYPEOF(a_path))
+  THEN
+    the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) ||
+                   oriented_path(a_path\oriented_path.path_element, NOT (a_path\oriented_path.orientation));
+  ELSE
+    the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) || oriented_path(a_path, false);
+  END_IF;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION plane_angle_for_pair_in_radian(pair : kinematic_pair;
+                                        angle : plane_angle_measure) : plane_angle_measure;
+LOCAL
+  converted_angle : plane_angle_measure           := angle;
+  link_rep        : kinematic_link_representation := representation_of_link(pair.joint.edge_start);
+  link_cntxt      : representation_context;
+  pa_units        : SET OF unit                   := [];
+  pau             : unit;
+END_LOCAL;
+  link_cntxt := link_rep\representation.context_of_items;
+  IF NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(link_cntxt))
+  THEN
+    RETURN(?);
+  END_IF;
+  pa_units := QUERY(unit
+                    <* link_cntxt\global_unit_assigned_context.units
+                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_UNIT' IN TYPEOF(unit));
+  IF SIZEOF(pa_units) <> 1
+  THEN
+    RETURN(?);
+  END_IF;
+  pau := pa_units[1];
+  IF (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SI_UNIT' IN TYPEOF(pau)) AND
+          NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau)))
+  THEN
+    RETURN(?);
+  END_IF;
+  REPEAT WHILE ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau));
+    converted_angle := converted_angle * pau\conversion_based_unit.conversion_factor.value_component;
+    pau := pau\conversion_based_unit.conversion_factor.unit_component;
+    IF ((NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SI_UNIT' IN TYPEOF(pau)) AND
+             NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONVERSION_BASED_UNIT' IN TYPEOF(pau))) OR
+        (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_UNIT' IN TYPEOF(pau))))
+    THEN
+      RETURN(?);
+    END_IF;
+  END_REPEAT;
+  IF (pau\si_unit.name <> si_unit_name.radian)
+  THEN
+    RETURN(?);
+  END_IF;
+  CASE pau\si_unit.prefix OF
+    si_prefix.exa : RETURN(1.E18 * converted_angle);
+    si_prefix.peta : RETURN(1.E15 * converted_angle);
+    si_prefix.tera : RETURN(1.E12 * converted_angle);
+    si_prefix.giga : RETURN(1.E9 * converted_angle);
+    si_prefix.mega : RETURN(1.E6 * converted_angle);
+    si_prefix.kilo : RETURN(1.E3 * converted_angle);
+    si_prefix.hecto : RETURN(1.E2 * converted_angle);
+    si_prefix.deca : RETURN(1.E1 * converted_angle);
+    si_prefix.deci : RETURN(1.E-1 * converted_angle);
+    si_prefix.centi : RETURN(1.E-2 * converted_angle);
+    si_prefix.milli : RETURN(1.E-3 * converted_angle);
+    si_prefix.micro : RETURN(1.E-6 * converted_angle);
+    si_prefix.nano : RETURN(1.E-9 * converted_angle);
+    si_prefix.pico : RETURN(1.E-12 * converted_angle);
+    si_prefix.femto : RETURN(1.E-15 * converted_angle);
+    si_prefix.atto : RETURN(1.E-18 * converted_angle);
+    OTHERWISE: RETURN(converted_angle);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION real_max(spc : maths_space) : REAL;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types)
+  THEN
+    RETURN(spc\finite_integer_interval.max);
+  END_IF;
+  IF ((schema_prefix + 'INTEGER_INTERVAL_TO_MAX') IN types)
+  THEN
+    RETURN(spc\integer_interval_to_max.max);
+  END_IF;
+  IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
+  THEN
+    RETURN(spc\finite_real_interval.max);
+  END_IF;
+  IF ((schema_prefix + 'REAL_INTERVAL_TO_MAX') IN types)
+  THEN
+    RETURN(spc\real_interval_to_max.max);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION real_min(spc : maths_space) : REAL;
+LOCAL
+  types : SET OF STRING := TYPEOF(spc);
+END_LOCAL;
+  IF ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN types)
+  THEN
+    RETURN(spc\finite_integer_interval.min);
+  END_IF;
+  IF ((schema_prefix + 'INTEGER_INTERVAL_FROM_MIN') IN types)
+  THEN
+    RETURN(spc\integer_interval_from_min.min);
+  END_IF;
+  IF ((schema_prefix + 'FINITE_REAL_INTERVAL') IN types)
+  THEN
+    RETURN(spc\finite_real_interval.min);
+  END_IF;
+  IF ((schema_prefix + 'REAL_INTERVAL_FROM_MIN') IN types)
+  THEN
+    RETURN(spc\real_interval_from_min.min);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION regular_indexing(sub : LIST OF INTEGER;
+                          base : zero_or_one;
+                          shape : LIST [1 : ?] OF positive_integer;
+                          inc : LIST [1 : ?] OF INTEGER;
+                          first : INTEGER) : INTEGER;
+LOCAL
+  k     : INTEGER;
+  index : INTEGER;
+END_LOCAL;
+  IF NOT EXISTS(sub) OR NOT EXISTS(base) OR NOT EXISTS(shape) OR NOT EXISTS(inc) OR NOT EXISTS(first)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF (SIZEOF(sub) <> SIZEOF(inc)) OR (SIZEOF(sub) <> SIZEOF(shape))
+  THEN
+    RETURN(?);
+  END_IF;
+  index := first;
+  REPEAT j := 1 TO SIZEOF(sub);
+    IF NOT EXISTS(sub[j]) OR NOT EXISTS(inc[j])
+    THEN
+      RETURN(?);
+    END_IF;
+    k := sub[j] - base;
+    IF NOT ({0 <= k < shape[j]})
+    THEN
+      RETURN(?);
+    END_IF;
+    index := index + k * inc[j];
+  END_REPEAT;
+  RETURN(index);
+END_FUNCTION;
+
+FUNCTION relating_shape_representations_of_extreme_values(item : location_of_extreme_value_select) : SET OF shape_representation;
+LOCAL
+  results : SET OF shape_representation                                       := [];
+  exti    : SET OF extreme_instance                                           := [];
+  ii_ei   : SET OF instance_report_item_with_extreme_instances                := [];
+  sdiir   : SET OF shape_data_quality_inspection_instance_report              := [];
+  sdqr    : SET OF shape_data_quality_inspection_result_representation        := [];
+  sdisr   : SET OF shape_data_quality_inspected_shape_and_result_relationship := [];
+END_LOCAL;
+  exti := exti +
+          bag_to_set(USEDIN(item,
+                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTREME_INSTANCE.LOCATIONS_OF_EXTREME_VALUE'));
+  REPEAT i := 1 TO HIINDEX(exti);
+    ii_ei := ii_ei +
+             bag_to_set(USEDIN(exti[i],
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES.EXTREME_INSTANCES'));
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(ii_ei);
+    sdiir := sdiir +
+             bag_to_set(USEDIN(ii_ei[i],
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT.INSPECTED_INSTANCES'));
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(sdiir);
+    sdqr := sdqr +
+            QUERY(i1
+                  <* bag_to_set(USEDIN(sdiir[i].inspection_result,
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS'))
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT_REPRESENTATION' IN
+                    TYPEOF(i1));
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(sdqr);
+    sdisr := sdisr +
+             bag_to_set(USEDIN(sdqr[i],
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTED_SHAPE_AND_RESULT_RELATIONSHIP.REP_2'));
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(sdisr);
+    results := results + sdisr[i].rep_1;
+  END_REPEAT;
+  RETURN(results);
+END_FUNCTION;
+
+FUNCTION remove_first(alist : LIST OF GENERIC : GEN) : LIST OF GENERIC : GEN;
+LOCAL
+  blist : LIST OF GENERIC : GEN := alist;
+END_LOCAL;
+  IF SIZEOF(blist) > 0
+  THEN
+    REMOVE(blist, 1);
+  END_IF;
+  RETURN(blist);
+END_FUNCTION;
+
+FUNCTION repackage(tspace : tuple_space;
+                   repckg : repackage_options) : tuple_space;
+  CASE repckg OF
+    ro_nochange : RETURN(tspace);
+    ro_wrap_as_tuple : RETURN(one_tuples_of(tspace));
+    ro_unwrap_tuple : RETURN(factor1(tspace));
+    OTHERWISE: RETURN(?);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION representation_of_link(link : kinematic_link) : kinematic_link_representation;
+(*
+   LOCAL
+   link_rep_rel : BAG OF kinematic_link_representation_relation;
+   END_LOCAL;
+
+   link_rep_rel := USEDIN (link, 'KINEMATIC_STRUCTURE_SCHEMA.'+
+   'KINEMATIC_LINK_REPRESENTATION_RELATION.'+
+   'TOPOLOGICAL_ASPECTS');
+   IF (SIZEOF (link_rep_rel) = 0) THEN
+   RETURN (?);
+   ELSE
+   RETURN (link_rep_rel[1].geometric_aspects);
+   END_IF;
+    *)
+  (*
+     LOCAL
+     link_rep_rel : BAG OF kinematic_link_representation_relation;
+     END_LOCAL;
+
+     link_rep_rel := USEDIN (link, 'KINEMATIC_STRUCTURE_SCHEMA.'+
+     'KINEMATIC_LINK_REPRESENTATION_RELATION.'+
+     'TOPOLOGICAL_ASPECTS');
+     IF (SIZEOF (link_rep_rel) = 0) THEN
+     RETURN (?);
+     ELSE
+     RETURN (link_rep_rel[1].geometric_aspects);
+     END_IF;
+      *)
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION same_side(plane_pts : LIST [3 : 3] OF cartesian_point;
+                   test_points : LIST [2 : ?] OF cartesian_point) : BOOLEAN;
+LOCAL
+  val1 : REAL;
+  val2 : REAL;
+  n    : INTEGER;
+END_LOCAL;
+  IF (plane_pts[1].dim = 2) OR (test_points[1].dim = 2)
+  THEN
+    RETURN(?);
+  END_IF;
+  n := SIZEOF(test_points);
+  val1 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[1]);
+  REPEAT i := 2 TO n;
+    val2 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[i]);
+    IF (val1 * val2 <= 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION scalar_times_vector(scalar : REAL;
+                             vec : vector_or_direction) : vector;
+LOCAL
+  v      : direction;
+  mag    : REAL;
+  result : vector;
+END_LOCAL;
+  IF NOT EXISTS(scalar) OR NOT EXISTS(vec)
+  THEN
+    RETURN(?);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(vec)
+    THEN
+      v := dummy_gri || direction(vec\vector.orientation.direction_ratios);
+      mag := scalar * vec\vector.magnitude;
+    ELSE
+      v := dummy_gri || direction(vec.direction_ratios);
+      mag := scalar;
+    END_IF;
+    IF (mag < 0.0)
+    THEN
+      REPEAT i := 1 TO SIZEOF(v.direction_ratios);
+        v.direction_ratios[i] := -v.direction_ratios[i];
+      END_REPEAT;
+      mag := -mag;
+    END_IF;
+    result := dummy_gri || vector(normalise(v), mag);
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION second_proj_axis(z_axis : direction;
+                          x_axis : direction;
+                          arg : direction) : direction;
+LOCAL
+  y_axis : vector;
+  v      : direction;
+  temp   : vector;
+END_LOCAL;
+  IF NOT EXISTS(arg)
+  THEN
+    v := dummy_gri || direction([0.0,1.0,0.0]);
+  ELSE
+    v := arg;
+  END_IF;
+  temp := scalar_times_vector(dot_product(v, z_axis), z_axis);
+  y_axis := vector_difference(v, temp);
+  temp := scalar_times_vector(dot_product(v, x_axis), x_axis);
+  y_axis := vector_difference(y_axis, temp);
+  y_axis := normalise(y_axis);
+  RETURN(y_axis.orientation);
+END_FUNCTION;
+
+FUNCTION set_of_topology_reversed(a_set : set_of_reversible_topology_item) : set_of_reversible_topology_item;
+LOCAL
+  the_reverse : set_of_reversible_topology_item;
+END_LOCAL;
+  the_reverse := [];
+  REPEAT i := 1 TO SIZEOF(a_set);
+    the_reverse := the_reverse + topology_reversed(a_set[i]);
+  END_REPEAT;
+  RETURN(the_reverse);
+END_FUNCTION;
+
+FUNCTION shape_of_array(func : maths_function) : LIST OF positive_integer;
+LOCAL
+  tspace : tuple_space;
+  temp   : maths_space;
+  result : LIST OF positive_integer := [];
+END_LOCAL;
+  IF (schema_prefix + 'EXPLICIT_TABLE_FUNCTION') IN TYPEOF(func)
+  THEN
+    RETURN(func\explicit_table_function.shape);
+  END_IF;
+  tspace := func.domain;
+  IF (space_dimension(tspace) = 1) AND ((schema_prefix + 'TUPLE_SPACE') IN TYPEOF(factor1(tspace)))
+  THEN
+    tspace := factor1(tspace);
+  END_IF;
+  REPEAT i := 1 TO space_dimension(tspace);
+    temp := factor_space(tspace, i);
+    IF NOT ((schema_prefix + 'FINITE_INTEGER_INTERVAL') IN TYPEOF(temp))
+    THEN
+      RETURN(?);
+    END_IF;
+    INSERT(result, temp\finite_integer_interval.size, i - 1);
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION shell_reversed(a_shell : shell) : shell;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OPEN_SHELL' IN TYPEOF(a_shell))
+  THEN
+    RETURN(open_shell_reversed(a_shell));
+  ELSE
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLOSED_SHELL' IN TYPEOF(a_shell))
+    THEN
+      RETURN(closed_shell_reversed(a_shell));
+    ELSE
+      RETURN(?);
+    END_IF;
+  END_IF;
+END_FUNCTION;
+
+FUNCTION simplify_function_application(expr : function_application) : maths_value;
+FUNCTION ctmv(x : GENERIC : G) : maths_value;
+  RETURN(convert_to_maths_value(x));
+END_FUNCTION;
+PROCEDURE parts(c : complex_number_literal; VAR x : REAL; VAR y : REAL);
+  x := c.real_part;
+  y := c.imag_part;
+END_PROCEDURE;
+FUNCTION makec(x : REAL;
+               y : REAL) : complex_number_literal;
+  RETURN(make_complex_number_literal(x, y));
+END_FUNCTION;
+FUNCTION good_t(v : maths_value;
+                tn : STRING) : BOOLEAN;
+LOCAL
+  tpl : LIST OF maths_value;
+END_LOCAL;
+  IF 'LIST' IN TYPEOF(v)
+  THEN
+    tpl := v;
+    REPEAT i := 1 TO SIZEOF(tpl);
+      IF NOT (tn IN TYPEOF(tpl[i]))
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+CONSTANT
+  cnlit : STRING := schema_prefix + 'COMPLEX_NUMBER_LITERAL';
+END_CONSTANT;
+LOCAL
+  types         : SET OF STRING                              := stripped_typeof(expr.func);
+  ef_val        : elementary_function_enumerators;
+  is_elementary : BOOLEAN                                    := false;
+  v             : maths_value;
+  v1            : maths_value;
+  v2            : maths_value;
+  v3            : maths_value;
+  vlist         : LIST OF maths_value                        := [];
+  gexpr         : generic_expression;
+  pairs         : SET [1 : ?] OF LIST [2 : 2] OF maths_value;
+  boo           : BOOLEAN;
+  lgc           : LOGICAL;
+  cum           : LOGICAL;
+  j             : INTEGER;
+  k             : INTEGER;
+  n             : INTEGER;
+  p             : REAL;
+  q             : REAL;
+  r             : REAL;
+  s             : REAL;
+  t             : REAL;
+  u             : REAL;
+  str           : STRING;
+  st2           : STRING;
+  bin           : BINARY;
+  bi2           : BINARY;
+  tpl           : LIST OF maths_value;
+  tp2           : LIST OF maths_value;
+  mem           : SET OF maths_value                         := [];
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(expr.arguments);
+    v := simplify_maths_value(expr.arguments[i]);
+    INSERT(vlist, v, i - 1);
+  END_REPEAT;
+  IF SIZEOF(vlist) >= 1
+  THEN
+    v1 := vlist[1];
+  END_IF;
+  IF SIZEOF(vlist) >= 2
+  THEN
+    v2 := vlist[2];
+  END_IF;
+  IF SIZEOF(vlist) >= 3
+  THEN
+    v3 := vlist[3];
+  END_IF;
+  IF 'ELEMENTARY_FUNCTION_ENUMERATORS' IN types
+  THEN
+    ef_val := expr.func;
+    is_elementary := true;
+  END_IF;
+  IF 'ELEMENTARY_FUNCTION' IN types
+  THEN
+    ef_val := expr.func\elementary_function.func_id;
+    is_elementary := true;
+  END_IF;
+  IF is_elementary
+  THEN
+    CASE ef_val OF
+      ef_and : BEGIN  
+                      cum := true;
+                      REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                        IF 'LOGICAL' IN TYPEOF(vlist[i])
+                        THEN
+                          lgc := vlist[i];
+                          cum := cum AND lgc;
+                          IF lgc = false
+                          THEN
+                            RETURN(ctmv(false));
+                          END_IF;
+                          REMOVE(vlist, i);
+                        END_IF;
+                      END_REPEAT;
+                      IF SIZEOF(vlist) = 0
+                      THEN
+                        RETURN(ctmv(cum));
+                      END_IF;
+                      IF cum <> true
+                      THEN
+                        INSERT(vlist, ctmv(cum), 0);
+                      END_IF;
+                      IF SIZEOF(vlist) = 1
+                      THEN
+                        RETURN(vlist[1]);
+                      END_IF;
+      END;
+      ef_or : BEGIN  
+                     cum := false;
+                     REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                       IF 'LOGICAL' IN TYPEOF(vlist[i])
+                       THEN
+                         lgc := vlist[i];
+                         cum := cum OR lgc;
+                         IF lgc = true
+                         THEN
+                           RETURN(ctmv(true));
+                         END_IF;
+                         REMOVE(vlist, i);
+                       END_IF;
+                     END_REPEAT;
+                     IF SIZEOF(vlist) = 0
+                     THEN
+                       RETURN(ctmv(cum));
+                     END_IF;
+                     IF cum <> false
+                     THEN
+                       INSERT(vlist, ctmv(cum), 0);
+                     END_IF;
+                     IF SIZEOF(vlist) = 1
+                     THEN
+                       RETURN(vlist[1]);
+                     END_IF;
+      END;
+      ef_not : IF 'LOGICAL' IN TYPEOF(v1)
+      THEN
+        lgc := v1;
+        RETURN(ctmv(NOT lgc));
+      END_IF;
+      ef_xor : BEGIN  
+                      IF 'LOGICAL' IN TYPEOF(v1)
+                      THEN
+                        lgc := v1;
+                        IF 'LOGICAL' IN TYPEOF(v2)
+                        THEN
+                          cum := v2;
+                          RETURN(ctmv(lgc XOR cum));
+                        ELSE
+                          IF lgc = false
+                          THEN
+                            RETURN(ctmv(v2));
+                          ELSE
+                            IF lgc = unknown
+                            THEN
+                              RETURN(ctmv(unknown));
+                            ELSE
+                              RETURN(make_function_application(ef_not, [v2]));
+                            END_IF;
+                          END_IF;
+                        END_IF;
+                      ELSE
+                        IF 'LOGICAL' IN TYPEOF(v2)
+                        THEN
+                          lgc := v2;
+                          IF lgc = false
+                          THEN
+                            RETURN(ctmv(v1));
+                          ELSE
+                            IF lgc = unknown
+                            THEN
+                              RETURN(ctmv(unknown));
+                            ELSE
+                              RETURN(make_function_application(ef_not, [v1]));
+                            END_IF;
+                          END_IF;
+                        END_IF;
+                      END_IF;
+      END;
+      ef_negate_i : IF 'INTEGER' IN TYPEOF(v1)
+      THEN
+        j := v1;
+        RETURN(ctmv(-j));
+      END_IF;
+      ef_add_i : BEGIN  
+                        j := 0;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'INTEGER' IN TYPEOF(vlist[i])
+                          THEN
+                            k := vlist[i];
+                            j := j + k;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(j));
+                        END_IF;
+                        IF j <> 0
+                        THEN
+                          INSERT(vlist, ctmv(j), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_subtract_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j - k));
+      END_IF;
+      ef_multiply_i : BEGIN  
+                             j := 1;
+                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                               IF 'INTEGER' IN TYPEOF(vlist[i])
+                               THEN
+                                 k := vlist[i];
+                                 j := j * k;
+                                 REMOVE(vlist, i);
+                               END_IF;
+                             END_REPEAT;
+                             IF SIZEOF(vlist) = 0
+                             THEN
+                               RETURN(ctmv(j));
+                             END_IF;
+                             IF j <> 1
+                             THEN
+                               INSERT(vlist, ctmv(j), 0);
+                             END_IF;
+                             IF SIZEOF(vlist) = 1
+                             THEN
+                               RETURN(vlist[1]);
+                             END_IF;
+      END;
+      ef_divide_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j DIV k));
+      END_IF;
+      ef_mod_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j MOD k));
+      END_IF;
+      ef_exponentiate_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        n := 1;
+        REPEAT i := 1 TO ABS(k);
+          n := n * j;
+        END_REPEAT;
+        IF k < 0
+        THEN
+          n := 1 DIV n;
+        END_IF;
+        RETURN(ctmv(n));
+      END_IF;
+      ef_eq_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j = k));
+      END_IF;
+      ef_ne_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j <> k));
+      END_IF;
+      ef_gt_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j > k));
+      END_IF;
+      ef_lt_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j < k));
+      END_IF;
+      ef_ge_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j >= k));
+      END_IF;
+      ef_le_i : IF ('INTEGER' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        j := v1;
+        k := v2;
+        RETURN(ctmv(j <= k));
+      END_IF;
+      ef_abs_i : IF 'INTEGER' IN TYPEOF(v1)
+      THEN
+        j := v1;
+        RETURN(ctmv(ABS(j)));
+      END_IF;
+      ef_max_i : BEGIN  
+                        boo := false;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'INTEGER' IN TYPEOF(vlist[i])
+                          THEN
+                            IF boo
+                            THEN
+                              k := vlist[i];
+                              IF k > j
+                              THEN
+                                j := k;
+                              END_IF;
+                            ELSE
+                              j := vlist[i];
+                              boo := true;
+                            END_IF;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(j));
+                        END_IF;
+                        IF boo
+                        THEN
+                          INSERT(vlist, ctmv(j), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_min_i : BEGIN  
+                        boo := false;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'INTEGER' IN TYPEOF(vlist[i])
+                          THEN
+                            IF boo
+                            THEN
+                              k := vlist[i];
+                              IF k < j
+                              THEN
+                                j := k;
+                              END_IF;
+                            ELSE
+                              j := vlist[i];
+                              boo := true;
+                            END_IF;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(j));
+                        END_IF;
+                        IF boo
+                        THEN
+                          INSERT(vlist, ctmv(j), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_negate_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(-r));
+      END_IF;
+      ef_reciprocal_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(1.0 / r));
+      END_IF;
+      ef_add_r : BEGIN  
+                        r := 0.0;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'REAL' IN TYPEOF(vlist[i])
+                          THEN
+                            s := vlist[i];
+                            r := r + s;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(r));
+                        END_IF;
+                        IF r <> 0.0
+                        THEN
+                          INSERT(vlist, ctmv(r), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_subtract_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r - s));
+      END_IF;
+      ef_multiply_r : BEGIN  
+                             r := 1.0;
+                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                               IF 'REAL' IN TYPEOF(vlist[i])
+                               THEN
+                                 s := vlist[i];
+                                 r := r * s;
+                                 REMOVE(vlist, i);
+                               END_IF;
+                             END_REPEAT;
+                             IF SIZEOF(vlist) = 0
+                             THEN
+                               RETURN(ctmv(r));
+                             END_IF;
+                             IF r <> 1.0
+                             THEN
+                               INSERT(vlist, ctmv(r), 0);
+                             END_IF;
+                             IF SIZEOF(vlist) = 1
+                             THEN
+                               RETURN(vlist[1]);
+                             END_IF;
+      END;
+      ef_divide_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r / s));
+      END_IF;
+      ef_mod_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        t := r / s;
+        j := t DIV 1;
+        IF (t < 0.0) AND (j <> t)
+        THEN
+          j := j - 1;
+        END_IF;
+        RETURN(ctmv(r - j * s));
+      END_IF;
+      ef_exponentiate_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r ** s));
+      END_IF;
+      ef_exponentiate_ri : IF ('REAL' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        k := v2;
+        t := 1.0;
+        REPEAT i := 1 TO ABS(k);
+          t := t * r;
+        END_REPEAT;
+        IF k < 0
+        THEN
+          t := 1.0 / t;
+        END_IF;
+        RETURN(ctmv(t));
+      END_IF;
+      ef_eq_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r = s));
+      END_IF;
+      ef_ne_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r <> s));
+      END_IF;
+      ef_gt_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r > s));
+      END_IF;
+      ef_lt_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r < s));
+      END_IF;
+      ef_ge_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r >= s));
+      END_IF;
+      ef_le_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(r <= s));
+      END_IF;
+      ef_abs_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(ABS(r)));
+      END_IF;
+      ef_max_r : BEGIN  
+                        boo := false;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'REAL' IN TYPEOF(vlist[i])
+                          THEN
+                            IF boo
+                            THEN
+                              s := vlist[i];
+                              IF s > r
+                              THEN
+                                r := s;
+                              END_IF;
+                            ELSE
+                              r := vlist[i];
+                              boo := true;
+                            END_IF;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(r));
+                        END_IF;
+                        IF boo
+                        THEN
+                          INSERT(vlist, ctmv(r), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_min_r : BEGIN  
+                        boo := false;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF 'REAL' IN TYPEOF(vlist[i])
+                          THEN
+                            IF boo
+                            THEN
+                              s := vlist[i];
+                              IF s < r
+                              THEN
+                                r := s;
+                              END_IF;
+                            ELSE
+                              r := vlist[i];
+                              boo := true;
+                            END_IF;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(ctmv(r));
+                        END_IF;
+                        IF boo
+                        THEN
+                          INSERT(vlist, ctmv(r), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_acos_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(ACOS(r)));
+      END_IF;
+      ef_asin_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(ASIN(r)));
+      END_IF;
+      ef_atan2_r : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(ctmv(atan2(r, s)));
+      END_IF;
+      ef_cos_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(COS(r)));
+      END_IF;
+      ef_exp_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(EXP(r)));
+      END_IF;
+      ef_ln_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(LOG(r)));
+      END_IF;
+      ef_log2_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(LOG2(r)));
+      END_IF;
+      ef_log10_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(LOG10(r)));
+      END_IF;
+      ef_sin_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(SIN(r)));
+      END_IF;
+      ef_sqrt_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(SQRT(r)));
+      END_IF;
+      ef_tan_r : IF 'REAL' IN TYPEOF(v1)
+      THEN
+        r := v1;
+        RETURN(ctmv(TAN(r)));
+      END_IF;
+      ef_form_c : IF ('REAL' IN TYPEOF(v1)) AND ('REAL' IN TYPEOF(v2))
+      THEN
+        r := v1;
+        s := v2;
+        RETURN(makec(r, s));
+      END_IF;
+      ef_rpart_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        RETURN(ctmv(v1\complex_number_literal.real_part));
+      END_IF;
+      ef_ipart_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        RETURN(ctmv(v1\complex_number_literal.imag_part));
+      END_IF;
+      ef_negate_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(makec(-p, -q));
+      END_IF;
+      ef_reciprocal_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        t := p * p + q * q;
+        RETURN(makec(p / t, -q / t));
+      END_IF;
+      ef_add_c : BEGIN  
+                        p := 0.0;
+                        q := 0.0;
+                        REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                          IF cnlit IN TYPEOF(vlist[i])
+                          THEN
+                            parts(vlist[i], r, s);
+                            p := p + r;
+                            q := q + s;
+                            REMOVE(vlist, i);
+                          END_IF;
+                        END_REPEAT;
+                        IF SIZEOF(vlist) = 0
+                        THEN
+                          RETURN(makec(p, q));
+                        END_IF;
+                        IF p * p + q * q <> 0.0
+                        THEN
+                          INSERT(vlist, makec(p, q), 0);
+                        END_IF;
+                        IF SIZEOF(vlist) = 1
+                        THEN
+                          RETURN(vlist[1]);
+                        END_IF;
+      END;
+      ef_subtract_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        parts(v2, r, s);
+        RETURN(makec(p - r, q - s));
+      END_IF;
+      ef_multiply_c : BEGIN  
+                             p := 1.0;
+                             q := 0.0;
+                             REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                               IF cnlit IN TYPEOF(vlist[i])
+                               THEN
+                                 parts(vlist[i], r, s);
+                                 p := p * r - q * s;
+                                 q := p * s + q * r;
+                                 REMOVE(vlist, i);
+                               END_IF;
+                             END_REPEAT;
+                             IF SIZEOF(vlist) = 0
+                             THEN
+                               RETURN(makec(p, q));
+                             END_IF;
+                             IF (p <> 1.0) OR (q <> 0.0)
+                             THEN
+                               INSERT(vlist, makec(p, q), 0);
+                             END_IF;
+                             IF SIZEOF(vlist) = 1
+                             THEN
+                               RETURN(vlist[1]);
+                             END_IF;
+      END;
+      ef_divide_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        parts(v2, r, s);
+        t := r * r + s * s;
+        RETURN(makec((p * r + q * s) / t, (q * r - p * s) / t));
+      END_IF;
+      ef_exponentiate_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        parts(v2, r, s);
+        t := 0.5 * LOG(p * p + q * q);
+        u := atan2(q, p);
+        p := r * t - s * u;
+        q := r * u + s * t;
+        r := EXP(p);
+        RETURN(makec(r * COS(q), r * SIN(q)));
+      END_IF;
+      ef_exponentiate_ci : IF (cnlit IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        k := v2;
+        r := 1.0;
+        s := 0.0;
+        REPEAT i := 1 TO ABS(k);
+          r := p * r - q * s;
+          s := p * s + q * r;
+        END_REPEAT;
+        IF k < 0
+        THEN
+          t := r * r + s * s;
+          r := r / t;
+          s := -s / t;
+        END_IF;
+        RETURN(makec(r, s));
+      END_IF;
+      ef_eq_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        parts(v2, r, s);
+        RETURN(ctmv((p = r) AND (q = s)));
+      END_IF;
+      ef_ne_c : IF (cnlit IN TYPEOF(v1)) AND (cnlit IN TYPEOF(v2))
+      THEN
+        parts(v1, p, q);
+        parts(v2, r, s);
+        RETURN(ctmv((p <> r) OR (q <> s)));
+      END_IF;
+      ef_conjugate_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(makec(p, -q));
+      END_IF;
+      ef_abs_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(ctmv(SQRT(p * p + q * q)));
+      END_IF;
+      ef_arg_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(ctmv(atan2(q, p)));
+      END_IF;
+      ef_cos_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        t := 0.5 * EXP(-q);
+        u := 0.5 * EXP(q);
+        RETURN(makec((t + u) * COS(p), (t - u) * SIN(p)));
+      END_IF;
+      ef_exp_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(makec(EXP(p) * COS(q), EXP(p) * SIN(q)));
+      END_IF;
+      ef_ln_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        RETURN(makec(0.5 * LOG(p * p + q * q), atan2(q, p)));
+      END_IF;
+      ef_sin_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        t := 0.5 * EXP(-q);
+        u := 0.5 * EXP(q);
+        RETURN(makec((t + u) * SIN(p), (u - t) * COS(p)));
+      END_IF;
+      ef_sqrt_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        t := SQRT(SQRT(p * p + q * q));
+        u := 0.5 * atan2(q, p);
+        RETURN(makec(t * COS(u), t * SIN(u)));
+      END_IF;
+      ef_tan_c : IF cnlit IN TYPEOF(v1)
+      THEN
+        parts(v1, p, q);
+        t := EXP(2.0 * q) + EXP(-2.0 * q) + 2.0 * COS(2.0 * p);
+        RETURN(makec(2.0 * SIN(2.0 * p) / t, (EXP(-2.0 * q) - EXP(2.0 * q)) / t));
+      END_IF;
+      ef_subscript_s : IF ('STRING' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        k := v2;
+        RETURN(ctmv(str[k]));
+      END_IF;
+      ef_eq_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str = st2));
+      END_IF;
+      ef_ne_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str <> st2));
+      END_IF;
+      ef_gt_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str > st2));
+      END_IF;
+      ef_lt_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str < st2));
+      END_IF;
+      ef_ge_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str >= st2));
+      END_IF;
+      ef_le_s : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        str := v1;
+        st2 := v2;
+        RETURN(ctmv(str <= st2));
+      END_IF;
+      ef_subsequence_s : IF ('STRING' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2)) AND ('INTEGER' IN TYPEOF(v3))
+      THEN
+        str := v1;
+        j := v2;
+        k := v3;
+        RETURN(ctmv(str[j:k]));
+      END_IF;
+      ef_concat_s : BEGIN  
+                           str := '';
+                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                             IF 'STRING' IN TYPEOF(vlist[i])
+                             THEN
+                               st2 := vlist[i];
+                               str := str + st2;
+                               REMOVE(vlist, i);
+                             ELSE
+                               IF str <> ''
+                               THEN
+                                 INSERT(vlist, ctmv(str), i);
+                                 str := '';
+                               END_IF;
+                             END_IF;
+                           END_REPEAT;
+                           IF SIZEOF(vlist) = 0
+                           THEN
+                             RETURN(ctmv(str));
+                           END_IF;
+                           IF str <> ''
+                           THEN
+                             INSERT(vlist, ctmv(str), 0);
+                           END_IF;
+                           IF SIZEOF(vlist) = 1
+                           THEN
+                             RETURN(vlist[1]);
+                           END_IF;
+      END;
+      ef_size_s : IF 'STRING' IN TYPEOF(v1)
+      THEN
+        str := v1;
+        RETURN(ctmv(LENGTH(str)));
+      END_IF;
+      ef_format : IF ('NUMBER' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        RETURN(ctmv(FORMAT(v1, v2)));
+      END_IF;
+      ef_value : IF 'STRING' IN TYPEOF(v1)
+      THEN
+        str := v1;
+        RETURN(ctmv(VALUE(str)));
+      END_IF;
+      ef_like : IF ('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+      THEN
+        RETURN(ctmv(v1 LIKE v2));
+      END_IF;
+      ef_subscript_b : IF ('BINARY' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        k := v2;
+        RETURN(ctmv(bin[k]));
+      END_IF;
+      ef_eq_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin = bi2));
+      END_IF;
+      ef_ne_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin <> bi2));
+      END_IF;
+      ef_gt_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin > bi2));
+      END_IF;
+      ef_lt_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin < bi2));
+      END_IF;
+      ef_ge_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin >= bi2));
+      END_IF;
+      ef_le_b : IF ('BINARY' IN TYPEOF(v1)) AND ('BINARY' IN TYPEOF(v2))
+      THEN
+        bin := v1;
+        bi2 := v2;
+        RETURN(ctmv(bin <= bi2));
+      END_IF;
+      ef_subsequence_b : IF ('BINARY' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2)) AND ('INTEGER' IN TYPEOF(v3))
+      THEN
+        bin := v1;
+        j := v2;
+        k := v3;
+        RETURN(ctmv(bin[j:k]));
+      END_IF;
+      ef_concat_b : BEGIN  
+                           boo := false;
+                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                             IF 'BINARY' IN TYPEOF(vlist[i])
+                             THEN
+                               IF boo
+                               THEN
+                                 bi2 := vlist[i];
+                                 bin := bin + bi2;
+                               ELSE
+                                 bin := vlist[i];
+                                 boo := true;
+                               END_IF;
+                               REMOVE(vlist, i);
+                             ELSE
+                               IF boo
+                               THEN
+                                 INSERT(vlist, ctmv(bin), i);
+                                 boo := false;
+                               END_IF;
+                             END_IF;
+                           END_REPEAT;
+                           IF SIZEOF(vlist) = 0
+                           THEN
+                             RETURN(ctmv(bin));
+                           END_IF;
+                           IF boo
+                           THEN
+                             INSERT(vlist, ctmv(bin), 0);
+                           END_IF;
+                           IF SIZEOF(vlist) = 1
+                           THEN
+                             RETURN(vlist[1]);
+                           END_IF;
+      END;
+      ef_size_b : IF 'BINARY' IN TYPEOF(v1)
+      THEN
+        bin := v1;
+        RETURN(ctmv(BLENGTH(bin)));
+      END_IF;
+      ef_subscript_t : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        tpl := v1;
+        k := v2;
+        RETURN(ctmv(tpl[k]));
+      END_IF;
+      ef_eq_t : IF ('LIST' IN TYPEOF(v1)) AND ('LIST' IN TYPEOF(v2))
+      THEN
+        lgc := equal_maths_values(v1, v2);
+        IF lgc <> unknown
+        THEN
+          RETURN(ctmv(lgc));
+        END_IF;
+      END_IF;
+      ef_ne_t : IF ('LIST' IN TYPEOF(v1)) AND ('LIST' IN TYPEOF(v2))
+      THEN
+        lgc := equal_maths_values(v1, v2);
+        IF lgc <> unknown
+        THEN
+          RETURN(ctmv(NOT lgc));
+        END_IF;
+      END_IF;
+      ef_concat_t : BEGIN  
+                           tpl := [];
+                           REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                             IF 'STRING' IN TYPEOF(vlist[i])
+                             THEN
+                               tp2 := vlist[i];
+                               tpl := tpl + tp2;
+                               REMOVE(vlist, i);
+                             ELSE
+                               IF SIZEOF(tpl) <> 0
+                               THEN
+                                 INSERT(vlist, ctmv(tpl), i);
+                                 tpl := [];
+                               END_IF;
+                             END_IF;
+                           END_REPEAT;
+                           IF SIZEOF(vlist) = 0
+                           THEN
+                             RETURN(ctmv(tpl));
+                           END_IF;
+                           IF SIZEOF(tpl) <> 0
+                           THEN
+                             INSERT(vlist, ctmv(tpl), 0);
+                           END_IF;
+                           IF SIZEOF(vlist) = 1
+                           THEN
+                             RETURN(vlist[1]);
+                           END_IF;
+      END;
+      ef_size_t : IF 'LIST' IN TYPEOF(v1)
+      THEN
+        tpl := v1;
+        RETURN(ctmv(SIZEOF(tpl)));
+      END_IF;
+      ef_entuple : RETURN(ctmv(vlist));
+      ef_detuple : IF 'LIST' IN TYPEOF(v1)
+      THEN
+        tpl := v1;
+        RETURN(ctmv(tpl[1]));
+      END_IF;
+      ef_insert : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v3))
+      THEN
+        tpl := v1;
+        k := v3;
+        INSERT(tpl, v2, k);
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_remove : IF ('LIST' IN TYPEOF(v1)) AND ('INTEGER' IN TYPEOF(v2))
+      THEN
+        tpl := v1;
+        k := v2;
+        REMOVE(tpl, k);
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_sum_it : IF good_t(v1, 'INTEGER')
+      THEN
+        tpl := v1;
+        j := 0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          j := j + tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(j));
+      END_IF;
+      ef_product_it : IF good_t(v1, 'INTEGER')
+      THEN
+        tpl := v1;
+        j := 1;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          j := j * tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(j));
+      END_IF;
+      ef_add_it : BEGIN  
+                         boo := false;
+                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                           IF good_t(vlist[i], 'INTEGER')
+                           THEN
+                             IF NOT boo
+                             THEN
+                               tpl := vlist[i];
+                               boo := true;
+                             ELSE
+                               tp2 := vlist[i];
+                               IF SIZEOF(tpl) <> SIZEOF(tp2)
+                               THEN
+                                 RETURN(?);
+                               END_IF;
+                               REPEAT l := 1 TO SIZEOF(tpl);
+                                 tpl[j] := tpl[j] + tp2[j];
+                               END_REPEAT;
+                             END_IF;
+                             REMOVE(vlist, i);
+                           END_IF;
+                         END_REPEAT;
+                         IF SIZEOF(vlist) = 0
+                         THEN
+                           RETURN(ctmv(tpl));
+                         END_IF;
+                         IF boo
+                         THEN
+                           INSERT(vlist, ctmv(tpl), 0);
+                         END_IF;
+                         IF SIZEOF(vlist) = 1
+                         THEN
+                           RETURN(vlist[1]);
+                         END_IF;
+      END;
+      ef_subtract_it : IF good_t(v1, 'INTEGER') AND good_t(v2, 'INTEGER')
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          tpl[i] := tpl[i] - tp2[i];
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_scalar_mult_it : IF ('INTEGER' IN TYPEOF(v1)) AND good_t(v2, 'INTEGER')
+      THEN
+        j := v1;
+        tpl := v2;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          tpl[i] := j * tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_dot_prod_it : IF good_t(v1, 'INTEGER') AND good_t(v2, 'INTEGER')
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        j := 0;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          j := j + tpl[i] * tp2[i];
+        END_REPEAT;
+        RETURN(ctmv(j));
+      END_IF;
+      ef_sum_rt : IF good_t(v1, 'REAL')
+      THEN
+        tpl := v1;
+        r := 0.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          r := r + tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(r));
+      END_IF;
+      ef_product_rt : IF good_t(v1, 'REAL')
+      THEN
+        tpl := v1;
+        r := 1.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          r := r * tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(r));
+      END_IF;
+      ef_add_rt : BEGIN  
+                         boo := false;
+                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                           IF good_t(vlist[i], 'REAL')
+                           THEN
+                             IF NOT boo
+                             THEN
+                               tpl := vlist[i];
+                               boo := true;
+                             ELSE
+                               tp2 := vlist[i];
+                               IF SIZEOF(tpl) <> SIZEOF(tp2)
+                               THEN
+                                 RETURN(?);
+                               END_IF;
+                               REPEAT l := 1 TO SIZEOF(tpl);
+                                 tpl[j] := tpl[j] + tp2[j];
+                               END_REPEAT;
+                             END_IF;
+                             REMOVE(vlist, i);
+                           END_IF;
+                         END_REPEAT;
+                         IF SIZEOF(vlist) = 0
+                         THEN
+                           RETURN(ctmv(tpl));
+                         END_IF;
+                         IF boo
+                         THEN
+                           INSERT(vlist, ctmv(tpl), 0);
+                         END_IF;
+                         IF SIZEOF(vlist) = 1
+                         THEN
+                           RETURN(vlist[1]);
+                         END_IF;
+      END;
+      ef_subtract_rt : IF good_t(v1, 'REAL') AND good_t(v2, 'REAL')
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          tpl[i] := tpl[i] - tp2[i];
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_scalar_mult_rt : IF ('REAL' IN TYPEOF(v1)) AND good_t(v2, 'REAL')
+      THEN
+        r := v1;
+        tpl := v2;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          tpl[i] := r * tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_dot_prod_rt : IF good_t(v1, 'REAL') AND good_t(v2, 'REAL')
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        r := 0;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          r := r + tpl[i] * tp2[i];
+        END_REPEAT;
+        RETURN(ctmv(r));
+      END_IF;
+      ef_norm_rt : IF good_t(v1, 'REAL')
+      THEN
+        tpl := v1;
+        r := 0.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          r := r + tpl[i] * tpl[i];
+        END_REPEAT;
+        RETURN(ctmv(SQRT(r)));
+      END_IF;
+      ef_sum_ct : IF good_t(v1, cnlit)
+      THEN
+        tpl := v1;
+        p := 0.0;
+        q := 0.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], r, s);
+          p := p + r;
+          q := q + s;
+        END_REPEAT;
+        RETURN(makec(p, q));
+      END_IF;
+      ef_product_ct : IF good_t(v1, cnlit)
+      THEN
+        tpl := v1;
+        p := 1.0;
+        q := 0.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], r, s);
+          p := p * r - q * s;
+          q := p * s + q * r;
+        END_REPEAT;
+        RETURN(makec(p, q));
+      END_IF;
+      ef_add_ct : BEGIN  
+                         boo := false;
+                         REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+                           IF good_t(vlist[i], cnlit)
+                           THEN
+                             IF NOT boo
+                             THEN
+                               tpl := vlist[i];
+                               boo := true;
+                             ELSE
+                               tp2 := vlist[i];
+                               IF SIZEOF(tpl) <> SIZEOF(tp2)
+                               THEN
+                                 RETURN(?);
+                               END_IF;
+                               REPEAT l := 1 TO SIZEOF(tpl);
+                                 parts(tpl[j], p, q);
+                                 parts(tp2[j], r, s);
+                                 tpl[j] := makec(p + r, q + s);
+                               END_REPEAT;
+                             END_IF;
+                             REMOVE(vlist, i);
+                           END_IF;
+                         END_REPEAT;
+                         IF SIZEOF(vlist) = 0
+                         THEN
+                           RETURN(ctmv(tpl));
+                         END_IF;
+                         IF boo
+                         THEN
+                           INSERT(vlist, ctmv(tpl), 0);
+                         END_IF;
+                         IF SIZEOF(vlist) = 1
+                         THEN
+                           RETURN(vlist[1]);
+                         END_IF;
+      END;
+      ef_subtract_ct : IF good_t(v1, cnlit) AND good_t(v2, cnlit)
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], p, q);
+          parts(tp2[i], r, s);
+          tpl[i] := makec(p - r, q - s);
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_scalar_mult_ct : IF (cnlit IN TYPEOF(v1)) AND good_t(v2, cnlit)
+      THEN
+        parts(v1, p, q);
+        tpl := v2;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], r, s);
+          tpl[i] := makec(p * r - q * s, p * s + q * r);
+        END_REPEAT;
+        RETURN(ctmv(tpl));
+      END_IF;
+      ef_dot_prod_ct : IF good_t(v1, cnlit) AND good_t(v2, cnlit)
+      THEN
+        tpl := v1;
+        tp2 := v2;
+        t := 0.0;
+        u := 0.0;
+        IF SIZEOF(tpl) <> SIZEOF(tp2)
+        THEN
+          RETURN(?);
+        END_IF;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], p, q);
+          parts(tp2[i], r, s);
+          t := t + p * r + q * s;
+          u := u + q * r - p * s;
+        END_REPEAT;
+        RETURN(makec(t, u));
+      END_IF;
+      ef_norm_ct : IF good_t(v1, cnlit)
+      THEN
+        tpl := v1;
+        r := 0.0;
+        REPEAT i := 1 TO SIZEOF(tpl);
+          parts(tpl[i], p, q);
+          r := r + p * p + q * q;
+        END_REPEAT;
+        RETURN(ctmv(SQRT(r)));
+      END_IF;
+      ef_if, ef_if_i, ef_if_r, ef_if_c, ef_if_s, ef_if_b, ef_if_t : IF 'LOGICAL' IN TYPEOF(v1)
+      THEN
+        lgc := v1;
+        IF lgc
+        THEN
+          RETURN(v2);
+        ELSE
+          RETURN(v3);
+        END_IF;
+      END_IF;
+      ef_ensemble : RETURN(make_finite_space(mem + vlist));
+      ef_member_of : IF (schema_prefix + 'MATHS_SPACE') IN TYPEOF(v2)
+      THEN
+        lgc := member_of(v1, v2);
+        IF lgc <> unknown
+        THEN
+          RETURN(ctmv(lgc));
+        END_IF;
+      END_IF;
+    END_CASE;
+    RETURN(make_function_application(expr.func, vlist));
+  END_IF;
+  IF 'ABSTRACTED_EXPRESSION_FUNCTION' IN types
+  THEN
+    gexpr := substitute(expr.func\abstracted_expression_function.expr, expr.func\quantifier_expression.variables,
+                        vlist);
+    RETURN(simplify_generic_expression(gexpr));
+  END_IF;
+  IF 'FINITE_FUNCTION' IN types
+  THEN
+    pairs := expr.func\finite_function.pairs;
+    REPEAT i := 1 TO SIZEOF(pairs);
+      IF equal_maths_values(vlist[1], pairs[i][1])
+      THEN
+        RETURN(simplify_maths_value(pairs[i][2]));
+      END_IF;
+    END_REPEAT;
+    RETURN(make_function_application(expr.func, vlist));
+  END_IF;
+  RETURN(expr);
+END_FUNCTION;
+
+FUNCTION simplify_generic_expression(expr : generic_expression) : maths_value;
+FUNCTION restore_unary(expr : unary_generic_expression;
+                       opnd : generic_expression) : generic_expression;
+  expr.operand := opnd;
+  RETURN(expr);
+END_FUNCTION;
+FUNCTION restore_binary(expr : binary_generic_expression;
+                        opd1 : generic_expression;
+                        opd2 : generic_expression) : generic_expression;
+  expr.operands[1] := opd1;
+  expr.operands[2] := opd2;
+  RETURN(expr);
+END_FUNCTION;
+FUNCTION restore_mulary(expr : multiple_arity_generic_expression;
+                        ops : LIST OF generic_expression) : generic_expression;
+  expr.operands := ops;
+  RETURN(expr);
+END_FUNCTION;
+FUNCTION make_number_literal(nmb : NUMBER) : generic_literal;
+  IF 'INTEGER' IN TYPEOF(nmb)
+  THEN
+    RETURN(make_int_literal(nmb));
+  END_IF;
+  RETURN(make_real_literal(nmb));
+END_FUNCTION;
+LOCAL
+  types  : SET OF STRING                      := stripped_typeof(expr);
+  v1     : maths_value;
+  v2     : maths_value;
+  vlist  : LIST OF maths_value                := [];
+  op1    : generic_expression;
+  op2    : generic_expression;
+  oplist : LIST OF generic_expression         := [];
+  opnds  : LIST [2 : ?] OF generic_expression;
+  n      : INTEGER;
+  m      : INTEGER;
+  finfun : maths_function_select;
+  boo    : BOOLEAN;
+  str    : STRING;
+  nmb    : NUMBER;
+END_LOCAL;
+  IF 'INT_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\int_literal.the_value));
+  END_IF;
+  IF 'REAL_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\real_literal.the_value));
+  END_IF;
+  IF 'BOOLEAN_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\boolean_literal.the_value));
+  END_IF;
+  IF 'STRING_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\string_literal.the_value));
+  END_IF;
+  IF 'COMPLEX_NUMBER_LITERAL' IN types
+  THEN
+    RETURN(expr);
+  END_IF;
+  IF 'LOGICAL_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\logical_literal.lit_value));
+  END_IF;
+  IF 'BINARY_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\binary_literal.lit_value));
+  END_IF;
+  IF 'MATHS_ENUM_LITERAL' IN types
+  THEN
+    RETURN(expr\maths_enum_literal.lit_value);
+  END_IF;
+  IF 'REAL_TUPLE_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\real_tuple_literal.lit_value));
+  END_IF;
+  IF 'INTEGER_TUPLE_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\integer_tuple_literal.lit_value));
+  END_IF;
+  IF 'ATOM_BASED_LITERAL' IN types
+  THEN
+    RETURN(expr\atom_based_literal.lit_value);
+  END_IF;
+  IF 'MATHS_TUPLE_LITERAL' IN types
+  THEN
+    RETURN(convert_to_maths_value(expr\maths_tuple_literal.lit_value));
+  END_IF;
+  IF 'MATHS_SPACE' IN types
+  THEN
+    RETURN(simplify_maths_space(expr));
+  END_IF;
+  IF 'FUNCTION_APPLICATION' IN types
+  THEN
+    RETURN(simplify_function_application(expr));
+  END_IF;
+  IF 'UNARY_GENERIC_EXPRESSION' IN types
+  THEN
+    v1 := simplify_generic_expression(expr\unary_generic_expression.operand);
+    op1 := convert_to_operand(v1);
+  END_IF;
+  IF 'BINARY_GENERIC_EXPRESSION' IN types
+  THEN
+    v1 := simplify_generic_expression(expr\binary_generic_expression.operands[1]);
+    op1 := convert_to_operand(v1);
+    v2 := simplify_generic_expression(expr\binary_generic_expression.operands[2]);
+    op2 := convert_to_operand(v2);
+  END_IF;
+  IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
+  THEN
+    opnds := expr\multiple_arity_generic_expression.operands;
+    REPEAT i := 1 TO SIZEOF(opnds);
+      v1 := simplify_generic_expression(opnds[i]);
+      INSERT(vlist, v1, i - 1);
+      INSERT(oplist, convert_to_operand(v1), i - 1);
+    END_REPEAT;
+  END_IF;
+  IF 'PARALLEL_COMPOSED_FUNCTION' IN types
+  THEN
+    v1 := vlist[1];
+    n := SIZEOF(vlist);
+    finfun := vlist[n];
+    REMOVE(vlist, n);
+    REMOVE(vlist, 1);
+    RETURN(make_parallel_composed_function(v1, vlist, finfun));
+  END_IF;
+  IF ('ABS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(ABS(v1)));
+  END_IF;
+  IF ('ACOS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(ACOS(v1)));
+  END_IF;
+  IF 'AND_EXPRESSION' IN types
+  THEN
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'BOOLEAN' IN TYPEOF(vlist[i])
+      THEN
+        boo := vlist[i];
+        IF NOT boo
+        THEN
+          RETURN(convert_to_maths_value(false));
+        END_IF;
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(true));
+    END_IF;
+    IF SIZEOF(oplist) = 1
+    THEN
+      RETURN(oplist[1]);
+    END_IF;
+  END_IF;
+  IF ('ASIN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(ASIN(v1)));
+  END_IF;
+  IF ('ATAN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(ATAN(v1, v2)));
+  END_IF;
+  IF ('COMPARISON_EXPRESSION' IN types) AND
+     ((('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))) OR
+      (('STRING' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))) OR
+      (('BOOLEAN' IN TYPEOF(v1)) AND ('BOOLEAN' IN TYPEOF(v2))))
+  THEN
+    IF 'COMPARISON_EQUAL' IN types
+    THEN
+      boo := bool(v1 = v2);
+    ELSE
+      IF 'COMPARISON_GREATER' IN types
+      THEN
+        boo := bool(v1 > v2);
+      ELSE
+        IF 'COMPARISON_GREATER_EQUAL' IN types
+        THEN
+          boo := bool(v1 >= v2);
+        ELSE
+          IF 'COMPARISON_LESS' IN types
+          THEN
+            boo := bool(v1 < v2);
+          ELSE
+            IF 'COMPARISON_LESS_EQUAL' IN types
+            THEN
+              boo := bool(v1 <= v2);
+            ELSE
+              IF 'COMPARISON_NOT_EQUAL' IN types
+              THEN
+                boo := bool(v1 <> v2);
+              ELSE
+                IF 'LIKE_EXPRESSION' IN types
+                THEN
+                  boo := bool(v1 LIKE v2);
+                ELSE
+                  RETURN(?);
+                END_IF;
+              END_IF;
+            END_IF;
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+    RETURN(convert_to_maths_value(boo));
+  END_IF;
+  IF 'CONCAT_EXPRESSION' IN types
+  THEN
+    str := '';
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'STRING' IN TYPEOF(vlist[i])
+      THEN
+        str := vlist[i] + str;
+        REMOVE(oplist, i);
+      ELSE
+        IF LENGTH(str) > 0
+        THEN
+          INSERT(oplist, make_string_literal(str), i);
+          str := '';
+        END_IF;
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(str));
+    END_IF;
+    IF LENGTH(str) > 0
+    THEN
+      INSERT(oplist, make_string_literal(str), 0);
+    END_IF;
+    IF SIZEOF(oplist) = 1
+    THEN
+      RETURN(oplist[1]);
+    END_IF;
+  END_IF;
+  IF ('COS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(COS(v1)));
+  END_IF;
+  IF ('DIV_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 DIV v2));
+  END_IF;
+  IF 'EQUALS_EXPRESSION' IN types
+  THEN
+    opnds := expr\binary_generic_expression.operands;
+    RETURN(convert_to_maths_value(opnds[1] :=: opnds[2]));
+  END_IF;
+  IF ('EXP_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(EXP(v1)));
+  END_IF;
+  IF ('FORMAT_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('STRING' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(FORMAT(v1, v2)));
+  END_IF;
+  IF ('INDEX_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    str := v1;
+    n := v2;
+    RETURN(convert_to_maths_value(str[n]));
+  END_IF;
+  IF ('INT_VALUE_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(VALUE(v1)));
+  END_IF;
+  IF 'INTERVAL_EXPRESSION' IN types
+  THEN
+    str := '';
+    IF 'NUMBER' IN TYPEOF(vlist[1])
+    THEN
+      str := 'NUMBER';
+    END_IF;
+    IF 'STRING' IN TYPEOF(vlist[1])
+    THEN
+      str := 'STRING';
+    END_IF;
+    IF 'BOOLEAN' IN TYPEOF(vlist[1])
+    THEN
+      str := 'BOOLEAN';
+    END_IF;
+    IF (LENGTH(str) > 0) AND (str IN TYPEOF(vlist[2])) AND (str IN TYPEOF(vlist[3]))
+    THEN
+      RETURN(convert_to_maths_value({vlist[1] <= vlist[2] <= vlist[3]}));
+    END_IF;
+  END_IF;
+  IF ('LENGTH_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(LENGTH(v1)));
+  END_IF;
+  IF ('LOG_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(LOG(v1)));
+  END_IF;
+  IF ('LOG10_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(LOG10(v1)));
+  END_IF;
+  IF ('LOG2_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(LOG2(v1)));
+  END_IF;
+  IF 'MAXIMUM_EXPRESSION' IN types
+  THEN
+    boo := false;
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'NUMBER' IN TYPEOF(vlist[i])
+      THEN
+        IF boo
+        THEN
+          IF nmb < vlist[i]
+          THEN
+            nmb := vlist[i];
+          END_IF;
+        ELSE
+          nmb := vlist[i];
+          boo := true;
+        END_IF;
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(nmb));
+    END_IF;
+    IF boo
+    THEN
+      INSERT(oplist, make_number_literal(nmb), 0);
+    END_IF;
+  END_IF;
+  IF 'MINIMUM_EXPRESSION' IN types
+  THEN
+    boo := false;
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'NUMBER' IN TYPEOF(vlist[i])
+      THEN
+        IF boo
+        THEN
+          IF nmb > vlist[i]
+          THEN
+            nmb := vlist[i];
+          END_IF;
+        ELSE
+          nmb := vlist[i];
+          boo := true;
+        END_IF;
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(nmb));
+    END_IF;
+    IF boo
+    THEN
+      INSERT(oplist, make_number_literal(nmb), 0);
+    END_IF;
+  END_IF;
+  IF ('MINUS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 - v2));
+  END_IF;
+  IF ('MOD_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 MOD v2));
+  END_IF;
+  IF 'MULT_EXPRESSION' IN types
+  THEN
+    nmb := 1;
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'NUMBER' IN TYPEOF(vlist[i])
+      THEN
+        nmb := nmb * vlist[i];
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(nmb));
+    END_IF;
+    IF nmb <> 1
+    THEN
+      INSERT(oplist, make_number_literal(nmb), 0);
+    END_IF;
+    IF SIZEOF(oplist) = 1
+    THEN
+      RETURN(oplist[1]);
+    END_IF;
+  END_IF;
+  IF ('NOT_EXPRESSION' IN types) AND ('BOOLEAN' IN TYPEOF(v1))
+  THEN
+    boo := v1;
+    RETURN(convert_to_maths_value(NOT (boo)));
+  END_IF;
+  IF ('ODD_EXPRESSION' IN types) AND ('INTEGER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(ODD(v1)));
+  END_IF;
+  IF 'OR_EXPRESSION' IN types
+  THEN
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'BOOLEAN' IN TYPEOF(vlist[i])
+      THEN
+        boo := vlist[i];
+        IF boo
+        THEN
+          RETURN(convert_to_maths_value(true));
+        END_IF;
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(false));
+    END_IF;
+    IF SIZEOF(oplist) = 1
+    THEN
+      RETURN(oplist[1]);
+    END_IF;
+  END_IF;
+  IF 'PLUS_EXPRESSION' IN types
+  THEN
+    nmb := 0;
+    REPEAT i := SIZEOF(vlist) TO 1 BY -1;
+      IF 'NUMBER' IN TYPEOF(vlist[i])
+      THEN
+        nmb := nmb + vlist[i];
+        REMOVE(oplist, i);
+      END_IF;
+    END_REPEAT;
+    IF SIZEOF(oplist) = 0
+    THEN
+      RETURN(convert_to_maths_value(nmb));
+    END_IF;
+    IF nmb <> 0
+    THEN
+      INSERT(oplist, make_number_literal(nmb), 0);
+    END_IF;
+    IF SIZEOF(oplist) = 1
+    THEN
+      RETURN(oplist[1]);
+    END_IF;
+  END_IF;
+  IF ('POWER_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 ** v2));
+  END_IF;
+  IF ('SIN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(SIN(v1)));
+  END_IF;
+  IF ('SLASH_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1)) AND ('NUMBER' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 / v2));
+  END_IF;
+  IF ('SQUARE_ROOT_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(SQRT(v1)));
+  END_IF;
+  IF ('SUBSTRING_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(vlist[1])) AND ('NUMBER' IN TYPEOF(vlist[2])) AND
+     ('NUMBER' IN TYPEOF(vlist[3]))
+  THEN
+    str := vlist[1];
+    n := vlist[2];
+    m := vlist[3];
+    RETURN(convert_to_maths_value(str[n:m]));
+  END_IF;
+  IF ('TAN_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(TAN(v1)));
+  END_IF;
+  IF ('UNARY_MINUS_EXPRESSION' IN types) AND ('NUMBER' IN TYPEOF(v1))
+  THEN
+    nmb := v1;
+    RETURN(convert_to_maths_value(-nmb));
+  END_IF;
+  IF ('VALUE_EXPRESSION' IN types) AND ('STRING' IN TYPEOF(v1))
+  THEN
+    RETURN(convert_to_maths_value(VALUE(v1)));
+  END_IF;
+  IF ('XOR_EXPRESSION' IN types) AND ('BOOLEAN' IN TYPEOF(v1)) AND ('BOOLEAN' IN TYPEOF(v2))
+  THEN
+    RETURN(convert_to_maths_value(v1 XOR v2));
+  END_IF;
+  IF 'UNARY_GENERIC_EXPRESSION' IN types
+  THEN
+    RETURN(restore_unary(expr, op1));
+  END_IF;
+  IF 'BINARY_GENERIC_EXPRESSION' IN types
+  THEN
+    RETURN(restore_binary(expr, op1, op2));
+  END_IF;
+  IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
+  THEN
+    RETURN(restore_mulary(expr, oplist));
+  END_IF;
+  RETURN(expr);
+END_FUNCTION;
+
+FUNCTION simplify_maths_space(spc : maths_space) : maths_space;
+LOCAL
+  stypes   : SET OF STRING       := stripped_typeof(spc);
+  sset     : SET OF maths_value;
+  zset     : SET OF maths_value  := [];
+  zval     : maths_value;
+  zspc     : maths_space;
+  zallint  : BOOLEAN             := true;
+  zint     : INTEGER;
+  zmin     : INTEGER;
+  zmax     : INTEGER;
+  factors  : LIST OF maths_space;
+  zfactors : LIST OF maths_space := [];
+  rspc     : maths_space;
+END_LOCAL;
+  IF 'FINITE_SPACE' IN stypes
+  THEN
+    sset := spc\finite_space.members;
+    REPEAT i := 1 TO SIZEOF(sset);
+      zval := simplify_maths_value(sset[i]);
+      zset := zset + [zval];
+      IF zallint AND ('INTEGER' IN TYPEOF(zval))
+      THEN
+        zint := zval;
+        IF i = 1
+        THEN
+          zmin := zint;
+          zmax := zint;
+        ELSE
+          IF zint < zmin
+          THEN
+            zmin := zint;
+          END_IF;
+          IF zint > zmax
+          THEN
+            zmax := zint;
+          END_IF;
+        END_IF;
+      ELSE
+        zallint := false;
+      END_IF;
+    END_REPEAT;
+    IF zallint AND (SIZEOF(zset) = zmax - zmin + 1)
+    THEN
+      RETURN(make_finite_integer_interval(zmin, zmax));
+    END_IF;
+    RETURN(make_finite_space(zset));
+  END_IF;
+  IF 'UNIFORM_PRODUCT_SPACE' IN stypes
+  THEN
+    zspc := simplify_maths_space(spc\uniform_product_space.base);
+    RETURN(make_uniform_product_space(zspc, spc\uniform_product_space.exponent));
+  END_IF;
+  IF 'LISTED_PRODUCT_SPACE' IN stypes
+  THEN
+    factors := spc\listed_product_space.factors;
+    REPEAT i := 1 TO SIZEOF(factors);
+      INSERT(zfactors, simplify_maths_space(factors[i]), i - 1);
+    END_REPEAT;
+    RETURN(make_listed_product_space(zfactors));
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN stypes
+  THEN
+    zspc := simplify_maths_space(spc\extended_tuple_space.base);
+    rspc := simplify_maths_space(spc\extended_tuple_space.extender);
+    RETURN(make_extended_tuple_space(zspc, rspc));
+  END_IF;
+  IF 'FUNCTION_SPACE' IN stypes
+  THEN
+    zspc := simplify_maths_space(spc\function_space.domain_argument);
+    rspc := simplify_maths_space(spc\function_space.range_argument);
+    RETURN(make_function_space(spc\function_space.domain_constraint, zspc, spc\function_space.range_constraint, rspc));
+  END_IF;
+  RETURN(spc);
+END_FUNCTION;
+
+FUNCTION simplify_maths_value(val : maths_value) : maths_value;
+LOCAL
+  vtypes : SET OF STRING       := stripped_typeof(val);
+  vlist  : LIST OF maths_value;
+  nlist  : LIST OF maths_value := [];
+END_LOCAL;
+  IF 'GENERIC_EXPRESSION' IN vtypes
+  THEN
+    RETURN(simplify_generic_expression(val));
+  END_IF;
+  IF 'LIST' IN vtypes
+  THEN
+    vlist := val;
+    REPEAT i := 1 TO SIZEOF(vlist);
+      INSERT(nlist, simplify_maths_value(vlist[i]), i - 1);
+    END_REPEAT;
+    RETURN(convert_to_maths_value(nlist));
+  END_IF;
+  RETURN(val);
+END_FUNCTION;
+
+FUNCTION singleton_member_of(spc : maths_space) : maths_value;
+LOCAL
+  types : SET OF STRING := stripped_typeof(spc);
+END_LOCAL;
+  IF 'FINITE_SPACE' IN types
+  THEN
+    IF SIZEOF(spc\finite_space.members) = 1
+    THEN
+      RETURN(spc\finite_space.members[1]);
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF 'FINITE_INTEGER_INTERVAL' IN types
+  THEN
+    IF spc\finite_integer_interval.size = 1
+    THEN
+      RETURN(spc\finite_integer_interval.min);
+    END_IF;
+    RETURN(?);
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION sort_link_associations(aprr : SET [1 : ?] OF pair_representation_relationship;
+                                one_not_two : BOOLEAN) : SET OF kinematic_link_representation;
+LOCAL
+  result : SET OF kinematic_link_representation := [];
+END_LOCAL;
+  IF one_not_two
+  THEN
+    REPEAT i := 1 TO HIINDEX(aprr);
+      result := result + aprr[i].rep_1;
+    END_REPEAT;
+  ELSE
+    REPEAT i := 1 TO HIINDEX(aprr);
+      result := result + aprr[i].rep_2;
+    END_REPEAT;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION space_dimension(tspace : tuple_space) : nonnegative_integer;
+LOCAL
+  types : SET OF STRING := TYPEOF(tspace);
+END_LOCAL;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN types
+  THEN
+    RETURN(tspace\uniform_product_space.exponent);
+  END_IF;
+  IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN types
+  THEN
+    RETURN(SIZEOF(tspace\listed_product_space.factors));
+  END_IF;
+  IF (schema_prefix + 'EXTENDED_TUPLE_SPACE') IN types
+  THEN
+    RETURN(space_dimension(tspace\extended_tuple_space.base));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION space_is_continuum(space : maths_space) : BOOLEAN;
+LOCAL
+  typenames : SET OF STRING       := TYPEOF(space);
+  factors   : LIST OF maths_space;
+END_LOCAL;
+  IF NOT EXISTS(space)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF subspace_of_es(space, es_reals) OR subspace_of_es(space, es_complex_numbers)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF (schema_prefix + 'UNIFORM_PRODUCT_SPACE') IN typenames
+  THEN
+    RETURN(space_is_continuum(space\uniform_product_space.base));
+  END_IF;
+  IF (schema_prefix + 'LISTED_PRODUCT_SPACE') IN typenames
+  THEN
+    factors := space\listed_product_space.factors;
+    IF SIZEOF(factors) = 0
+    THEN
+      RETURN(false);
+    END_IF;
+    REPEAT i := 1 TO SIZEOF(factors);
+      IF NOT space_is_continuum(factors[i])
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(true);
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION space_is_singleton(spc : maths_space) : BOOLEAN;
+LOCAL
+  types : SET OF STRING := stripped_typeof(spc);
+END_LOCAL;
+  IF 'FINITE_SPACE' IN types
+  THEN
+    RETURN(bool(SIZEOF(spc\finite_space.members) = 1));
+  END_IF;
+  IF 'FINITE_INTEGER_INTERVAL' IN types
+  THEN
+    RETURN(bool(spc\finite_integer_interval.size = 1));
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION stripped_typeof(arg : GENERIC : G) : SET OF STRING;
+LOCAL
+  types  : SET OF STRING := TYPEOF(arg);
+  stypes : SET OF STRING := [];
+  n      : INTEGER       := LENGTH(schema_prefix);
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(types);
+    IF ((LENGTH(types[i]) > n) AND (types[i][1:n] = schema_prefix))
+    THEN
+      stypes := stypes + [types[i][n + 1:LENGTH(types[i])]];
+    ELSE
+      stypes := stypes + [types[i]];
+    END_IF;
+  END_REPEAT;
+  RETURN(stypes);
+END_FUNCTION;
+
+FUNCTION sts_get_general_datum_reference(input : datum_reference_element) : general_datum_reference;
+LOCAL
+  general_datum_reference_bag : BAG OF general_datum_reference := (USEDIN(input,
+                                                                          'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERAL_DATUM_REFERENCE.BASE'));
+END_LOCAL;
+  IF SIZEOF(general_datum_reference_bag) = 1
+  THEN
+    RETURN(general_datum_reference_bag[1]);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION sts_get_product_definition_shape(input : geometric_tolerance_target) : product_definition_shape;
+  CASE true OF
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_LOCATION' IN
+     TYPEOF(input)) : RETURN(input\shape_aspect_relationship.relating_shape_aspect\shape_aspect.of_shape);
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIMENSIONAL_SIZE' IN
+     TYPEOF(input)) : RETURN(input\dimensional_size.applies_to\shape_aspect.of_shape);
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(input)) : RETURN(input);
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+     TYPEOF(input)) : RETURN(input\shape_aspect.of_shape);
+    OTHERWISE: RETURN(?);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION subspace_of(space1 : maths_space;
+                     space2 : maths_space) : LOGICAL;
+LOCAL
+  spc1   : maths_space                  := simplify_maths_space(space1);
+  spc2   : maths_space                  := simplify_maths_space(space2);
+  types1 : SET OF STRING                := stripped_typeof(spc1);
+  types2 : SET OF STRING                := stripped_typeof(spc2);
+  lgcl   : LOGICAL;
+  cum    : LOGICAL;
+  es_val : elementary_space_enumerators;
+  bnd1   : REAL;
+  bnd2   : REAL;
+  n      : INTEGER;
+  sp1    : maths_space;
+  sp2    : maths_space;
+  prgn1  : polar_complex_number_region;
+  prgn2  : polar_complex_number_region;
+  aitv   : finite_real_interval;
+END_LOCAL;
+  IF NOT EXISTS(spc1) OR NOT EXISTS(spc2)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF spc2 = the_generics
+  THEN
+    RETURN(true);
+  END_IF;
+  IF 'ELEMENTARY_SPACE' IN types1
+  THEN
+    IF NOT ('ELEMENTARY_SPACE' IN types2)
+    THEN
+      RETURN(false);
+    END_IF;
+    es_val := spc2\elementary_space.space_id;
+    IF spc1\elementary_space.space_id = es_val
+    THEN
+      RETURN(true);
+    END_IF;
+    CASE spc1\elementary_space.space_id OF
+      es_numbers : RETURN(false);
+      es_complex_numbers : RETURN(es_val = es_numbers);
+      es_reals : RETURN(es_val = es_numbers);
+      es_integers : RETURN(es_val = es_numbers);
+      es_logicals : RETURN(false);
+      es_booleans : RETURN(es_val = es_logicals);
+      es_strings : RETURN(false);
+      es_binarys : RETURN(false);
+      es_maths_spaces : RETURN(false);
+      es_maths_functions : RETURN(false);
+      es_generics : RETURN(false);
+    END_CASE;
+    RETURN(unknown);
+  END_IF;
+  IF 'FINITE_INTEGER_INTERVAL' IN types1
+  THEN
+    cum := true;
+    REPEAT i := spc1\finite_integer_interval.min TO spc1\finite_integer_interval.max;
+      cum := cum AND member_of(i, spc2);
+      IF cum = false
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(cum);
+  END_IF;
+  IF 'INTEGER_INTERVAL_FROM_MIN' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_integers));
+    END_IF;
+    IF 'INTEGER_INTERVAL_FROM_MIN' IN types2
+    THEN
+      RETURN(spc1\integer_interval_from_min.min >= spc2\integer_interval_from_min.min);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'INTEGER_INTERVAL_TO_MAX' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_integers));
+    END_IF;
+    IF 'INTEGER_INTERVAL_TO_MAX' IN types2
+    THEN
+      RETURN(spc1\integer_interval_to_max.max <= spc2\integer_interval_to_max.max);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FINITE_REAL_INTERVAL' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_reals));
+    END_IF;
+    IF ('FINITE_REAL_INTERVAL' IN types2) OR ('REAL_INTERVAL_FROM_MIN' IN types2) OR ('REAL_INTERVAL_TO_MAX' IN types2)
+    THEN
+      IF min_exists(spc2)
+      THEN
+        bnd1 := spc1\finite_real_interval.min;
+        bnd2 := real_min(spc2);
+        IF (bnd1 < bnd2) OR ((bnd1 = bnd2) AND min_included(spc1) AND NOT min_included(spc2))
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+      IF max_exists(spc2)
+      THEN
+        bnd1 := spc1\finite_real_interval.max;
+        bnd2 := real_max(spc2);
+        IF (bnd1 > bnd2) OR ((bnd1 = bnd2) AND max_included(spc1) AND NOT max_included(spc2))
+        THEN
+          RETURN(false);
+        END_IF;
+      END_IF;
+      RETURN(true);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'REAL_INTERVAL_FROM_MIN' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_reals));
+    END_IF;
+    IF 'REAL_INTERVAL_FROM_MIN' IN types2
+    THEN
+      bnd1 := spc1\real_interval_from_min.min;
+      bnd2 := spc2\real_interval_from_min.min;
+      RETURN((bnd2 < bnd1) OR ((bnd2 = bnd1) AND (min_included(spc2) OR NOT min_included(spc1))));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'REAL_INTERVAL_TO_MAX' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_reals));
+    END_IF;
+    IF 'REAL_INTERVAL_TO_MAX' IN types2
+    THEN
+      bnd1 := spc1\real_interval_to_max.max;
+      bnd2 := spc2\real_interval_to_max.max;
+      RETURN((bnd2 > bnd1) OR ((bnd2 = bnd1) AND (max_included(spc2) OR NOT max_included(spc1))));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_complex_numbers));
+    END_IF;
+    IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types2
+    THEN
+      RETURN(subspace_of(spc1\cartesian_complex_number_region.real_constraint,
+                         spc2\cartesian_complex_number_region.real_constraint) AND
+             subspace_of(spc1\cartesian_complex_number_region.imag_constraint,
+                         spc2\cartesian_complex_number_region.imag_constraint));
+    END_IF;
+    IF 'POLAR_COMPLEX_NUMBER_REGION' IN types2
+    THEN
+      RETURN(subspace_of(enclose_cregion_in_pregion(spc1, spc2\polar_complex_number_region.centre), spc2));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'POLAR_COMPLEX_NUMBER_REGION' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      es_val := spc2\elementary_space.space_id;
+      RETURN((es_val = es_numbers) OR (es_val = es_complex_numbers));
+    END_IF;
+    IF 'CARTESIAN_COMPLEX_NUMBER_REGION' IN types2
+    THEN
+      RETURN(subspace_of(enclose_pregion_in_cregion(spc1), spc2));
+    END_IF;
+    IF 'POLAR_COMPLEX_NUMBER_REGION' IN types2
+    THEN
+      prgn1 := spc1;
+      prgn2 := spc2;
+      IF prgn1.centre = prgn2.centre
+      THEN
+        IF prgn2.direction_constraint.max > PI
+        THEN
+          aitv := make_finite_real_interval(-PI, open, prgn2.direction_constraint.max - 2.0 * PI,
+                                            prgn2.direction_constraint.max_closure);
+          RETURN(subspace_of(prgn1.distance_constraint, prgn2.distance_constraint) AND
+                 (subspace_of(prgn1.direction_constraint, prgn2.direction_constraint) OR
+                  subspace_of(prgn1.direction_constraint, aitv)));
+        ELSE
+          RETURN(subspace_of(prgn1.distance_constraint, prgn2.distance_constraint) AND
+                 subspace_of(prgn1.direction_constraint, prgn2.direction_constraint));
+        END_IF;
+      END_IF;
+      RETURN(subspace_of(enclose_pregion_in_pregion(prgn1, prgn2.centre), prgn2));
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FINITE_SPACE' IN types1
+  THEN
+    cum := true;
+    REPEAT i := 1 TO SIZEOF(spc1\finite_space.members);
+      cum := cum AND member_of(spc1\finite_space.members[i], spc2);
+      IF cum = false
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+    RETURN(cum);
+  END_IF;
+  IF 'PRODUCT_SPACE' IN types1
+  THEN
+    IF 'PRODUCT_SPACE' IN types2
+    THEN
+      IF space_dimension(spc1) = space_dimension(spc2)
+      THEN
+        cum := true;
+        REPEAT i := 1 TO space_dimension(spc1);
+          cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        RETURN(cum);
+      END_IF;
+    END_IF;
+    IF 'EXTENDED_TUPLE_SPACE' IN types2
+    THEN
+      IF space_dimension(spc1) >= space_dimension(spc2)
+      THEN
+        cum := true;
+        REPEAT i := 1 TO space_dimension(spc1);
+          cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
+          IF cum = false
+          THEN
+            RETURN(false);
+          END_IF;
+        END_REPEAT;
+        RETURN(cum);
+      END_IF;
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'EXTENDED_TUPLE_SPACE' IN types1
+  THEN
+    IF 'EXTENDED_TUPLE_SPACE' IN types2
+    THEN
+      n := space_dimension(spc1);
+      IF n < space_dimension(spc2)
+      THEN
+        n := space_dimension(spc2);
+      END_IF;
+      cum := true;
+      REPEAT i := 1 TO n + 1;
+        cum := cum AND subspace_of(factor_space(spc1, i), factor_space(spc2, i));
+        IF cum = false
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+      RETURN(cum);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  IF 'FUNCTION_SPACE' IN types1
+  THEN
+    IF 'ELEMENTARY_SPACE' IN types2
+    THEN
+      RETURN(spc2\elementary_space.space_id = es_maths_functions);
+    END_IF;
+    IF 'FUNCTION_SPACE' IN types2
+    THEN
+      cum := true;
+      sp1 := spc1\function_space.domain_argument;
+      sp2 := spc2\function_space.domain_argument;
+      CASE spc1\function_space.domain_constraint OF
+        sc_equal : BEGIN  
+                          CASE spc2\function_space.domain_constraint OF
+                            sc_equal : cum := cum AND equal_maths_spaces(sp1, sp2);
+                            sc_subspace : cum := cum AND subspace_of(sp1, sp2);
+                            sc_member : cum := cum AND member_of(sp1, sp2);
+                          END_CASE;
+        END;
+        sc_subspace : BEGIN  
+                             CASE spc2\function_space.domain_constraint OF
+                               sc_equal : RETURN(false);
+                               sc_subspace : cum := cum AND subspace_of(sp1, sp2);
+                               sc_member : BEGIN  
+                                                  IF NOT member_of(sp1, sp2)
+                                                  THEN
+                                                    RETURN(false);
+                                                  END_IF;
+                                                  cum := unknown;
+                               END;
+                             END_CASE;
+        END;
+        sc_member : BEGIN  
+                           CASE spc2\function_space.domain_constraint OF
+                             sc_equal : cum := cum AND space_is_singleton(sp1) AND
+                                               equal_maths_spaces(singleton_member_of(sp1), sp2);
+                             sc_subspace : BEGIN  
+                                                  IF NOT member_of(sp2, sp1)
+                                                  THEN
+                                                    RETURN(false);
+                                                  END_IF;
+                                                  cum := unknown;
+                             END;
+                             sc_member : cum := cum AND (subspace_of(sp1, sp2));
+                           END_CASE;
+        END;
+      END_CASE;
+      IF cum = false
+      THEN
+        RETURN(false);
+      END_IF;
+      sp1 := spc1\function_space.range_argument;
+      sp2 := spc2\function_space.range_argument;
+      CASE spc1\function_space.range_constraint OF
+        sc_equal : BEGIN  
+                          CASE spc2\function_space.range_constraint OF
+                            sc_equal : cum := cum AND equal_maths_spaces(sp1, sp2);
+                            sc_subspace : cum := cum AND subspace_of(sp1, sp2);
+                            sc_member : cum := cum AND member_of(sp1, sp2);
+                          END_CASE;
+        END;
+        sc_subspace : BEGIN  
+                             CASE spc2\function_space.domain_constraint OF
+                               sc_equal : RETURN(false);
+                               sc_subspace : cum := cum AND subspace_of(sp1, sp2);
+                               sc_member : BEGIN  
+                                                  IF NOT member_of(sp1, sp2)
+                                                  THEN
+                                                    RETURN(false);
+                                                  END_IF;
+                                                  cum := unknown;
+                               END;
+                             END_CASE;
+        END;
+        sc_member : BEGIN  
+                           CASE spc2\function_space.domain_constraint OF
+                             sc_equal : cum := cum AND space_is_singleton(sp1) AND
+                                               equal_maths_spaces(singleton_member_of(sp1), sp2);
+                             sc_subspace : BEGIN  
+                                                  IF NOT member_of(sp2, sp1)
+                                                  THEN
+                                                    RETURN(false);
+                                                  END_IF;
+                                                  cum := unknown;
+                             END;
+                             sc_member : cum := cum AND subspace_of(sp1, sp2);
+                           END_CASE;
+        END;
+      END_CASE;
+      RETURN(cum);
+    END_IF;
+    RETURN(false);
+  END_IF;
+  RETURN(unknown);
+END_FUNCTION;
+
+FUNCTION subspace_of_es(spc : maths_space;
+                        es : elementary_space_enumerators) : LOGICAL;
+LOCAL
+  types : SET OF STRING := stripped_typeof(spc);
+END_LOCAL;
+  IF NOT EXISTS(spc) OR NOT EXISTS(es)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF 'ELEMENTARY_SPACE' IN types
+  THEN
+    RETURN(es_subspace_of_es(spc\elementary_space.space_id, es));
+  END_IF;
+  IF 'FINITE_SPACE' IN types
+  THEN
+    RETURN(all_members_of_es(spc\finite_space.members, es));
+  END_IF;
+  CASE es OF
+    es_numbers : RETURN(('FINITE_INTEGER_INTERVAL' IN types) OR ('INTEGER_INTERVAL_FROM_MIN' IN types) OR
+                        ('INTEGER_INTERVAL_TO_MAX' IN types) OR ('FINITE_REAL_INTERVAL' IN types) OR
+                        ('REAL_INTERVAL_FROM_MIN' IN types) OR ('REAL_INTERVAL_TO_MAX' IN types) OR
+                        ('CARTESIAN_COMPLEX_NUMBER_REGION' IN types) OR ('POLAR_COMPLEX_NUMBER_REGION' IN types));
+    es_complex_numbers : RETURN(('CARTESIAN_COMPLEX_NUMBER_REGION' IN types) OR
+                                ('POLAR_COMPLEX_NUMBER_REGION' IN types));
+    es_reals : RETURN(('FINITE_REAL_INTERVAL' IN types) OR ('REAL_INTERVAL_FROM_MIN' IN types) OR
+                      ('REAL_INTERVAL_TO_MAX' IN types));
+    es_integers : RETURN(('FINITE_INTEGER_INTERVAL' IN types) OR ('INTEGER_INTERVAL_FROM_MIN' IN types) OR
+                         ('INTEGER_INTERVAL_TO_MAX' IN types));
+    es_logicals : RETURN(false);
+    es_booleans : RETURN(false);
+    es_strings : RETURN(false);
+    es_binarys : RETURN(false);
+    es_maths_spaces : RETURN(false);
+    es_maths_functions : RETURN('FUNCTION_SPACE' IN types);
+    es_generics : RETURN(true);
+  END_CASE;
+  RETURN(unknown);
+END_FUNCTION;
+
+FUNCTION substitute(expr : generic_expression;
+                    vars : LIST [1 : ?] OF generic_variable;
+                    vals : LIST [1 : ?] OF maths_value) : generic_expression;
+LOCAL
+  types  : SET OF STRING                  := stripped_typeof(expr);
+  opnds  : LIST OF generic_expression;
+  op1    : generic_expression;
+  op2    : generic_expression;
+  qvars  : LIST OF generic_variable;
+  srcdom : maths_space_or_function;
+  prpfun : LIST [1 : ?] OF maths_function;
+  finfun : maths_function_select;
+END_LOCAL;
+  IF SIZEOF(vars) <> SIZEOF(vals)
+  THEN
+    RETURN(?);
+  END_IF;
+  IF 'GENERIC_LITERAL' IN types
+  THEN
+    RETURN(expr);
+  END_IF;
+  IF 'GENERIC_VARIABLE' IN types
+  THEN
+    REPEAT i := 1 TO SIZEOF(vars);
+      IF expr :=: vars[i]
+      THEN
+        RETURN(vals[i]);
+      END_IF;
+    END_REPEAT;
+    RETURN(expr);
+  END_IF;
+  IF 'QUANTIFIER_EXPRESSION' IN types
+  THEN
+    qvars := expr\quantifier_expression.variables;
+    REPEAT i := SIZEOF(vars) TO 1 BY -1;
+      IF vars[i] IN qvars
+      THEN
+        REMOVE(vars, i);
+        REMOVE(vals, i);
+      END_IF;
+    END_REPEAT;
+    opnds := expr\multiple_arity_generic_expression.operands;
+    REPEAT i := 1 TO SIZEOF(opnds);
+      IF NOT (opnds[i] IN qvars)
+      THEN
+        expr\multiple_arity_generic_expression.operands[i] := substitute(opnds[i], vars, vals);
+      END_IF;
+    END_REPEAT;
+    RETURN(expr);
+  END_IF;
+  IF 'UNARY_GENERIC_EXPRESSION' IN types
+  THEN
+    op1 := expr\unary_generic_expression.operand;
+    expr\unary_generic_expression.operand := substitute(op1, vars, vals);
+  END_IF;
+  IF 'BINARY_GENERIC_EXPRESSION' IN types
+  THEN
+    op1 := expr\binary_generic_expression.operands[1];
+    expr\binary_generic_expression.operands[1] := substitute(op1, vars, vals);
+    op2 := expr\binary_generic_expression.operands[2];
+    expr\binary_generic_expression.operands[2] := substitute(op2, vars, vals);
+  END_IF;
+  IF 'PARALLEL_COMPOSED_FUNCTION' IN types
+  THEN
+    srcdom := expr\parallel_composed_function.source_of_domain;
+    prpfun := expr\parallel_composed_function.prep_functions;
+    finfun := expr\parallel_composed_function.final_function;
+    srcdom := substitute(srcdom, vars, vals);
+    REPEAT i := 1 TO SIZEOF(prpfun);
+      prpfun[i] := substitute(prpfun[i], vars, vals);
+    END_REPEAT;
+    IF 'MATHS_FUNCTION' IN stripped_typeof(finfun)
+    THEN
+      finfun := substitute(finfun, vars, vals);
+    END_IF;
+    RETURN(make_parallel_composed_function(srcdom, prpfun, finfun));
+  END_IF;
+  IF 'MULTIPLE_ARITY_GENERIC_EXPRESSION' IN types
+  THEN
+    opnds := expr\multiple_arity_generic_expression.operands;
+    REPEAT i := 1 TO SIZEOF(opnds);
+      expr\multiple_arity_generic_expression.operands[i] := substitute(opnds[i], vars, vals);
+    END_REPEAT;
+  END_IF;
+  RETURN(expr);
+END_FUNCTION;
+
+FUNCTION surface_condition_correlation(pd : property_definition;
+                                       rep : representation) : LOGICAL;
+  CASE pd.name OF
+    'visual appearance', 'tactile appearance', 'contact ratio', 'hardness', 'treatment result', 'surface texture' : RETURN(pd.name =
+                                                                                                                           rep.name);
+    OTHERWISE: RETURN(unknown);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION surface_weights_positive(b : rational_b_spline_surface) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 0 TO b.u_upper;
+    REPEAT j := 0 TO b.v_upper;
+      IF (b.weights[i][j] <= 0.0)
+      THEN
+        result := false;
+        RETURN(result);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION topology_reversed(an_item : reversible_topology) : reversible_topology;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE' IN TYPEOF(an_item))
+  THEN
+    RETURN(edge_reversed(an_item));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH' IN TYPEOF(an_item))
+  THEN
+    RETURN(path_reversed(an_item));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_BOUND' IN TYPEOF(an_item))
+  THEN
+    RETURN(face_bound_reversed(an_item));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE' IN TYPEOF(an_item))
+  THEN
+    RETURN(face_reversed(an_item));
+  END_IF;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL' IN TYPEOF(an_item))
+  THEN
+    RETURN(shell_reversed(an_item));
+  END_IF;
+  IF ('SET' IN TYPEOF(an_item))
+  THEN
+    RETURN(set_of_topology_reversed(an_item));
+  END_IF;
+  IF ('LIST' IN TYPEOF(an_item))
+  THEN
+    RETURN(list_of_topology_reversed(an_item));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION type_check_function(the_type : GENERIC;
+                             sub_names : SET OF STRING;
+                             criterion : INTEGER) : LOGICAL;
+  IF ((NOT EXISTS(the_type)) OR (SIZEOF(sub_names) = 0))
+  THEN
+    RETURN(unknown);
+  ELSE
+    CASE criterion OF
+      0 : RETURN(SIZEOF(sub_names * TYPEOF(the_type)) > 0);
+      1 : RETURN(SIZEOF(sub_names * TYPEOF(the_type)) = 0);
+      2 : RETURN(SIZEOF(sub_names * TYPEOF(the_type)) = 1);
+      3 : RETURN(SIZEOF(sub_names * TYPEOF(the_type)) <= 1);
+      OTHERWISE: RETURN(unknown);
+    END_CASE;
+  END_IF;
+END_FUNCTION;
+
+FUNCTION unambiguously_specified_multi_level_reference_designator(links : LIST [1 : ?] OF next_assembly_usage_occurrence) : BOOLEAN;
+  REPEAT i := 1 TO SIZEOF(links) - 1;
+    CASE true OF
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN  
+                                                                                                  IF NOT ((links[i]\product_definition_relationship.related_product_definition :=:
+                                                                                                           links[i +
+                                                                                                                 1]\product_definition_relationship.relating_product_definition) OR
+                                                                                                          ((SIZEOF(QUERY(pdr
+                                                                                                                         <* USEDIN(links[i]\product_definition_relationship.related_product_definition,
+                                                                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                                                                                                         | pdr\product_definition_relationship.relating_product_definition :=:
+                                                                                                                           links[i +
+                                                                                                                                 1]\product_definition_relationship.relating_product_definition)) =
+                                                                                                            1) AND
+                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition.formation\product_definition_formation.of_product :=:
+                                                                                                            links[i +
+                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition.formation\product_definition_formation.of_product)))
+                                                                                                  THEN
+                                                                                                    RETURN(false);
+                                                                                                  END_IF;
+      END;
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
+       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
+       TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN  
+                                                                                                  IF NOT ((links[i]\product_definition_relationship.related_product_definition :=:
+                                                                                                           links[i +
+                                                                                                                 1]\product_definition_relationship.relating_product_definition) OR
+                                                                                                          ((SIZEOF(QUERY(pdr
+                                                                                                                         <* USEDIN(links[i]\product_definition_relationship.related_product_definition,
+                                                                                                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                                                                                                         | pdr\product_definition_relationship.relating_product_definition :=:
+                                                                                                                           links[i +
+                                                                                                                                 1]\product_definition_relationship.relating_product_definition)) =
+                                                                                                            1) AND
+                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_id =
+                                                                                                            links[i +
+                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_id) AND
+                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.id_owning_organization_name =
+                                                                                                            links[i +
+                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.id_owning_organization_name) AND
+                                                                                                           (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_definition_id <>
+                                                                                                            links[i +
+                                                                                                                  1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_definition_id)))
+                                                                                                  THEN
+                                                                                                    RETURN(false);
+                                                                                                  END_IF;
+      END;
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_REFERENCE' IN
+       TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND
+      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+       TYPEOF(links[i]\product_definition_relationship.related_product_definition)) : RETURN(false);
+      OTHERWISE: RETURN(false);
+    END_CASE;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION unique_in_product_definition(item : representative_shape_representation) : BOOLEAN;
+LOCAL
+  local_p_d : SET OF product_definition   := [];
+  local_s_r : SET OF shape_representation := [];
+  i         : INTEGER;
+  j         : INTEGER;
+END_LOCAL;
+  local_p_d := using_product_definition_of_shape_representation(item);
+  IF (SIZEOF(local_p_d) <> 1)
+  THEN
+    RETURN(false);
+  ELSE
+    REPEAT i := 1 TO HIINDEX(local_p_d);
+      local_s_r := find_shape_representation_of_product_definition(local_p_d[i]);
+      REPEAT j := 1 TO HIINDEX(local_s_r);
+        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+             TYPEOF(local_s_r[j])) AND
+            (local_s_r[j] :<>: item))
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION unique_in_shape_aspect(item : representative_shape_representation) : BOOLEAN;
+LOCAL
+  local_s_a : SET OF shape_aspect         := [];
+  local_s_r : SET OF shape_representation := [];
+  i         : INTEGER;
+  j         : INTEGER;
+END_LOCAL;
+  local_s_a := using_shape_aspect_of_shape_representation(item);
+  IF (SIZEOF(local_s_a) <> 1)
+  THEN
+    RETURN(false);
+  ELSE
+    REPEAT i := 1 TO HIINDEX(local_s_a);
+      local_s_r := find_shape_representation_of_shape_aspect(local_s_a[i]);
+      REPEAT j := 1 TO HIINDEX(local_s_r);
+        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION' IN
+             TYPEOF(local_s_r[j])) AND
+            (local_s_r[j] :<>: item))
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_REPEAT;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION used_variables(arg : generic_expression) : SET OF generic_variable;
+LOCAL
+  result : SET OF generic_variable := [];
+END_LOCAL;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GENERIC_VARIABLE' IN TYPEOF(arg)
+  THEN
+    RETURN([arg]);
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNARY_GENERIC_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(used_variables(arg\unary_generic_expression.operand));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BINARY_GENERIC_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    RETURN(used_variables(arg\binary_generic_expression.operands[1]) +
+           used_variables(arg\binary_generic_expression.operands[2]));
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MULTIPLE_ARITY_GENERIC_EXPRESSION' IN TYPEOF(arg)
+  THEN
+    REPEAT i := 1 TO SIZEOF(arg\multiple_arity_generic_expression.operands);
+      result := result + used_variables(arg\multiple_arity_generic_expression.operands[i]);
+    END_REPEAT;
+    RETURN(result);
+  END_IF;
+  RETURN([]);
+END_FUNCTION;
+
+FUNCTION using_items(item : founded_item_select;
+                     checked_items : SET OF founded_item_select) : SET OF founded_item_select;
+LOCAL
+  new_check_items : SET OF founded_item_select;
+  result_items    : SET OF founded_item_select;
+  next_items      : SET OF founded_item_select;
+END_LOCAL;
+  result_items := [];
+  new_check_items := checked_items + item;
+  next_items := QUERY(z
+                      <* bag_to_set(USEDIN(item, ''))
+                      | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_ITEM' IN TYPEOF(z)) OR
+                        ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FOUNDED_ITEM' IN TYPEOF(z)));
+  IF SIZEOF(next_items) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(next_items);
+      IF NOT (next_items[i] IN new_check_items)
+      THEN
+        result_items := result_items + next_items[i] + using_items(next_items[i], new_check_items);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(result_items);
+END_FUNCTION;
+
+FUNCTION using_product_definition_of_shape_aspect(item : shape_aspect) : product_definition;
+  IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN TYPEOF(item.of_shape.definition))
+  THEN
+    RETURN(item.of_shape.definition);
+  ELSE
+    RETURN(?);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION using_product_definition_of_shape_representation(item : shape_representation) : SET OF product_definition;
+LOCAL
+  local_s_d_r : SET OF shape_definition_representation := [];
+  local_p_d   : SET OF product_definition              := [];
+  i           : INTEGER;
+END_LOCAL;
+  local_s_d_r := QUERY(i1
+                       <* bag_to_set(USEDIN(item,
+                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION'))
+                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                         TYPEOF(i1));
+  REPEAT i := 1 TO HIINDEX(local_s_d_r);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION' IN
+        TYPEOF(local_s_d_r[i]\property_definition_representation.definition))
+    THEN
+      IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+          TYPEOF(local_s_d_r[i]\property_definition_representation.definition\property_definition.definition))
+      THEN
+        local_p_d := local_p_d +
+                     local_s_d_r[i]\property_definition_representation.definition\property_definition.definition;
+      END_IF;
+    END_IF;
+  END_REPEAT;
+  RETURN(local_p_d);
+END_FUNCTION;
+
+FUNCTION using_representation_with_mapping(item : representation_item) : SET OF representation;
+LOCAL
+  results                  : SET OF representation      := [];
+  local_results            : SET OF representation      := [];
+  local_representation_map : SET OF representation_map  := [];
+  intermediate_items       : SET OF representation_item := [];
+  i                        : INTEGER;
+  j                        : INTEGER;
+END_LOCAL;
+  local_results := QUERY(z
+                         <* using_representations(item)
+                         | SIZEOF(USEDIN(z,
+                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION')) >
+                           0);
+  IF (SIZEOF(local_results) = 0)
+  THEN
+    RETURN([]);
+  ELSE
+    REPEAT i := 1 TO HIINDEX(local_results);
+      local_representation_map := local_representation_map +
+                                  bag_to_set(USEDIN(local_results[i],
+                                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION_MAP.MAPPED_REPRESENTATION'));
+    END_REPEAT;
+    REPEAT i := 1 TO HIINDEX(local_representation_map);
+      intermediate_items := intermediate_items +
+                            bag_to_set(USEDIN(local_representation_map[i],
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAPPED_ITEM.MAPPING_SOURCE'));
+    END_REPEAT;
+    REPEAT j := 1 TO HIINDEX(intermediate_items);
+      results := results + bag_to_set(using_representation_with_mapping(intermediate_items[j]));
+    END_REPEAT;
+  END_IF;
+  RETURN(results);
+END_FUNCTION;
+
+FUNCTION using_representations(item : founded_item_select) : SET OF representation;
+LOCAL
+  results            : SET OF representation;
+  result_bag         : BAG OF representation;
+  intermediate_items : SET OF founded_item_select;
+END_LOCAL;
+  results := [];
+  result_bag := USEDIN(item, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS');
+  IF SIZEOF(result_bag) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(result_bag);
+      results := results + result_bag[i];
+    END_REPEAT;
+  END_IF;
+  intermediate_items := using_items(item, []);
+  IF SIZEOF(intermediate_items) > 0
+  THEN
+    REPEAT i := 1 TO HIINDEX(intermediate_items);
+      result_bag := USEDIN(intermediate_items[i],
+                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATION.ITEMS');
+      IF SIZEOF(result_bag) > 0
+      THEN
+        REPEAT j := 1 TO HIINDEX(result_bag);
+          results := results + result_bag[j];
+        END_REPEAT;
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  RETURN(results);
+END_FUNCTION;
+
+FUNCTION using_shape_aspect_of_shape_representation(item : shape_representation) : SET OF shape_aspect;
+LOCAL
+  local_s_d_r  : SET OF shape_definition_representation := [];
+  local_s_d_r2 : BAG OF shape_definition_representation := [];
+  local_s_a    : SET OF shape_aspect                    := [];
+  i            : INTEGER;
+END_LOCAL;
+  local_s_d_r2 := local_s_d_r2 +
+                  QUERY(pdr
+                        <* USEDIN(item,
+                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                        | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                          TYPEOF(pdr));
+  local_s_d_r := bag_to_set(local_s_d_r2);
+  REPEAT i := 1 TO HIINDEX(local_s_d_r);
+    IF ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT' IN
+        TYPEOF(local_s_d_r[i]\property_definition_representation.definition\property_definition.definition))
+    THEN
+      local_s_a := local_s_a +
+                   local_s_d_r[i]\property_definition_representation.definition\property_definition.definition;
+    END_IF;
+  END_REPEAT;
+  RETURN(local_s_a);
+END_FUNCTION;
+
+FUNCTION valid_basis_curve_in_2d_wireframe(crv : curve) : BOOLEAN;
+-- check for valid basic curve types
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE'] *
+            TYPEOF(crv)) =
+     1
+  THEN
+    RETURN(true);
+  ELSE
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE') IN TYPEOF(crv))
+    THEN
+      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARABOLA',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HYPERBOLA'] *
+                TYPEOF(crv\trimmed_curve.basis_curve)) =
+         1
+      THEN
+        RETURN(true);
+      ELSE
+        RETURN(valid_basis_curve_in_2d_wireframe(crv\trimmed_curve.basis_curve));
+      END_IF;
+    ELSE
+      IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_2D') IN TYPEOF(crv))
+      THEN
+        RETURN(valid_basis_curve_in_2d_wireframe(crv\offset_curve_2d.basis_curve));
+      ELSE
+        IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA') IN TYPEOF(crv))
+        THEN
+          RETURN(valid_basis_curve_in_2d_wireframe(crv\curve_replica.parent_curve));
+        ELSE
+          IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE') IN TYPEOF(crv))
+          THEN
+            RETURN(SIZEOF(QUERY(ccs
+                                <* crv\composite_curve.segments
+                                | NOT (valid_basis_curve_in_2d_wireframe(ccs.parent_curve)))) =
+                   0);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION valid_calendar_date(date : calendar_date) : LOGICAL;
+  CASE date.month_component OF
+    1 : RETURN({1 <= date.day_component <= 31});
+    2 : BEGIN  
+               IF (leap_year(date.year_component))
+               THEN
+                 RETURN({1 <= date.day_component <= 29});
+               ELSE
+                 RETURN({1 <= date.day_component <= 28});
+               END_IF;
+    END;
+    3 : RETURN({1 <= date.day_component <= 31});
+    4 : RETURN({1 <= date.day_component <= 30});
+    5 : RETURN({1 <= date.day_component <= 31});
+    6 : RETURN({1 <= date.day_component <= 30});
+    7 : RETURN({1 <= date.day_component <= 31});
+    8 : RETURN({1 <= date.day_component <= 31});
+    9 : RETURN({1 <= date.day_component <= 30});
+    10 : RETURN({1 <= date.day_component <= 31});
+    11 : RETURN({1 <= date.day_component <= 30});
+    12 : RETURN({1 <= date.day_component <= 31});
+  END_CASE;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION valid_csg_2d_primitives(input : csg_solid_2d) : BOOLEAN;
+  CASE true OF
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D' IN
+     TYPEOF(input\csg_solid_2d.tree_root_expression)) : BEGIN  
+                                                               IF (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_AREA',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPLEX_AREA',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPTIC_AREA',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HALF_SPACE_2D',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYGONAL_AREA',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRIMITIVE_2D_WITH_INNER_BOUNDARY',
+                                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RECTANGULAR_AREA'] *
+                                                                          TYPEOF(input\csg_solid_2d.tree_root_expression)) >
+                                                                   0)
+                                                               THEN
+                                                                 RETURN(true);
+                                                               ELSE
+                                                                 RETURN(false);
+                                                               END_IF;
+    END;
+    ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BOOLEAN_RESULT_2D' IN
+     TYPEOF(input\csg_solid_2d.tree_root_expression)) : RETURN(valid_csg_2d_primitives(input\csg_solid_2d.tree_root_expression\boolean_result_2d.first_operand) AND
+                                                               valid_csg_2d_primitives(input\csg_solid_2d.tree_root_expression\boolean_result_2d.second_operand));
+    OTHERWISE: RETURN(false);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION valid_datum_target_parameters(pdf : placed_datum_target_feature) : BOOLEAN;
+LOCAL
+  rep_set                   : SET OF representation := [];
+  parameter_representations : SET OF representation;
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(pdf.representation_associations);
+    rep_set := rep_set + pdf.representation_associations[i].used_representation;
+  END_REPEAT;
+  parameter_representations := QUERY(rep
+                                     <* rep_set
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN
+                                        TYPEOF(rep)));
+  IF (SIZEOF(QUERY(srwp
+                   <* parameter_representations
+                   | (SIZEOF(QUERY(i
+                                   <* srwp.items
+                                   | (i.name = 'orientation') AND
+                                     ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLACEMENT' IN TYPEOF(i)))) =
+                      1))) <>
+      1)
+  THEN
+    RETURN(false);
+  END_IF;
+  CASE pdf\shape_aspect.description OF
+    'point' : RETURN(SIZEOF(QUERY(srwp <* parameter_representations | (SIZEOF(srwp.items) = 1))) = 1);
+    'circle', 'circular curve' : RETURN((SIZEOF(QUERY(srwp <* parameter_representations | (SIZEOF(srwp.items) = 2))) =
+                                         1) AND
+                                        (SIZEOF(QUERY(srwp
+                                                      <* parameter_representations
+                                                      | (SIZEOF(QUERY(i
+                                                                      <* srwp.items
+                                                                      | (i.name = 'target diameter') AND
+                                                                        (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                                TYPEOF(i)) =
+                                                                         2))) =
+                                                         1))) =
+                                         1));
+    'line' : RETURN(SIZEOF(QUERY(srwp
+                                 <* parameter_representations
+                                 | (SIZEOF(QUERY(i
+                                                 <* srwp.items
+                                                 | (i.name = 'target length') AND
+                                                   (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                           TYPEOF(i)) =
+                                                    2))) =
+                                    1))) =
+                    1);
+    'rectangle' : RETURN((SIZEOF(QUERY(srwp <* parameter_representations | (SIZEOF(srwp.items) = 3))) = 1) AND
+                         (SIZEOF(QUERY(srwp
+                                       <* parameter_representations
+                                       | (SIZEOF(QUERY(i
+                                                       <* srwp.items
+                                                       | (i.name = 'target length') AND
+                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                 TYPEOF(i)) =
+                                                          2))) =
+                                          1))) =
+                          1) AND
+                         (SIZEOF(QUERY(srwp
+                                       <* parameter_representations
+                                       | (SIZEOF(QUERY(i
+                                                       <* srwp.items
+                                                       | (i.name = 'target width') AND
+                                                         (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE_WITH_UNIT'] *
+                                                                 TYPEOF(i)) =
+                                                          2))) =
+                                          1))) =
+                          1));
+    OTHERWISE: RETURN(false);
+  END_CASE;
+END_FUNCTION;
+
+FUNCTION valid_geometrically_bounded_wf_curve(crv : curve) : BOOLEAN;
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELLIPSE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCLE'] *
+            TYPEOF(crv)) =
+     1
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TRIMMED_CURVE' IN TYPEOF(crv)
+    THEN
+      IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARABOLA',
+                 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.HYPERBOLA'] *
+                TYPEOF(crv\trimmed_curve.basis_curve)) =
+         1
+      THEN
+        RETURN(true);
+      ELSE
+        RETURN(valid_geometrically_bounded_wf_curve(crv\trimmed_curve.basis_curve));
+      END_IF;
+    ELSE
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(crv)
+      THEN
+        RETURN(valid_geometrically_bounded_wf_curve(crv\offset_curve_3d.basis_curve));
+      ELSE
+        IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(crv)
+        THEN
+          RETURN(valid_geometrically_bounded_wf_curve(crv\curve_replica.parent_curve));
+        ELSE
+          IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_CURVE' IN TYPEOF(crv)
+          THEN
+            RETURN(SIZEOF(QUERY(ccs
+                                <* crv\composite_curve.segments
+                                | NOT valid_geometrically_bounded_wf_curve(ccs.parent_curve))) =
+                   0);
+          END_IF;
+        END_IF;
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION valid_geometrically_bounded_wf_point(pnt : point) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_ON_CURVE' IN TYPEOF(pnt)
+    THEN
+      RETURN(valid_geometrically_bounded_wf_curve(pnt\point_on_curve.basis_curve));
+    ELSE
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA' IN TYPEOF(pnt)
+      THEN
+        RETURN(valid_geometrically_bounded_wf_point(pnt\point_replica.parent_pt));
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION valid_measure_value(m : measure_value) : BOOLEAN;
+  IF ('REAL' IN TYPEOF(m))
+  THEN
+    RETURN(m > 0.0);
+  ELSE
+    IF ('INTEGER' IN TYPEOF(m))
+    THEN
+      RETURN(m > 0);
+    ELSE
+      RETURN(true);
+    END_IF;
+  END_IF;
+END_FUNCTION;
+
+FUNCTION valid_selected_instance_representation(pd : product_definition_or_assembly_relationship) : LOGICAL;
+LOCAL
+  properties                          : SET OF property_definition                := bag_to_set(QUERY(prd
+                                                                                                      <* USEDIN(pd,
+                                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                                                                                      | (prd.name =
+                                                                                                         'occurrence selection')));
+  property_definition_representations : SET OF property_definition_representation := bag_to_set(QUERY(pdr
+                                                                                                      <* USEDIN(properties[1],
+                                                                                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                                                                      | (pdr.used_representation.name =
+                                                                                                         'selection criteria')));
+  selected_representation             : representation;
+END_LOCAL;
+  IF (SIZEOF(properties) <> 1)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (SIZEOF(property_definition_representations) <> 1)
+  THEN
+    RETURN(false);
+  END_IF;
+  selected_representation := property_definition_representations[1]\property_definition_representation.used_representation;
+  IF (SIZEOF(selected_representation\representation.items) < 1) OR
+     (SIZEOF(selected_representation\representation.items) > 2)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (SIZEOF(QUERY(i
+                   <* selected_representation\representation.items
+                   | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                             TYPEOF(i)) =
+                      1) AND
+                     (i.name = 'selection quantity'))) <>
+      1)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (SIZEOF(QUERY(i
+                   <* selected_representation\representation.items
+                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                      TYPEOF(i)) AND
+                     (i.name = 'selection control'))) >
+      1)
+  THEN
+    RETURN(false);
+  END_IF;
+  IF (SIZEOF(QUERY(i
+                   <* selected_representation\representation.items
+                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                      TYPEOF(i)) AND
+                     (i.name = 'selection control'))) =
+      0) AND
+     (SIZEOF(QUERY(i
+                   <* selected_representation\representation.items
+                   | (i.name = 'selection quantity') AND
+                     (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.QUALIFIED_REPRESENTATION_ITEM',
+                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_RANGE'] *
+                             TYPEOF(i)) =
+                      0))) >
+      0)
+  THEN
+    RETURN(false);
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION valid_time(time : local_time) : BOOLEAN;
+  IF EXISTS(time.second_component)
+  THEN
+    RETURN(EXISTS(time.minute_component));
+  ELSE
+    RETURN(true);
+  END_IF;
+END_FUNCTION;
+
+FUNCTION valid_units(m : measure_with_unit) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LENGTH_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MASS_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TIME_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_CURRENT_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CELSIUS_TEMPERATURE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AMOUNT_OF_SUBSTANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LUMINOUS_INTENSITY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANE_ANGLE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SOLID_ANGLE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AREA_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VOLUME_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RATIO_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_LENGTH_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ACCELERATION_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CAPACITANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(-2.0, -1.0, 4.0, 2.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_CHARGE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDUCTANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELECTRIC_POTENTIAL_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ENERGY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FORCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FREQUENCY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ILLUMINANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INDUCTANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LUMINOUS_FLUX_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAGNETIC_FLUX_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MAGNETIC_FLUX_DENSITY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POWER_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRESSURE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RESISTANCE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VELOCITY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.RADIOACTIVITY_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ABSORBED_DOSE_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DOSE_EQUIVALENT_MEASURE' IN TYPEOF(m.value_component)
+  THEN
+    IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_IF;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION valid_wireframe_edge_curve(crv : curve) : BOOLEAN;
+  IF SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONIC',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.B_SPLINE_CURVE',
+             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POLYLINE'] *
+            TYPEOF(crv)) =
+     1
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_REPLICA' IN TYPEOF(crv)
+    THEN
+      RETURN(valid_wireframe_edge_curve(crv\curve_replica.parent_curve));
+    ELSE
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.OFFSET_CURVE_3D' IN TYPEOF(crv)
+      THEN
+        RETURN(valid_wireframe_edge_curve(crv\offset_curve_3d.basis_curve));
+      END_IF;
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION valid_wireframe_vertex_point(pnt : point) : BOOLEAN;
+  IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CARTESIAN_POINT' IN TYPEOF(pnt)
+  THEN
+    RETURN(true);
+  ELSE
+    IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPLICA' IN TYPEOF(pnt)
+    THEN
+      RETURN(valid_wireframe_vertex_point(pnt\point_replica.parent_pt));
+    END_IF;
+  END_IF;
+  RETURN(false);
+END_FUNCTION;
+
+FUNCTION validate_accuracy_types(ei : shape_data_quality_criterion;
+                                 type_list : BAG OF STRING) : LOGICAL;
+LOCAL
+  sdqca   : BAG OF shape_data_quality_criterion_and_accuracy_association := [];
+  sma     : BAG OF shape_measurement_accuracy                            := [];
+  sdqir   : SET OF shape_data_quality_inspection_result                  := [];
+  scraa   : BAG OF shape_inspection_result_accuracy_association          := [];
+  t_logic : BOOLEAN;
+END_LOCAL;
+  sdqca := USEDIN(ei,
+                  'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_CRITERION_AND_ACCURACY_ASSOCIATION.SHAPE_DATA_QUALITY_CRITERION');
+  IF (SIZEOF(sdqca) <> 0)
+  THEN
+    REPEAT i := 1 TO SIZEOF(sdqca);
+      sma := sma + sdqca[i].required_specific_accuracy;
+    END_REPEAT;
+    IF (SIZEOF(type_list) < SIZEOF(sma))
+    THEN
+      RETURN(false);
+    END_IF;
+    REPEAT i := 1 TO SIZEOF(sma);
+      t_logic := false;
+      REPEAT j := 1 TO SIZEOF(type_list);
+        IF (type_list[j] IN value_limit_type(sma[i].range))
+        THEN
+          t_logic := true;
+          ESCAPE;
+        END_IF;
+      END_REPEAT;
+      IF (NOT (t_logic))
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_IF;
+  sdqir := QUERY(q
+                 <* bag_to_set(USEDIN(ei,
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q));
+  IF (SIZEOF(sdqir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    scraa := USEDIN(sdqir[i],
+                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_INSPECTION_RESULT_ACCURACY_ASSOCIATION.SHAPE_DATA_QUALITY_RESULT');
+    IF (SIZEOF(scraa) <> 0)
+    THEN
+      sma := [];
+      REPEAT j := 1 TO SIZEOF(scraa);
+        sma := sma + scraa[j].applied_specific_accuracy;
+      END_REPEAT;
+      IF (SIZEOF(type_list) < SIZEOF(sma))
+      THEN
+        RETURN(false);
+      END_IF;
+      REPEAT j := 1 TO SIZEOF(sma);
+        t_logic := false;
+        REPEAT k := 1 TO SIZEOF(type_list);
+          IF (type_list[k] IN value_limit_type(sma[j].range))
+          THEN
+            t_logic := true;
+            ESCAPE;
+          END_IF;
+        END_REPEAT;
+        IF (NOT (t_logic))
+        THEN
+          RETURN(false);
+        END_IF;
+      END_REPEAT;
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION validate_attribute_id(attid : attribute_identifier) : BOOLEAN;
+
+CONSTANT
+  letters     : SET [52 : 52] OF STRING :=
+                ['a',
+                 'b',
+                 'c',
+                 'd',
+                 'e',
+                 'f',
+                 'g',
+                 'h',
+                 'i',
+                 'j',
+                 'k',
+                 'l',
+                 'm',
+                 'n',
+                 'o',
+                 'p',
+                 'q',
+                 'r',
+                 's',
+                 't',
+                 'u',
+                 'v',
+                 'w',
+                 'x',
+                 'y',
+                 'z',
+                 'A',
+                 'B',
+                 'C',
+                 'D',
+                 'E',
+                 'F',
+                 'G',
+                 'H',
+                 'I',
+                 'J',
+                 'K',
+                 'L',
+                 'M',
+                 'N',
+                 'O',
+                 'P',
+                 'Q',
+                 'R',
+                 'S',
+                 'T',
+                 'U',
+                 'V',
+                 'W',
+                 'X',
+                 'Y',
+                 'Z'];
+  numbers_etc : SET [15 : 15] OF STRING := ['0','1','2','3','4','5','6','7','8','9','_','[',']','.','\'];
+  valid_chars : SET [67 : 67] OF STRING := letters + numbers_etc;
+END_CONSTANT;
+LOCAL
+  id_length : INTEGER := LENGTH(attid);
+  id_valid  : BOOLEAN := true;
+  i         : INTEGER;
+END_LOCAL;
+  IF NOT (attid[1] IN letters)
+  THEN
+    id_valid := false;
+  END_IF;
+  REPEAT i := 2 TO id_length
+  WHILE id_valid = true;
+    IF NOT (attid[i] IN valid_chars)
+    THEN
+      id_valid := false;
+    END_IF;
+  END_REPEAT;
+  RETURN(id_valid);
+END_FUNCTION;
+
+FUNCTION validate_countersink_radii(cskhole : solid_with_stepped_round_hole_and_conical_transitions) : BOOLEAN;
+LOCAL
+  i       : INTEGER;
+  j       : INTEGER;
+  n       : INTEGER                 := 1 + cskhole\solid_with_stepped_round_hole.segments;
+  smaller : positive_length_measure;
+  larger  : positive_length_measure;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(cskhole.conical_transitions);
+    IF (((cskhole.conical_transitions[i].transition_number = 1) AND
+         (cskhole.conical_transitions[i].cone_apex_angle < 0)) XOR
+        ((cskhole.conical_transitions[i].transition_number = n) AND
+         (cskhole.conical_transitions[i].cone_apex_angle > 0)))
+    THEN
+      RETURN(false);
+    ELSE
+      IF ((cskhole.conical_transitions[i].transition_number <> 1) AND
+          (cskhole.conical_transitions[i].transition_number <> n))
+      THEN
+        BEGIN  
+               j := cskhole.conical_transitions[i].transition_number;
+               IF cskhole\solid_with_stepped_round_hole.segment_radii[j] >
+                  cskhole\solid_with_stepped_round_hole.segment_radii[j - 1]
+               THEN
+                 BEGIN  
+                        IF (cskhole.conical_transitions[i].cone_apex_angle > 0)
+                        THEN
+                          RETURN(false);
+                        END_IF;
+                        larger := cskhole\solid_with_stepped_round_hole.segment_radii[j];
+                        smaller := cskhole\solid_with_stepped_round_hole.segment_radii[j - 1];
+                 END;
+               ELSE
+                 BEGIN  
+                        IF (cskhole.conical_transitions[i].cone_apex_angle < 0)
+                        THEN
+                          RETURN(false);
+                        END_IF;
+                        larger := cskhole\solid_with_stepped_round_hole.segment_radii[j - 1];
+                        smaller := cskhole\solid_with_stepped_round_hole.segment_radii[j];
+                 END;
+               END_IF;
+               IF ((cskhole.conical_transitions[i].cone_base_radius > larger) OR
+                   (cskhole.conical_transitions[i].cone_base_radius < smaller))
+               THEN
+                 RETURN(false);
+               END_IF;
+        END;
+      END_IF;
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION validate_ecdq_inspected_elements_type(ei : externally_conditioned_data_quality_criterion;
+                                               type_list : BAG OF STRING) : LOGICAL;
+LOCAL
+  sdqir       : SET OF externally_conditioned_data_quality_inspection_result               := [];
+  dir         : SET OF data_quality_inspection_instance_report                             := [];
+  sdiri       : SET OF externally_conditioned_data_quality_inspection_instance_report_item := [];
+  t_type_list : BAG OF STRING                                                              := [];
+END_LOCAL;
+  sdqir := QUERY(q
+                 <* bag_to_set(USEDIN(ei,
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_RESULT' IN
+                   TYPEOF(q));
+  IF (SIZEOF(sdqir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    dir := dir +
+           QUERY(q
+                 <* bag_to_set(USEDIN(sdqir[i],
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                   TYPEOF(q));
+  END_REPEAT;
+  IF (SIZEOF(dir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(dir);
+    sdiri := sdiri +
+             QUERY(q
+                   <* dir[i].inspected_instances
+                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_CONDITIONED_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
+                     TYPEOF(q));
+  END_REPEAT;
+  IF (SIZEOF(sdiri) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdiri);
+    IF (SIZEOF(sdiri[i].inspected_elements) <> SIZEOF(type_list))
+    THEN
+      RETURN(false);
+    END_IF;
+    t_type_list := type_list;
+    REPEAT j := 1 TO SIZEOF(sdiri[i].inspected_elements);
+      REPEAT k := 1 TO SIZEOF(t_type_list);
+        IF (t_type_list[k] IN TYPEOF(sdiri[i].inspected_elements[j]))
+        THEN
+          t_type_list := t_type_list - t_type_list[k];
+          ESCAPE;
+        END_IF;
+      END_REPEAT;
+    END_REPEAT;
+    IF (SIZEOF(t_type_list) > 0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION validate_inspected_elements_type(ei : shape_data_quality_criterion;
+                                          type_list : BAG OF STRING) : LOGICAL;
+LOCAL
+  sdqir       : SET OF shape_data_quality_inspection_result               := [];
+  sdir        : SET OF shape_data_quality_inspection_instance_report      := [];
+  sdiri       : SET OF shape_data_quality_inspection_instance_report_item := [];
+  t_type_list : BAG OF STRING                                             := [];
+END_LOCAL;
+  sdqir := QUERY(q
+                 <* bag_to_set(USEDIN(ei,
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q));
+  IF (SIZEOF(sdqir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    sdir := sdir +
+            QUERY(q
+                  <* bag_to_set(USEDIN(sdqir[i],
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  IF (SIZEOF(sdir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdir);
+    sdiri := sdiri +
+             QUERY(q
+                   <* sdir[i].inspected_instances
+                   | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
+                     TYPEOF(q));
+  END_REPEAT;
+  IF (SIZEOF(sdiri) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdiri);
+    IF (SIZEOF(sdiri[i].inspected_elements) <> SIZEOF(type_list))
+    THEN
+      RETURN(false);
+    END_IF;
+    t_type_list := type_list;
+    REPEAT j := 1 TO SIZEOF(sdiri[i].inspected_elements);
+      REPEAT k := 1 TO SIZEOF(t_type_list);
+        IF (t_type_list[k] IN TYPEOF(sdiri[i].inspected_elements[j]))
+        THEN
+          t_type_list := t_type_list - t_type_list[k];
+          ESCAPE;
+        END_IF;
+      END_REPEAT;
+    END_REPEAT;
+    IF (SIZEOF(t_type_list) > 0)
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION validate_locations_of_extreme_value_type(ei : shape_data_quality_criterion;
+                                                  type_list : BAG OF STRING) : LOGICAL;
+LOCAL
+  sdqir       : SET OF shape_data_quality_inspection_result          := [];
+  sdir        : SET OF shape_data_quality_inspection_instance_report := [];
+  sdei        : SET OF instance_report_item_with_extreme_instances   := [];
+  t_type_list : BAG OF STRING                                        := [];
+END_LOCAL;
+  sdqir := QUERY(q
+                 <* bag_to_set(USEDIN(ei,
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q));
+  IF (SIZEOF(sdqir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    sdir := sdir +
+            QUERY(q
+                  <* bag_to_set(USEDIN(sdqir[i],
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdir);
+    sdei := sdei +
+            QUERY(q
+                  <* sdir[i].inspected_instances
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  IF (SIZEOF(sdei) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  IF ((SIZEOF(type_list) = 0) AND (SIZEOF(sdei) <> 0))
+  THEN
+    RETURN(false);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdei);
+    REPEAT j := 1 TO SIZEOF(sdei[i].extreme_instances);
+      IF (SIZEOF(sdei[i].extreme_instances[j].locations_of_extreme_value) <> SIZEOF(type_list))
+      THEN
+        RETURN(false);
+      END_IF;
+      t_type_list := type_list;
+      REPEAT k := 1 TO SIZEOF(sdei[i].extreme_instances[j].locations_of_extreme_value);
+        REPEAT l := 1 TO SIZEOF(t_type_list);
+          IF (t_type_list[l] IN TYPEOF(sdei[i].extreme_instances[j].locations_of_extreme_value[k]))
+          THEN
+            t_type_list := t_type_list - t_type_list[l];
+            ESCAPE;
+          END_IF;
+        END_REPEAT;
+      END_REPEAT;
+      IF (SIZEOF(t_type_list) > 0)
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION validate_measured_data_type(ei : shape_data_quality_criterion;
+                                     type_string : STRING) : LOGICAL;
+LOCAL
+  sdqir : SET OF shape_data_quality_inspection_result               := [];
+  sdcr  : SET OF shape_data_quality_inspection_criterion_report     := [];
+  sdir  : SET OF shape_data_quality_inspection_instance_report      := [];
+  sdii  : SET OF shape_data_quality_inspection_instance_report_item := [];
+  sdei  : BAG OF instance_report_item_with_extreme_instances        := [];
+END_LOCAL;
+  sdqir := QUERY(q
+                 <* bag_to_set(USEDIN(ei,
+                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_RESULT.CRITERION_INSPECTED'))
+                 | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_RESULT' IN TYPEOF(q));
+  IF (SIZEOF(sdqir) = 0)
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    sdcr := sdcr +
+            QUERY(q
+                  <* bag_to_set(USEDIN(sdqir[i],
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_CRITERION_REPORT' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdqir);
+    sdir := sdir +
+            QUERY(q
+                  <* bag_to_set(USEDIN(sdqir[i],
+                                       'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DATA_QUALITY_INSPECTION_REPORT.INSPECTION_RESULT'))
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  IF ((SIZEOF(sdcr) = 0) AND (SIZEOF(sdir) = 0))
+  THEN
+    RETURN(true);
+  END_IF;
+  REPEAT i := 1 TO SIZEOF(sdir);
+    sdii := sdii +
+            QUERY(q
+                  <* sdir[i].inspected_instances
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_INSPECTION_INSTANCE_REPORT_ITEM' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdir);
+    sdei := sdei +
+            QUERY(q
+                  <* sdir[i].inspected_instances
+                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INSTANCE_REPORT_ITEM_WITH_EXTREME_INSTANCES' IN
+                    TYPEOF(q));
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdcr);
+    IF (NOT (type_string IN TYPEOF(sdcr[i].representative_measured_value)))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdii);
+    IF (NOT (type_string IN TYPEOF(sdii[i].measured_value)))
+    THEN
+      RETURN(false);
+    END_IF;
+  END_REPEAT;
+  REPEAT i := 1 TO SIZEOF(sdei);
+    REPEAT j := 1 TO SIZEOF(sdei[i].extreme_instances);
+      IF (NOT (type_string IN TYPEOF(sdei[i].extreme_instances[j].measured_value)))
+      THEN
+        RETURN(false);
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(true);
+END_FUNCTION;
+
+FUNCTION value_limit_type(iv : shape_data_quality_value_limit_type_select) : SET OF STRING;
+LOCAL
+  retval : SET OF STRING := [];
+END_LOCAL;
+  IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_RANGE') IN TYPEOF(iv))
+  THEN
+    retval := TYPEOF(iv\compound_representation_item.item_element[1].value_component);
+  END_IF;
+  IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DATA_QUALITY_VALUE_LIMIT') IN TYPEOF(iv))
+  THEN
+    IF (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_WITH_UNIT') IN TYPEOF(iv))
+    THEN
+      retval := TYPEOF(iv\measure_with_unit.value_component);
+    END_IF;
+  END_IF;
+  RETURN(retval);
+END_FUNCTION;
+
+FUNCTION value_range_aggregate_rep_item(agg : AGGREGATE OF representation_item) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(QUERY(i1
+                          <* agg
+                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                             TYPEOF(i1)))) =
+             6)
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION value_range_wr1(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(agg) = 2) AND
+            ((SIZEOF(QUERY(i1
+                           <* agg
+                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                              TYPEOF(i1)))) =
+              2) OR
+             (SIZEOF(QUERY(i2
+                           <* agg
+                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM' IN
+                              TYPEOF(i2)))) =
+              2))
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION value_range_wr2(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF ((SIZEOF(QUERY(i <* agg | (i\representation_item.name = 'upper limit'))) = 1) AND
+             (SIZEOF(QUERY(i <* agg | (i\representation_item.name = 'lower limit'))) = 1))
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION value_range_wr3(agg : compound_item_definition) : BOOLEAN;
+  BEGIN  
+         IF (SIZEOF(QUERY(i1
+                          <* agg
+                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                             TYPEOF(i1)) AND
+                            (SIZEOF(QUERY(i2
+                                          <* agg
+                                          | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                             TYPEOF(i2)) AND
+                                            (i1 :<>: i2) AND
+                                            (i1\measure_with_unit.unit_component :=:
+                                             i2\measure_with_unit.unit_component))) =
+                             1))) =
+             2)
+         THEN
+           RETURN(true);
+         ELSE
+           RETURN(false);
+         END_IF;
+  END;
+END_FUNCTION;
+
+FUNCTION values_space_of(expr : generic_expression) : maths_space;
+LOCAL
+  e_prefix  : STRING        := 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.';
+  typenames : SET OF STRING := TYPEOF(expr);
+END_LOCAL;
+  IF (schema_prefix + 'MATHS_VARIABLE') IN typenames
+  THEN
+    RETURN(expr\maths_variable.values_space);
+  END_IF;
+  IF (e_prefix + 'EXPRESSION') IN typenames
+  THEN
+    IF (e_prefix + 'NUMERIC_EXPRESSION') IN typenames
+    THEN
+      IF expr\numeric_expression.is_int
+      THEN
+        IF (e_prefix + 'INT_LITERAL') IN typenames
+        THEN
+          RETURN(make_finite_space([expr\int_literal.the_value]));
+        ELSE
+          RETURN(the_integers);
+        END_IF;
+      ELSE
+        IF (e_prefix + 'REAL_LITERAL') IN typenames
+        THEN
+          RETURN(make_finite_space([expr\real_literal.the_value]));
+        ELSE
+          RETURN(the_reals);
+        END_IF;
+      END_IF;
+    END_IF;
+    IF (e_prefix + 'BOOLEAN_EXPRESSION') IN typenames
+    THEN
+      IF (e_prefix + 'BOOLEAN_LITERAL') IN typenames
+      THEN
+        RETURN(make_finite_space([expr\boolean_literal.the_value]));
+      ELSE
+        RETURN(the_booleans);
+      END_IF;
+    END_IF;
+    IF (e_prefix + 'STRING_EXPRESSION') IN typenames
+    THEN
+      IF (e_prefix + 'STRING_LITERAL') IN typenames
+      THEN
+        RETURN(make_finite_space([expr\string_literal.the_value]));
+      ELSE
+        RETURN(the_strings);
+      END_IF;
+    END_IF;
+    RETURN(?);
+  END_IF;
+  IF (schema_prefix + 'MATHS_FUNCTION') IN typenames
+  THEN
+    IF expression_is_constant(expr)
+    THEN
+      RETURN(make_finite_space([expr]));
+    ELSE
+      RETURN(make_function_space(sc_equal, expr\maths_function.domain, sc_equal, expr\maths_function.range));
+    END_IF;
+  END_IF;
+  IF (schema_prefix + 'FUNCTION_APPLICATION') IN typenames
+  THEN
+    RETURN(expr\function_application.func.range);
+  END_IF;
+  IF (schema_prefix + 'MATHS_SPACE') IN typenames
+  THEN
+    IF expression_is_constant(expr)
+    THEN
+      RETURN(make_finite_space([expr]));
+    ELSE
+      RETURN(make_elementary_space(es_maths_spaces));
+    END_IF;
+  END_IF;
+  IF (schema_prefix + 'DEPENDENT_VARIABLE_DEFINITION') IN typenames
+  THEN
+    RETURN(values_space_of(expr\unary_generic_expression.operand));
+  END_IF;
+  IF (schema_prefix + 'COMPLEX_NUMBER_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr]));
+  END_IF;
+  IF (schema_prefix + 'LOGICAL_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\logical_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'BINARY_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\binary_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'MATHS_ENUM_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\maths_enum_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'REAL_TUPLE_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\real_tuple_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'INTEGER_TUPLE_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\integer_tuple_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'ATOM_BASED_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\atom_based_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'MATHS_TUPLE_LITERAL') IN typenames
+  THEN
+    RETURN(make_finite_space([expr\maths_tuple_literal.lit_value]));
+  END_IF;
+  IF (schema_prefix + 'PARTIAL_DERIVATIVE_EXPRESSION') IN typenames
+  THEN
+    RETURN(drop_numeric_constraints(values_space_of(expr\partial_derivative_expression.derivand)));
+  END_IF;
+  IF (schema_prefix + 'DEFINITE_INTEGRAL_EXPRESSION') IN typenames
+  THEN
+    RETURN(drop_numeric_constraints(values_space_of(expr\definite_integral_expression.integrand)));
+  END_IF;
+  RETURN(?);
+END_FUNCTION;
+
+FUNCTION vector_difference(arg1 : vector_or_direction;
+                           arg2 : vector_or_direction) : vector;
+LOCAL
+  result : vector;
+  res    : direction;
+  vec1   : direction;
+  vec2   : direction;
+  mag    : REAL;
+  mag1   : REAL;
+  mag2   : REAL;
+  ndim   : INTEGER;
+END_LOCAL;
+  IF ((NOT EXISTS(arg1)) OR (NOT EXISTS(arg2))) OR (arg1.dim <> arg2.dim)
+  THEN
+    RETURN(?);
+  ELSE
+    BEGIN  
+           IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg1)
+           THEN
+             mag1 := arg1\vector.magnitude;
+             vec1 := arg1\vector.orientation;
+           ELSE
+             mag1 := 1.0;
+             vec1 := arg1;
+           END_IF;
+           IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VECTOR' IN TYPEOF(arg2)
+           THEN
+             mag2 := arg2\vector.magnitude;
+             vec2 := arg2\vector.orientation;
+           ELSE
+             mag2 := 1.0;
+             vec2 := arg2;
+           END_IF;
+           vec1 := normalise(vec1);
+           vec2 := normalise(vec2);
+           ndim := SIZEOF(vec1.direction_ratios);
+           mag := 0.0;
+           res := dummy_gri || direction(vec1.direction_ratios);
+           REPEAT i := 1 TO ndim;
+             res.direction_ratios[i] := mag1 * vec1.direction_ratios[i] - mag2 * vec2.direction_ratios[i];
+             mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]);
+           END_REPEAT;
+           IF (mag > 0.0)
+           THEN
+             result := dummy_gri || vector(res, SQRT(mag));
+           ELSE
+             result := dummy_gri || vector(vec1, 0.0);
+           END_IF;
+    END;
+  END_IF;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION volume_weights_positive(b : rational_b_spline_volume) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 0 TO b.u_upper;
+    REPEAT j := 0 TO b.v_upper;
+      REPEAT k := 0 TO b.w_upper;
+        IF (b.weights[i][j][k] <= 0.0)
+        THEN
+          result := false;
+          RETURN(result);
+        END_IF;
+      END_REPEAT;
+    END_REPEAT;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION weights_positive(weights : LIST OF REAL) : BOOLEAN;
+LOCAL
+  result : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(weights);
+    IF weights[i] <= 0.0
+    THEN
+      result := false;
+      RETURN(result);
+    END_IF;
+  END_REPEAT;
+  RETURN(result);
+END_FUNCTION;
+
+FUNCTION ypr_index(ypr : ypr_enumeration) : INTEGER;
+  CASE ypr OF
+    yaw : RETURN(1);
+    pitch : RETURN(2);
+    roll : RETURN(3);
+  END_CASE;
+  RETURN(?);
+END_FUNCTION;
+
+RULE alternative_solution_requires_solution_definition FOR (product_definition_formation);
+LOCAL
+  solution_versions : SET OF product_definition_formation := [];
+END_LOCAL;
+  solution_versions := QUERY(pdf
+                             <* product_definition_formation
+                             | SIZEOF(QUERY(prpc
+                                            <* USEDIN(pdf.of_product,
+                                                      'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                            | prpc.name = 'alternative solution')) =
+                               1);
+WHERE
+  WR1: SIZEOF(QUERY(pdf
+                    <* solution_versions
+                    | SIZEOF(QUERY(pd
+                                   <* USEDIN(pdf,
+                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION')
+                                   | pd.frame_of_reference.name = 'alternative definition')) <>
+                      1)) =
+       0;
+END_RULE;
+
+RULE ap242_application_protocol_definition_required FOR (application_context);
+WHERE
+  WR1: SIZEOF(QUERY(ac
+                    <* application_context
+                    | (SIZEOF(QUERY(apd
+                                    <* USEDIN(ac,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLICATION_PROTOCOL_DEFINITION.APPLICATION')
+                                    | apd.application_interpreted_model_schema_name =
+                                      'ap242_managed_model_based_3d_engineering_mim_lf')) >
+                       0))) >
+       0;
+END_RULE;
+
+RULE breakdown_element_requires_product_definition FOR (product_definition_formation);
+WHERE
+  WR1: SIZEOF(QUERY(pdf
+                    <* product_definition_formation
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pdf.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'functionality')) =
+                       1) AND
+                      (SIZEOF(QUERY(pd
+                                    <* USEDIN(pdf,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION')
+                                    | pd.frame_of_reference.name = 'functional definition')) <
+                       1))) =
+       0;
+  WR2: SIZEOF(QUERY(pdf
+                    <* product_definition_formation
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pdf.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'conceptual design')) =
+                       1) AND
+                      (SIZEOF(QUERY(pd
+                                    <* USEDIN(pdf,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION')
+                                    | pd.frame_of_reference.name = 'conceptual definition')) <
+                       1))) =
+       0;
+END_RULE;
+
+RULE chamfer_offset_requires_faces FOR (chamfer_offset, property_definition_representation);
+WHERE
+  WR1: (SIZEOF(QUERY(co
+                     <* chamfer_offset
+                     | NOT (1 =
+                            SIZEOF(QUERY(pdr
+                                         <* property_definition_representation
+                                         | ((pdr\property_definition_representation.definition\property_definition.definition =
+                                             co) AND
+                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (((pdr\property_definition_representation.definition\property_definition.definition.description =
+                                               'first offset') AND
+                                              (pdr.used_representation.name = 'first face shape')) OR
+                                             ((pdr\property_definition_representation.definition\property_definition.definition.description =
+                                               'second offset') AND
+                                              (pdr.used_representation.name = 'second face shape'))))))))) =
+        0);
+END_RULE;
+
+RULE chamfer_requires_faces FOR (chamfer, property_definition_representation);
+WHERE
+  WR1: (SIZEOF(QUERY(cf
+                     <* chamfer
+                     | NOT (1 =
+                            SIZEOF(QUERY(pdr
+                                         <* property_definition_representation
+                                         | ((pdr\property_definition_representation.definition\property_definition.definition =
+                                             cf) AND
+                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (pdr.used_representation.name = 'chamfer face'))))))) =
+        0);
+END_RULE;
+
+RULE compatible_dimension FOR (cartesian_point, direction, geometric_representation_context);
+WHERE
+  WR1: check_geometric_dimension(cartesian_point, direction, geometric_representation_context);
+END_RULE;
+
+RULE component_class_for_assembly_select FOR (composite_assembly_sequence_definition,
+                                              next_assembly_usage_occurrence,
+                                              product_related_product_category);
+LOCAL
+  i     : INTEGER := 0;
+  j     : INTEGER := 0;
+  k     : INTEGER := 0;
+  dkuhr : LOGICAL := true;
+  nnauo : INTEGER := 0;
+  nprpc : INTEGER := 0;
+  rp    : product;
+END_LOCAL;
+  REPEAT i := LOINDEX(composite_assembly_sequence_definition) TO HIINDEX(composite_assembly_sequence_definition);
+    nnauo := 0;
+    REPEAT j := LOINDEX(next_assembly_usage_occurrence) TO HIINDEX(next_assembly_usage_occurrence);
+      IF (composite_assembly_sequence_definition[i] = next_assembly_usage_occurrence[j].relating_product_definition)
+      THEN
+        rp := next_assembly_usage_occurrence[j].related_product_definition.formation.of_product;
+        nprpc := 0;
+        REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
+          IF ((rp IN product_related_product_category[k].products) AND
+              (product_related_product_category[k].name IN
+               ['ply','ply laminate','filament laminate','processed core','composite assembly']))
+          THEN
+            nprpc := nprpc + 1;
+          END_IF;
+        END_REPEAT;
+        IF (nprpc = 1)
+        THEN
+          nnauo := nnauo + 1;
+        ELSE
+          dkuhr := false;
+          ESCAPE;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+    IF (dkuhr = false)
+    THEN
+      ESCAPE;
+    END_IF;
+    IF (nnauo = 0)
+    THEN
+      dkuhr := false;
+      ESCAPE;
+    END_IF;
+  END_REPEAT;
+WHERE
+  WR1: dkuhr;
+END_RULE;
+
+RULE consistent_uncertainty FOR (global_uncertainty_assigned_context,
+                                 qualified_representation_item,
+                                 uncertainty_assigned_representation);
+WHERE
+  WR1: SIZEOF(QUERY(guac
+                    <* global_uncertainty_assigned_context
+                    | SIZEOF(QUERY(u1
+                                   <* guac.uncertainty
+                                   | SIZEOF(QUERY(u2 <* guac.uncertainty | u2.name = u1.name)) > 1)) >
+                      0)) =
+       0;
+  WR2: SIZEOF(QUERY(uar
+                    <* uncertainty_assigned_representation
+                    | SIZEOF(QUERY(u1
+                                   <* uar.uncertainty
+                                   | SIZEOF(QUERY(u2 <* uar.uncertainty | u2.name = u1.name)) > 1)) >
+                      0)) =
+       0;
+  WR3: SIZEOF(QUERY(qri
+                    <* qualified_representation_item
+                    | SIZEOF(QUERY(u1
+                                   <* qri.qualifiers
+                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNCERTAINTY_QUALIFIER' IN
+                                      TYPEOF(u1)) AND
+                                     (SIZEOF(QUERY(u2
+                                                   <* qri.qualifiers
+                                                   | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.UNCERTAINTY_QUALIFIER' IN
+                                                      TYPEOF(u2)) AND
+                                                     (u2\uncertainty_qualifier.measure_name =
+                                                      u1\uncertainty_qualifier.measure_name))) >
+                                      1))) >
+                      0)) =
+       0;
+END_RULE;
+
+RULE constraint_definition_requires_constraint_category FOR (product_definition);
+LOCAL
+  constraint_definitions : SET OF product_definition := [];
+END_LOCAL;
+  constraint_definitions := QUERY(pd
+                                  <* product_definition
+                                  | (pd.frame_of_reference.name = 'design constraint definition'));
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* constraint_definitions
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pd.formation.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'requirement')) =
+                       0))) =
+       0;
+END_RULE;
+
+RULE design_constraint_requires_product_definition FOR (product_definition_formation);
+WHERE
+  WR1: SIZEOF(QUERY(pdf
+                    <* product_definition_formation
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pdf.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'requirement')) >
+                       0) AND
+                      (SIZEOF(QUERY(pd
+                                    <* USEDIN(pdf,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FORMATION')
+                                    | pd.frame_of_reference.name = 'design constraint definition')) <
+                       1))) =
+       0;
+END_RULE;
+
+RULE dimensioning_data_requires_document FOR (applied_document_reference,
+                                              product_definition_context_association,
+                                              role_association);
+LOCAL
+  adr    : SET OF applied_document_reference             := (QUERY(adr
+                                                                   <* applied_document_reference
+                                                                   | (adr\document_reference.assigned_document\document.kind\document_type.product_data_type =
+                                                                      'Standards Document') AND
+                                                                     ((adr\document_reference.assigned_document\document.id =
+                                                                       'ASME Y14.41-2003') OR
+                                                                      (adr\document_reference.assigned_document\document.id =
+                                                                       'ASME Y14.5M-1994') OR
+                                                                      (adr\document_reference.assigned_document\document.id =
+                                                                       'ISO 1101: 2004'))));
+  pdca   : SET OF product_definition_context_association := (QUERY(pdca
+                                                                   <* product_definition_context_association
+                                                                   | (pdca\product_definition_context_association.role\product_definition_context_role.name =
+                                                                      'additional context') AND
+                                                                     (pdca\product_definition_context_association.frame_of_reference\application_context_element.name =
+                                                                      'Geometric Dimensioning and Tolerancing Product Specification')));
+  ra     : SET OF role_association                       := (QUERY(ra
+                                                                   <* role_association
+                                                                   | ra\role_association.role\object_role.name =
+                                                                     'dimensioning standard'));
+  ra1    : SET OF role_association                       := [];
+  pdpdca : SET OF product_definition                     := [];
+  pdadr  : SET OF product_definition                     := [];
+  pass   : BOOLEAN                                       := true;
+END_LOCAL;
+  REPEAT i := 1 TO HIINDEX(pdca);
+    pdpdca := pdpdca + pdca[i]\product_definition_context_association.definition;
+  END_REPEAT;
+  REPEAT i := 1 TO HIINDEX(adr);
+    ra1 := bag_to_set(USEDIN(adr[i],
+                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROLE_ASSOCIATION.ITEM_WITH_ROLE'));
+    IF (ra1 * ra) <> ra1
+    THEN
+      pass := false;
+    END_IF;
+    REPEAT j := 1 TO HIINDEX(adr[i]\applied_document_reference.items);
+      IF 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+         TYPEOF(adr[i]\applied_document_reference.items[j])
+      THEN
+        pdadr := pdadr + adr[i]\applied_document_reference.items[j];
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+WHERE
+  WR1: pass;
+  WR2: pdpdca = pdadr;
+END_RULE;
+
+RULE edge_round_requires_faces FOR (edge_round, property_definition_representation);
+WHERE
+  WR1: (0 =
+        SIZEOF(QUERY(er
+                     <* edge_round
+                     | NOT (1 =
+                            SIZEOF(QUERY(pdr
+                                         <* property_definition_representation
+                                         | ((pdr\property_definition_representation.definition\property_definition.definition =
+                                             er) AND
+                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (pdr.used_representation.name = 'edge round face'))))))));
+  WR2: (SIZEOF(QUERY(er
+                     <* edge_round
+                     | NOT (1 =
+                            SIZEOF(QUERY(pdr
+                                         <* property_definition_representation
+                                         | ((pdr\property_definition_representation.definition\property_definition.definition =
+                                             er) AND
+                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (pdr.used_representation.name = 'first face shape'))))))) =
+        0);
+  WR3: (SIZEOF(QUERY(er
+                     <* edge_round
+                     | NOT (1 =
+                            SIZEOF(QUERY(pdr
+                                         <* property_definition_representation
+                                         | ((pdr\property_definition_representation.definition\property_definition.definition =
+                                             er) AND
+                                            ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION' IN
+                                             TYPEOF(pdr.used_representation)) AND
+                                            (pdr.used_representation.name = 'second face shape'))))))) =
+        0);
+END_RULE;
+
+RULE external_version_assignments_are_valid FOR (applied_external_identification_assignment);
+WHERE
+  WR1: SIZEOF(QUERY(aia
+                    <* applied_external_identification_assignment
+                    | NOT external_version_assignment_is_valid(aia))) =
+       0;
+END_RULE;
+
+RULE material_for_coating_layer FOR (shape_aspect);
+LOCAL
+  coating_layers : SET OF shape_aspect := [];
+END_LOCAL;
+  coating_layers := QUERY(r <* shape_aspect | (r.name = 'coating layer'));
+WHERE
+  WR1: SIZEOF(QUERY(r
+                    <* coating_layers
+                    | SIZEOF(USEDIN(r,
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MATERIAL_DESIGNATION.DEFINITIONS')) <>
+                      1)) =
+       0;
+END_RULE;
+
+RULE non_uniform_zone_definition_constraint FOR (tolerance_zone_definition, tolerance_zone, tolerance_zone_form);
+LOCAL
+  tzf_set  : SET OF tolerance_zone_form       := QUERY(tzf
+                                                       <* tolerance_zone_form
+                                                       | tzf\tolerance_zone_form.name = 'non uniform');
+  nuzd_set : SET OF tolerance_zone_definition := QUERY(tzd
+                                                       <* tolerance_zone_definition
+                                                       | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_UNIFORM_ZONE_DEFINITION' IN
+                                                         TYPEOF(tzd));
+END_LOCAL;
+WHERE
+  WR1: QUERY(tzd <* nuzd_set | (tzd\tolerance_zone_definition.zone\tolerance_zone.form IN tzf_set)) = nuzd_set;
+END_RULE;
+
+RULE plib_property_reference_requires_name_scope FOR (externally_defined_general_property);
+LOCAL
+  known_sourced_properties : SET OF externally_defined_general_property;
+END_LOCAL;
+  known_sourced_properties := QUERY(edc
+                                    <* externally_defined_general_property
+                                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN
+                                      TYPEOF(edc.source));
+WHERE
+  WR1: SIZEOF(QUERY(edgp
+                    <* known_sourced_properties
+                    | (SIZEOF(QUERY(edir
+                                    <* USEDIN(edgp,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_ITEM_RELATIONSHIP.RELATING_ITEM')
+                                    | (edir.name = 'name scope') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EXTERNALLY_DEFINED_CLASS' IN
+                                       TYPEOF(edir.related_item)) AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN
+                                       TYPEOF(edir.related_item.source)))) <>
+                       1))) =
+       0;
+END_RULE;
+
+RULE plib_property_reference_requires_version FOR (externally_defined_general_property);
+LOCAL
+  plib_properties : SET OF externally_defined_general_property := [];
+END_LOCAL;
+  plib_properties := QUERY(edgp
+                           <* externally_defined_general_property
+                           | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE' IN
+                              TYPEOF(edgp.source)) AND
+                             ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.KNOWN_SOURCE.NAME' =
+                              'ISO 13584 library'));
+WHERE
+  WR1: SIZEOF(QUERY(edgp
+                    <* plib_properties
+                    | (SIZEOF(QUERY(edir
+                                    <* USEDIN(edgp,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT.ITEMS')
+                                    | (edir.role.name = 'version'))) <>
+                       1))) =
+       0;
+END_RULE;
+
+RULE ply_reference FOR (ply_laminate_sequence_definition,
+                        next_assembly_usage_occurrence,
+                        product_related_product_category);
+LOCAL
+  i     : INTEGER;
+  j     : INTEGER;
+  k     : INTEGER;
+  dkuhr : LOGICAL := true;
+  nnauo : INTEGER;
+  nprpc : INTEGER := 0;
+  rp    : product;
+END_LOCAL;
+  REPEAT i := LOINDEX(ply_laminate_sequence_definition) TO HIINDEX(ply_laminate_sequence_definition);
+    nnauo := 0;
+    REPEAT j := LOINDEX(next_assembly_usage_occurrence) TO HIINDEX(next_assembly_usage_occurrence);
+      IF (ply_laminate_sequence_definition[i] = next_assembly_usage_occurrence[j].relating_product_definition)
+      THEN
+        rp := next_assembly_usage_occurrence[j].related_product_definition.formation.of_product;
+        nprpc := 0;
+        REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
+          IF ((product_related_product_category[k].name = 'ply') AND
+              (rp IN product_related_product_category[k].products))
+          THEN
+            nprpc := nprpc + 1;
+          END_IF;
+        END_REPEAT;
+        IF (nprpc = 1)
+        THEN
+          nnauo := nnauo + 1;
+        ELSE
+          dkuhr := false;
+          ESCAPE;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+    IF (dkuhr = false)
+    THEN
+      ESCAPE;
+    END_IF;
+    IF (nnauo = 0)
+    THEN
+      dkuhr := false;
+      ESCAPE;
+    END_IF;
+  END_REPEAT;
+WHERE
+  WR1: dkuhr;
+END_RULE;
+
+RULE ply_stock_material_select FOR (product_related_product_category, make_from_usage_option);
+LOCAL
+  i     : INTEGER;
+  j     : INTEGER;
+  k     : INTEGER;
+  kp    : INTEGER;
+  dkuhr : LOGICAL;
+  nmfuo : INTEGER;
+  nprpc : INTEGER := 0;
+  rp    : product;
+END_LOCAL;
+  dkuhr := true;
+  REPEAT kp := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
+    IF (product_related_product_category[kp].name = 'ply')
+    THEN
+      REPEAT i := LOINDEX(product_related_product_category[kp].products) TO HIINDEX(product_related_product_category[kp].products);
+        nmfuo := 0;
+        REPEAT j := LOINDEX(make_from_usage_option) TO HIINDEX(make_from_usage_option);
+          rp := make_from_usage_option[j].related_product_definition.formation.of_product;
+          IF (product_related_product_category[kp].products[i] = rp)
+          THEN
+            REPEAT k := LOINDEX(product_related_product_category) TO HIINDEX(product_related_product_category);
+              IF ((rp IN product_related_product_category[k].products) AND
+                  (product_related_product_category[k].name IN
+                   ['isotropic material','filament assembly','discontinuous fiber assembly']))
+              THEN
+                nprpc := nprpc + 1;
+              END_IF;
+            END_REPEAT;
+            IF (nprpc = 1)
+            THEN
+              nmfuo := nmfuo + 1;
+            ELSE
+              dkuhr := false;
+              ESCAPE;
+            END_IF;
+          END_IF;
+        END_REPEAT;
+        IF (dkuhr = false)
+        THEN
+          ESCAPE;
+        END_IF;
+        IF (nmfuo <> 1)
+        THEN
+          dkuhr := false;
+          ESCAPE;
+        END_IF;
+      END_REPEAT;
+    END_IF;
+  END_REPEAT;
+WHERE
+  WR1: dkuhr;
+END_RULE;
+
+RULE product_concept_feature_requires_category FOR (product_concept_feature);
+WHERE
+  WR1: SIZEOF(QUERY(pcf
+                    <* product_concept_feature
+                    | (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE',
+                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE'] *
+                              TYPEOF(pcf)) =
+                       0) AND
+                      (SIZEOF(QUERY(aga
+                                    <* USEDIN(pcf,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_GROUP_ASSIGNMENT.ITEMS')
+                                    | (aga\group_assignment.role\object_role.name =
+                                       'specification category member') AND
+                                      ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN
+                                       TYPEOF(aga.assigned_group)))) <>
+                       1))) =
+       0;
+END_RULE;
+
+RULE product_definition_replacement_requires_effectivity_assignment FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name = 'definition replacement') AND
+                      (SIZEOF(USEDIN(pdr,
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_EFFECTIVITY_ASSIGNMENT.ITEMS')) =
+                       0))) =
+       0;
+END_RULE;
+
+RULE restrict_alternative_definition FOR (product_definition);
+LOCAL
+  solution_definitions : SET OF product_definition := [];
+END_LOCAL;
+  solution_definitions := QUERY(pd <* product_definition | (pd.frame_of_reference.name = 'alternative definition'));
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* solution_definitions
+                    | (SIZEOF(QUERY(pdr
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                    | pdr.name = 'solution alternative definition')) <>
+                       1))) =
+       0;
+  WR2: SIZEOF(QUERY(pd <* solution_definitions | NOT (pd.name IN ['technical','supplier','technical supplier','']))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* solution_definitions
+                    | (pd.name IN ['supplier','technical supplier']) AND
+                      (SIZEOF(QUERY(aoa
+                                    <* USEDIN(pd.formation,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.APPLIED_ORGANIZATION_ASSIGNMENT.ITEMS')
+                                    | aoa.role.name = 'supplier')) <>
+                       1))) =
+       0;
+END_RULE;
+
+RULE restrict_assembly_category FOR (product_definition);
+LOCAL
+  assembly_definitions : SET OF product_definition := [];
+END_LOCAL;
+  assembly_definitions := QUERY(pd
+                                <* product_definition
+                                | SIZEOF(QUERY(pdca
+                                               <* USEDIN(pd,
+                                                         'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION')
+                                               | pdca.frame_of_reference.name = 'assembly definition')) >
+                                  0);
+WHERE
+  WR1: SIZEOF(QUERY(pd <* assembly_definitions | NOT ('assembly' IN categories_of_product(pd.formation.of_product)))) =
+       0;
+END_RULE;
+
+RULE restrict_centre_of_mass_representation FOR (representation);
+WHERE
+  WR1: SIZEOF(QUERY(r
+                    <* representation
+                    | (r.name = 'centre of mass') AND
+                      ((SIZEOF(r.items) <> 1) OR
+                       (SIZEOF(QUERY(i
+                                     <* r.items
+                                     | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT' IN TYPEOF(i)) AND
+                                       (i.name = 'centre point'))) <>
+                        1)))) =
+       0;
+END_RULE;
+
+RULE restrict_classification_assignments FOR (applied_classification_assignment);
+WHERE
+  WR1: SIZEOF(QUERY(aia <* applied_classification_assignment | NOT class_assignment_is_valid(aia))) = 0;
+END_RULE;
+
+RULE restrict_collection_category FOR (product_definition);
+LOCAL
+  collection_definitions : SET OF product_definition := [];
+END_LOCAL;
+  collection_definitions := QUERY(pd
+                                  <* product_definition
+                                  | SIZEOF(QUERY(pdca
+                                                 <* USEDIN(pd,
+                                                           'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION')
+                                                 | pdca.frame_of_reference.name = 'collection definition')) >
+                                    0);
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* collection_definitions
+                    | NOT ('collection' IN categories_of_product(pd.formation.of_product)))) =
+       0;
+END_RULE;
+
+RULE restrict_concept_feature_operator FOR (concept_feature_operator);
+WHERE
+  WR1: SIZEOF(QUERY(cfo <* concept_feature_operator | NOT (cfo.name IN ['and','or','oneof','not','implication']))) = 0;
+  WR2: SIZEOF(QUERY(cfo
+                    <* concept_feature_operator
+                    | (cfo.name = 'implication') AND
+                      (SIZEOF(QUERY(cfrwc
+                                    <* USEDIN(cfo,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.CONDITIONAL_OPERATOR')
+                                    | SIZEOF(QUERY(ccf
+                                                   <* USEDIN(cfrwc,
+                                                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONDITIONAL_CONCEPT_FEATURE.CONDITION')
+                                                   | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.INCLUSION_PRODUCT_CONCEPT_FEATURE' IN
+                                                          TYPEOF(ccf)))) >
+                                      0)) >
+                       0))) =
+       0;
+  WR3: SIZEOF(QUERY(cfo
+                    <* concept_feature_operator
+                    | (cfo.name = 'not') AND
+                      (SIZEOF(QUERY(cfrwc
+                                    <* USEDIN(cfo,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.CONDITIONAL_OPERATOR')
+                                    | cfrwc.related_product_concept_feature :<>:
+                                      cfrwc.relating_product_concept_feature)) >
+                       0))) =
+       0;
+END_RULE;
+
+RULE restrict_configuration_design_for_class_breakdown_association FOR (configuration_design);
+WHERE
+  WR1: SIZEOF(QUERY(cd
+                    <* configuration_design
+                    | (cd.name = 'functionality') AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+                            TYPEOF(cd.design)) OR
+                           (cd.design\product_definition.frame_of_reference.name <> 'functional definition')))) =
+       0;
+  WR2: SIZEOF(QUERY(cd
+                    <* configuration_design
+                    | (cd.name = 'realization') AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+                            TYPEOF(cd.design)) OR
+                           (cd.design\product_definition.frame_of_reference.name <> 'conceptual definition')))) =
+       0;
+  WR3: SIZEOF(QUERY(cd
+                    <* configuration_design
+                    | (cd.name IN ['functionality','realization']) AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CLASS' IN
+                            TYPEOF(cd.configuration.item_concept))))) =
+       0;
+END_RULE;
+
+RULE restrict_configuration_design_for_design_constraint FOR (configuration_design);
+WHERE
+  WR1: SIZEOF(QUERY(cd
+                    <* configuration_design
+                    | (cd.name = 'design constraint usage') AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION' IN
+                            TYPEOF(cd.design)) OR
+                           (cd.design\product_definition.frame_of_reference.name <>
+                            'design constraint definition')))) =
+       0;
+END_RULE;
+
+RULE restrict_group_relationship_for_classification_hierarchy FOR (group_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(gr
+                    <* group_relationship
+                    | (gr\group_relationship.name = 'class hierarchy') AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS' IN
+                            TYPEOF(gr\group_relationship.related_group)) OR
+                           NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CLASS' IN
+                                TYPEOF(gr\group_relationship.relating_group))))) =
+       0;
+END_RULE;
+
+RULE restrict_group_relationship_for_specification_category FOR (group_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(gr
+                    <* group_relationship
+                    | (gr.name = 'specification category hierarchy') AND
+                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN
+                            TYPEOF(gr.related_group)) OR
+                           NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_CONCEPT_FEATURE_CATEGORY' IN
+                                TYPEOF(gr.relating_group))))) =
+       0;
+END_RULE;
+
+RULE restrict_language_assignment_per_attribute FOR (attribute_language_assignment);
+WHERE
+  WR1: SIZEOF(QUERY(ala1
+                    <* attribute_language_assignment
+                    | SIZEOF(QUERY(it
+                                   <* ala1.items
+                                   | SIZEOF(QUERY(ala2
+                                                  <* USEDIN(it,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS')
+                                                  | (ala1\attribute_classification_assignment.attribute_name =
+                                                     ala2\attribute_classification_assignment.attribute_name) AND
+                                                    (ala1\attribute_classification_assignment.assigned_class :=:
+                                                     ala2\attribute_classification_assignment.assigned_class))) >
+                                     1)) >
+                      0)) =
+       0;
+END_RULE;
+
+RULE restrict_part_occurrence FOR (product_definition);
+LOCAL
+  part_occurrences : SET OF product_definition := QUERY(pd
+                                                        <* product_definition
+                                                        | (pd.frame_of_reference.name = 'part occurrence'));
+END_LOCAL;
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (NOT (pd.name IN
+                            ['single instance','selected instance','quantified instance','specified instance'])))) =
+       0;
+  WR2: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (SIZEOF(QUERY(pdr
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                    | pdr.name = 'definition usage')) <>
+                       1) AND
+                      (SIZEOF(QUERY(cd
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONFIGURATION_DESIGN.DESIGN')
+                                    | (cd.name = 'occurrence usage definition') AND
+                                      (NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_IDENTIFICATION' IN
+                                            TYPEOF(cd.configuration))))) <>
+                       1))) =
+       0;
+  WR3: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (SIZEOF(QUERY(cd
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
+                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_USAGE' IN
+                                       TYPEOF(cd)))) =
+                       0) AND
+                      (SIZEOF(USEDIN(pd,
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.OCCURRENCE')) =
+                       0))) =
+       0;
+  WR4: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (pd.name = 'selected instance') AND NOT valid_selected_instance_representation(pd))) =
+       0;
+  WR5: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (pd.name = 'quantified instance') AND
+                      (SIZEOF(QUERY(ppd
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION.DEFINITION')
+                                    | (ppd.name = 'occurrence quantity') AND
+                                      (SIZEOF(QUERY(pdr
+                                                    <* USEDIN(ppd,
+                                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')
+                                                    | (pdr.used_representation.name = 'quantity') AND
+                                                      (SIZEOF(pdr.used_representation.items) = 1) AND
+                                                      (SIZEOF(QUERY(i
+                                                                    <* pdr.used_representation.items
+                                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM' IN
+                                                                       TYPEOF(i)) AND
+                                                                      (i.name = 'quantity measure'))) =
+                                                       1))) =
+                                       1))) =
+                       0))) =
+       0;
+  WR6: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (pd.name = 'specified instance') AND
+                      (SIZEOF(QUERY(pdor
+                                    <* USEDIN(pd,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.OCCURRENCE')
+                                    | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SPECIFIED_HIGHER_USAGE_OCCURRENCE' IN
+                                      TYPEOF(pdor.occurrence_usage))) =
+                       0))) =
+       0;
+END_RULE;
+
+RULE restrict_part_occurrence_category FOR (product_definition);
+LOCAL
+  part_occurrences : SET OF product_definition := QUERY(pd
+                                                        <* product_definition
+                                                        | (pd.frame_of_reference.name = 'part occurrence'));
+END_LOCAL;
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* part_occurrences
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pd.formation.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name IN ['part','raw material','tool'])) =
+                       0))) =
+       0;
+END_RULE;
+
+RULE restrict_product_definitions_for_base_element FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name = 'solution alternative definition') AND
+                      (NOT (pdr.relating_product_definition.frame_of_reference.name IN
+                            ['alternative definition','functional definition','conceptual definition']) OR
+                           (pdr.related_product_definition.frame_of_reference.name <> 'alternative definition')))) =
+       0;
+END_RULE;
+
+RULE restrict_product_definitions_for_collection FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name = 'collection membership') AND
+                      ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR
+                       (pdr.related_product_definition.frame_of_reference.name <> 'part occurrence') OR
+                       (SIZEOF(QUERY(pdca
+                                     <* USEDIN(pdr.relating_product_definition,
+                                               'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION')
+                                     | (pdca.role.name = 'part definition type') AND
+                                       (pdca.frame_of_reference.name = 'collection definition'))) =
+                        0)))) =
+       0;
+END_RULE;
+
+RULE restrict_product_definitions_for_definition_usage FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name = 'definition usage') AND
+                      ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR
+                       (pdr.related_product_definition.frame_of_reference.name <> 'part occurrence')))) =
+       0;
+END_RULE;
+
+RULE restrict_product_definitions_for_design_constraint_association FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name = 'design constraint association') AND
+                      ((pdr.relating_product_definition.frame_of_reference.name <> 'design constraint definition') OR
+                       NOT (pdr.related_product_definition.frame_of_reference.name IN
+                            ['alternative definition','functional definition','conceptual definition'])))) =
+       0;
+END_RULE;
+
+RULE restrict_product_definitions_for_part_definition_relationship FOR (product_definition_relationship);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* product_definition_relationship
+                    | (pdr.name IN ['geometrical relationship','definition replacement']) AND
+                      ((pdr.relating_product_definition.frame_of_reference.name <> 'part definition') OR
+                       (pdr.related_product_definition.frame_of_reference.name <> 'part definition')))) =
+       0;
+END_RULE;
+
+RULE restrict_representation_for_surface_condition FOR (property_definition_representation);
+WHERE
+  WR1: SIZEOF(QUERY(pdr
+                    <* property_definition_representation
+                    | NOT surface_condition_correlation(pdr.definition, pdr.used_representation))) =
+       0;
+END_RULE;
+
+RULE restrict_support_structure_category FOR (product_definition);
+LOCAL
+  support_structures : SET OF product_definition := [];
+END_LOCAL;
+  support_structures := QUERY(pd
+                              <* product_definition
+                              | (SIZEOF(QUERY(prpc
+                                              <* USEDIN(pd.formation.of_product,
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                              | prpc.name = 'additive manufacturing support structure')) <>
+                                 0));
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* support_structures
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pd.formation.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'part')) <>
+                       0))) =
+       0;
+END_RULE;
+
+RULE restrict_treatment_result FOR (representation);
+LOCAL
+  treatment_results : SET OF representation := [];
+END_LOCAL;
+  treatment_results := QUERY(r <* representation | (r.name = 'treatment result'));
+WHERE
+  WR1: (SIZEOF(QUERY(r <* treatment_results | (SIZEOF(r.items) > 2))) = 0) AND
+       (SIZEOF(QUERY(r
+                     <* treatment_results
+                     | (SIZEOF(QUERY(i
+                                     <* r.items
+                                     | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DESCRIPTIVE_REPRESENTATION_ITEM' IN
+                                            TYPEOF(i)))) >
+                        0))) =
+        0);
+  WR2: SIZEOF(QUERY(r <* treatment_results | (SIZEOF(QUERY(i <* r.items | i.name = 'result')) = 0))) = 0;
+  WR3: SIZEOF(QUERY(r <* treatment_results | (SIZEOF(QUERY(i <* r.items | i.name = 'purpose')) > 1))) = 0;
+END_RULE;
+
+RULE selected_instance_usage_requires_representation FOR (assembly_component_usage);
+LOCAL
+  selected_instance_usages : SET OF assembly_component_usage := QUERY(acr
+                                                                      <* assembly_component_usage
+                                                                      | (acr.name = 'selected instance usage'));
+END_LOCAL;
+WHERE
+  WR1: SIZEOF(QUERY(acr <* selected_instance_usages | NOT valid_selected_instance_representation(acr))) = 0;
+END_RULE;
+
+RULE solution_definition_requires_solution_category FOR (product_definition);
+LOCAL
+  solution_definitions : SET OF product_definition := [];
+END_LOCAL;
+  solution_definitions := QUERY(pd <* product_definition | (pd.frame_of_reference.name = 'alternative definition'));
+WHERE
+  WR1: SIZEOF(QUERY(pd
+                    <* solution_definitions
+                    | (SIZEOF(QUERY(prpc
+                                    <* USEDIN(pd.formation.of_product,
+                                              'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS')
+                                    | prpc.name = 'alternative solution')) =
+                       0))) =
+       0;
+END_RULE;
+
+RULE styled_curve FOR (styled_item);
+WHERE
+  WR1: SIZEOF(QUERY(si
+                    <* styled_item
+                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE' IN TYPEOF(si.item)) AND
+                      (SIZEOF(QUERY(psa
+                                    <* si.styles
+                                    | (SIZEOF(QUERY(cs
+                                                    <* psa.styles
+                                                    | ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_STYLE' IN
+                                                       TYPEOF(cs)))) >
+                                       0))) <>
+                       1))) =
+       0;
+END_RULE;
+
+RULE subtype_exclusiveness_geometric_tolerance FOR (geometric_tolerance);
+WHERE
+  WR1: SIZEOF(QUERY(gt
+                    <* geometric_tolerance
+                    | NOT (type_check_function(gt,
+                                               ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ANGULARITY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CIRCULAR_RUNOUT_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COAXIALITY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CONCENTRICITY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CYLINDRICITY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FLATNESS_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LINE_PROFILE_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PARALLELISM_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PERPENDICULARITY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POSITION_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ROUNDNESS_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.STRAIGHTNESS_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SURFACE_PROFILE_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SYMMETRY_TOLERANCE',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TOTAL_RUNOUT_TOLERANCE'],
+                                               2)))) =
+       0;
+END_RULE;
+
+RULE subtype_exclusiveness_representation_item FOR (representation_item);
+WHERE
+  WR1: SIZEOF(QUERY(cri
+                    <* representation_item
+                    | NOT (type_check_function(cri,
+                                               ['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MEASURE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.VALUE_REPRESENTATION_ITEM',
+                                                'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_REPRESENTATION_ITEM'],
+                                               3)))) =
+       0;
+END_RULE;
+
+RULE subtype_mandatory_shape_representation FOR (shape_representation);
+WHERE
+  WR1: SIZEOF(QUERY(sr
+                    <* shape_representation
+                    | NOT ((SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ADVANCED_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACETED_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.BEVELED_SHEET_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOSITE_SHEET_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.COMPOUND_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_2D_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CSG_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.CURVE_SWEPT_SOLID_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.DIRECTION_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ELEMENTARY_BREP_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.FACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.LOCATION_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NEUTRAL_SKETCH_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PATH_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PLANAR_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.POINT_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROCEDURAL_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.REPRESENTATIVE_SHAPE_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DIMENSION_REPRESENTATION',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_REPRESENTATION_WITH_PARAMETERS',
+                                    'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TESSELLATED_SHAPE_REPRESENTATION'] *
+                                   TYPEOF(sr)) =
+                            1) OR
+                           (SIZEOF(QUERY(it
+                                         <* sr\representation.items
+                                         | NOT ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.AXIS2_PLACEMENT_3D' IN
+                                                TYPEOF(it)))) =
+                            0) OR
+                           (SIZEOF(QUERY(sdr
+                                         <* QUERY(pdr
+                                                  <* USEDIN(sr,
+                                                            'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')
+                                                  | 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_DEFINITION_REPRESENTATION' IN
+                                                    TYPEOF(pdr))
+                                         | NOT (SIZEOF(['AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT',
+                                                        'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT_RELATIONSHIP'] *
+                                                       TYPEOF(sdr.definition)) =
+                                                1))) =
+                            0)))) =
+       0;
+END_RULE;
+
+RULE text_font_usage FOR (externally_defined_text_font, pre_defined_text_font);
+WHERE
+  WR1: SIZEOF(QUERY(pdtf
+                    <* pre_defined_text_font
+                    | SIZEOF(USEDIN(pdtf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL.FONT')) = 0)) =
+       0;
+  WR2: SIZEOF(QUERY(edtf
+                    <* externally_defined_text_font
+                    | SIZEOF(USEDIN(edtf, 'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.TEXT_LITERAL.FONT')) = 0)) =
+       0;
+END_RULE;
+
+RULE tolerance_zone_form_name_constraint FOR (tolerance_zone_form);
+LOCAL
+  names : SET OF STRING := ['within a circle',
+                            'within a cylinder',
+                            'within a cone',
+                            'within a single complex surface',
+                            'within a sphere',
+                            'between two coaxial cylinders',
+                            'between two concentric circles',
+                            'between two equidistant curves',
+                            'between two equidistant complex lines or two parallel straight lines',
+                            'between two equidistant complex surfaces or two parallel planes',
+                            'between two equidistant surfaces',
+                            'between two non-equidistant complex lines or two non-parallel straight lines',
+                            'between two non-equidistant complex surfaces or two non-parallel planes',
+                            'between two parallel circles on a conical surface',
+                            'between two parallel circles of the same diameter',
+                            'non uniform',
+                            'cylindrical or circular',
+                            'spherical',
+                            'unknown'];
+  pass  : BOOLEAN       := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(tolerance_zone_form)
+  WHILE pass;
+    pass := (tolerance_zone_form[i].name IN names);
+  END_REPEAT;
+WHERE
+  WR1: pass;
+END_RULE;
+
+RULE transition_feature_on_part_boundary FOR (transition_feature);
+WHERE
+  WR1: SIZEOF(QUERY(tf <* transition_feature | NOT (tf.product_definitional))) = 0;
+END_RULE;
+
+RULE unique_datum_system FOR (datum_system);
+LOCAL
+  pass : BOOLEAN := true;
+END_LOCAL;
+  REPEAT i := 1 TO SIZEOF(datum_system);
+    REPEAT j := 1 TO SIZEOF(datum_system);
+      IF (i <> j)
+      THEN
+        IF datum_system[i]\datum_system.constituents = datum_system[j]\datum_system.constituents
+        THEN
+          pass := false;
+        END_IF;
+      END_IF;
+    END_REPEAT;
+  END_REPEAT;
+WHERE
+  WR1: pass;
+END_RULE;
+
+RULE unique_gdt_element_id_constraint FOR (product_definition_shape,
+                                           dimensional_location,
+                                           dimensional_size,
+                                           shape_aspect,
+                                           shape_aspect_relationship);
+LOCAL
+  bss  : BAG OF STRING                    := [];
+  ds   : SET OF dimensional_size          := QUERY(ds <* dimensional_size | EXISTS(ds\dimensional_size.id));
+  sa   : SET OF shape_aspect              := QUERY(sa <* shape_aspect | EXISTS(sa\shape_aspect.id));
+  sar  : SET OF shape_aspect_relationship := QUERY(sar
+                                                   <* shape_aspect_relationship
+                                                   | EXISTS(sar\shape_aspect_relationship.id));
+  ssa  : SET OF shape_aspect              := [];
+  pass : BOOLEAN                          := true;
+END_LOCAL;
+  REPEAT ii := 1 TO SIZEOF(product_definition_shape)
+  WHILE pass;
+    bss := [];
+    ssa := bag_to_set(USEDIN(product_definition_shape[ii],
+                             'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SHAPE_ASPECT.OF_SHAPE'));
+    REPEAT i := 1 TO SIZEOF(ds);
+      IF (ds[i]\dimensional_size.applies_to IN ssa)
+      THEN
+        bss := bss + ds[i]\dimensional_size.id;
+      END_IF;
+    END_REPEAT;
+    REPEAT i := 1 TO SIZEOF(sa);
+      IF (sa[i] IN ssa)
+      THEN
+        bss := bss + sa[i]\shape_aspect.id;
+      END_IF;
+    END_REPEAT;
+    REPEAT i := 1 TO SIZEOF(sar);
+      IF (sar[i]\shape_aspect_relationship.relating_shape_aspect IN ssa)
+      THEN
+        bss := bss + sar[i]\shape_aspect_relationship.id;
+      END_IF;
+    END_REPEAT;
+    IF (SIZEOF(bag_to_set(bss)) <> SIZEOF(bss))
+    THEN
+      pass := false;
+    END_IF;
+  END_REPEAT;
+WHERE
+  WR1: pass;
+END_RULE;
+
+RULE valid_product_and_manufacturing_information_view_contexts FOR (product_definition_context);
+LOCAL
+  design_view_contexts                                 : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.life_cycle_stage =
+                                                                                                      'design');
+  gdt_representation_view_contexts                     : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'geometrical dimensioning and tolerancing representation');
+  machining_feature_view_contexts                      : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'machining feature');
+  material_specification_view_contexts                 : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'material specification');
+  model_based_3d_annotation_presentation_view_contexts : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'model based 3D annotation presentation');
+  model_based_view_contexts                            : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'model based product geometry');
+  process_state_view_contexts                          : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'process state');
+  surface_finish_view_contexts                         : SET OF product_definition_context := QUERY(pdc
+                                                                                                    <* product_definition_context
+                                                                                                    | pdc.frame_of_reference.application =
+                                                                                                      'surface finish');
+  additional_view_contexts                             : SET OF product_definition_context := gdt_representation_view_contexts +
+                                                                                              machining_feature_view_contexts +
+                                                                                              material_specification_view_contexts +
+                                                                                              model_based_3d_annotation_presentation_view_contexts +
+                                                                                              process_state_view_contexts +
+                                                                                              surface_finish_view_contexts;
+  need_initial_model_based_view_contexts               : SET OF product_definition_context := gdt_representation_view_contexts +
+                                                                                              model_based_3d_annotation_presentation_view_contexts;
+END_LOCAL;
+WHERE
+  WR1: SIZEOF(gdt_representation_view_contexts * design_view_contexts) = SIZEOF(gdt_representation_view_contexts);
+  WR2: SIZEOF(machining_feature_view_contexts * design_view_contexts) = SIZEOF(machining_feature_view_contexts);
+  WR3: SIZEOF(material_specification_view_contexts * design_view_contexts) =
+       SIZEOF(material_specification_view_contexts);
+  WR4: SIZEOF(model_based_3d_annotation_presentation_view_contexts * design_view_contexts) =
+       SIZEOF(model_based_3d_annotation_presentation_view_contexts);
+  WR5: SIZEOF(model_based_view_contexts * design_view_contexts) = SIZEOF(model_based_view_contexts);
+  WR6: SIZEOF(process_state_view_contexts * design_view_contexts) = SIZEOF(process_state_view_contexts);
+  WR7: SIZEOF(surface_finish_view_contexts * design_view_contexts) = SIZEOF(surface_finish_view_contexts);
+  WR8: SIZEOF(QUERY(mbvc
+                    <* model_based_view_contexts
+                    | (SIZEOF(USEDIN(mbvc,
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.FRAME_OF_REFERENCE')) =
+                       0))) =
+       SIZEOF(model_based_view_contexts);
+  WR9: SIZEOF(QUERY(avc
+                    <* additional_view_contexts
+                    | (SIZEOF(USEDIN(avc,
+                                     'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION.FRAME_OF_REFERENCE')) =
+                       0))) =
+       SIZEOF(additional_view_contexts);
+  WR10: SIZEOF(QUERY(nimbvc
+                     <* need_initial_model_based_view_contexts
+                     | NOT (SIZEOF(QUERY(pdca
+                                         <* USEDIN(nimbvc,
+                                                   'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.FRAME_OF_REFERENCE')
+                                         | (pdca\product_definition_context_association.definition\product_definition.frame_of_reference IN
+                                            model_based_view_contexts))) =
+                            SIZEOF(need_initial_model_based_view_contexts)))) =
+        0;
+  WR11: SIZEOF(QUERY(gdt_pdc
+                     <* gdt_representation_view_contexts
+                     | SIZEOF(['ISO 1101','ASME Y14.5'] * get_associated_mandatory_document_ids(gdt_pdc)) = 0)) =
+        0;
+  WR12: SIZEOF(QUERY(mb3d_pdc
+                     <* model_based_3d_annotation_presentation_view_contexts
+                     | SIZEOF(['ISO 1101','ISO 16792','ASME Y14.41','ASME Y14.5'] *
+                              get_associated_mandatory_document_ids(mb3d_pdc)) =
+                       0)) =
+        0;
+END_RULE;
+
+RULE validate_dependently_instantiable_entity_data_types FOR (aggregate_id_attribute,
+                                                              attribute_value_role,
+                                                              camera_model_d2,
+                                                              classification_assignment_relationship,
+                                                              concept_feature_relationship,
+                                                              concept_feature_relationship_with_condition,
+                                                              data_equivalence_assessment_specification,
+                                                              data_equivalence_criteria_representation,
+                                                              data_equivalence_criterion,
+                                                              data_equivalence_inspection_instance_report_item,
+                                                              data_equivalence_inspection_requirement,
+                                                              data_equivalence_inspection_result_representation,
+                                                              document_usage_constraint,
+                                                              edge_blended_solid,
+                                                              effectivity_context_role,
+                                                              event_occurrence_role,
+                                                              explicit_procedural_representation_item_relationship,
+                                                              founded_item,
+                                                              indirectly_selected_elements,
+                                                              location_representation_role,
+                                                              location_role,
+                                                              modified_solid_with_placed_configuration,
+                                                              one_direction_repeat_factor,
+                                                              organization_type_role,
+                                                              procedural_representation,
+                                                              procedural_representation_sequence,
+                                                              product_definition_effectivity,
+                                                              product_definition_relationship_relationship,
+                                                              runout_zone_orientation,
+                                                              solid_with_depression,
+                                                              solid_with_hole,
+                                                              solid_with_pocket,
+                                                              solid_with_protrusion,
+                                                              solid_with_shape_element_pattern,
+                                                              solid_with_slot,
+                                                              swept_area_solid,
+                                                              symbol_target,
+                                                              two_direction_repeat_factor,
+                                                              user_selected_elements);
+LOCAL
+  number_of_input_instances : INTEGER;
+  previous_in_chain         : LIST OF GENERIC := [];
+  set_of_input_types        : SET OF STRING   := [];
+  all_instances             : SET OF GENERIC  := [];
+END_LOCAL;
+  all_instances := all_instances + aggregate_id_attribute;
+  all_instances := all_instances + attribute_value_role;
+  all_instances := all_instances + camera_model_d2;
+  all_instances := all_instances + classification_assignment_relationship;
+  all_instances := all_instances + concept_feature_relationship;
+  all_instances := all_instances + concept_feature_relationship_with_condition;
+  all_instances := all_instances + data_equivalence_assessment_specification;
+  all_instances := all_instances + data_equivalence_criteria_representation;
+  all_instances := all_instances + data_equivalence_criterion;
+  all_instances := all_instances + data_equivalence_inspection_instance_report_item;
+  all_instances := all_instances + data_equivalence_inspection_requirement;
+  all_instances := all_instances + data_equivalence_inspection_result_representation;
+  all_instances := all_instances + document_usage_constraint;
+  all_instances := all_instances + edge_blended_solid;
+  all_instances := all_instances + effectivity_context_role;
+  all_instances := all_instances + event_occurrence_role;
+  all_instances := all_instances + explicit_procedural_representation_item_relationship;
+  all_instances := all_instances + founded_item;
+  all_instances := all_instances + indirectly_selected_elements;
+  all_instances := all_instances + location_representation_role;
+  all_instances := all_instances + location_role;
+  all_instances := all_instances + modified_solid_with_placed_configuration;
+  all_instances := all_instances + one_direction_repeat_factor;
+  all_instances := all_instances + organization_type_role;
+  all_instances := all_instances + procedural_representation;
+  all_instances := all_instances + procedural_representation_sequence;
+  all_instances := all_instances + product_definition_effectivity;
+  all_instances := all_instances + product_definition_relationship_relationship;
+  all_instances := all_instances + runout_zone_orientation;
+  all_instances := all_instances + solid_with_depression;
+  all_instances := all_instances + solid_with_hole;
+  all_instances := all_instances + solid_with_pocket;
+  all_instances := all_instances + solid_with_protrusion;
+  all_instances := all_instances + solid_with_shape_element_pattern;
+  all_instances := all_instances + solid_with_slot;
+  all_instances := all_instances + swept_area_solid;
+  all_instances := all_instances + symbol_target;
+  all_instances := all_instances + two_direction_repeat_factor;
+  all_instances := all_instances + user_selected_elements;
+  ;
+  number_of_input_instances := SIZEOF(all_instances);
+  REPEAT i := 1 TO number_of_input_instances;
+    set_of_input_types := set_of_input_types + TYPEOF(all_instances[i]);
+  END_REPEAT;
+WHERE
+  WR1: dependently_instantiated(all_instances, set_of_input_types, previous_in_chain);
+END_RULE;
+END_SCHEMA;
diff --git a/src/ExpToCasExe/expformat.l b/src/ExpToCasExe/expformat.l
new file mode 100644 (file)
index 0000000..797eeff
--- /dev/null
@@ -0,0 +1,56 @@
+%{
+
+/* This LEX scanner is intended for formatting EXPRESS definitions */
+/* in order to allow comparison with other: */
+/* - remove comments */
+/* - remove all spaces */
+/* - insert a CR (\n) after each ';' */
+/* - insert a space after each word (identifier or number) */
+
+/************************************/
+/* Section 1                        */
+/* definitions                      */
+%}
+
+
+%x COMM
+
+KEYWORD    [A-Z_]+
+NAME       [a-z_][a-z0-9_]*
+NUMBER     [0-9]+
+SPACE      [ \t\n]
+SPC        {SPACE}+
+SP         {SPACE}*
+
+%{
+
+static int fun_level=0;
+
+/************************************/
+/* Section 2                        */
+/* parsing rules                    */
+%}
+
+%%
+
+"--".*               ; /* Eat line comments */
+"(*"                 BEGIN(COMM);
+<COMM>.|\n           ; /* Eat multiline comments */
+<COMM>"*)"           BEGIN(0);
+
+;                    printf ( ";\n" );
+[A-Za-z_0-9+-]+      printf ( "%s ", yytext );
+[ \t\n]+             ; /* condense spaces */
+
+%%
+
+/************************************/
+/* Section 3                        */
+/* calling and auxiliary procedures */
+
+int main ( void )
+{
+  yylex();
+}
+
+int yywrap(void) { return 1; }
diff --git a/src/ExpToCasExe/explist.l b/src/ExpToCasExe/explist.l
new file mode 100644 (file)
index 0000000..62a1120
--- /dev/null
@@ -0,0 +1,76 @@
+%{
+
+/* This LEX scanner produces list of items included in the EXPRESS schema  */
+/* (TYPE, ENTITY, FUNCTION, RULE) */
+
+/************************************/
+/* Section 1                        */
+/* definitions                      */
+%}
+
+
+%x CONST, TYP, TYP1, ENT, ENT1, LIST, COMM, SKP, FUN, FUN1, RUL
+
+KEYWORD    [A-Z_]+
+NAME       [a-z_][a-z0-9_]*
+NUMBER     [0-9]+
+SPACE      [ \t\n]
+SPC        {SPACE}+
+SP         {SPACE}*
+
+%{
+
+static int fun_level=0;
+
+/************************************/
+/* Section 2                        */
+/* parsing rules                    */
+%}
+
+%%
+
+"--".*               ; /* Eat line comments */
+"(*"                 { printf ( "Starting multiline comment\n" ); BEGIN(COMM); }
+<COMM>.|\n           ; /* Eat multiline comments */
+<COMM>"*)"           { printf ( "End of multiline comment\n" ); BEGIN(0); }
+
+SCHEMA" "{NAME};     printf ( "Starting %s\n", yytext ); 
+END_SCHEMA;          printf ( "Schema finished\n" );
+
+TYPE                 { BEGIN(TYP); }
+<TYP>{NAME}          { printf ( "TYPE %s\n", yytext ); BEGIN(TYP1); }
+<TYP1>.|\n           ; /* eat any unrecognized data */
+<TYP,TYP1,SKP>END_TYPE  { printf ( "\n" ); BEGIN(0); }
+
+ENTITY               { BEGIN(ENT); }
+<ENT>{NAME}          { printf ( "ENTITY %s\n", yytext ); BEGIN(ENT1); }
+<ENT1>.|\n           ; /* eat any unrecognized data */
+<ENT,ENT1,SKP>END_ENTITY  BEGIN(0);
+
+<ENT,TYP>DERIVE      |
+<ENT,TYP>WHERE       BEGIN(SKP);
+<SKP>.|\n            ; /* eat contents of WHERE and DERIVE subclauses */
+
+<INITIAL,FUN1>^{SP}FUNCTION  { BEGIN(FUN); fun_level++; }
+<FUN>{NAME}          { printf ( "FUNCTION %s\n", yytext ); BEGIN(FUN1); }
+<FUN1>.|\n           ; /* eat contents of WHERE and DERIVE subclauses */
+<FUN,FUN1>END_FUNCTION  { fun_level--; if ( ! fun_level ) BEGIN(0); }
+
+RULE                 { BEGIN(RUL); }
+<RUL>{NAME}          { printf ( "RULE %s\n", yytext ); BEGIN(SKP); }
+<RUL,SKP>END_RULE        BEGIN(0);
+
+.|\n                 ; /* eat any unrecognized data */
+
+%%
+
+/************************************/
+/* Section 3                        */
+/* calling and auxiliary procedures */
+
+int main ( void )
+{
+  yylex();
+}
+
+int yywrap(void) { return 1; }
diff --git a/src/ExpToCasExe/expparse.cxx b/src/ExpToCasExe/expparse.cxx
new file mode 100644 (file)
index 0000000..2b28964
--- /dev/null
@@ -0,0 +1,1339 @@
+
+# line 2 "Express.y"
+
+// Created:    Thu Oct 28 12:21:16 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+/*****************************************************************************\
+
+This YACC parser implements parsing algorithm for EXPRESS -> CASCADE/XSTEP
+classes generator
+
+Input in the form of tokens is obtained from lexical analyser. Then, data 
+structure representing schema is created on the basis of grammar analysis.
+
+NOTE: The grammar currently implemented is not full. 
+FUNCTION, RULE and CONSTANT items, WHERE, INVERSE and DERIVE clauses 
+of TYPE and ENTITY items are not considered (ignored on the level of lexical 
+scanner). 
+SUPERTYPE and UNIQUE clauses of ENTITY item are recognized but ignored.
+Also, complex constructs such as using call to function in dimensions of 
+complex time or redefinition of inherited field are ignored.
+
+\*****************************************************************************/
+
+#include <TCollection_HAsciiString.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <Express_HSequenceOfField.hxx>
+#include <Express_HSequenceOfItem.hxx>
+#include <Express_Field.hxx>
+#include <Express_Item.hxx>
+#include <Express_Enum.hxx>
+#include <Express_Alias.hxx>
+#include <Express_Select.hxx>
+#include <Express_Entity.hxx>
+#include <Express_Type.hxx>
+#include <Express_NamedType.hxx>
+#include <Express_PredefinedType.hxx>
+#include <Express_Number.hxx>
+#include <Express_Integer.hxx>
+#include <Express_Boolean.hxx>
+#include <Express_Logical.hxx>
+#include <Express_Real.hxx>
+#include <Express_String.hxx>
+#include <Express_ComplexType.hxx>
+#include <Express_Array.hxx>
+#include <Express_List.hxx>
+#include <Express_Set.hxx>
+#include <Express_Bag.hxx>
+#include <Express_Schema.hxx>
+#include <Express_Reference.hxx>
+#include <Express.hxx>
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4244)
+#pragma warning(disable:4274)
+#pragma warning(disable:4800)
+#endif
+#if defined(__clang__)
+#pragma GCC diagnostic ignored "-Wmissing-braces"
+#endif
+#if __cplusplus > 199711L
+#define register// Deprecated in C++11.
+#endif
+
+/************************************************/
+/* ERROR MESSAGE FUNCTION                       */
+
+/* external functions (from Express.l) */
+int ec_error ( char const *s, char const *text );
+int ec_curline ( void );
+
+#define yyerror ec_error
+void ec_error ( char const *s )
+{
+  printf ( "\nParse error at line %d: %s\n", ec_curline(), s );
+}
+
+/************************************************/
+/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
+
+static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist );
+static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq );
+static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static Express_Item *mkalias ( char *name, Express_Type *type );
+static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
+                                Express_HSequenceOfField *field, int isabstract );
+static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items);
+static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1, TColStd_HSequenceOfHAsciiString *tlist2 );
+static Express_Type *mktstd ( int keyword );
+static Express_Type *mktname ( char *name );
+static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of );
+static Express_Field *mkfield ( char *name, Express_Type *type, int optional );
+static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq );
+
+
+# line 91 "Express.y"
+typedef union
+#ifdef __cplusplus
+       YYSTYPE
+#endif
+ {
+  int num;
+  char *str;
+  TColStd_HSequenceOfHAsciiString *tlist;
+  Express_HSequenceOfField *flist;
+  Express_HSequenceOfItem *ilist;
+  Express_Field *field;
+  Express_Item *item;
+  Express_Type *type;
+  Express_Schema *schema;
+  Express_Reference *ref;
+} YYSTYPE;
+# define KSCHEM 257
+# define KENDS 258
+# define KTYP 259
+# define KENDT 260
+# define KENT 261
+# define KENDE 262
+# define KREF 263
+# define KFROM 264
+# define KSEL 265
+# define KENUM 266
+# define KLIST 267
+# define KARR 268
+# define KBAG 269
+# define KSET 270
+# define KOF 271
+# define KNUM 272
+# define KINT 273
+# define KDBL 274
+# define KSTR 275
+# define KLOG 276
+# define KBOOL 277
+# define KOPT 278
+# define KUNIQ 279
+# define KSELF 280
+# define KABSTR 281
+# define KSUBT 282
+# define KSPRT 283
+# define KANDOR 284
+# define K1OF 285
+# define KAND 286
+# define NUMBER 287
+# define NAME 288
+
+#ifdef __STDC__
+#include <stdlib.h>
+#include <string.h>
+#else
+#include <malloc.h>
+#include <memory.h>
+#endif
+
+#ifdef __cplusplus
+
+#ifndef yyerror
+       void yyerror(const char *);
+#endif
+
+#ifndef yylex
+#ifdef __EXTERN_C__
+       extern "C" { int yylex(void); }
+#else
+       int yylex(void);
+#endif
+#endif
+       int yyparse(void);
+
+#endif
+#define yyclearin yychar = -1
+#define yyerrok yyerrflag = 0
+extern int yychar;
+extern int yyerrflag;
+YYSTYPE yylval;
+YYSTYPE yyval;
+typedef int yytabelem;
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 150
+#endif
+#if YYMAXDEPTH > 0
+int yy_yys[YYMAXDEPTH], *yys = yy_yys;
+YYSTYPE yy_yyv[YYMAXDEPTH], *yyv = yy_yyv;
+#else  /* user does initial allocation */
+int *yys;
+YYSTYPE *yyv;
+#endif
+static int yymaxdepth = YYMAXDEPTH;
+# define YYERRCODE 256
+
+# line 266 "Express.y"
+
+
+/************************************************/
+/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
+
+static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist )
+{
+  Express_Schema *sch = new Express_Schema ( name, ilist );
+  Express::Schema() = sch;
+  return sch;
+}
+
+static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq )
+{
+  if ( ! seq ) { 
+    seq = new Express_HSequenceOfItem;
+    seq->Append ( item );
+  }
+  else seq->Prepend ( item );
+  return seq;
+}
+
+static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  return new Express_Enum ( name, tlist );
+}
+
+static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  return new Express_Select ( name, tlist );
+}
+
+static Express_Item *mkalias ( char *name, Express_Type *type )
+{
+  return new Express_Alias ( name, type );
+}
+
+static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
+                                Express_HSequenceOfField *field, int isabstract )
+{
+  Express_Entity *ent = new Express_Entity ( name, inherit, field );
+  if ( isabstract ) ent->SetAbstractFlag ( Standard_True );
+  return ent;
+}
+
+static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items)
+{
+  return new Express_Reference ( name, items );
+}
+
+static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  Handle(TCollection_HAsciiString) str = new TCollection_HAsciiString ( name );
+  if ( tlist ) tlist->Prepend ( str );
+  else {
+    tlist = new TColStd_HSequenceOfHAsciiString;
+    tlist->Append ( str );
+  }
+  return tlist;
+}
+
+static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1, 
+                                                  TColStd_HSequenceOfHAsciiString *tlist2 )
+{
+  if ( ! tlist1 ) return tlist2;
+  if ( ! tlist2 ) return tlist1;
+  for ( int i=1; i <= tlist2->Length(); i++ )
+    tlist1->Append ( tlist2->Value(i) );
+  return tlist1;
+}
+
+static Express_Type *mktstd ( int keyword )
+{
+  switch ( keyword ) {
+  case KINT : return new Express_Integer;
+  case KNUM : return new Express_Number;
+  case KDBL : return new Express_Real;
+  case KSTR : return new Express_String;
+  case KBOOL: return new Express_Boolean;
+  case KLOG : return new Express_Logical;
+  default   : ec_error ( "Predefined type not treated!", "" );
+              return NULL;
+  }
+}
+
+static Express_Type *mktname ( char *name )
+{
+  return new Express_NamedType ( name );
+}
+
+static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of )
+{
+  switch ( keyword ) {
+  case KLIST: return new Express_List  ( ilow, ihigh, of );
+  case KARR : return new Express_Array ( ilow, ihigh, of );
+  case KBAG : return new Express_Bag   ( ilow, ihigh, of );
+  case KSET : return new Express_Set   ( ilow, ihigh, of );
+  default   : ec_error ( "Complex type not treated!", "" );
+              return NULL;
+  }
+}
+
+static Express_Field *mkfield ( char *name, Express_Type *type, int optional )
+{
+  return new Express_Field ( name, type, optional );
+}
+
+static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq )
+{
+  if ( seq ) seq->Prepend ( field );
+  else {
+    seq = new Express_HSequenceOfField;
+    seq->Append ( field );
+  }
+  return seq;
+}
+
+/*******************************************************************/
+/* External interface to result of parsing */
+
+Handle(Express_Schema) ec_parse ( FILE *fin )
+{
+  extern FILE *yyin;
+  yyin = fin;
+  yyparse();
+  return Express::Schema();
+}
+
+/*******************************************************************/
+/* MAIN & co */
+
+/*
+void tlistfree ( struct tlist *list )
+{
+  if ( ! list ) return;
+  tlistfree ( list->next );
+  list->next = 0;
+  free ( list->str );
+  list->str = 0;
+}
+* /
+
+int printtlist ( struct ec_tlist *tl )
+{
+  int num=0;
+  while ( tl ) {
+    num++;
+    printf ( "%s\n", tl->name );
+    tl = tl->next;
+  }
+  return num;
+}
+
+int main ( void )
+{
+  int num = 0;
+  yyparse();
+
+  printf ( "\nFinished\n" );
+  if ( schema ) {
+    struct ec_item *it;
+    it = schema->items;
+    printf ( "\nSchema %s", schema->name );
+    printf ( "\nItems:" );
+    while ( it ) {
+      num++;
+      printf ( "\n%s", it->name );
+      it = it->next;
+    }
+//    num = printtlist ( res );
+    printf ( "\nTotal %d", num );
+  }
+
+//  tlistfree ( yylval.tlist );
+  return num;
+}
+*/
+static const yytabelem yyexca[] ={
+-1, 1,
+       0, -1,
+       -2, 0,
+       };
+# define YYNPROD 67
+# define YYLAST 279
+static const yytabelem yyact[]={
+
+    23,    22,    35,    36,    38,    37,    65,    29,    28,    30,
+    31,    32,    33,    56,   117,   113,   106,    61,    16,    35,
+    36,    38,    37,    34,    29,    28,    30,    31,    32,    33,
+   139,   139,    15,    75,     3,   101,   145,    21,   162,   138,
+    34,    74,    78,    20,    93,    21,    40,   115,   135,   134,
+   133,   132,    52,    43,    42,   131,   110,    11,   158,    12,
+   102,    83,    62,    13,     2,    24,   144,   116,   104,   111,
+    92,    63,   124,   123,   122,   120,   152,    97,    50,    49,
+    48,    47,    70,    71,    18,    54,   153,   150,   149,   143,
+   140,   125,   119,   103,    86,    82,    77,    59,    51,    46,
+    17,     4,   129,   127,    96,    91,    90,    89,    87,   130,
+   163,   160,   151,    85,    60,    79,    39,   121,    84,    88,
+    67,    68,    69,    44,    45,    19,     5,    -1,     1,    72,
+     6,    10,     9,    14,     8,     7,    27,    26,    25,   112,
+    73,   114,    80,    81,     0,     0,    41,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    94,    95,    53,   105,
+    98,   107,   108,   109,    99,   100,     0,    58,     0,   118,
+     0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
+   128,     0,   126,     0,     0,     0,   137,     0,     0,     0,
+     0,     0,     0,     0,     0,   141,   136,     0,   142,     0,
+   146,   147,   148,     0,     0,     0,     0,     0,     0,     0,
+   154,     0,   155,   156,   157,     0,     0,     0,     0,   161,
+   159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    64,    66,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    57,     0,
+     0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    78 };
+static const yytabelem yypact[]={
+
+  -193,-10000000,  -254,    42,  -202,  -195,  -202,-10000000,-10000000,-10000000,
+-10000000,  -256,  -270,    41,-10000000,    23,  -238,-10000000,  -265,  -236,
+  -246,  -217,  -218,    84,    40,-10000000,-10000000,-10000000,-10000000,-10000000,
+-10000000,-10000000,-10000000,-10000000,-10000000,   -10,   -11,   -12,   -13,    39,
+  -219,  -236,   -27,    84,    38,  -271,  -198,   -57,   -57,   -57,
+   -57,  -247,    84,    37,  -242,    71,   -27,   -27,    36,  -199,
+    77,    69,    35,    50,-10000000,-10000000,    79,    49,    48,    47,
+  -235,-10000000,  -247,  -247,    46,   -15,-10000000,  -247,   -27,   -27,
+    -6,-10000000,  -200,    34,-10000000,  -271,-10000000,   -57,  -272,   -57,
+   -57,   -57,  -206,  -273,-10000000,-10000000,  -231,  -274,  -235,-10000000,
+-10000000,-10000000,    33,-10000000,-10000000,   -18,    76,   -19,   -20,   -21,
+    32,-10000000,  -273,    45,  -248,-10000000,    44,    63,  -207,-10000000,
+  -220,-10000000,  -221,  -222,  -223,-10000000,-10000000,  -249,    31,  -248,
+  -274,    30,  -243,  -243,  -243,  -243,    29,    28,    68,   -16,
+-10000000,    27,-10000000,-10000000,  -248,-10000000,  -248,  -248,  -248,-10000000,
+-10000000,  -249,  -274,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,    67,
+  -250,-10000000,    66,  -250 };
+static const yytabelem yypgo[]={
+
+     0,    71,   141,    66,   125,    85,   140,    58,    68,   123,
+   139,    69,    70,   116,    67,    65,   138,   137,   136,   135,
+   134,   132,   131,   130,   126,   129,    83,    82,   128,   127 };
+static const yytabelem yyr1[]={
+
+     0,    28,    24,    24,    23,    23,    23,    23,    19,    20,
+    21,    22,    22,    29,     8,     8,     9,    15,    15,    15,
+    16,    16,    16,    16,    16,    16,    17,    18,    18,    18,
+    18,     1,     1,     1,     3,     3,    13,    13,     4,     4,
+     4,     5,     5,     5,     5,     5,    26,    26,    26,    26,
+    27,    27,    25,     6,    14,    14,     2,     2,    10,    10,
+    11,    11,    12,    12,     7,     7,     7 };
+static const yytabelem yyr2[]={
+
+     0,    13,     3,     5,     2,     2,     2,     3,    19,    17,
+    15,    19,    21,    11,     3,     7,     7,     2,     2,     3,
+     3,     3,     3,     3,     3,     3,     3,    19,    19,    19,
+    19,     3,     3,     9,     1,     3,     1,     7,     1,     3,
+     7,     3,     7,     7,     5,     7,     3,     5,     3,     5,
+     1,     3,    11,    13,     3,     7,     1,     3,     9,     9,
+     3,     5,     1,     5,     7,    11,     7 };
+static const yytabelem yychk[]={
+
+-10000000,   -28,   257,   288,    59,   -24,   -23,   -19,   -20,   -21,
+   -22,   259,   261,   258,   -24,   288,   288,    59,    61,    -4,
+   281,   283,   266,   265,   -15,   -16,   -17,   -18,   273,   272,
+   274,   275,   276,   277,   288,   267,   268,   270,   269,   -13,
+   282,    -4,   271,   271,    -9,    40,    59,    91,    91,    91,
+    91,    59,   271,   -13,    -5,   288,    40,   285,    -9,    59,
+    -8,   288,   260,    -1,   287,    63,   288,    -1,    -1,    -1,
+   -27,   -26,   -25,    -6,   288,   280,    -9,    59,   284,    44,
+    -5,    -5,    59,   260,    41,    44,    59,    58,    40,    58,
+    58,    58,   -12,   279,   -26,   -26,    58,    92,   -27,    -5,
+    -5,    41,   260,    59,    -8,    -1,   288,    -1,    -1,    -1,
+   262,   -11,   -10,   288,    -2,   278,   -14,   288,   -12,    59,
+    93,    41,    93,    93,    93,    59,   -11,    58,   -15,    58,
+    46,   262,   271,   271,   271,   271,    -8,    -7,   288,   280,
+    59,   -15,   -14,    59,    -3,   279,    -3,    -3,    -3,    59,
+    59,    44,    92,    59,   -15,   -15,   -15,   -15,    -7,   -14,
+    44,    -7,   288,    44 };
+static const yytabelem yydef[]={
+
+     0,    -2,     0,     0,     0,     0,     2,     4,     5,     6,
+     7,     0,     0,     0,     3,     0,    38,     1,     0,    36,
+    38,    39,     0,     0,     0,    17,    18,    19,    20,    21,
+    22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
+     0,    36,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    50,     0,     0,    40,    41,     0,     0,     0,     0,
+     0,    14,     0,     0,    31,    32,     0,     0,     0,     0,
+    62,    51,    46,    48,     0,     0,    37,    50,     0,     0,
+     0,    44,     0,     0,    16,     0,    10,     0,     0,     0,
+     0,     0,     0,     0,    47,    49,    56,     0,    62,    45,
+    43,    42,     0,     9,    15,     0,     0,     0,     0,     0,
+     0,    63,    60,     0,     0,    57,     0,    54,     0,     8,
+     0,    33,     0,     0,     0,    11,    61,     0,     0,     0,
+     0,     0,    34,    34,    34,    34,     0,     0,    14,     0,
+    52,     0,    55,    12,     0,    35,     0,     0,     0,    58,
+    59,     0,     0,    53,    27,    28,    29,    30,    66,    64,
+     0,    65,     0,     0 };
+typedef struct
+#ifdef __cplusplus
+       yytoktype
+#endif
+{ char *t_name; int t_val; } yytoktype;
+#ifndef YYDEBUG
+#      define YYDEBUG  0       /* don't allow debugging */
+#endif
+
+#if YYDEBUG
+
+yytoktype yytoks[] =
+{
+       "KSCHEM",       257,
+       "KENDS",        258,
+       "KTYP", 259,
+       "KENDT",        260,
+       "KENT", 261,
+       "KENDE",        262,
+       "KREF", 263,
+       "KFROM",        264,
+       "KSEL", 265,
+       "KENUM",        266,
+       "KLIST",        267,
+       "KARR", 268,
+       "KBAG", 269,
+       "KSET", 270,
+       "KOF",  271,
+       "KNUM", 272,
+       "KINT", 273,
+       "KDBL", 274,
+       "KSTR", 275,
+       "KLOG", 276,
+       "KBOOL",        277,
+       "KOPT", 278,
+       "KUNIQ",        279,
+       "KSELF",        280,
+       "KABSTR",       281,
+       "KSUBT",        282,
+       "KSPRT",        283,
+       "KANDOR",       284,
+       "K1OF", 285,
+       "KAND", 286,
+       "NUMBER",       287,
+       "NAME", 288,
+       ",",    44,
+       "-unknown-",    -1      /* ends search */
+};
+
+char * yyreds[] =
+{
+       "-no such reduction-",
+       "SCHEMA : KSCHEM NAME ';' ILIST KENDS ';'",
+       "ILIST : ITEM",
+       "ILIST : ITEM ILIST",
+       "ITEM : ENUM",
+       "ITEM : SELECT",
+       "ITEM : ALIAS",
+       "ITEM : ENTITY",
+       "ENUM : KTYP NAME '=' KENUM KOF TLIST1 ';' KENDT ';'",
+       "SELECT : KTYP NAME '=' KSEL TLIST1 ';' KENDT ';'",
+       "ALIAS : KTYP NAME '=' TYPE ';' KENDT ';'",
+       "ENTITY : KENT NAME SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';'",
+       "ENTITY : KENT NAME KABSTR SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';'",
+       "REFERENCE : KREF KFROM NAME TLIST1 ';'",
+       "TLIST : NAME",
+       "TLIST : NAME ',' TLIST",
+       "TLIST1 : '(' TLIST ')'",
+       "TYPE : TSTD",
+       "TYPE : TNAME",
+       "TYPE : TSET",
+       "TSTD : KINT",
+       "TSTD : KNUM",
+       "TSTD : KDBL",
+       "TSTD : KSTR",
+       "TSTD : KLOG",
+       "TSTD : KBOOL",
+       "TNAME : NAME",
+       "TSET : KLIST '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE",
+       "TSET : KARR '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE",
+       "TSET : KSET '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE",
+       "TSET : KBAG '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE",
+       "INDEX : NUMBER",
+       "INDEX : '?'",
+       "INDEX : NAME '(' NAME ')'",
+       "OPTUNI : /* empty */",
+       "OPTUNI : KUNIQ",
+       "SUBT : /* empty */",
+       "SUBT : KSUBT KOF TLIST1",
+       "SUPERT : /* empty */",
+       "SUPERT : KSPRT",
+       "SUPERT : KSPRT KOF SUPLST",
+       "SUPLST : NAME",
+       "SUPLST : '(' SUPLST ')'",
+       "SUPLST : NAME ',' SUPLST",
+       "SUPLST : K1OF SUPLST",
+       "SUPLST : SUPLST KANDOR SUPLST",
+       "FLIST : FIELD",
+       "FLIST : FIELD FLIST",
+       "FLIST : REDEF",
+       "FLIST : REDEF FLIST",
+       "FLIST1 : /* empty */",
+       "FLIST1 : FLIST",
+       "FIELD : NAME ':' OPTNL TYPE ';'",
+       "REDEF : KSELF '\\' SPECIF ':' TYPE ';'",
+       "SPECIF : NAME",
+       "SPECIF : NAME '.' SPECIF",
+       "OPTNL : /* empty */",
+       "OPTNL : KOPT",
+       "UNIQIT : NAME ':' TLIST ';'",
+       "UNIQIT : NAME ':' SPCLST ';'",
+       "UNIQLS : UNIQIT",
+       "UNIQLS : UNIQIT UNIQLS",
+       "UNIQUE : /* empty */",
+       "UNIQUE : KUNIQ UNIQLS",
+       "SPCLST : KSELF '\\' SPECIF",
+       "SPCLST : KSELF '\\' SPECIF ',' SPCLST",
+       "SPCLST : NAME ',' SPCLST",
+};
+#endif /* YYDEBUG */
+# line 1 "/usr/ccs/bin/yaccpar"
+/*
+ * Copyright (c) 1993 by Sun Microsystems, Inc.
+ */
+
+/*
+** Skeleton parser driver for yacc output
+*/
+
+/*
+** yacc user known macros and defines
+*/
+#define YYERROR                goto yyerrlab
+#define YYACCEPT       return(0)
+#define YYABORT                return(1)
+#define YYBACKUP( newtoken, newvalue )\
+{\
+       if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
+       {\
+               yyerror( "syntax error - cannot backup" );\
+               goto yyerrlab;\
+       }\
+       yychar = newtoken;\
+       yystate = *yyps;\
+       yylval = newvalue;\
+       goto yynewstate;\
+}
+#define YYRECOVERING() (!!yyerrflag)
+#define YYNEW(type)    malloc(sizeof(type) * yynewmax)
+#define YYCOPY(to, from, type) \
+       (type *) memcpy(to, (char *) from, yymaxdepth * sizeof (type))
+#define YYENLARGE( from, type) \
+       (type *) realloc((char *) from, yynewmax * sizeof(type))
+#ifndef YYDEBUG
+#      define YYDEBUG  1       /* make debugging available */
+#endif
+
+/*
+** user known globals
+*/
+int yydebug;                   /* set to 1 to get debugging */
+
+/*
+** driver internal defines
+*/
+#define YYFLAG         (-10000000)
+
+/*
+** global variables used by the parser
+*/
+YYSTYPE *yypv;                 /* top of value stack */
+int *yyps;                     /* top of state stack */
+
+int yystate;                   /* current state */
+int yytmp;                     /* extra var (lasts between blocks) */
+
+int yynerrs;                   /* number of errors */
+int yyerrflag;                 /* error recovery flag */
+int yychar;                    /* current input token number */
+
+
+
+#ifdef YYNMBCHARS
+#define YYLEX()                yycvtok(yylex())
+/*
+** yycvtok - return a token if i is a wchar_t value that exceeds 255.
+**     If i<255, i itself is the token.  If i>255 but the neither 
+**     of the 30th or 31st bit is on, i is already a token.
+*/
+#if defined(__STDC__) || defined(__cplusplus)
+int yycvtok(int i)
+#else
+int yycvtok(i) int i;
+#endif
+{
+       int first = 0;
+       int last = YYNMBCHARS - 1;
+       int mid;
+       wchar_t j;
+
+       if(i&0x60000000){/*Must convert to a token. */
+               if( yymbchars[last].character < i ){
+                       return i;/*Giving up*/
+               }
+               while ((last>=first)&&(first>=0)) {/*Binary search loop*/
+                       mid = (first+last)/2;
+                       j = yymbchars[mid].character;
+                       if( j==i ){/*Found*/ 
+                               return yymbchars[mid].tvalue;
+                       }else if( j<i ){
+                               first = mid + 1;
+                       }else{
+                               last = mid -1;
+                       }
+               }
+               /*No entry in the table.*/
+               return i;/* Giving up.*/
+       }else{/* i is already a token. */
+               return i;
+       }
+}
+#else/*!YYNMBCHARS*/
+#define YYLEX()                yylex()
+#endif/*!YYNMBCHARS*/
+
+/*
+** yyparse - return 0 if worked, 1 if syntax error not recovered from
+*/
+#if defined(__STDC__) || defined(__cplusplus)
+int yyparse(void)
+#else
+int yyparse()
+#endif
+{
+       register YYSTYPE *yypvt = 0;    /* top of value stack for $vars */
+
+#if defined(__cplusplus) || defined(lint)
+/*
+       hacks to please C++ and lint - goto's inside
+       switch should never be executed
+*/
+       static int __yaccpar_lint_hack__ = 0;
+       switch (__yaccpar_lint_hack__)
+       {
+               case 1: goto yyerrlab;
+               case 2: goto yynewstate;
+       }
+#endif
+
+       /*
+       ** Initialize externals - yyparse may be called more than once
+       */
+       yypv = &yyv[-1];
+       yyps = &yys[-1];
+       yystate = 0;
+       yytmp = 0;
+       yynerrs = 0;
+       yyerrflag = 0;
+       yychar = -1;
+
+#if YYMAXDEPTH <= 0
+       if (yymaxdepth <= 0)
+       {
+               if ((yymaxdepth = YYEXPAND(0)) <= 0)
+               {
+                       yyerror("yacc initialization error");
+                       YYABORT;
+               }
+       }
+#endif
+
+       {
+               register YYSTYPE *yy_pv;        /* top of value stack */
+               register int *yy_ps;            /* top of state stack */
+               register int yy_state;          /* current state */
+               register int  yy_n;             /* internal state number info */
+       goto yystack;   /* moved from 6 lines above to here to please C++ */
+
+               /*
+               ** get globals into registers.
+               ** branch to here only if YYBACKUP was called.
+               */
+       yynewstate:
+               yy_pv = yypv;
+               yy_ps = yyps;
+               yy_state = yystate;
+               goto yy_newstate;
+
+               /*
+               ** get globals into registers.
+               ** either we just started, or we just finished a reduction
+               */
+       yystack:
+               yy_pv = yypv;
+               yy_ps = yyps;
+               yy_state = yystate;
+
+               /*
+               ** top of for (;;) loop while no reductions done
+               */
+       yy_stack:
+               /*
+               ** put a state and value onto the stacks
+               */
+#if YYDEBUG
+               /*
+               ** if debugging, look up token value in list of value vs.
+               ** name pairs.  0 and negative (-1) are special values.
+               ** Note: linear search is used since time is not a real
+               ** consideration while debugging.
+               */
+               if ( yydebug )
+               {
+                       register int yy_i;
+
+                       printf( "State %d, token ", yy_state );
+                       if ( yychar == 0 )
+                               printf( "end-of-file\n" );
+                       else if ( yychar < 0 )
+                               printf( "-none-\n" );
+                       else
+                       {
+                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+                                       yy_i++ )
+                               {
+                                       if ( yytoks[yy_i].t_val == yychar )
+                                               break;
+                               }
+                               printf( "%s\n", yytoks[yy_i].t_name );
+                       }
+               }
+#endif /* YYDEBUG */
+               if ( ++yy_ps >= &yys[ yymaxdepth ] )    /* room on stack? */
+               {
+                       /*
+                       ** reallocate and recover.  Note that pointers
+                       ** have to be reset, or bad things will happen
+                       */
+                       int yyps_index = (yy_ps - yys);
+                       int yypv_index = (yy_pv - yyv);
+                       int yypvt_index = (yypvt - yyv);
+                       int yynewmax;
+#ifdef YYEXPAND
+                       yynewmax = YYEXPAND(yymaxdepth);
+#else
+                       yynewmax = 2 * yymaxdepth;      /* double table size */
+                       if (yymaxdepth == YYMAXDEPTH)   /* first time growth */
+                       {
+                               char *newyys = (char *)YYNEW(int);
+                               char *newyyv = (char *)YYNEW(YYSTYPE);
+                               if (newyys != 0 && newyyv != 0)
+                               {
+                                       yys = YYCOPY(newyys, yys, int);
+                                       yyv = YYCOPY(newyyv, yyv, YYSTYPE);
+                               }
+                               else
+                                       yynewmax = 0;   /* failed */
+                       }
+                       else                            /* not first time */
+                       {
+                               yys = YYENLARGE(yys, int);
+                               yyv = YYENLARGE(yyv, YYSTYPE);
+                               if (yys == 0 || yyv == 0)
+                                       yynewmax = 0;   /* failed */
+                       }
+#endif
+                       if (yynewmax <= yymaxdepth)     /* tables not expanded */
+                       {
+                               yyerror( "yacc stack overflow" );
+                               YYABORT;
+                       }
+                       yymaxdepth = yynewmax;
+
+                       yy_ps = yys + yyps_index;
+                       yy_pv = yyv + yypv_index;
+                       yypvt = yyv + yypvt_index;
+               }
+               *yy_ps = yy_state;
+               *++yy_pv = yyval;
+
+               /*
+               ** we have a new state - find out what to do
+               */
+       yy_newstate:
+               if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
+                       goto yydefault;         /* simple state */
+#if YYDEBUG
+               /*
+               ** if debugging, need to mark whether new token grabbed
+               */
+               yytmp = yychar < 0;
+#endif
+               if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
+                       yychar = 0;             /* reached EOF */
+#if YYDEBUG
+               if ( yydebug && yytmp )
+               {
+                       register int yy_i;
+
+                       printf( "Received token " );
+                       if ( yychar == 0 )
+                               printf( "end-of-file\n" );
+                       else if ( yychar < 0 )
+                               printf( "-none-\n" );
+                       else
+                       {
+                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+                                       yy_i++ )
+                               {
+                                       if ( yytoks[yy_i].t_val == yychar )
+                                               break;
+                               }
+                               printf( "%s\n", yytoks[yy_i].t_name );
+                       }
+               }
+#endif /* YYDEBUG */
+               if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
+                       goto yydefault;
+               if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )  /*valid shift*/
+               {
+                       yychar = -1;
+                       yyval = yylval;
+                       yy_state = yy_n;
+                       if ( yyerrflag > 0 )
+                               yyerrflag--;
+                       goto yy_stack;
+               }
+
+       yydefault:
+               if ( ( yy_n = yydef[ yy_state ] ) == -2 )
+               {
+#if YYDEBUG
+                       yytmp = yychar < 0;
+#endif
+                       if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
+                               yychar = 0;             /* reached EOF */
+#if YYDEBUG
+                       if ( yydebug && yytmp )
+                       {
+                               register int yy_i;
+
+                               printf( "Received token " );
+                               if ( yychar == 0 )
+                                       printf( "end-of-file\n" );
+                               else if ( yychar < 0 )
+                                       printf( "-none-\n" );
+                               else
+                               {
+                                       for ( yy_i = 0;
+                                               yytoks[yy_i].t_val >= 0;
+                                               yy_i++ )
+                                       {
+                                               if ( yytoks[yy_i].t_val
+                                                       == yychar )
+                                               {
+                                                       break;
+                                               }
+                                       }
+                                       printf( "%s\n", yytoks[yy_i].t_name );
+                               }
+                       }
+#endif /* YYDEBUG */
+                       /*
+                       ** look through exception table
+                       */
+                       {
+                               register const int *yyxi = yyexca;
+
+                               while ( ( *yyxi != -1 ) ||
+                                       ( yyxi[1] != yy_state ) )
+                               {
+                                       yyxi += 2;
+                               }
+                               while ( ( *(yyxi += 2) >= 0 ) &&
+                                       ( *yyxi != yychar ) )
+                                       ;
+                               if ( ( yy_n = yyxi[1] ) < 0 )
+                                       YYACCEPT;
+                       }
+               }
+
+               /*
+               ** check for syntax error
+               */
+               if ( yy_n == 0 )        /* have an error */
+               {
+                       /* no worry about speed here! */
+                       switch ( yyerrflag )
+                       {
+                       case 0:         /* new error */
+                               yyerror( "syntax error" );
+                               goto skip_init;
+                       yyerrlab:
+                               /*
+                               ** get globals into registers.
+                               ** we have a user generated syntax type error
+                               */
+                               yy_pv = yypv;
+                               yy_ps = yyps;
+                               yy_state = yystate;
+                       skip_init:
+                               yynerrs++;
+                               /* FALLTHRU */
+                       case 1:
+                       case 2:         /* incompletely recovered error */
+                                       /* try again... */
+                               yyerrflag = 3;
+                               /*
+                               ** find state where "error" is a legal
+                               ** shift action
+                               */
+                               while ( yy_ps >= yys )
+                               {
+                                       yy_n = yypact[ *yy_ps ] + YYERRCODE;
+                                       if ( yy_n >= 0 && yy_n < YYLAST &&
+                                               yychk[yyact[yy_n]] == YYERRCODE)                                        {
+                                               /*
+                                               ** simulate shift of "error"
+                                               */
+                                               yy_state = yyact[ yy_n ];
+                                               goto yy_stack;
+                                       }
+                                       /*
+                                       ** current state has no shift on
+                                       ** "error", pop stack
+                                       */
+#if YYDEBUG
+#      define _POP_ "Error recovery pops state %d, uncovers state %d\n"
+                                       if ( yydebug )
+                                               printf( _POP_, *yy_ps,
+                                                       yy_ps[-1] );
+#      undef _POP_
+#endif
+                                       yy_ps--;
+                                       yy_pv--;
+                               }
+                               /*
+                               ** there is no state on stack with "error" as
+                               ** a valid shift.  give up.
+                               */
+                               YYABORT;
+                       case 3:         /* no shift yet; eat a token */
+#if YYDEBUG
+                               /*
+                               ** if debugging, look up token in list of
+                               ** pairs.  0 and negative shouldn't occur,
+                               ** but since timing doesn't matter when
+                               ** debugging, it doesn't hurt to leave the
+                               ** tests here.
+                               */
+                               if ( yydebug )
+                               {
+                                       register int yy_i;
+
+                                       printf( "Error recovery discards " );
+                                       if ( yychar == 0 )
+                                               printf( "token end-of-file\n" );
+                                       else if ( yychar < 0 )
+                                               printf( "token -none-\n" );
+                                       else
+                                       {
+                                               for ( yy_i = 0;
+                                                       yytoks[yy_i].t_val >= 0;
+                                                       yy_i++ )
+                                               {
+                                                       if ( yytoks[yy_i].t_val
+                                                               == yychar )
+                                                       {
+                                                               break;
+                                                       }
+                                               }
+                                               printf( "token %s\n",
+                                                       yytoks[yy_i].t_name );
+                                       }
+                               }
+#endif /* YYDEBUG */
+                               if ( yychar == 0 )      /* reached EOF. quit */
+                                       YYABORT;
+                               yychar = -1;
+                               goto yy_newstate;
+                       }
+               }/* end if ( yy_n == 0 ) */
+               /*
+               ** reduction by production yy_n
+               ** put stack tops, etc. so things right after switch
+               */
+#if YYDEBUG
+               /*
+               ** if debugging, print the string that is the user's
+               ** specification of the reduction which is just about
+               ** to be done.
+               */
+               if ( yydebug )
+                       printf( "Reduce by (%d) \"%s\"\n",
+                               yy_n, yyreds[ yy_n ] );
+#endif
+               yytmp = yy_n;                   /* value to switch over */
+               yypvt = yy_pv;                  /* $vars top of value stack */
+               /*
+               ** Look in goto table for next state
+               ** Sorry about using yy_state here as temporary
+               ** register variable, but why not, if it works...
+               ** If yyr2[ yy_n ] doesn't have the low order bit
+               ** set, then there is no action to be done for
+               ** this reduction.  So, no saving & unsaving of
+               ** registers done.  The only difference between the
+               ** code just after the if and the body of the if is
+               ** the goto yy_stack in the body.  This way the test
+               ** can be made before the choice of what to do is needed.
+               */
+               {
+                       /* length of production doubled with extra bit */
+                       register int yy_len = yyr2[ yy_n ];
+
+                       if ( !( yy_len & 01 ) )
+                       {
+                               yy_len >>= 1;
+                               yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+                               yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+                                       *( yy_ps -= yy_len ) + 1;
+                               if ( yy_state >= YYLAST ||
+                                       yychk[ yy_state =
+                                       yyact[ yy_state ] ] != -yy_n )
+                               {
+                                       yy_state = yyact[ yypgo[ yy_n ] ];
+                               }
+                               goto yy_stack;
+                       }
+                       yy_len >>= 1;
+                       yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+                       yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+                               *( yy_ps -= yy_len ) + 1;
+                       if ( yy_state >= YYLAST ||
+                               yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
+                       {
+                               yy_state = yyact[ yypgo[ yy_n ] ];
+                       }
+               }
+                                       /* save until reenter driver code */
+               yystate = yy_state;
+               yyps = yy_ps;
+               yypv = yy_pv;
+       }
+       /*
+       ** code supplied by user is placed in this switch
+       */
+       switch( yytmp )
+       {
+               
+case 1:
+# line 164 "Express.y"
+{ yyval.schema = mkschema ( yypvt[-4].str, yypvt[-2].ilist ); /* Root: EXPRESS schema */ } break;
+case 2:
+# line 166 "Express.y"
+{ yyval.ilist = mkilist ( yypvt[-0].item, 0 ); /* list of items for schema */ } break;
+case 3:
+# line 167 "Express.y"
+{ yyval.ilist = mkilist ( yypvt[-1].item, yypvt[-0].ilist ); } break;
+case 7:
+# line 173 "Express.y"
+{ yyval.item = yypvt[-0].item; /* item of schema (type definition) */ } break;
+case 8:
+# line 174 "Express.y"
+{ yyval.item = mkenum ( yypvt[-7].str, yypvt[-3].tlist ); /* TYPE ENUMERATION definition */ } break;
+case 9:
+# line 176 "Express.y"
+{ yyval.item = mkselect ( yypvt[-6].str, yypvt[-3].tlist ); /* TYPE SELECT definition */ } break;
+case 10:
+# line 178 "Express.y"
+{ yyval.item = mkalias ( yypvt[-5].str, yypvt[-3].type ); /* TYPE '=' definition (alias) */ } break;
+case 11:
+# line 180 "Express.y"
+{ yyval.item = mkentity ( yypvt[-7].str, yypvt[-5].tlist, yypvt[-3].flist, 0 ); /* ENTITY definition */ } break;
+case 12:
+# line 181 "Express.y"
+{ yyval.item = mkentity ( yypvt[-8].str, yypvt[-5].tlist, yypvt[-3].flist, 1 ); /* ENTITY definition */ } break;
+case 13:
+# line 184 "Express.y"
+{ yyval.ref = mkrefs ( yypvt[-2].str, yypvt[-1].tlist ); /* REFERENCE FROM definition */ } break;
+case 14:
+# line 186 "Express.y"
+{ yyval.tlist = mktlist ( yypvt[-0].str, 0 ); /* list of (type) names */ } break;
+case 15:
+# line 187 "Express.y"
+{ yyval.tlist = mktlist ( yypvt[-2].str, yypvt[-0].tlist ); } break;
+case 16:
+# line 189 "Express.y"
+{ yyval.tlist = yypvt[-1].tlist; /* TLIST in brackets */ } break;
+case 19:
+# line 194 "Express.y"
+{ yyval.type = yypvt[-0].type; /* type, simple or complex */ } break;
+case 20:
+# line 196 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: INTEGER */ } break;
+case 21:
+# line 197 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: NUMBER */ } break;
+case 22:
+# line 198 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: REAL */ } break;
+case 23:
+# line 199 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: STRING */ } break;
+case 24:
+# line 200 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: LOGICAL */ } break;
+case 25:
+# line 201 "Express.y"
+{ yyval.type = mktstd ( yypvt[-0].num ); /* predefined type: BOOLEAN */ } break;
+case 26:
+# line 203 "Express.y"
+{ yyval.type = mktname ( yypvt[-0].str ); /* named type */ } break;
+case 27:
+# line 205 "Express.y"
+{ yyval.type = mktset ( yypvt[-8].num, yypvt[-6].num, yypvt[-4].num, yypvt[-0].type ); /* complex type: LIST */ } break;
+case 28:
+# line 206 "Express.y"
+{ yyval.type = mktset ( yypvt[-8].num, yypvt[-6].num, yypvt[-4].num, yypvt[-0].type ); /* complex type: ARRAY */ } break;
+case 29:
+# line 207 "Express.y"
+{ yyval.type = mktset ( yypvt[-8].num, yypvt[-6].num, yypvt[-4].num, yypvt[-0].type ); /* complex type: SET */ } break;
+case 30:
+# line 208 "Express.y"
+{ yyval.type = mktset ( yypvt[-8].num, yypvt[-6].num, yypvt[-4].num, yypvt[-0].type ); /* complex type: BAG */ } break;
+case 31:
+# line 210 "Express.y"
+{ yyval.num = yypvt[-0].num; /* index for array, set, bag, list range */ } break;
+case 32:
+# line 211 "Express.y"
+{ yyval.num = -1; /* undefined */ } break;
+case 33:
+# line 212 "Express.y"
+{yyval.num = -1; printf ( "Warning at line %d: index function %s(%s) ignored\n", ec_curline(), yypvt[-3].str, yypvt[-1].str ); /* some function.. */ } break;
+case 34:
+# line 214 "Express.y"
+{ yyval.num = 0; /* UNIQUE keyword for complex type definition */ } break;
+case 35:
+# line 215 "Express.y"
+{ yyval.num = 1; } break;
+case 36:
+# line 218 "Express.y"
+{ yyval.tlist = NULL; /* no subtype clause */ } break;
+case 37:
+# line 219 "Express.y"
+{ yyval.tlist = yypvt[-0].tlist;   /* subtype clause */ } break;
+case 38:
+# line 221 "Express.y"
+{ yyval.num = 0;  /* no supertype clause */ } break;
+case 39:
+# line 222 "Express.y"
+{ yyval.num = 0;  /* supertype clause (ignored) */ } break;
+case 40:
+# line 223 "Express.y"
+{ yyval.num = 0;  /* supertype clause (ignored) */ } break;
+case 41:
+# line 225 "Express.y"
+{ yyval.num = 0; /* simple list of supertypes */ } break;
+case 42:
+# line 226 "Express.y"
+{ yyval.num = 0; /* allow bracketing */ } break;
+case 43:
+# line 227 "Express.y"
+{ yyval.num = 0; /* ... */ } break;
+case 44:
+# line 228 "Express.y"
+{ yyval.num = 0; /* ONEOF construct */ } break;
+case 45:
+# line 229 "Express.y"
+{ yyval.num = 0; /* ANDOR construct */ } break;
+case 46:
+# line 232 "Express.y"
+{ yyval.flist = mkflist ( yypvt[-0].field, 0 ); /* list of fields of ENTITY item */ } break;
+case 47:
+# line 233 "Express.y"
+{ yyval.flist = mkflist ( yypvt[-1].field, yypvt[-0].flist ); } break;
+case 48:
+# line 234 "Express.y"
+{ yyval.flist = 0;  /* redefinition of inherited field, just skip */ } break;
+case 49:
+# line 235 "Express.y"
+{ yyval.flist = yypvt[-0].flist; /* ignore redefinition of inherited field, take trailing list */ } break;
+case 50:
+# line 237 "Express.y"
+{ yyval.flist = NULL; /* empty list of fields */ } break;
+case 51:
+# line 238 "Express.y"
+{ yyval.flist = yypvt[-0].flist;   /* or not empty.. just to fix reduce/reduce conflict */ } break;
+case 52:
+# line 240 "Express.y"
+{ yyval.field = mkfield ( yypvt[-4].str, yypvt[-1].type, yypvt[-2].num ); } break;
+case 53:
+# line 242 "Express.y"
+{ yyval.num = 0; printf ( "Warning at line %d: field redefinition ignored\n", ec_curline() ); /* redefinition of inherited field */ } break;
+case 54:
+# line 244 "Express.y"
+{ yyval.tlist = mktlist ( yypvt[-0].str, 0 ); /* inherited field specification */ } break;
+case 55:
+# line 245 "Express.y"
+{ yyval.tlist = mktlist ( yypvt[-2].str, yypvt[-0].tlist ); } break;
+case 56:
+# line 248 "Express.y"
+{ yyval.num = 0; } break;
+case 57:
+# line 249 "Express.y"
+{ yyval.num = 1; } break;
+case 58:
+# line 252 "Express.y"
+{ yyval.tlist = yypvt[-1].tlist;   /* UNIQUE statement */ } break;
+case 59:
+# line 253 "Express.y"
+{ yyval.tlist = NULL; /* UNIQUE statement */ } break;
+case 60:
+# line 255 "Express.y"
+{ yyval.tlist = NULL;    /* list of 1 UNIQUE statements */ } break;
+case 61:
+# line 256 "Express.y"
+{ yyval.tlist = mktlists ( yypvt[-1].tlist, yypvt[-0].tlist );/* list of UNIQUE statements */ } break;
+case 62:
+# line 258 "Express.y"
+{ yyval.tlist = NULL;    /* no UNIQUE clause in ENTITY */ } break;
+case 63:
+# line 259 "Express.y"
+{ yyval.tlist = yypvt[-0].tlist;      /* UNIQUE clause in ENTITY */ } break;
+case 64:
+# line 261 "Express.y"
+{ yyval.num = 0; /* list of specifications */ } break;
+case 65:
+# line 262 "Express.y"
+{ yyval.num = 0; } break;
+case 66:
+# line 263 "Express.y"
+{ yyval.num = 0; } break;
+# line 531 "/usr/ccs/bin/yaccpar"
+       }
+       goto yystack;           /* reset registers in driver code */
+}
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
diff --git a/src/ExpToCasExe/expparse.h b/src/ExpToCasExe/expparse.h
new file mode 100644 (file)
index 0000000..d506fce
--- /dev/null
@@ -0,0 +1,64 @@
+// Created:    Mon Nov  1 12:50:27 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+typedef union
+#ifdef __cplusplus
+       YYSTYPE
+#endif
+ {
+  int num;
+  char *str;
+  TColStd_HSequenceOfHAsciiString *tlist;
+  Express_HSequenceOfField *flist;
+  Express_HSequenceOfItem *ilist;
+  Express_Field *field;
+  Express_Item *item;
+  Express_Type *type;
+  Express_Schema *schema;
+  Express_Reference *ref;
+} YYSTYPE;
+extern YYSTYPE yylval;
+# define KSCHEM 257
+# define KENDS 258
+# define KTYP 259
+# define KENDT 260
+# define KENT 261
+# define KENDE 262
+# define KREF 263
+# define KFROM 264
+# define KSEL 265
+# define KENUM 266
+# define KLIST 267
+# define KARR 268
+# define KBAG 269
+# define KSET 270
+# define KOF 271
+# define KNUM 272
+# define KINT 273
+# define KDBL 274
+# define KSTR 275
+# define KLOG 276
+# define KBOOL 277
+# define KOPT 278
+# define KUNIQ 279
+# define KSELF 280
+# define KABSTR 281
+# define KSUBT 282
+# define KSPRT 283
+# define KANDOR 284
+# define K1OF 285
+# define KAND 286
+# define NUMBER 287
+# define NAME 288
diff --git a/src/ExpToCasExe/expscan.cxx b/src/ExpToCasExe/expscan.cxx
new file mode 100644 (file)
index 0000000..14b934b
--- /dev/null
@@ -0,0 +1,2950 @@
+// Created:    Mon Nov  1 12:50:27 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstdint>
+
+#if defined(__clang__)
+#pragma GCC diagnostic ignored "-Wmissing-braces"
+#endif
+#if __cplusplus > 199711L
+#define register// Deprecated in C++11.
+#endif
+
+# define U(x) x
+# define NLSTATE yyprevious=YYNEWLINE
+# define BEGIN yybgin = yysvec + 1 +
+# define INITIAL 0
+# define YYLERR yysvec
+# define YYSTATE (yyestate-yysvec-1)
+# define YYOPTIM 1
+# ifndef YYLMAX 
+# define YYLMAX BUFSIZ
+# endif 
+#ifndef __cplusplus
+# define output(c) (void)putc(c,yyout)
+#else
+# define lex_output(c) (void)putc(c,yyout)
+#endif
+
+#if defined(__cplusplus) || defined(__STDC__)
+
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+extern "C" {
+#endif
+       int yyback(int *, int);
+       int yyinput(void);
+       int yylook(void);
+       void yyoutput(int);
+       int yyracc(int);
+       int yyreject(void);
+       void yyunput(int);
+       int yylex(void);
+#ifdef YYLEX_E
+       void yywoutput(wchar_t);
+       wchar_t yywinput(void);
+#endif
+#ifndef yyless
+       int yyless(int);
+#endif
+#ifndef yywrap
+       int yywrap(void);
+#endif
+#ifdef LEXDEBUG
+       void allprint(char);
+       void sprint(char *);
+#endif
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+}
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+//     void exit(int);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
+# define yymore() (yymorfg=1)
+#ifndef __cplusplus
+# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
+#else
+# define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
+#endif
+#define ECHO fprintf(yyout, "%s",yytext)
+# define REJECT { nstr = yyreject(); goto yyfussy;}
+int yyleng;
+#define YYISARRAY
+char yytext[YYLMAX];
+int yymorfg;
+extern char *yysptr, yysbuf[];
+int yytchar;
+FILE *yyin = {stdin}, *yyout = {stdout};
+extern int yylineno;
+struct yysvf { 
+       struct yywork *yystoff;
+       struct yysvf *yyother;
+       int *yystops;};
+struct yysvf *yyestate;
+extern struct yysvf yysvec[], *yybgin;
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning (disable:4244)
+#pragma warning (disable:4274)
+#pragma warning (disable:4706)
+#pragma warning (disable:4701)
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wwrite-strings"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+
+# line 4 "exptocas.l"
+/* File:       exptocas.l                     */
+
+# line 5 "exptocas.l"
+/* Created:    Thu Oct 28 12:21:16 1999       */
+
+# line 6 "exptocas.l"
+/* Author:     Andrey BETENEV                 */
+
+# line 7 "exptocas.l"
+/*             <abv@doomox.nnov.matra-dtv.fr> */
+
+# line 8 "exptocas.l"
+/* Copyright:  Matra Datavision 1999          */
+
+
+# line 10 "exptocas.l"
+/*****************************************************************************\
+
+This LEX scanner is performs lexical analysis of EXPRESS schema file   
+for EXPRESS -> CASCADE/XSTEP classes generator                             
+
+On the stage of lexical scanner comments (single- and multi-line),         
+definitions of CONSTANT, FUNCTION, RULE items and clauses WHERE, INVERSE
+and DERIVE of TYPE amd ENTITY items are dismissed (ignored)         
+
+Then, keywords such as ENTITY, SUPERTYPE, SET etc., names of items         
+and special symbols are identified and returned to parser (yacc) as tokens 
+
+Also, error processing and current line number tracking functions are defined
+
+\*****************************************************************************/
+
+
+# line 26 "exptocas.l"
+/************************************/
+
+# line 27 "exptocas.l"
+/* Section 1                        */
+
+# line 28 "exptocas.l"
+/* definitions                      */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <Express_HSequenceOfField.hxx>
+#include <Express_HSequenceOfItem.hxx>
+#include <Express_Field.hxx>
+#include <Express_Item.hxx>
+#include <Express_Type.hxx>
+#include <Express_Schema.hxx>
+#include <Express_Reference.hxx>
+
+#include "expparse.h"       /* define tokens */
+
+
+# line 44 "exptocas.l"
+/* Auxiliary functions */
+
+static int fun_level=0;
+static int ec_linenum=1;
+static int ec_state = 0;
+
+int yywrap(void) { return 1; }
+
+int ec_curline ( void )
+{
+  return ec_linenum;
+}
+
+int ec_error ( char const *s, char const *text )
+{
+  printf ( "\nError at line %d: %s \"%s\"\n", ec_curline(), s, text );
+  return 0;
+}
+
+# define TYP 2
+# define ENT 4
+# define COMM 6
+# define SKP 8
+# define RULE 10
+# define FUN 12
+
+
+# line 73 "exptocas.l"
+/************************************/
+
+# line 74 "exptocas.l"
+/* Section 2                        */
+
+# line 75 "exptocas.l"
+/* parsing rules                    */
+# define YYNEWLINE 10
+int yylex(){
+int nstr = 0; extern int yyprevious;
+#ifdef __cplusplus
+/* to avoid CC and lint complaining yyfussy not being used ...*/
+static int __lex_hack = 0;
+if (__lex_hack) goto yyfussy;
+#endif
+while((nstr = yylook()) >= 0)
+yyfussy: switch(nstr){
+case 0:
+if(yywrap()) return(0); break;
+case 1:
+
+# line 79 "exptocas.l"
+              { /* Eat line comments */ }
+break;
+case 2:
+
+# line 80 "exptocas.l"
+                { ec_state = YYSTATE; BEGIN(COMM); }
+break;
+case 3:
+
+# line 81 "exptocas.l"
+             { /* Eat multiline comments */ }
+break;
+case 4:
+
+# line 82 "exptocas.l"
+          { BEGIN(ec_state); }
+break;
+case 5:
+
+# line 84 "exptocas.l"
+            { return yylval.num = KSCHEM; }
+break;
+case 6:
+
+# line 85 "exptocas.l"
+        { return yylval.num = KENDS; }
+break;
+case 7:
+
+# line 87 "exptocas.l"
+              { BEGIN(TYP); return yylval.num = KTYP; }
+break;
+case 8:
+
+# line 88 "exptocas.l"
+ { BEGIN(0);   return yylval.num = KENDT; }
+break;
+case 9:
+
+# line 90 "exptocas.l"
+            { BEGIN(ENT); return yylval.num = KENT; }
+break;
+case 10:
+
+# line 91 "exptocas.l"
+{ BEGIN(0);  return yylval.num = KENDE; }
+break;
+case 11:
+
+# line 93 "exptocas.l"
+      case 12:
+
+# line 94 "exptocas.l"
+       case 13:
+
+# line 95 "exptocas.l"
+    { BEGIN(SKP); }
+break;
+case 14:
+
+# line 96 "exptocas.l"
+              { /* eat contents of WHERE and DERIVE subclauses of ENTITY and TYPE */ }
+break;
+case 15:
+
+# line 98 "exptocas.l"
+            { return yylval.num = KSEL; }
+break;
+case 16:
+
+# line 99 "exptocas.l"
+       { return yylval.num = KENUM; }
+break;
+case 17:
+
+# line 100 "exptocas.l"
+              { return yylval.num = KLIST; }
+break;
+case 18:
+
+# line 101 "exptocas.l"
+             { return yylval.num = KARR; }
+break;
+case 19:
+
+# line 102 "exptocas.l"
+               { return yylval.num = KSET; }
+break;
+case 20:
+
+# line 103 "exptocas.l"
+               { return yylval.num = KBAG; }
+break;
+case 21:
+
+# line 104 "exptocas.l"
+                { return yylval.num = KOF; }
+break;
+case 22:
+
+# line 106 "exptocas.l"
+            { return yylval.num = KNUM; }
+break;
+case 23:
+
+# line 107 "exptocas.l"
+           { return yylval.num = KINT; }
+break;
+case 24:
+
+# line 108 "exptocas.l"
+              { return yylval.num = KDBL; }
+break;
+case 25:
+
+# line 109 "exptocas.l"
+            { return yylval.num = KSTR; }
+break;
+case 26:
+
+# line 110 "exptocas.l"
+           { return yylval.num = KLOG; }
+break;
+case 27:
+
+# line 111 "exptocas.l"
+           { return yylval.num = KBOOL; }
+break;
+case 28:
+
+# line 113 "exptocas.l"
+          { return yylval.num = KOPT; }
+break;
+case 29:
+
+# line 114 "exptocas.l"
+            { return yylval.num = KUNIQ; }
+break;
+case 30:
+
+# line 115 "exptocas.l"
+              { return yylval.num = KSELF; }
+break;
+case 31:
+
+# line 117 "exptocas.l"
+          { return yylval.num = KABSTR; }
+break;
+case 32:
+
+# line 118 "exptocas.l"
+           { return yylval.num = KSUBT; }
+break;
+case 33:
+
+# line 119 "exptocas.l"
+         { return yylval.num = KSPRT; }
+break;
+case 34:
+
+# line 120 "exptocas.l"
+             { return yylval.num = KANDOR; }
+break;
+case 35:
+
+# line 121 "exptocas.l"
+             { return yylval.num = K1OF; }
+break;
+case 36:
+
+# line 122 "exptocas.l"
+               { return yylval.num = KAND; }
+break;
+case 37:
+
+# line 124 "exptocas.l"
+          { yylval.str = strdup ( yytext ); return NAME; }
+break;
+case 38:
+
+# line 126 "exptocas.l"
+    { yylval.str = strdup ( yytext ); return NAME; }
+break;
+case 39:
+
+# line 128 "exptocas.l"
+              { yylval.num = atoi ( yytext ); return NUMBER; }
+break;
+case 40:
+
+# line 129 "exptocas.l"
+{ return yylval.num = yytext[0]; }
+break;
+case 41:
+
+# line 131 "exptocas.l"
+ { BEGIN(FUN); fun_level++; }
+break;
+case 42:
+
+# line 132 "exptocas.l"
+           { ec_state = YYSTATE; BEGIN(COMM); /* eat comments in functions */ }
+break;
+case 43:
+
+# line 133 "exptocas.l"
+         { /* Eat line comments in functions */ }
+break;
+case 44:
+
+# line 134 "exptocas.l"
+  { /* eat FUNCTIONs - skip IDs explicitly */ }
+break;
+case 45:
+
+# line 135 "exptocas.l"
+     { /* eat FUNCTIONs - skip strings explicitly */ }
+break;
+case 46:
+
+# line 136 "exptocas.l"
+              { /* eat FUNCTIONs - skip all other symbols in functions */ }
+break;
+case 47:
+
+# line 137 "exptocas.l"
+{ fun_level--; if ( ! fun_level ) BEGIN(0); }
+break;
+case 48:
+
+# line 139 "exptocas.l"
+              { BEGIN(RULE); /* eat RULEs */ }
+break;
+case 49:
+
+# line 140 "exptocas.l"
+             { /* eat RULEs */ }
+break;
+case 50:
+
+# line 141 "exptocas.l"
+   { BEGIN(0); }
+break;
+case 51:
+
+# line 143 "exptocas.l"
+{ /* eat CONSTANTs */
+                       char *s = yytext; /* but don't forget to count lines.. */
+                       while ( *s ) if ( *(s++) == '\n' ) ec_linenum++;
+                     }
+break;
+case 52:
+
+# line 148 "exptocas.l"
+              { /* eat spaces */ }
+break;
+case 53:
+
+# line 149 "exptocas.l"
+       { ec_error ( "unknown keyword ", yytext ); /* put unrecognized keywords to cerr */ }
+break;
+case 54:
+
+# line 150 "exptocas.l"
+                   { ec_error ( "unknown symbol ", yytext ); /* put unrecognized data to cerr */ }
+break;
+case 55:
+
+# line 152 "exptocas.l"
+ { ec_linenum++; /* count lines */ }
+break;
+case -1:
+break;
+default:
+(void)fprintf(yyout,"bad switch yylook %d",nstr);
+} return(0); }
+/* end of yylex */
+
+# line 155 "exptocas.l"
+
+/************************************/
+/* Section 3                        */
+/* auxiliary procedures             */
+
+/*
+int main ( void )
+{
+  yylex();
+}
+*/
+int yyvstop[] = {
+0,
+
+44,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+54,
+0, 
+
+52,
+54,
+0, 
+
+55,
+0, 
+
+40,
+54,
+0, 
+
+40,
+54,
+0, 
+
+54,
+0, 
+
+39,
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+38,
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+53,
+54,
+0, 
+
+3,
+0, 
+
+3,
+0, 
+
+14,
+0, 
+
+14,
+0, 
+
+49,
+0, 
+
+49,
+0, 
+
+46,
+0, 
+
+46,
+0, 
+
+46,
+0, 
+
+46,
+0, 
+
+44,
+46,
+0, 
+
+44,
+46,
+0, 
+
+44,
+46,
+0, 
+
+52,
+0, 
+
+2,
+0, 
+
+1,
+0, 
+
+39,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+21,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+38,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+4,
+0, 
+
+45,
+0, 
+
+42,
+0, 
+
+43,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+36,
+53,
+0, 
+
+53,
+0, 
+
+20,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+19,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+37,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+17,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+24,
+53,
+0, 
+
+48,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+30,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+7,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+34,
+53,
+0, 
+
+18,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+35,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+13,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+9,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+22,
+53,
+0, 
+
+53,
+0, 
+
+5,
+53,
+0, 
+
+15,
+53,
+0, 
+
+25,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+29,
+53,
+0, 
+
+53,
+0, 
+
+12,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+27,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+23,
+53,
+0, 
+
+26,
+53,
+0, 
+
+53,
+0, 
+
+32,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+11,
+53,
+0, 
+
+44,
+0, 
+
+44,
+0, 
+
+31,
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+41,
+53,
+0, 
+
+28,
+53,
+0, 
+
+53,
+0, 
+
+8,
+53,
+0, 
+
+53,
+0, 
+
+8,
+0, 
+
+44,
+0, 
+
+41,
+44,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+33,
+53,
+0, 
+
+53,
+0, 
+
+50,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+6,
+53,
+0, 
+
+53,
+0, 
+
+10,
+53,
+0, 
+
+10,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+16,
+53,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+44,
+0, 
+
+53,
+0, 
+
+47,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+53,
+0, 
+
+51,
+0, 
+0};
+# define YYTYPE int
+struct yywork { YYTYPE verify, advance; } yycrank[] = {
+0,0,   0,0,    1,15,   0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    1,16,   1,17,   
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+16,55, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+1,15,  1,18,   1,19,   0,0,    
+0,0,   1,19,   1,20,   16,55,  
+0,0,   1,21,   0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+43,90, 8,43,   18,56,  1,19,   
+1,19,  20,57,  1,19,   50,95,  
+51,96, 0,0,    1,22,   1,23,   
+1,24,  1,25,   1,26,   1,27,   
+1,25,  1,25,   1,28,   1,25,   
+1,25,  1,29,   1,25,   1,30,   
+1,31,  1,25,   1,25,   1,32,   
+1,33,  1,34,   1,35,   1,25,   
+1,25,  1,25,   1,25,   1,25,   
+1,19,  10,45,  1,19,   45,91,  
+1,36,  47,92,  53,98,  91,132, 
+54,99, 2,19,   25,59,  25,59,  
+25,59, 25,59,  25,59,  25,59,  
+25,59, 25,59,  25,59,  25,59,  
+92,133,        98,134, 99,135, 132,166,        
+133,167,       134,168,        2,19,   2,19,   
+135,169,       2,19,   167,197,        168,198,        
+169,199,       1,15,   2,23,   2,24,   
+2,25,  2,26,   2,27,   2,25,   
+2,25,  2,28,   2,25,   2,25,   
+2,29,  2,25,   2,30,   2,31,   
+2,25,  2,25,   2,32,   2,33,   
+2,34,  2,35,   2,25,   2,25,   
+2,25,  2,25,   2,25,   2,19,   
+195,221,       2,19,   196,222,        197,223,        
+166,195,       198,224,        199,225,        221,240,        
+3,19,  39,59,  39,59,  39,59,  
+39,59, 39,59,  39,59,  39,59,  
+39,59, 39,59,  39,59,  166,196,        
+222,241,       223,242,        224,243,        225,244,        
+240,254,       3,19,   3,19,   241,255,        
+3,19,  242,256,        39,87,  243,257,        
+2,15,  3,23,   3,24,   3,25,   
+3,37,  3,25,   3,25,   3,25,   
+3,28,  3,25,   3,25,   3,29,   
+3,25,  3,30,   3,31,   3,25,   
+3,25,  3,32,   3,33,   3,34,   
+3,35,  3,25,   3,38,   3,25,   
+3,25,  3,25,   3,19,   244,258,        
+3,19,  254,265,        256,266,        257,267,        
+265,273,       267,274,        268,275,        4,19,   
+59,59, 59,59,  59,59,  59,59,  
+59,59, 59,59,  59,59,  59,59,  
+59,59, 59,59,  274,278,        275,279,        
+278,281,       279,282,        281,284,        282,285,        
+4,19,  4,19,   285,287,        4,19,   
+287,289,       289,291,        291,293,        3,15,   
+4,23,  4,24,   4,25,   4,37,   
+4,25,  4,25,   4,25,   4,28,   
+4,25,  4,25,   4,29,   4,25,   
+4,30,  4,31,   4,25,   4,25,   
+4,32,  4,33,   4,34,   4,35,   
+4,25,  4,38,   4,25,   4,25,   
+4,25,  4,19,   293,295,        4,19,   
+295,297,       297,299,        299,301,        0,0,    
+0,0,   0,0,    5,19,   61,59,  
+61,59, 61,59,  61,59,  61,59,  
+61,59, 61,59,  61,59,  61,59,  
+61,59, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    5,19,   
+5,19,  0,0,    5,19,   61,101, 
+0,0,   0,0,    4,15,   5,23,   
+5,24,  5,39,   5,40,   5,25,   
+5,25,  5,25,   5,41,   5,25,   
+5,25,  5,29,   5,25,   5,30,   
+5,31,  5,25,   5,25,   5,32,   
+5,33,  5,34,   5,35,   5,25,   
+5,38,  5,25,   5,25,   5,25,   
+5,19,  0,0,    5,19,   14,48,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   6,19,   72,59,  72,59,  
+72,59, 72,59,  72,59,  72,59,  
+72,59, 72,59,  72,59,  72,59,  
+14,48, 14,48,  0,0,    14,48,  
+0,0,   0,0,    6,19,   6,19,   
+0,0,   6,19,   0,0,    14,53,  
+14,54, 5,15,   6,23,   6,24,   
+6,39,  6,40,   6,25,   6,25,   
+6,25,  6,41,   6,25,   6,25,   
+6,29,  6,25,   6,30,   6,31,   
+6,25,  6,25,   6,32,   6,33,   
+6,34,  6,35,   6,25,   6,38,   
+6,25,  6,25,   6,25,   6,19,   
+7,42,  6,19,   0,0,    0,0,    
+0,0,   0,0,    0,0,    9,44,   
+7,42,  7,17,   0,0,    0,0,    
+0,0,   0,0,    11,46,  9,44,   
+9,17,  0,0,    0,0,    0,0,    
+0,0,   0,0,    11,46,  0,0,    
+0,0,   0,0,    14,48,  0,0,    
+0,0,   12,46,  0,0,    0,0,    
+6,15,  0,0,    0,0,    0,0,    
+0,0,   12,46,  7,42,   7,42,   
+0,0,   7,43,   0,0,    7,42,   
+7,42,  9,44,   9,44,   7,42,   
+0,0,   0,0,    9,44,   9,44,   
+11,46, 11,46,  9,44,   0,0,    
+0,0,   11,46,  11,46,  0,0,    
+0,0,   11,46,  0,0,    0,0,    
+7,42,  0,0,    0,0,    12,46,  
+12,46, 0,0,    0,0,    9,44,   
+12,46, 12,46,  0,0,    9,45,   
+12,46, 13,48,  11,46,  0,0,    
+0,0,   0,0,    11,47,  0,0,    
+0,0,   13,48,  13,17,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   12,46,  7,42,   0,0,    
+0,0,   12,47,  0,0,    0,0,    
+0,0,   9,44,   0,0,    0,0,    
+49,93, 0,0,    0,0,    0,0,    
+11,46, 0,0,    0,0,    0,0,    
+49,93, 49,93,  0,0,    13,49,  
+13,50, 13,48,  0,0,    0,0,    
+13,48, 13,51,  0,0,    12,46,  
+13,52, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    13,48,  13,48,  
+0,0,   13,48,  0,0,    0,0,    
+0,0,   13,52,  49,94,  49,93,  
+0,0,   13,53,  13,54,  49,93,  
+49,93, 0,0,    0,0,    49,93,  
+0,0,   0,0,    0,0,    21,58,  
+21,58, 21,58,  21,58,  21,58,  
+21,58, 21,58,  21,58,  21,58,  
+21,58, 0,0,    0,0,    0,0,    
+49,93, 0,0,    0,0,    13,52,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  49,93,  0,0,    
+13,48, 0,0,    21,59,  0,0,    
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  21,59,  21,59,  
+21,59, 21,59,  22,59,  22,59,  
+22,59, 22,59,  22,59,  22,59,  
+22,59, 22,59,  22,59,  22,59,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+22,60, 23,59,  23,59,  23,59,  
+23,59, 23,59,  23,59,  23,59,  
+23,59, 23,59,  23,59,  0,0,    
+22,61, 0,0,    0,0,    0,0,    
+22,62, 0,0,    23,63,  24,59,  
+24,59, 24,59,  24,59,  24,59,  
+24,59, 24,59,  24,59,  24,59,  
+24,59, 0,0,    0,0,    0,0,    
+23,64, 26,59,  26,59,  26,59,  
+26,59, 26,59,  26,59,  26,59,  
+26,59, 26,59,  26,59,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    24,65,  27,59,  
+27,59, 27,59,  27,59,  27,59,  
+27,59, 27,59,  27,59,  27,59,  
+27,59, 0,0,    0,0,    26,66,  
+28,59, 28,59,  28,59,  28,59,  
+28,59, 28,59,  28,59,  28,59,  
+28,59, 28,59,  29,59,  29,59,  
+29,59, 29,59,  29,59,  29,59,  
+29,59, 29,59,  29,59,  29,59,  
+0,0,   0,0,    0,0,    0,0,    
+27,67, 0,0,    0,0,    0,0,    
+0,0,   0,0,    28,68,  0,0,    
+0,0,   0,0,    0,0,    29,69,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   29,70,  30,59,  30,59,  
+30,59, 30,59,  30,59,  30,59,  
+30,59, 30,59,  30,59,  30,59,  
+31,59, 31,59,  31,59,  31,59,  
+31,59, 31,59,  31,59,  31,59,  
+31,59, 31,59,  32,59,  32,59,  
+32,59, 32,59,  32,59,  32,59,  
+32,59, 32,59,  32,59,  32,59,  
+0,0,   0,0,    31,72,  0,0,    
+0,0,   0,0,    0,0,    30,71,  
+0,0,   0,0,    31,73,  32,75,  
+31,74, 33,59,  33,59,  33,59,  
+33,59, 33,59,  33,59,  33,59,  
+33,59, 33,59,  33,59,  0,0,    
+0,0,   0,0,    0,0,    32,76,  
+0,0,   0,0,    0,0,    0,0,    
+33,77, 0,0,    33,78,  34,59,  
+34,59, 34,59,  34,59,  34,59,  
+34,59, 34,59,  34,59,  34,59,  
+34,59, 0,0,    0,0,    0,0,    
+0,0,   33,79,  33,80,  35,59,  
+35,59, 35,59,  35,59,  35,59,  
+35,59, 35,59,  35,59,  35,59,  
+35,59, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+34,81, 0,0,    0,0,    0,0,    
+0,0,   35,82,  0,0,    0,0,    
+0,0,   35,83,  63,59,  63,59,  
+63,59, 63,59,  63,59,  63,59,  
+63,59, 63,59,  63,59,  63,59,  
+83,126,        83,126, 83,126, 83,126, 
+83,126,        83,126, 83,126, 83,126, 
+83,126,        83,126, 0,0,    0,0,    
+36,84, 63,103, 36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+36,84, 36,84,  36,84,  36,84,  
+37,59, 37,59,  37,59,  37,59,  
+37,59, 37,59,  37,59,  37,59,  
+37,59, 37,59,  38,59,  38,59,  
+38,59, 38,59,  38,59,  38,59,  
+38,59, 38,59,  38,59,  38,59,  
+40,59, 40,59,  40,59,  40,59,  
+40,59, 40,59,  40,59,  40,59,  
+40,59, 40,59,  37,85,  0,0,    
+0,0,   0,0,    38,86,  41,59,  
+41,59, 41,59,  41,59,  41,59,  
+41,59, 41,59,  41,59,  41,59,  
+41,59, 0,0,    0,0,    0,0,    
+0,0,   0,0,    40,88,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 0,0,    0,0,    0,0,    
+0,0,   41,89,  0,0,    0,0,    
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  0,0,    0,0,    
+0,0,   0,0,    52,97,  0,0,    
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  52,97,  52,97,  
+52,97, 52,97,  57,57,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    57,57,  57,0,   
+60,59, 60,59,  60,59,  60,59,  
+60,59, 60,59,  60,59,  60,59,  
+60,59, 60,59,  62,59,  62,59,  
+62,59, 62,59,  62,59,  62,59,  
+62,59, 62,59,  62,59,  62,59,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+57,57, 57,57,  0,0,    0,0,    
+0,0,   57,57,  57,57,  60,100, 
+0,0,   57,57,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+62,102,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    57,57,  64,59,  
+64,59, 64,59,  64,59,  64,59,  
+64,59, 64,59,  64,59,  64,59,  
+64,59, 65,59,  65,59,  65,59,  
+65,59, 65,59,  65,59,  65,59,  
+65,59, 65,59,  65,59,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+57,57, 0,0,    64,104, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    65,105, 
+66,59, 66,59,  66,59,  66,59,  
+66,59, 66,59,  66,59,  66,59,  
+66,59, 66,59,  67,59,  67,59,  
+67,59, 67,59,  67,59,  67,59,  
+67,59, 67,59,  67,59,  67,59,  
+66,106,        68,59,  68,59,  68,59,  
+68,59, 68,59,  68,59,  68,59,  
+68,59, 68,59,  68,59,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+66,107,        66,108, 0,0,    0,0,    
+67,109,        69,59,  69,59,  69,59,  
+69,59, 69,59,  69,59,  69,59,  
+69,59, 69,59,  69,59,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   68,110, 70,59,  70,59,  
+70,59, 70,59,  70,59,  70,59,  
+70,59, 70,59,  70,59,  70,59,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+69,111,        0,0,    0,0,    0,0,    
+0,0,   70,112, 71,59,  71,59,  
+71,59, 71,59,  71,59,  71,59,  
+71,59, 71,59,  71,59,  71,59,  
+73,59, 73,59,  73,59,  73,59,  
+73,59, 73,59,  73,59,  73,59,  
+73,59, 73,59,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    71,113, 
+0,0,   73,114, 74,59,  74,59,  
+74,59, 74,59,  74,59,  74,59,  
+74,59, 74,59,  74,59,  74,59,  
+75,59, 75,59,  75,59,  75,59,  
+75,59, 75,59,  75,59,  75,59,  
+75,59, 75,59,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   75,116, 0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    74,115, 76,59,  
+76,59, 76,59,  76,59,  76,59,  
+76,59, 76,59,  76,59,  76,59,  
+76,59, 77,59,  77,59,  77,59,  
+77,59, 77,59,  77,59,  77,59,  
+77,59, 77,59,  77,59,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    76,117, 
+0,0,   0,0,    0,0,    0,0,    
+0,0,   77,118, 78,59,  78,59,  
+78,59, 78,59,  78,59,  78,59,  
+78,59, 78,59,  78,59,  78,59,  
+79,59, 79,59,  79,59,  79,59,  
+79,59, 79,59,  79,59,  79,59,  
+79,59, 79,59,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    78,119, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    78,120, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    79,121, 80,59,  
+80,59, 80,59,  80,59,  80,59,  
+80,59, 80,59,  80,59,  80,59,  
+80,59, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   80,122, 81,59,  81,59,  
+81,59, 81,59,  81,59,  81,59,  
+81,59, 81,59,  81,59,  81,59,  
+0,0,   0,0,    0,0,    80,123, 
+82,59, 82,59,  82,59,  82,59,  
+82,59, 82,59,  82,59,  82,59,  
+82,59, 82,59,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    81,124, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   82,125, 84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+86,59, 86,59,  86,59,  86,59,  
+86,59, 86,59,  86,59,  86,59,  
+86,59, 86,59,  102,59, 102,59, 
+102,59,        102,59, 102,59, 102,59, 
+102,59,        102,59, 102,59, 102,59, 
+0,0,   86,128, 0,0,    0,0,    
+0,0,   0,0,    0,0,    102,138,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   84,84,  0,0,    84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 84,84,  84,84,  84,84,  
+84,84, 85,59,  85,59,  85,59,  
+85,59, 85,59,  85,59,  85,59,  
+85,59, 85,59,  85,59,  87,59,  
+87,59, 87,59,  87,59,  87,59,  
+87,59, 87,59,  87,59,  87,59,  
+87,59, 85,127, 88,59,  88,59,  
+88,59, 88,59,  88,59,  88,59,  
+88,59, 88,59,  88,59,  88,59,  
+96,96, 0,0,    0,0,    0,0,    
+0,0,   85,107, 85,108, 0,0,    
+96,96, 96,0,   88,130, 0,0,    
+0,0,   87,129, 89,59,  89,59,  
+89,59, 89,59,  89,59,  89,59,  
+89,59, 89,59,  89,59,  89,59,  
+0,0,   0,0,    88,107, 88,108, 
+103,59,        103,59, 103,59, 103,59, 
+103,59,        103,59, 103,59, 103,59, 
+103,59,        103,59, 96,96,  96,96,  
+0,0,   0,0,    0,0,    96,96,  
+96,96, 0,0,    0,0,    96,96,  
+0,0,   0,0,    89,110, 0,0,    
+89,131,        100,59, 100,59, 100,59, 
+100,59,        100,59, 100,59, 100,59, 
+100,59,        100,59, 100,59, 0,0,    
+96,96, 101,59, 101,59, 101,59, 
+101,59,        101,59, 101,59, 101,59, 
+101,59,        101,59, 101,59, 104,59, 
+104,59,        104,59, 104,59, 104,59, 
+104,59,        104,59, 104,59, 104,59, 
+104,59,        0,0,    0,0,    0,0,    
+0,0,   100,136,        0,0,    0,0,    
+0,0,   0,0,    96,96,  0,0,    
+101,137,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    104,139,        
+105,59,        105,59, 105,59, 105,59, 
+105,59,        105,59, 105,59, 105,59, 
+105,59,        105,59, 106,59, 106,59, 
+106,59,        106,59, 106,59, 106,59, 
+106,59,        106,59, 106,59, 106,59, 
+107,59,        107,59, 107,59, 107,59, 
+107,59,        107,59, 107,59, 107,59, 
+107,59,        107,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    105,140,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   107,142,        108,59, 108,59, 
+108,59,        108,59, 108,59, 108,59, 
+108,59,        108,59, 108,59, 108,59, 
+0,0,   106,141,        109,59, 109,59, 
+109,59,        109,59, 109,59, 109,59, 
+109,59,        109,59, 109,59, 109,59, 
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    108,143,        
+0,0,   109,144,        110,59, 110,59, 
+110,59,        110,59, 110,59, 110,59, 
+110,59,        110,59, 110,59, 110,59, 
+111,59,        111,59, 111,59, 111,59, 
+111,59,        111,59, 111,59, 111,59, 
+111,59,        111,59, 0,0,    110,145,        
+112,59,        112,59, 112,59, 112,59, 
+112,59,        112,59, 112,59, 112,59, 
+112,59,        112,59, 113,59, 113,59, 
+113,59,        113,59, 113,59, 113,59, 
+113,59,        113,59, 113,59, 113,59, 
+0,0,   0,0,    0,0,    0,0,    
+111,146,       112,147,        0,0,    0,0,    
+113,148,       114,59, 114,59, 114,59, 
+114,59,        114,59, 114,59, 114,59, 
+114,59,        114,59, 114,59, 115,59, 
+115,59,        115,59, 115,59, 115,59, 
+115,59,        115,59, 115,59, 115,59, 
+115,59,        116,59, 116,59, 116,59, 
+116,59,        116,59, 116,59, 116,59, 
+116,59,        116,59, 116,59, 0,0,    
+114,149,       0,0,    0,0,    0,0,    
+115,150,       117,59, 117,59, 117,59, 
+117,59,        117,59, 117,59, 117,59, 
+117,59,        117,59, 117,59, 0,0,    
+0,0,   116,151,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    117,152,        118,59, 
+118,59,        118,59, 118,59, 118,59, 
+118,59,        118,59, 118,59, 118,59, 
+118,59,        119,59, 119,59, 119,59, 
+119,59,        119,59, 119,59, 119,59, 
+119,59,        119,59, 119,59, 0,0,    
+118,153,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    119,154,        119,155,        
+120,59,        120,59, 120,59, 120,59, 
+120,59,        120,59, 120,59, 120,59, 
+120,59,        120,59, 121,59, 121,59, 
+121,59,        121,59, 121,59, 121,59, 
+121,59,        121,59, 121,59, 121,59, 
+122,59,        122,59, 122,59, 122,59, 
+122,59,        122,59, 122,59, 122,59, 
+122,59,        122,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    121,156,        
+123,59,        123,59, 123,59, 123,59, 
+123,59,        123,59, 123,59, 123,59, 
+123,59,        123,59, 124,59, 124,59, 
+124,59,        124,59, 124,59, 124,59, 
+124,59,        124,59, 124,59, 124,59, 
+122,157,       123,158,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    124,159,        
+125,59,        125,59, 125,59, 125,59, 
+125,59,        125,59, 125,59, 125,59, 
+125,59,        125,59, 126,126,        126,126,        
+126,126,       126,126,        126,126,        126,126,        
+126,126,       126,126,        126,126,        126,126,        
+127,59,        127,59, 127,59, 127,59, 
+127,59,        127,59, 127,59, 127,59, 
+127,59,        127,59, 0,0,    0,0,    
+0,0,   125,160,        128,59, 128,59, 
+128,59,        128,59, 128,59, 128,59, 
+128,59,        128,59, 128,59, 128,59, 
+129,59,        129,59, 129,59, 129,59, 
+129,59,        129,59, 129,59, 129,59, 
+129,59,        129,59, 130,59, 130,59, 
+130,59,        130,59, 130,59, 130,59, 
+130,59,        130,59, 130,59, 130,59, 
+0,0,   0,0,    0,0,    127,161,        
+128,162,       129,163,        131,59, 131,59, 
+131,59,        131,59, 131,59, 131,59, 
+131,59,        131,59, 131,59, 131,59, 
+136,59,        136,59, 136,59, 136,59, 
+136,59,        136,59, 136,59, 136,59, 
+136,59,        136,59, 0,0,    131,165,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   130,164,        137,59, 137,59, 
+137,59,        137,59, 137,59, 137,59, 
+137,59,        137,59, 137,59, 137,59, 
+0,0,   0,0,    136,170,        138,59, 
+138,59,        138,59, 138,59, 138,59, 
+138,59,        138,59, 138,59, 138,59, 
+138,59,        139,59, 139,59, 139,59, 
+139,59,        139,59, 139,59, 139,59, 
+139,59,        139,59, 139,59, 0,0,    
+137,171,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    139,173,        0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+138,172,       140,59, 140,59, 140,59, 
+140,59,        140,59, 140,59, 140,59, 
+140,59,        140,59, 140,59, 141,59, 
+141,59,        141,59, 141,59, 141,59, 
+141,59,        141,59, 141,59, 141,59, 
+141,59,        142,59, 142,59, 142,59, 
+142,59,        142,59, 142,59, 142,59, 
+142,59,        142,59, 142,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   140,174,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    141,175,        143,59, 
+143,59,        143,59, 143,59, 143,59, 
+143,59,        143,59, 143,59, 143,59, 
+143,59,        142,176,        144,59, 144,59, 
+144,59,        144,59, 144,59, 144,59, 
+144,59,        144,59, 144,59, 144,59, 
+143,177,       145,59, 145,59, 145,59, 
+145,59,        145,59, 145,59, 145,59, 
+145,59,        145,59, 145,59, 146,59, 
+146,59,        146,59, 146,59, 146,59, 
+146,59,        146,59, 146,59, 146,59, 
+146,59,        0,0,    0,0,    0,0,    
+145,179,       0,0,    144,178,        147,59, 
+147,59,        147,59, 147,59, 147,59, 
+147,59,        147,59, 147,59, 147,59, 
+147,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    147,180,        148,59, 
+148,59,        148,59, 148,59, 148,59, 
+148,59,        148,59, 148,59, 148,59, 
+148,59,        149,59, 149,59, 149,59, 
+149,59,        149,59, 149,59, 149,59, 
+149,59,        149,59, 149,59, 0,0,    
+148,181,       150,59, 150,59, 150,59, 
+150,59,        150,59, 150,59, 150,59, 
+150,59,        150,59, 150,59, 149,182,        
+151,59,        151,59, 151,59, 151,59, 
+151,59,        151,59, 151,59, 151,59, 
+151,59,        151,59, 152,59, 152,59, 
+152,59,        152,59, 152,59, 152,59, 
+152,59,        152,59, 152,59, 152,59, 
+150,183,       153,59, 153,59, 153,59, 
+153,59,        153,59, 153,59, 153,59, 
+153,59,        153,59, 153,59, 0,0,    
+154,59,        154,59, 154,59, 154,59, 
+154,59,        154,59, 154,59, 154,59, 
+154,59,        154,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    153,184,        154,185,        
+155,59,        155,59, 155,59, 155,59, 
+155,59,        155,59, 155,59, 155,59, 
+155,59,        155,59, 156,59, 156,59, 
+156,59,        156,59, 156,59, 156,59, 
+156,59,        156,59, 156,59, 156,59, 
+157,59,        157,59, 157,59, 157,59, 
+157,59,        157,59, 157,59, 157,59, 
+157,59,        157,59, 158,59, 158,59, 
+158,59,        158,59, 158,59, 158,59, 
+158,59,        158,59, 158,59, 158,59, 
+156,186,       159,59, 159,59, 159,59, 
+159,59,        159,59, 159,59, 159,59, 
+159,59,        159,59, 159,59, 160,59, 
+160,59,        160,59, 160,59, 160,59, 
+160,59,        160,59, 160,59, 160,59, 
+160,59,        157,187,        0,0,    0,0,    
+158,188,       161,59, 161,59, 161,59, 
+161,59,        161,59, 161,59, 161,59, 
+161,59,        161,59, 161,59, 162,59, 
+162,59,        162,59, 162,59, 162,59, 
+162,59,        162,59, 162,59, 162,59, 
+162,59,        0,0,    0,0,    0,0,    
+160,189,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+162,191,       0,0,    0,0,    0,0,    
+161,175,       161,190,        163,59, 163,59, 
+163,59,        163,59, 163,59, 163,59, 
+163,59,        163,59, 163,59, 163,59, 
+164,59,        164,59, 164,59, 164,59, 
+164,59,        164,59, 164,59, 164,59, 
+164,59,        164,59, 165,59, 165,59, 
+165,59,        165,59, 165,59, 165,59, 
+165,59,        165,59, 165,59, 165,59, 
+0,0,   164,193,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+163,192,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    164,175,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+165,194,       170,59, 170,59, 170,59, 
+170,59,        170,59, 170,59, 170,59, 
+170,59,        170,59, 170,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    170,200,        171,59, 
+171,59,        171,59, 171,59, 171,59, 
+171,59,        171,59, 171,59, 171,59, 
+171,59,        172,59, 172,59, 172,59, 
+172,59,        172,59, 172,59, 172,59, 
+172,59,        172,59, 172,59, 173,59, 
+173,59,        173,59, 173,59, 173,59, 
+173,59,        173,59, 173,59, 173,59, 
+173,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+173,201,       174,59, 174,59, 174,59, 
+174,59,        174,59, 174,59, 174,59, 
+174,59,        174,59, 174,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    174,202,        175,59, 
+175,59,        175,59, 175,59, 175,59, 
+175,59,        175,59, 175,59, 175,59, 
+175,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    175,203,        176,59, 
+176,59,        176,59, 176,59, 176,59, 
+176,59,        176,59, 176,59, 176,59, 
+176,59,        177,59, 177,59, 177,59, 
+177,59,        177,59, 177,59, 177,59, 
+177,59,        177,59, 177,59, 178,59, 
+178,59,        178,59, 178,59, 178,59, 
+178,59,        178,59, 178,59, 178,59, 
+178,59,        179,59, 179,59, 179,59, 
+179,59,        179,59, 179,59, 179,59, 
+179,59,        179,59, 179,59, 0,0,    
+176,204,       0,0,    0,0,    177,205,        
+178,206,       0,0,    0,0,    0,0,    
+0,0,   0,0,    179,207,        180,59, 
+180,59,        180,59, 180,59, 180,59, 
+180,59,        180,59, 180,59, 180,59, 
+180,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+180,208,       181,59, 181,59, 181,59, 
+181,59,        181,59, 181,59, 181,59, 
+181,59,        181,59, 181,59, 182,59, 
+182,59,        182,59, 182,59, 182,59, 
+182,59,        182,59, 182,59, 182,59, 
+182,59,        183,59, 183,59, 183,59, 
+183,59,        183,59, 183,59, 183,59, 
+183,59,        183,59, 183,59, 0,0,    
+0,0,   0,0,    0,0,    181,209,        
+184,59,        184,59, 184,59, 184,59, 
+184,59,        184,59, 184,59, 184,59, 
+184,59,        184,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    183,210,        
+0,0,   184,211,        185,59, 185,59, 
+185,59,        185,59, 185,59, 185,59, 
+185,59,        185,59, 185,59, 185,59, 
+186,59,        186,59, 186,59, 186,59, 
+186,59,        186,59, 186,59, 186,59, 
+186,59,        186,59, 187,59, 187,59, 
+187,59,        187,59, 187,59, 187,59, 
+187,59,        187,59, 187,59, 187,59, 
+0,0,   0,0,    0,0,    186,213,        
+0,0,   0,0,    185,212,        188,59, 
+188,59,        188,59, 188,59, 188,59, 
+188,59,        188,59, 188,59, 188,59, 
+188,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    187,214,        189,59, 
+189,59,        189,59, 189,59, 189,59, 
+189,59,        189,59, 189,59, 189,59, 
+189,59,        190,59, 190,59, 190,59, 
+190,59,        190,59, 190,59, 190,59, 
+190,59,        190,59, 190,59, 188,215,        
+189,216,       191,59, 191,59, 191,59, 
+191,59,        191,59, 191,59, 191,59, 
+191,59,        191,59, 191,59, 192,59, 
+192,59,        192,59, 192,59, 192,59, 
+192,59,        192,59, 192,59, 192,59, 
+192,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    190,217,        0,0,    
+192,218,       193,59, 193,59, 193,59, 
+193,59,        193,59, 193,59, 193,59, 
+193,59,        193,59, 193,59, 194,59, 
+194,59,        194,59, 194,59, 194,59, 
+194,59,        194,59, 194,59, 194,59, 
+194,59,        200,59, 200,59, 200,59, 
+200,59,        200,59, 200,59, 200,59, 
+200,59,        200,59, 200,59, 193,219,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+200,226,       0,0,    0,0,    0,0,    
+0,0,   0,0,    194,220,        201,59, 
+201,59,        201,59, 201,59, 201,59, 
+201,59,        201,59, 201,59, 201,59, 
+201,59,        202,59, 202,59, 202,59, 
+202,59,        202,59, 202,59, 202,59, 
+202,59,        202,59, 202,59, 203,59, 
+203,59,        203,59, 203,59, 203,59, 
+203,59,        203,59, 203,59, 203,59, 
+203,59,        201,227,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    202,228,        
+0,0,   0,0,    0,0,    203,229,        
+204,59,        204,59, 204,59, 204,59, 
+204,59,        204,59, 204,59, 204,59, 
+204,59,        204,59, 205,59, 205,59, 
+205,59,        205,59, 205,59, 205,59, 
+205,59,        205,59, 205,59, 205,59, 
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    205,230,        
+206,59,        206,59, 206,59, 206,59, 
+206,59,        206,59, 206,59, 206,59, 
+206,59,        206,59, 207,59, 207,59, 
+207,59,        207,59, 207,59, 207,59, 
+207,59,        207,59, 207,59, 207,59, 
+208,59,        208,59, 208,59, 208,59, 
+208,59,        208,59, 208,59, 208,59, 
+208,59,        208,59, 0,0,    206,231,        
+209,59,        209,59, 209,59, 209,59, 
+209,59,        209,59, 209,59, 209,59, 
+209,59,        209,59, 0,0,    0,0,    
+207,232,       0,0,    0,0,    0,0,    
+208,233,       210,59, 210,59, 210,59, 
+210,59,        210,59, 210,59, 210,59, 
+210,59,        210,59, 210,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    210,234,        211,59, 
+211,59,        211,59, 211,59, 211,59, 
+211,59,        211,59, 211,59, 211,59, 
+211,59,        212,59, 212,59, 212,59, 
+212,59,        212,59, 212,59, 212,59, 
+212,59,        212,59, 212,59, 213,59, 
+213,59,        213,59, 213,59, 213,59, 
+213,59,        213,59, 213,59, 213,59, 
+213,59,        214,59, 214,59, 214,59, 
+214,59,        214,59, 214,59, 214,59, 
+214,59,        214,59, 214,59, 215,59, 
+215,59,        215,59, 215,59, 215,59, 
+215,59,        215,59, 215,59, 215,59, 
+215,59,        0,0,    214,235,        216,59, 
+216,59,        216,59, 216,59, 216,59, 
+216,59,        216,59, 216,59, 216,59, 
+216,59,        217,59, 217,59, 217,59, 
+217,59,        217,59, 217,59, 217,59, 
+217,59,        217,59, 217,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+215,236,       218,59, 218,59, 218,59, 
+218,59,        218,59, 218,59, 218,59, 
+218,59,        218,59, 218,59, 0,0,    
+0,0,   217,237,        219,59, 219,59, 
+219,59,        219,59, 219,59, 219,59, 
+219,59,        219,59, 219,59, 219,59, 
+220,59,        220,59, 220,59, 220,59, 
+220,59,        220,59, 220,59, 220,59, 
+220,59,        220,59, 226,59, 226,59, 
+226,59,        226,59, 226,59, 226,59, 
+226,59,        226,59, 226,59, 226,59, 
+0,0,   220,239,        0,0,    0,0,    
+0,0,   0,0,    219,238,        227,59, 
+227,59,        227,59, 227,59, 227,59, 
+227,59,        227,59, 227,59, 227,59, 
+227,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    226,245,        228,59, 
+228,59,        228,59, 228,59, 228,59, 
+228,59,        228,59, 228,59, 228,59, 
+228,59,        229,59, 229,59, 229,59, 
+229,59,        229,59, 229,59, 229,59, 
+229,59,        229,59, 229,59, 230,59, 
+230,59,        230,59, 230,59, 230,59, 
+230,59,        230,59, 230,59, 230,59, 
+230,59,        0,0,    229,247,        0,0,    
+0,0,   0,0,    0,0,    228,246,        
+231,59,        231,59, 231,59, 231,59, 
+231,59,        231,59, 231,59, 231,59, 
+231,59,        231,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    230,248,        
+232,59,        232,59, 232,59, 232,59, 
+232,59,        232,59, 232,59, 232,59, 
+232,59,        232,59, 231,249,        233,59, 
+233,59,        233,59, 233,59, 233,59, 
+233,59,        233,59, 233,59, 233,59, 
+233,59,        234,59, 234,59, 234,59, 
+234,59,        234,59, 234,59, 234,59, 
+234,59,        234,59, 234,59, 235,59, 
+235,59,        235,59, 235,59, 235,59, 
+235,59,        235,59, 235,59, 235,59, 
+235,59,        0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   234,250,        236,59, 236,59, 
+236,59,        236,59, 236,59, 236,59, 
+236,59,        236,59, 236,59, 236,59, 
+237,59,        237,59, 237,59, 237,59, 
+237,59,        237,59, 237,59, 237,59, 
+237,59,        237,59, 238,59, 238,59, 
+238,59,        238,59, 238,59, 238,59, 
+238,59,        238,59, 238,59, 238,59, 
+0,0,   237,252,        236,251,        239,59, 
+239,59,        239,59, 239,59, 239,59, 
+239,59,        239,59, 239,59, 239,59, 
+239,59,        246,259,        246,259,        238,253,        
+245,59,        245,59, 245,59, 245,59, 
+245,59,        245,59, 245,59, 245,59, 
+245,59,        245,59, 248,59, 248,59, 
+248,59,        248,59, 248,59, 248,59, 
+248,59,        248,59, 248,59, 248,59, 
+246,259,       0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    246,259,        
+246,259,       246,259,        0,0,    0,0,    
+0,0,   246,259,        0,0,    248,262,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,259,        246,259,        
+0,0,   246,259,        247,59, 247,59, 
+247,59,        247,59, 247,59, 247,59, 
+247,59,        247,59, 247,59, 247,59, 
+249,59,        249,59, 249,59, 249,59, 
+249,59,        249,59, 249,59, 249,59, 
+249,59,        249,59, 0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    247,261,        
+0,0,   0,0,    0,0,    246,260,        
+0,0,   246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        246,260,        
+246,260,       246,260,        246,260,        0,0,    
+246,259,       250,59, 250,59, 250,59, 
+250,59,        250,59, 250,59, 250,59, 
+250,59,        250,59, 250,59, 251,59, 
+251,59,        251,59, 251,59, 251,59, 
+251,59,        251,59, 251,59, 251,59, 
+251,59,        252,59, 252,59, 252,59, 
+252,59,        252,59, 252,59, 252,59, 
+252,59,        252,59, 252,59, 0,0,    
+251,263,       253,59, 253,59, 253,59, 
+253,59,        253,59, 253,59, 253,59, 
+253,59,        253,59, 253,59, 259,259,        
+259,259,       261,59, 261,59, 261,59, 
+261,59,        261,59, 261,59, 261,59, 
+261,59,        261,59, 261,59, 0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    261,270,        0,0,    
+0,0,   0,0,    259,259,        0,0,    
+0,0,   253,264,        0,0,    0,0,    
+0,0,   259,259,        259,259,        259,259,        
+0,0,   0,0,    0,0,    259,259,        
+0,0,   0,0,    259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        0,0,    259,259,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    259,268,        
+263,59,        263,59, 263,59, 263,59, 
+263,59,        263,59, 263,59, 263,59, 
+263,59,        263,59, 0,0,    0,0,    
+264,59,        264,59, 264,59, 264,59, 
+264,59,        264,59, 264,59, 264,59, 
+264,59,        264,59, 0,0,    0,0,    
+0,0,   259,259,        0,0,    259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       259,259,        259,259,        259,259,        
+259,259,       264,272,        259,259,        260,259,        
+260,259,       262,59, 262,59, 262,59, 
+262,59,        262,59, 262,59, 262,59, 
+262,59,        262,59, 262,59, 270,59, 
+270,59,        270,59, 270,59, 270,59, 
+270,59,        270,59, 270,59, 270,59, 
+270,59,        0,0,    260,259,        0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   260,259,        260,259,        260,259,        
+262,271,       0,0,    0,0,    260,259,        
+0,0,   0,0,    260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,259,       260,259,        0,0,    260,259,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    260,269,        
+272,59,        272,59, 272,59, 272,59, 
+272,59,        272,59, 272,59, 272,59, 
+272,59,        272,59, 277,59, 277,59, 
+277,59,        277,59, 277,59, 277,59, 
+277,59,        277,59, 277,59, 277,59, 
+0,0,   0,0,    0,0,    0,0,    
+0,0,   260,260,        0,0,    260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       260,260,        260,260,        260,260,        
+260,260,       0,0,    260,259,        269,59, 
+269,59,        269,59, 269,59, 269,59, 
+269,59,        269,59, 269,59, 269,59, 
+269,59,        271,59, 271,59, 271,59, 
+271,59,        271,59, 271,59, 271,59, 
+271,59,        271,59, 271,59, 280,59, 
+280,59,        280,59, 280,59, 280,59, 
+280,59,        280,59, 280,59, 280,59, 
+280,59,        269,276,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    271,277,        
+276,59,        276,59, 276,59, 276,59, 
+276,59,        276,59, 276,59, 276,59, 
+276,59,        276,59, 283,59, 283,59, 
+283,59,        283,59, 283,59, 283,59, 
+283,59,        283,59, 283,59, 283,59, 
+276,280,       0,0,    0,0,    0,0,    
+0,0,   0,0,    280,283,        0,0,    
+0,0,   283,286,        286,59, 286,59, 
+286,59,        286,59, 286,59, 286,59, 
+286,59,        286,59, 286,59, 286,59, 
+288,59,        288,59, 288,59, 288,59, 
+288,59,        288,59, 288,59, 288,59, 
+288,59,        288,59, 290,59, 290,59, 
+290,59,        290,59, 290,59, 290,59, 
+290,59,        290,59, 290,59, 290,59, 
+0,0,   286,288,        0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    288,290,        292,59, 
+292,59,        292,59, 292,59, 292,59, 
+292,59,        292,59, 292,59, 292,59, 
+292,59,        0,0,    0,0,    0,0,    
+0,0,   290,292,        294,59, 294,59, 
+294,59,        294,59, 294,59, 294,59, 
+294,59,        294,59, 294,59, 294,59, 
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    294,296,        
+0,0,   0,0,    0,0,    292,294,        
+296,59,        296,59, 296,59, 296,59, 
+296,59,        296,59, 296,59, 296,59, 
+296,59,        296,59, 298,59, 298,59, 
+298,59,        298,59, 298,59, 298,59, 
+298,59,        298,59, 298,59, 298,59, 
+300,59,        300,59, 300,59, 300,59, 
+300,59,        300,59, 300,59, 300,59, 
+300,59,        300,59, 296,298,        300,301,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    298,300,        0,0,    
+0,0};
+struct yysvf yysvec[] = {
+0,     0,      0,
+yycrank+-1,    0,              yyvstop+1,
+yycrank+-60,   yysvec+1,       yyvstop+3,
+yycrank+-119,  yysvec+1,       yyvstop+5,
+yycrank+-178,  yysvec+1,       yyvstop+7,
+yycrank+-237,  yysvec+1,       yyvstop+9,
+yycrank+-296,  yysvec+1,       yyvstop+11,
+yycrank+-387,  0,              0,      
+yycrank+-15,   yysvec+7,       0,      
+yycrank+-394,  0,              0,      
+yycrank+-24,   yysvec+9,       0,      
+yycrank+-401,  yysvec+9,       0,      
+yycrank+-416,  yysvec+9,       0,      
+yycrank+-464,  0,              0,      
+yycrank+-290,  yysvec+13,      0,      
+yycrank+0,     0,              yyvstop+13,
+yycrank+15,    0,              yyvstop+15,
+yycrank+0,     0,              yyvstop+18,
+yycrank+16,    0,              yyvstop+20,
+yycrank+0,     0,              yyvstop+23,
+yycrank+16,    0,              yyvstop+26,
+yycrank+495,   0,              yyvstop+28,
+yycrank+570,   yysvec+21,      yyvstop+32,
+yycrank+589,   yysvec+21,      yyvstop+35,
+yycrank+607,   yysvec+21,      yyvstop+38,
+yycrank+54,    yysvec+21,      yyvstop+41,
+yycrank+621,   yysvec+21,      yyvstop+44,
+yycrank+639,   yysvec+21,      yyvstop+47,
+yycrank+652,   yysvec+21,      yyvstop+50,
+yycrank+662,   yysvec+21,      yyvstop+53,
+yycrank+694,   yysvec+21,      yyvstop+56,
+yycrank+704,   yysvec+21,      yyvstop+59,
+yycrank+714,   yysvec+21,      yyvstop+62,
+yycrank+737,   yysvec+21,      yyvstop+65,
+yycrank+759,   yysvec+21,      yyvstop+68,
+yycrank+775,   yysvec+21,      yyvstop+71,
+yycrank+785,   yysvec+21,      yyvstop+74,
+yycrank+860,   yysvec+21,      yyvstop+78,
+yycrank+870,   yysvec+21,      yyvstop+81,
+yycrank+113,   yysvec+21,      yyvstop+84,
+yycrank+880,   yysvec+21,      yyvstop+87,
+yycrank+895,   yysvec+21,      yyvstop+90,
+yycrank+0,     0,              yyvstop+93,
+yycrank+15,    0,              yyvstop+95,
+yycrank+0,     0,              yyvstop+97,
+yycrank+17,    0,              yyvstop+99,
+yycrank+0,     0,              yyvstop+101,
+yycrank+19,    0,              yyvstop+103,
+yycrank+0,     0,              yyvstop+105,
+yycrank+-491,  0,              yyvstop+107,
+yycrank+21,    0,              yyvstop+109,
+yycrank+19,    0,              yyvstop+111,
+yycrank+911,   0,              yyvstop+113,
+yycrank+20,    yysvec+52,      yyvstop+116,
+yycrank+15,    yysvec+52,      yyvstop+119,
+yycrank+0,     yysvec+16,      yyvstop+122,
+yycrank+0,     0,              yyvstop+124,
+yycrank+-1033, 0,              yyvstop+126,
+yycrank+0,     yysvec+21,      yyvstop+128,
+yycrank+172,   yysvec+21,      yyvstop+131,
+yycrank+996,   yysvec+21,      yyvstop+133,
+yycrank+231,   yysvec+21,      yyvstop+135,
+yycrank+1006,  yysvec+21,      yyvstop+137,
+yycrank+810,   yysvec+21,      yyvstop+139,
+yycrank+1051,  yysvec+21,      yyvstop+141,
+yycrank+1061,  yysvec+21,      yyvstop+143,
+yycrank+1092,  yysvec+21,      yyvstop+145,
+yycrank+1102,  yysvec+21,      yyvstop+147,
+yycrank+1113,  yysvec+21,      yyvstop+149,
+yycrank+1133,  yysvec+21,      yyvstop+151,
+yycrank+1150,  yysvec+21,      yyvstop+153,
+yycrank+1174,  yysvec+21,      yyvstop+155,
+yycrank+290,   yysvec+21,      yyvstop+157,
+yycrank+1184,  yysvec+21,      yyvstop+160,
+yycrank+1206,  yysvec+21,      yyvstop+162,
+yycrank+1216,  yysvec+21,      yyvstop+164,
+yycrank+1243,  yysvec+21,      yyvstop+166,
+yycrank+1253,  yysvec+21,      yyvstop+168,
+yycrank+1278,  yysvec+21,      yyvstop+170,
+yycrank+1288,  yysvec+21,      yyvstop+172,
+yycrank+1323,  yysvec+21,      yyvstop+174,
+yycrank+1342,  yysvec+21,      yyvstop+176,
+yycrank+1356,  yysvec+21,      yyvstop+178,
+yycrank+820,   yysvec+21,      yyvstop+180,
+yycrank+1382,  yysvec+21,      yyvstop+182,
+yycrank+1457,  yysvec+21,      yyvstop+185,
+yycrank+1392,  yysvec+21,      yyvstop+187,
+yycrank+1467,  yysvec+21,      yyvstop+189,
+yycrank+1478,  yysvec+21,      yyvstop+191,
+yycrank+1502,  yysvec+21,      yyvstop+193,
+yycrank+0,     0,              yyvstop+195,
+yycrank+31,    0,              0,      
+yycrank+44,    0,              0,      
+yycrank+0,     yysvec+49,      0,      
+yycrank+0,     0,              yyvstop+197,
+yycrank+0,     0,              yyvstop+199,
+yycrank+-1535, 0,              yyvstop+201,
+yycrank+0,     yysvec+52,      yyvstop+203,
+yycrank+45,    yysvec+52,      yyvstop+205,
+yycrank+36,    yysvec+52,      yyvstop+207,
+yycrank+1541,  yysvec+21,      yyvstop+209,
+yycrank+1553,  yysvec+21,      yyvstop+211,
+yycrank+1402,  yysvec+21,      yyvstop+214,
+yycrank+1516,  yysvec+21,      yyvstop+216,
+yycrank+1563,  yysvec+21,      yyvstop+219,
+yycrank+1592,  yysvec+21,      yyvstop+221,
+yycrank+1602,  yysvec+21,      yyvstop+223,
+yycrank+1612,  yysvec+21,      yyvstop+225,
+yycrank+1638,  yysvec+21,      yyvstop+227,
+yycrank+1650,  yysvec+21,      yyvstop+229,
+yycrank+1670,  yysvec+21,      yyvstop+231,
+yycrank+1680,  yysvec+21,      yyvstop+233,
+yycrank+1692,  yysvec+21,      yyvstop+235,
+yycrank+1702,  yysvec+21,      yyvstop+237,
+yycrank+1721,  yysvec+21,      yyvstop+239,
+yycrank+1731,  yysvec+21,      yyvstop+241,
+yycrank+1741,  yysvec+21,      yyvstop+243,
+yycrank+1757,  yysvec+21,      yyvstop+245,
+yycrank+1779,  yysvec+21,      yyvstop+247,
+yycrank+1789,  yysvec+21,      yyvstop+249,
+yycrank+1812,  yysvec+21,      yyvstop+251,
+yycrank+1822,  yysvec+21,      yyvstop+254,
+yycrank+1832,  yysvec+21,      yyvstop+256,
+yycrank+1848,  yysvec+21,      yyvstop+258,
+yycrank+1858,  yysvec+21,      yyvstop+260,
+yycrank+1880,  yysvec+21,      yyvstop+262,
+yycrank+1890,  yysvec+21,      yyvstop+264,
+yycrank+1900,  yysvec+21,      yyvstop+267,
+yycrank+1914,  yysvec+21,      yyvstop+269,
+yycrank+1924,  yysvec+21,      yyvstop+271,
+yycrank+1934,  yysvec+21,      yyvstop+273,
+yycrank+1950,  yysvec+21,      yyvstop+275,
+yycrank+20,    0,              0,      
+yycrank+21,    0,              0,      
+yycrank+22,    yysvec+52,      yyvstop+277,
+yycrank+53,    yysvec+52,      yyvstop+279,
+yycrank+1960,  yysvec+21,      yyvstop+281,
+yycrank+1982,  yysvec+21,      yyvstop+283,
+yycrank+1995,  yysvec+21,      yyvstop+285,
+yycrank+2005,  yysvec+21,      yyvstop+287,
+yycrank+2037,  yysvec+21,      yyvstop+289,
+yycrank+2047,  yysvec+21,      yyvstop+291,
+yycrank+2057,  yysvec+21,      yyvstop+293,
+yycrank+2083,  yysvec+21,      yyvstop+295,
+yycrank+2094,  yysvec+21,      yyvstop+297,
+yycrank+2105,  yysvec+21,      yyvstop+299,
+yycrank+2115,  yysvec+21,      yyvstop+301,
+yycrank+2131,  yysvec+21,      yyvstop+304,
+yycrank+2151,  yysvec+21,      yyvstop+306,
+yycrank+2161,  yysvec+21,      yyvstop+308,
+yycrank+2173,  yysvec+21,      yyvstop+310,
+yycrank+2184,  yysvec+21,      yyvstop+312,
+yycrank+2194,  yysvec+21,      yyvstop+315,
+yycrank+2205,  yysvec+21,      yyvstop+318,
+yycrank+2216,  yysvec+21,      yyvstop+320,
+yycrank+2236,  yysvec+21,      yyvstop+322,
+yycrank+2246,  yysvec+21,      yyvstop+325,
+yycrank+2256,  yysvec+21,      yyvstop+327,
+yycrank+2266,  yysvec+21,      yyvstop+329,
+yycrank+2277,  yysvec+21,      yyvstop+331,
+yycrank+2287,  yysvec+21,      yyvstop+334,
+yycrank+2301,  yysvec+21,      yyvstop+336,
+yycrank+2311,  yysvec+21,      yyvstop+338,
+yycrank+2338,  yysvec+21,      yyvstop+340,
+yycrank+2348,  yysvec+21,      yyvstop+342,
+yycrank+2358,  yysvec+21,      yyvstop+344,
+yycrank+87,    0,              0,      
+yycrank+40,    0,              0,      
+yycrank+53,    yysvec+52,      yyvstop+346,
+yycrank+40,    yysvec+52,      yyvstop+348,
+yycrank+2393,  yysvec+21,      yyvstop+350,
+yycrank+2411,  yysvec+21,      yyvstop+352,
+yycrank+2421,  yysvec+21,      yyvstop+355,
+yycrank+2431,  yysvec+21,      yyvstop+358,
+yycrank+2449,  yysvec+21,      yyvstop+360,
+yycrank+2467,  yysvec+21,      yyvstop+362,
+yycrank+2487,  yysvec+21,      yyvstop+364,
+yycrank+2497,  yysvec+21,      yyvstop+366,
+yycrank+2507,  yysvec+21,      yyvstop+368,
+yycrank+2517,  yysvec+21,      yyvstop+370,
+yycrank+2539,  yysvec+21,      yyvstop+372,
+yycrank+2557,  yysvec+21,      yyvstop+374,
+yycrank+2567,  yysvec+21,      yyvstop+376,
+yycrank+2577,  yysvec+21,      yyvstop+379,
+yycrank+2592,  yysvec+21,      yyvstop+381,
+yycrank+2610,  yysvec+21,      yyvstop+383,
+yycrank+2620,  yysvec+21,      yyvstop+385,
+yycrank+2630,  yysvec+21,      yyvstop+387,
+yycrank+2647,  yysvec+21,      yyvstop+389,
+yycrank+2663,  yysvec+21,      yyvstop+391,
+yycrank+2673,  yysvec+21,      yyvstop+393,
+yycrank+2685,  yysvec+21,      yyvstop+395,
+yycrank+2695,  yysvec+21,      yyvstop+398,
+yycrank+2717,  yysvec+21,      yyvstop+400,
+yycrank+2727,  yysvec+21,      yyvstop+402,
+yycrank+74,    0,              0,      
+yycrank+65,    0,              0,      
+yycrank+70,    0,              0,      
+yycrank+72,    yysvec+52,      yyvstop+404,
+yycrank+85,    yysvec+52,      yyvstop+406,
+yycrank+2737,  yysvec+21,      yyvstop+408,
+yycrank+2763,  yysvec+21,      yyvstop+410,
+yycrank+2773,  yysvec+21,      yyvstop+412,
+yycrank+2783,  yysvec+21,      yyvstop+414,
+yycrank+2808,  yysvec+21,      yyvstop+416,
+yycrank+2818,  yysvec+21,      yyvstop+419,
+yycrank+2836,  yysvec+21,      yyvstop+421,
+yycrank+2846,  yysvec+21,      yyvstop+423,
+yycrank+2856,  yysvec+21,      yyvstop+425,
+yycrank+2868,  yysvec+21,      yyvstop+427,
+yycrank+2885,  yysvec+21,      yyvstop+430,
+yycrank+2903,  yysvec+21,      yyvstop+432,
+yycrank+2913,  yysvec+21,      yyvstop+435,
+yycrank+2923,  yysvec+21,      yyvstop+438,
+yycrank+2933,  yysvec+21,      yyvstop+441,
+yycrank+2943,  yysvec+21,      yyvstop+443,
+yycrank+2955,  yysvec+21,      yyvstop+445,
+yycrank+2965,  yysvec+21,      yyvstop+448,
+yycrank+2985,  yysvec+21,      yyvstop+450,
+yycrank+2998,  yysvec+21,      yyvstop+453,
+yycrank+3008,  yysvec+21,      yyvstop+455,
+yycrank+75,    0,              0,      
+yycrank+92,    0,              0,      
+yycrank+97,    0,              0,      
+yycrank+96,    yysvec+52,      yyvstop+457,
+yycrank+96,    yysvec+52,      yyvstop+459,
+yycrank+3018,  yysvec+21,      yyvstop+461,
+yycrank+3035,  yysvec+21,      yyvstop+463,
+yycrank+3055,  yysvec+21,      yyvstop+466,
+yycrank+3065,  yysvec+21,      yyvstop+468,
+yycrank+3075,  yysvec+21,      yyvstop+470,
+yycrank+3092,  yysvec+21,      yyvstop+472,
+yycrank+3112,  yysvec+21,      yyvstop+474,
+yycrank+3123,  yysvec+21,      yyvstop+477,
+yycrank+3133,  yysvec+21,      yyvstop+480,
+yycrank+3143,  yysvec+21,      yyvstop+482,
+yycrank+3162,  yysvec+21,      yyvstop+485,
+yycrank+3172,  yysvec+21,      yyvstop+487,
+yycrank+3182,  yysvec+21,      yyvstop+489,
+yycrank+3195,  yysvec+21,      yyvstop+491,
+yycrank+103,   0,              0,      
+yycrank+110,   0,              0,      
+yycrank+112,   0,              0,      
+yycrank+116,   yysvec+52,      yyvstop+494,
+yycrank+133,   yysvec+52,      yyvstop+496,
+yycrank+3208,  yysvec+21,      yyvstop+498,
+yycrank+3244,  yysvec+21,      yyvstop+501,
+yycrank+3258,  yysvec+21,      yyvstop+503,
+yycrank+3218,  yysvec+21,      yyvstop+505,
+yycrank+3268,  yysvec+21,      yyvstop+507,
+yycrank+3321,  yysvec+21,      yyvstop+510,
+yycrank+3331,  yysvec+21,      yyvstop+513,
+yycrank+3341,  yysvec+21,      yyvstop+515,
+yycrank+3353,  yysvec+21,      yyvstop+518,
+yycrank+129,   0,              0,      
+yycrank+0,     0,              yyvstop+520,
+yycrank+155,   0,              0,      
+yycrank+131,   yysvec+52,      yyvstop+522,
+yycrank+0,     yysvec+52,      yyvstop+524,
+yycrank+3402,  0,              0,      
+yycrank+3518,  yysvec+21,      yyvstop+527,
+yycrank+3365,  yysvec+21,      yyvstop+529,
+yycrank+3481,  yysvec+21,      yyvstop+531,
+yycrank+3424,  yysvec+21,      yyvstop+533,
+yycrank+3436,  yysvec+21,      yyvstop+536,
+yycrank+127,   0,              0,      
+yycrank+0,     0,              yyvstop+538,
+yycrank+144,   yysvec+52,      yyvstop+540,
+yycrank+140,   0,              0,      
+yycrank+3595,  yysvec+21,      yyvstop+542,
+yycrank+3491,  yysvec+21,      yyvstop+544,
+yycrank+3605,  yysvec+21,      yyvstop+547,
+yycrank+3540,  yysvec+21,      yyvstop+549,
+yycrank+0,     0,              yyvstop+552,
+yycrank+151,   yysvec+52,      yyvstop+554,
+yycrank+163,   0,              0,      
+yycrank+3636,  yysvec+21,      yyvstop+556,
+yycrank+3550,  yysvec+21,      yyvstop+558,
+yycrank+154,   yysvec+52,      yyvstop+561,
+yycrank+138,   0,              0,      
+yycrank+3615,  yysvec+21,      yyvstop+563,
+yycrank+175,   yysvec+52,      yyvstop+565,
+yycrank+168,   0,              0,      
+yycrank+3646,  yysvec+21,      yyvstop+567,
+yycrank+0,     0,              yyvstop+569,
+yycrank+159,   0,              0,      
+yycrank+3666,  yysvec+21,      yyvstop+571,
+yycrank+162,   0,              0,      
+yycrank+3676,  yysvec+21,      yyvstop+573,
+yycrank+158,   0,              0,      
+yycrank+3686,  yysvec+21,      yyvstop+575,
+yycrank+158,   0,              0,      
+yycrank+3707,  yysvec+21,      yyvstop+577,
+yycrank+205,   0,              0,      
+yycrank+3722,  yysvec+21,      yyvstop+579,
+yycrank+194,   0,              0,      
+yycrank+3744,  yysvec+21,      yyvstop+581,
+yycrank+189,   0,              0,      
+yycrank+3754,  yysvec+21,      yyvstop+583,
+yycrank+215,   0,              0,      
+yycrank+3764,  yysvec+21,      yyvstop+585,
+yycrank+0,     0,              yyvstop+587,
+0,     0,      0};
+struct yywork *yytop = yycrank+3838;
+struct yysvf *yybgin = yysvec+1;
+char yymatch[] = {
+  0,   1,   1,   1,   1,   1,   1,   1, 
+  1,   9,  10,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  9,   1,   1,   1,   1,   1,   1,  39, 
+ 40,  40,   1,   1,  44,  45,  44,   1, 
+ 48,  48,  48,  48,  48,  48,  48,  48, 
+ 48,  48,  40,  40,   1,  40,   1,  44, 
+  1,  65,  65,  65,  65,  65,  65,  65, 
+ 65,  65,  65,  65,  65,  65,  65,  65, 
+ 65,  65,  65,  65,  65,  65,  65,  65, 
+ 65,  65,  65,   1,  44,   1,   1,  95, 
+  1,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,   1,  45,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+0};
+char yyextra[] = {
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0};
+/*     Copyright (c) 1989 AT&T */
+/*       All Rights Reserved   */
+
+/*     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T     */
+/*     The copyright notice above does not evidence any        */
+/*     actual or intended publication of such source code.     */
+
+int yylineno =1;
+# define YYU(x) x
+# define NLSTATE yyprevious=YYNEWLINE
+struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
+char yysbuf[YYLMAX];
+char *yysptr = yysbuf;
+int *yyfnd;
+extern struct yysvf *yyestate;
+int yyprevious = YYNEWLINE;
+#if defined(__cplusplus) || defined(__STDC__)
+int yylook(void)
+#else
+yylook()
+#endif
+{
+       register struct yysvf *yystate, **lsp;
+       register struct yywork *yyt;
+       struct yysvf *yyz;
+       int yych, yyfirst;
+       struct yywork *yyr;
+# ifdef LEXDEBUG
+       int debug;
+# endif
+       char *yylastch;
+       /* start off machines */
+# ifdef LEXDEBUG
+       debug = 0;
+# endif
+       yyfirst=1;
+       if (!yymorfg)
+               yylastch = yytext;
+       else {
+               yymorfg=0;
+               yylastch = yytext+yyleng;
+               }
+       for(;;){
+               lsp = yylstate;
+               yyestate = yystate = yybgin;
+               if (yyprevious==YYNEWLINE) yystate++;
+               for (;;){
+# ifdef LEXDEBUG
+                       if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
+# endif
+                       yyt = yystate->yystoff;
+                       if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
+                               yyz = yystate->yyother;
+                               if(yyz == 0)break;
+                               if(yyz->yystoff == yycrank)break;
+                               }
+#ifndef __cplusplus
+                       *yylastch++ = yych = input();
+#else
+                       *yylastch++ = yych = lex_input();
+#endif
+#ifdef YYISARRAY
+                       if(yylastch > &yytext[YYLMAX]) {
+                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                               exit(1);
+                       }
+#else
+                       if (yylastch >= &yytext[ yytextsz ]) {
+                               int     x = yylastch - yytext;
+
+                               yytextsz += YYTEXTSZINC;
+                               if (yytext == yy_tbuf) {
+                                   yytext = (char *) malloc(yytextsz);
+                                   memcpy(yytext, yy_tbuf, sizeof (yy_tbuf));
+                               }
+                               else
+                                   yytext = (char *) realloc(yytext, yytextsz);
+                               if (!yytext) {
+                                   fprintf(yyout,
+                                       "Cannot realloc yytext\n");
+                                   exit(1);
+                               }
+                               yylastch = yytext + x;
+                       }
+#endif
+                       yyfirst=0;
+               tryagain:
+# ifdef LEXDEBUG
+                       if(debug){
+                               fprintf(yyout,"char ");
+                               allprint(yych);
+                               putchar('\n');
+                               }
+# endif
+                       yyr = yyt;
+                       if ( (intptr_t)yyt > (intptr_t)yycrank){
+                               yyt = yyr + yych;
+                               if (yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               }
+# ifdef YYOPTIM
+                       else if((intptr_t)yyt < (intptr_t)yycrank) {            /* r < yycrank */
+                               yyt = yyr = yycrank+(yycrank-yyt);
+# ifdef LEXDEBUG
+                               if(debug)fprintf(yyout,"compressed state\n");
+# endif
+                               yyt = yyt + yych;
+                               if(yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               yyt = yyr + YYU(yymatch[yych]);
+# ifdef LEXDEBUG
+                               if(debug){
+                                       fprintf(yyout,"try fall back character ");
+                                       allprint(YYU(yymatch[yych]));
+                                       putchar('\n');
+                                       }
+# endif
+                               if(yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transition */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               }
+                       if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
+# ifdef LEXDEBUG
+                               if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
+# endif
+                               goto tryagain;
+                               }
+# endif
+                       else
+                               {unput(*--yylastch);break;}
+               contin:
+# ifdef LEXDEBUG
+                       if(debug){
+                               fprintf(yyout,"state %d char ",yystate-yysvec-1);
+                               allprint(yych);
+                               putchar('\n');
+                               }
+# endif
+                       ;
+                       }
+# ifdef LEXDEBUG
+               if(debug){
+                       fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
+                       allprint(yych);
+                       putchar('\n');
+                       }
+# endif
+               while (lsp-- > yylstate){
+                       *yylastch-- = 0;
+                       if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
+                               yyolsp = lsp;
+                               if(yyextra[*yyfnd]){            /* must backup */
+                                       while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
+                                               lsp--;
+                                               unput(*yylastch--);
+                                               }
+                                       }
+                               yyprevious = YYU(*yylastch);
+                               yylsp = lsp;
+                               yyleng = yylastch-yytext+1;
+                               yytext[yyleng] = 0;
+# ifdef LEXDEBUG
+                               if(debug){
+                                       fprintf(yyout,"\nmatch ");
+                                       sprint(yytext);
+                                       fprintf(yyout," action %d\n",*yyfnd);
+                                       }
+# endif
+                               return(*yyfnd++);
+                               }
+                       unput(*yylastch);
+                       }
+               if (yytext[0] == 0  /* && feof(yyin) */)
+                       {
+                       yysptr=yysbuf;
+                       return(0);
+                       }
+#ifndef __cplusplus
+               yyprevious = yytext[0] = input();
+               if (yyprevious>0)
+                       output(yyprevious);
+#else
+               yyprevious = yytext[0] = lex_input();
+               if (yyprevious>0)
+                       lex_output(yyprevious);
+#endif
+               yylastch=yytext;
+# ifdef LEXDEBUG
+               if(debug)putchar('\n');
+# endif
+               }
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+int yyback(int *p, int m)
+#else
+yyback(p, m)
+       int *p;
+#endif
+{
+       if (p==0) return(0);
+       while (*p) {
+               if (*p++ == m)
+                       return(1);
+       }
+       return(0);
+}
+       /* the following are only used in the lex library */
+#if defined(__cplusplus) || defined(__STDC__)
+int yyinput(void)
+#else
+yyinput()
+#endif
+{
+#ifndef __cplusplus
+       return(input());
+#else
+       return(lex_input());
+#endif
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+void yyoutput(int c)
+#else
+yyoutput(c)
+  int c; 
+#endif
+{
+#ifndef __cplusplus
+       output(c);
+#else
+       lex_output(c);
+#endif
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+void yyunput(int c)
+#else
+yyunput(c)
+   int c; 
+#endif
+{
+       unput(c);
+       }
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
diff --git a/src/ExpToCasExe/exptocas.h b/src/ExpToCasExe/exptocas.h
new file mode 100644 (file)
index 0000000..26d783f
--- /dev/null
@@ -0,0 +1,117 @@
+// Created:    Mon Nov  1 12:50:27 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef EXPCAS_H
+#define EXPCAS_H
+
+#include <stdio.h>
+
+#define EC_VERSION       "2.0"
+
+struct ec_schema {       /* definition of schema */
+  char *name;            /* name */
+  struct ec_item *items; /* list of items */
+  int num;               /* total amount of items */
+  struct ec_item **array;/* array of items (indexed view of list) */
+};
+
+enum ecitem {            /* kind of schema item */
+  ECIT_ENUM,             /* TYPE ENUMERATION */
+  ECIT_SEL,              /* TYPE SELECT */
+  ECIT_ALIAS,            /* TYPE as alias */
+  ECIT_ENT               /* ENTITY */
+};
+
+struct ec_item {         /* definition of schema item */
+  char *name;            /* item (class) name */
+  char *package;         /* package name */
+  enum ecitem kind;      /* kind of item */
+  struct ec_type *alias; /* aliased type for ALIAS */
+  struct ec_tlist *types;/* supertypes for ENTITY and list for SELECT and ENUMERATION */
+  struct ec_field *field;/* fields for ENTITY */
+  struct ec_item *next;  /* pointer to next item */
+};
+
+struct ec_tlist {        /* list of (type) names, for TYPE SELECT & ENUMERATION */
+  char *name;
+  struct ec_tlist *next;
+};
+
+enum ectype {            /* Types: */
+  ECTYP_INT,             /* predefined type INTEGER */
+  ECTYP_NUM,             /* predefined type NUMBER */
+  ECTYP_DBL,             /* predefined type REAL */
+  ECTYP_STR,             /* predefined type STRING */
+  ECTYP_LOG,             /* predefined type LOGICAL */
+  ECTYP_BOOL,            /* predefined type BOOLEAN */
+  ECTYP_NAME,            /* named type (name of item in schema) */
+  ECTYP_LIST,            /* LIST [] complex type */
+  ECTYP_ARR,             /* ARRAY [] complex type */
+  ECTYP_SET,             /* SET [] complex type */
+  ECTYP_BAG              /* BAG [] complex type */
+};
+
+struct ec_type {         /* identification of type, either simple or complex */
+  enum ectype kind;      /* kind of the type */
+  char *name;            /* name for named type */
+  int index[2];          /* start and end indices (or -1 if not defined) for complex types */
+  struct ec_type *elem;  /* type of complex type elements */
+};
+
+struct ec_field {        /* field of ENTITY item */
+  char *name;            /* field name */
+  struct ec_type *type;  /* field type */
+  int optional;          /* flag */
+  struct ec_field *next; /* pointer to next field */
+};
+
+/*int yylex ( void );*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern FILE *yyin;
+
+int yyparse ( void );
+int yyerror ( char *str );
+
+/* Functions for creating schema representation structures */
+struct ec_schema *mkschema ( char *name, struct ec_item *ilist );
+struct ec_item *mkenum     ( char *name, struct ec_tlist *tlist );
+struct ec_item *mkselect   ( char *name, struct ec_tlist *tlist );
+struct ec_item *mkalias    ( char *name, struct ec_type *to );
+struct ec_item *mkentity   ( char *name, struct ec_tlist *inherit, struct ec_field *fields );
+struct ec_tlist *mktlist   ( char *name );
+struct ec_type *mktstd     ( int keyword );
+struct ec_type *mktname    ( char *name );
+struct ec_type *mktset     ( int keyword, int ilow, int ihigh, struct ec_type *of );
+struct ec_field *mkfield   ( char *name, struct ec_type *type, int optional );
+
+/* Error reporting functions */
+int ec_error ( char const *s, char const *text );
+int ec_curline ( void );
+
+/* Access to result of parsing */
+char *ec_schemaname ( void );           /* returns name of schema */
+int ec_nbitems ( void );                /* returns number of items in schema */
+struct ec_item *ec_getitem ( int num ); /* returns item by index */
+void ec_free ( void );                  /* frees all structures */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/ExpToCasExe/exptocas.l b/src/ExpToCasExe/exptocas.l
new file mode 100644 (file)
index 0000000..06daf7c
--- /dev/null
@@ -0,0 +1,174 @@
+%{
+
+/* Created:    Thu Oct 28 12:21:16 1999
+/* Author:     Andrey BETENEV
+/* Copyright (c) 1999-2020 OPEN CASCADE SAS
+/*
+/* This file is part of Open CASCADE Technology software library.
+/*
+/* This library is free software; you can redistribute it and/or modify it under
+/* the terms of the GNU Lesser General Public License version 2.1 as published
+/* by the Free Software Foundation, with special exception defined in the file
+/* OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+/* distribution for complete text of the license and disclaimer of any warranty.
+/*
+/* Alternatively, this file may be used under the terms of Open CASCADE
+/* commercial license or contractual agreement.
+
+/*****************************************************************************\
+
+This LEX scanner is performs lexical analysis of EXPRESS schema file   
+for EXPRESS -> CASCADE/XSTEP classes generator                             
+
+On the stage of lexical scanner comments (single- and multi-line),         
+definitions of CONSTANT, FUNCTION, RULE items and clauses WHERE, INVERSE
+and DERIVE of TYPE amd ENTITY items are dismissed (ignored)         
+
+Then, keywords such as ENTITY, SUPERTYPE, SET etc., names of items         
+and special symbols are identified and returned to parser (yacc) as tokens 
+
+Also, error processing and current line number tracking functions are defined
+
+\*****************************************************************************/
+
+/************************************/
+/* Section 1                        */
+/* definitions                      */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <Express_HSequenceOfField.hxx>
+#include <Express_HSequenceOfItem.hxx>
+#include <Express_Field.hxx>
+#include <Express_Item.hxx>
+#include <Express_Type.hxx>
+#include <Express_Schema.hxx>
+#include <Express_Reference.hxx>
+
+#include "expparse.h"       /* define tokens */
+
+/* Auxiliary functions */
+
+static int fun_level=0;
+static int ec_linenum=1;
+static int ec_state = 0;
+
+int yywrap(void) { return 1; }
+
+int ec_curline ( void )
+{
+  return ec_linenum;
+}
+
+int ec_error ( char const *s, char const *text )
+{
+  printf ( "\nError at line %d: %s \"%s\"\n", ec_curline(), s, text );
+  return 0;
+}
+
+%}
+
+%s TYP ENT
+%x COMM SKP RULE FUN
+
+%a 4000
+%o 6000
+
+%{
+
+/************************************/
+/* Section 2                        */
+/* parsing rules                    */
+%}
+
+%%
+
+"--".*               { /* Eat line comments */ }
+"(*"                 { ec_state = YYSTATE; BEGIN(COMM); }
+<COMM>.              { /* Eat multiline comments */ }
+<COMM>"*)"           { BEGIN(ec_state); }
+
+"SCHEMA"             { return yylval.num = KSCHEM; }
+"END_SCHEMA"         { return yylval.num = KENDS; }
+
+"TYPE"               { BEGIN(TYP); return yylval.num = KTYP; }
+<TYP,SKP>"END_TYPE"  { BEGIN(0);   return yylval.num = KENDT; }
+
+"ENTITY"             { BEGIN(ENT); return yylval.num = KENT; }
+<ENT,SKP>"END_ENTITY" { BEGIN(0);  return yylval.num = KENDE; }
+
+<ENT>"INVERSE"       |
+<ENT>"DERIVE"        |
+<ENT,TYP>"WHERE"     { BEGIN(SKP); }
+<SKP>.               { /* eat contents of WHERE and DERIVE subclauses of ENTITY and TYPE */ }
+
+"SELECT"             { return yylval.num = KSEL; }
+"ENUMERATION"        { return yylval.num = KENUM; }
+"LIST"               { return yylval.num = KLIST; }
+"ARRAY"              { return yylval.num = KARR; }
+"SET"                { return yylval.num = KSET; }
+"BAG"                { return yylval.num = KBAG; }
+"OF"                 { return yylval.num = KOF; }
+
+"NUMBER"             { return yylval.num = KNUM; }
+"INTEGER"            { return yylval.num = KINT; }
+"REAL"               { return yylval.num = KDBL; }
+"STRING"             { return yylval.num = KSTR; }
+"LOGICAL"            { return yylval.num = KLOG; }
+"BOOLEAN"            { return yylval.num = KBOOL; }
+
+"OPTIONAL"           { return yylval.num = KOPT; }
+"UNIQUE"             { return yylval.num = KUNIQ; }
+"SELF"               { return yylval.num = KSELF; }
+
+"ABSTRACT"           { return yylval.num = KABSTR; }
+"SUBTYPE"            { return yylval.num = KSUBT; }
+"SUPERTYPE"          { return yylval.num = KSPRT; }
+"ANDOR"              { return yylval.num = KANDOR; }
+"ONEOF"              { return yylval.num = K1OF; }
+"AND"                { return yylval.num = KAND; }
+
+"UR"[0-9]+           { yylval.str = strdup ( yytext ); return NAME; }
+
+[a-z_][a-z_0-9]*     { yylval.str = strdup ( yytext ); return NAME; }
+
+[0-9]+               { yylval.num = atoi ( yytext ); return NUMBER; }
+[,=();?:.\\]|"["|"]" { return yylval.num = yytext[0]; }
+
+<INITIAL,FUN>"FUNCTION"  { BEGIN(FUN); fun_level++; }
+<FUN>"(*"            { ec_state = YYSTATE; BEGIN(COMM); /* eat comments in functions */ }
+<FUN>"--".*          { /* Eat line comments in functions */ }
+<FUN>[A-Za-z_0-9]*   { /* eat FUNCTIONs - skip IDs explicitly */ }
+<FUN>\'[^\']*\'      { /* eat FUNCTIONs - skip strings explicitly */ }
+<FUN>.               { /* eat FUNCTIONs - skip all other symbols in functions */ }
+<FUN>"END_FUNCTION;" { fun_level--; if ( ! fun_level ) BEGIN(0); }
+
+"RULE"               { BEGIN(RULE); /* eat RULEs */ }
+<RULE>.              { /* eat RULEs */ }
+<RULE>"END_RULE;"    { BEGIN(0); }
+
+"CONSTANT"[ \t\na-z_0-9:=;'()|-]+"END_CONSTANT;" { /* eat CONSTANTs */
+                       char *s = yytext; /* but don't forget to count lines.. */
+                       while ( *s ) if ( *(s++) == '\n' ) ec_linenum++;
+                     }
+
+[ \t]+               { /* eat spaces */ }
+[A-Za-z0-9_]+        { ec_error ( "unknown keyword ", yytext ); /* put unrecognized keywords to cerr */ }
+.                    { ec_error ( "unknown symbol ", yytext ); /* put unrecognized data to cerr */ }
+
+<INITIAL,COMM,SKP,RULE,ENT,TYP,FUN>\n  { ec_linenum++; /* count lines */ }
+
+%%
+
+/************************************/
+/* Section 3                        */
+/* auxiliary procedures             */
+
+/*
+int main ( void )
+{
+  yylex();
+}
+*/
diff --git a/src/ExpToCasExe/exptocas.y b/src/ExpToCasExe/exptocas.y
new file mode 100644 (file)
index 0000000..a342009
--- /dev/null
@@ -0,0 +1,450 @@
+%{
+
+/* Created:    Thu Oct 28 12:21:16 1999
+/* Author:     Andrey BETENEV
+/* Copyright (c) 1999-2020 OPEN CASCADE SAS
+/*
+/* This file is part of Open CASCADE Technology software library.
+/*
+/* This library is free software; you can redistribute it and/or modify it under
+/* the terms of the GNU Lesser General Public License version 2.1 as published
+/* by the Free Software Foundation, with special exception defined in the file
+/* OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+/* distribution for complete text of the license and disclaimer of any warranty.
+/*
+/* Alternatively, this file may be used under the terms of Open CASCADE
+/* commercial license or contractual agreement.
+
+/*****************************************************************************\
+
+This YACC parser implements parsing algorithm for EXPRESS -> CASCADE/XSTEP
+classes generator
+
+Input in the form of tokens is obtained from lexical analyser. Then, data 
+structure representing schema is created on the basis of grammar analysis.
+
+NOTE: The grammar currently implemented is not full. 
+FUNCTION, RULE and CONSTANT items, WHERE, INVERSE and DERIVE clauses 
+of TYPE and ENTITY items are not considered (ignored on the level of lexical 
+scanner). 
+SUPERTYPE and UNIQUE clauses of ENTITY item are recognized but ignored.
+Also, complex constructs such as using call to function in dimensions of 
+complex time or redefinition of inherited field are ignored.
+
+\*****************************************************************************/
+
+#include <TCollection_HAsciiString.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <Express_HSequenceOfField.hxx>
+#include <Express_HSequenceOfItem.hxx>
+#include <Express_Field.hxx>
+#include <Express_Item.hxx>
+#include <Express_Enum.hxx>
+#include <Express_Alias.hxx>
+#include <Express_Select.hxx>
+#include <Express_Entity.hxx>
+#include <Express_Type.hxx>
+#include <Express_NamedType.hxx>
+#include <Express_PredefinedType.hxx>
+#include <Express_Number.hxx>
+#include <Express_Integer.hxx>
+#include <Express_Boolean.hxx>
+#include <Express_Logical.hxx>
+#include <Express_Real.hxx>
+#include <Express_String.hxx>
+#include <Express_ComplexType.hxx>
+#include <Express_Array.hxx>
+#include <Express_List.hxx>
+#include <Express_Set.hxx>
+#include <Express_Bag.hxx>
+#include <Express_Schema.hxx>
+#include <Express_Reference.hxx>
+#include <Express.hxx>
+
+/************************************************/
+/* ERROR MESSAGE FUNCTION                       */
+
+/* external functions (from exptocas.l) */
+int ec_error ( char *s, char *text );
+int ec_curline ( void );
+
+int yyerror ( char *s )
+{
+  printf ( "\nParse error at line %d: %s\n", ec_curline(), s );
+  return 0;
+}
+
+/************************************************/
+/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
+
+static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist );
+static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq );
+static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static Express_Item *mkalias ( char *name, Express_Type *type );
+static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
+                                Express_HSequenceOfField *field, int isabstract );
+static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items);
+static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
+static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1, TColStd_HSequenceOfHAsciiString *tlist2 );
+static Express_Type *mktstd ( int keyword );
+static Express_Type *mktname ( char *name );
+static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of );
+static Express_Field *mkfield ( char *name, Express_Type *type, int optional );
+static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq );
+
+%}
+
+  /* Definition of possible types of expressions */
+%union {
+  int num;
+  char *str;
+  TColStd_HSequenceOfHAsciiString *tlist;
+  Express_HSequenceOfField *flist;
+  Express_HSequenceOfItem *ilist;
+  Express_Field *field;
+  Express_Item *item;
+  Express_Type *type;
+  Express_Schema *schema;
+  Express_Reference *ref;
+}
+
+  /* Definition of keywords */
+
+%token <num> KSCHEM  /* SCHEMA keyword */
+%token <num> KENDS   /* END_SCHEMA keyword */
+%token <num> KTYP    /* TYPE keyword */
+%token <num> KENDT   /* END_TYPE keyword */
+%token <num> KENT    /* ENTITY keyword */
+%token <num> KENDE   /* END_ENTITY keyword */
+%token <num> KREF    /* REFERENCE keyword */
+%token <num> KFROM   /* FROM keyword */
+
+%token <num> KSEL    /* SELECT keyword */
+%token <num> KENUM   /* ENUMERATION keyword */
+%token <num> KLIST   /* LIST keyword */
+%token <num> KARR    /* ARRAY keyword */
+%token <num> KBAG    /* BAG keyword */
+%token <num> KSET    /* SET keyword */
+%token <num> KOF     /* OF keyword */
+
+%token <num> KNUM    /* NUMBER keyword */
+%token <num> KINT    /* INTEGER keyword */
+%token <num> KDBL    /* REAL keyword */
+%token <num> KSTR    /* STRING keyword */
+%token <num> KLOG    /* LOGICAL keyword */
+%token <num> KBOOL   /* BOOLEAN keyword */
+
+%token <num> KOPT    /* OPTIONAL keyword */
+%token <num> KUNIQ   /* UNIQUE keyword */
+%token <num> KSELF   /* SELF keyword */
+
+%token <num> KABSTR  /* ABSTRACT keyword */
+%token <num> KSUBT   /* SUBTYPE keyword */
+%token <num> KSPRT   /* SUPERTYPE keyword */
+%left  <num> KANDOR  /* ANDOR keyword (%left is for eliminating shift/reduce conflict on SUPLST) */
+%left  <num> K1OF    /* ONEOF keyword */
+%token <num> KAND    /* AND keyword */
+
+%token <num> NUMBER  /* integer value */
+%token <str> NAME    /* name of type or entity */
+
+%left ','            /* to eliminate shift/reduce conflict in SUPERTYPE */
+
+  /* Definition of expressions and their types */
+
+%type <num>    INDEX OPTNL OPTUNI SUPERT SUPLST REDEF SPCLST
+%type <tlist>  TLIST TLIST1 UNIQIT UNIQLS UNIQUE SUBT SPECIF
+%type <type>   TYPE TSTD TNAME TSET 
+%type <item>   ENUM SELECT ALIAS ENTITY ITEM
+%type <ilist>  ILIST
+%type <field>  FIELD
+%type <flist>  FLIST FLIST1
+%type <schema> SCHEMA
+%type <ref>    REFERENCE
+
+%%
+
+  /************************************************/
+  /*  Definition of parsing rules (expressions)   */
+  /************************************************/
+
+SCHEMA: KSCHEM NAME ';' ILIST KENDS ';' { $$ = mkschema ( $2, $4 ); /* Root: EXPRESS schema */ }
+      ;
+ILIST : ITEM             { $$ = mkilist ( $1, 0 ); /* list of items for schema */ }
+      | ITEM ILIST       { $$ = mkilist ( $1, $2 ); }
+      ;
+
+ITEM  : ENUM
+      | SELECT
+      | ALIAS
+      | ENTITY           { $$ = $1; /* item of schema (type definition) */ }
+ENUM  : KTYP NAME '=' KENUM KOF TLIST1 ';' KENDT ';' { $$ = mkenum ( $2, $6 ); /* TYPE ENUMERATION definition */ }
+      ;
+SELECT: KTYP NAME '=' KSEL TLIST1 ';' KENDT ';' { $$ = mkselect ( $2, $5 ); /* TYPE SELECT definition */ }
+      ;
+ALIAS : KTYP NAME '=' TYPE ';' KENDT ';' { $$ = mkalias ( $2, $4 ); /* TYPE '=' definition (alias) */ }
+      ;
+ENTITY: KENT NAME        SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';' { $$ = mkentity ( $2, $4, $6, 0 ); /* ENTITY definition */ }
+      | KENT NAME KABSTR SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';' { $$ = mkentity ( $2, $5, $7, 1 ); /* ENTITY definition */ }
+      ;
+
+REFERENCE: KREF KFROM NAME TLIST1 ';' { $$ = mkrefs ( $3, $4 ); /* REFERENCE FROM definition */ }
+
+TLIST : NAME             { $$ = mktlist ( $1, 0 ); /* list of (type) names */ }
+      | NAME ',' TLIST   { $$ = mktlist ( $1, $3 ); }
+      ;
+TLIST1: '(' TLIST ')'    { $$ = $2; /* TLIST in brackets */ }
+      ;
+
+TYPE  : TSTD
+      | TNAME
+      | TSET             { $$ = $1; /* type, simple or complex */ }
+      ;
+TSTD  : KINT             { $$ = mktstd ( $1 ); /* predefined type: INTEGER */ }
+      | KNUM             { $$ = mktstd ( $1 ); /* predefined type: NUMBER */ }
+      | KDBL             { $$ = mktstd ( $1 ); /* predefined type: REAL */ }
+      | KSTR             { $$ = mktstd ( $1 ); /* predefined type: STRING */ }
+      | KLOG             { $$ = mktstd ( $1 ); /* predefined type: LOGICAL */ }
+      | KBOOL            { $$ = mktstd ( $1 ); /* predefined type: BOOLEAN */ }
+      ;                  
+TNAME : NAME             { $$ = mktname ( $1 ); /* named type */ }
+      ;
+TSET  : KLIST '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: LIST */ }
+      | KARR  '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: ARRAY */ }
+      | KSET  '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: SET */ }
+      | KBAG  '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: BAG */ }
+      ;
+INDEX : NUMBER           { $$ = $1; /* index for array, set, bag, list range */ }
+      | '?'              { $$ = -1; /* undefined */ }
+      | NAME '(' NAME ')' {$$ = -1; printf ( "Warning at line %d: index function %s(%s) ignored\n", ec_curline(), $1, $3 ); /* some function.. */ }
+      ;
+OPTUNI: /* empty */      { $$ = 0; /* UNIQUE keyword for complex type definition */ }
+      | KUNIQ            { $$ = 1; }
+      ;
+
+SUBT  : /* empty */      { $$ = NULL; /* no subtype clause */ }
+      | KSUBT KOF TLIST1 { $$ = $3;   /* subtype clause */ }
+      ;
+SUPERT: /* empty */      { $$ = 0;  /* no supertype clause */ }
+      | KSPRT            { $$ = 0;  /* supertype clause (ignored) */ }
+      | KSPRT KOF SUPLST { $$ = 0;  /* supertype clause (ignored) */ }
+      ;
+SUPLST: NAME             { $$ = 0; /* simple list of supertypes */ }
+      | '(' SUPLST ')'   { $$ = 0; /* allow bracketing */ }
+      | NAME ',' SUPLST  { $$ = 0; /* ... */ }
+      | K1OF SUPLST      { $$ = 0; /* ONEOF construct */ }
+      | SUPLST KANDOR SUPLST { $$ = 0; /* ANDOR construct */ }
+      ;
+
+FLIST : FIELD            { $$ = mkflist ( $1, 0 ); /* list of fields of ENTITY item */ }
+      | FIELD FLIST      { $$ = mkflist ( $1, $2 ); }
+      | REDEF            { $$ = 0;  /* redefinition of inherited field, just skip */ }
+      | REDEF FLIST      { $$ = $2; /* ignore redefinition of inherited field, take trailing list */ }
+      ;
+FLIST1: /* empty */      { $$ = NULL; /* empty list of fields */ }
+      | FLIST            { $$ = $1;   /* or not empty.. just to fix reduce/reduce conflict */ }
+      ;
+FIELD : NAME ':' OPTNL TYPE ';' { $$ = mkfield ( $1, $4, $3 ); }
+      ;
+REDEF : KSELF '\\' SPECIF ':' TYPE ';' { $$ = NULL; printf ( "Warning at line %d: field redefinition ignored\n", ec_curline() ); /* redefinition of inherited field */ }
+      ;
+SPECIF: NAME             { $$ = mktlist ( $1, 0 ); /* inherited field specification */ } 
+      | NAME '.' SPECIF  { $$ = mktlist ( $1, $3 ); }
+      ;
+
+OPTNL : /* empty */      { $$ = 0; }
+      | KOPT             { $$ = 1; }
+      ;
+
+UNIQIT: NAME ':' TLIST ';'  { $$ = $3;   /* UNIQUE statement */ }
+      | NAME ':' SPCLST ';' { $$ = NULL; /* UNIQUE statement */ }
+      ;
+UNIQLS: UNIQIT           { $$ = NULL;    /* list of 1 UNIQUE statements */ }
+      | UNIQIT UNIQLS    { $$ = mktlists ( $1, $2 );/* list of UNIQUE statements */ }
+      ;
+UNIQUE: /* empty */      { $$ = NULL;    /* no UNIQUE clause in ENTITY */ }
+      | KUNIQ UNIQLS     { $$ = $2;      /* UNIQUE clause in ENTITY */ }
+      ;
+SPCLST: KSELF '\\' SPECIF      { $$ = 0; /* list of specifications */ }
+      | KSELF '\\' SPECIF ',' SPCLST { $$ = 0; }
+      | NAME ',' SPCLST        { $$ = 0; }
+      ;
+
+%%
+
+/************************************************/
+/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
+
+static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist )
+{
+  Express_Schema *sch = new Express_Schema ( name, ilist );
+  Express::Schema() = sch;
+  return sch;
+}
+
+static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq )
+{
+  if ( ! seq ) { 
+    seq = new Express_HSequenceOfItem;
+    seq->Append ( item );
+  }
+  else seq->Prepend ( item );
+  return seq;
+}
+
+static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  return new Express_Enum ( name, tlist );
+}
+
+static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  return new Express_Select ( name, tlist );
+}
+
+static Express_Item *mkalias ( char *name, Express_Type *type )
+{
+  return new Express_Alias ( name, type );
+}
+
+static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
+                                Express_HSequenceOfField *field, int isabstract )
+{
+  Express_Entity *ent = new Express_Entity ( name, inherit, field );
+  if ( isabstract ) ent->SetAbstractFlag ( Standard_True );
+  return ent;
+}
+
+static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items)
+{
+  return new Express_Reference ( name, items );
+}
+
+static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
+{
+  Handle(TCollection_HAsciiString) str = new TCollection_HAsciiString ( name );
+  if ( tlist ) tlist->Prepend ( str );
+  else {
+    tlist = new TColStd_HSequenceOfHAsciiString;
+    tlist->Append ( str );
+  }
+  return tlist;
+}
+
+static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1, 
+                                                  TColStd_HSequenceOfHAsciiString *tlist2 )
+{
+  if ( ! tlist1 ) return tlist2;
+  if ( ! tlist2 ) return tlist1;
+  for ( int i=1; i <= tlist2->Length(); i++ )
+    tlist1->Append ( tlist2->Value(i) );
+  return tlist1;
+}
+
+static Express_Type *mktstd ( int keyword )
+{
+  switch ( keyword ) {
+  case KINT : return new Express_Integer;
+  case KNUM : return new Express_Number;
+  case KDBL : return new Express_Real;
+  case KSTR : return new Express_String;
+  case KBOOL: return new Express_Boolean;
+  case KLOG : return new Express_Logical;
+  default   : ec_error ( "Predefined type not treated!", "" );
+              return NULL;
+  }
+}
+
+static Express_Type *mktname ( char *name )
+{
+  return new Express_NamedType ( name );
+}
+
+static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of )
+{
+  switch ( keyword ) {
+  case KLIST: return new Express_List  ( ilow, ihigh, of );
+  case KARR : return new Express_Array ( ilow, ihigh, of );
+  case KBAG : return new Express_Bag   ( ilow, ihigh, of );
+  case KSET : return new Express_Set   ( ilow, ihigh, of );
+  default   : ec_error ( "Complex type not treated!", "" );
+              return NULL;
+  }
+}
+
+static Express_Field *mkfield ( char *name, Express_Type *type, int optional )
+{
+  return new Express_Field ( name, type, optional );
+}
+
+static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq )
+{
+  if ( seq ) seq->Prepend ( field );
+  else {
+    seq = new Express_HSequenceOfField;
+    seq->Append ( field );
+  }
+  return seq;
+}
+
+/*******************************************************************/
+/* External interface to result of parsing */
+
+Handle(Express_Schema) ec_parse ( FILE *fin )
+{
+  extern FILE *yyin;
+  yyin = fin;
+  yyparse();
+  return Express::Schema();
+}
+
+/*******************************************************************/
+/* MAIN & co */
+
+/*
+void tlistfree ( struct tlist *list )
+{
+  if ( ! list ) return;
+  tlistfree ( list->next );
+  list->next = 0;
+  free ( list->str );
+  list->str = 0;
+}
+* /
+
+int printtlist ( struct ec_tlist *tl )
+{
+  int num=0;
+  while ( tl ) {
+    num++;
+    printf ( "%s\n", tl->name );
+    tl = tl->next;
+  }
+  return num;
+}
+
+int main ( void )
+{
+  int num = 0;
+  yyparse();
+
+  printf ( "\nFinished\n" );
+  if ( schema ) {
+    struct ec_item *it;
+    it = schema->items;
+    printf ( "\nSchema %s", schema->name );
+    printf ( "\nItems:" );
+    while ( it ) {
+      num++;
+      printf ( "\n%s", it->name );
+      it = it->next;
+    }
+//    num = printtlist ( res );
+    printf ( "\nTotal %d", num );
+  }
+
+/*  tlistfree ( yylval.tlist ); * /
+  return num;
+}
+*/
diff --git a/src/ExpToCasExe/lex.yy.c b/src/ExpToCasExe/lex.yy.c
new file mode 100644 (file)
index 0000000..4e9b828
--- /dev/null
@@ -0,0 +1,1023 @@
+// Created:    Mon Nov  1 12:50:27 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <stdio.h>
+#include <stdlib.h>
+# define U(x) x
+# define NLSTATE yyprevious=YYNEWLINE
+# define BEGIN yybgin = yysvec + 1 +
+# define INITIAL 0
+# define YYLERR yysvec
+# define YYSTATE (yyestate-yysvec-1)
+# define YYOPTIM 1
+# ifndef YYLMAX 
+# define YYLMAX BUFSIZ
+# endif 
+#ifndef __cplusplus
+# define output(c) (void)putc(c,yyout)
+#else
+# define lex_output(c) (void)putc(c,yyout)
+#endif
+
+#if defined(__cplusplus) || defined(__STDC__)
+
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+extern "C" {
+#endif
+       int yyback(int *, int);
+       int yyinput(void);
+       int yylook(void);
+       void yyoutput(int);
+       int yyracc(int);
+       int yyreject(void);
+       void yyunput(int);
+       int yylex(void);
+#ifdef YYLEX_E
+       void yywoutput(wchar_t);
+       wchar_t yywinput(void);
+#endif
+#ifndef yyless
+       int yyless(int);
+#endif
+#ifndef yywrap
+       int yywrap(void);
+#endif
+#ifdef LEXDEBUG
+       void allprint(char);
+       void sprint(char *);
+#endif
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+}
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+       void exit(int);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
+# define yymore() (yymorfg=1)
+#ifndef __cplusplus
+# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
+#else
+# define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
+#endif
+#define ECHO fprintf(yyout, "%s",yytext)
+# define REJECT { nstr = yyreject(); goto yyfussy;}
+int yyleng;
+#define YYISARRAY
+char yytext[YYLMAX];
+int yymorfg;
+extern char *yysptr, yysbuf[];
+int yytchar;
+FILE *yyin = {stdin}, *yyout = {stdout};
+extern int yylineno;
+struct yysvf { 
+       struct yywork *yystoff;
+       struct yysvf *yyother;
+       int *yystops;};
+struct yysvf *yyestate;
+extern struct yysvf yysvec[], *yybgin;
+
+
+# line 4 "explist.l"
+/* This LEX scanner produces list of items included in the EXPRESS schema  */
+
+# line 5 "explist.l"
+/* (TYPE, ENTITY, FUNCTION, RULE) */
+
+
+# line 7 "explist.l"
+/************************************/
+
+# line 8 "explist.l"
+/* Section 1                        */
+
+# line 9 "explist.l"
+/* definitions                      */
+# define CONST 2
+# define TYP 4
+# define TYP1 6
+# define ENT 8
+# define ENT1 10
+# define LIST 12
+# define COMM 14
+# define SKP 16
+# define FUN 18
+# define FUN1 20
+# define RUL 22
+
+static int fun_level=0;
+
+
+# line 26 "explist.l"
+/************************************/
+
+# line 27 "explist.l"
+/* Section 2                        */
+
+# line 28 "explist.l"
+/* parsing rules                    */
+# define YYNEWLINE 10
+yylex(){
+int nstr; extern int yyprevious;
+#ifdef __cplusplus
+/* to avoid CC and lint complaining yyfussy not being used ...*/
+static int __lex_hack = 0;
+if (__lex_hack) goto yyfussy;
+#endif
+while((nstr = yylook()) >= 0)
+yyfussy: switch(nstr){
+case 0:
+if(yywrap()) return(0); break;
+case 1:
+
+# line 32 "explist.l"
+              ;
+break;
+case 2:
+
+# line 33 "explist.l"
+                { printf ( "Starting multiline comment\n" ); BEGIN(COMM); }
+break;
+case 3:
+
+# line 34 "explist.l"
+          ;
+break;
+case 4:
+
+# line 35 "explist.l"
+          { printf ( "End of multiline comment\n" ); BEGIN(0); }
+break;
+case 5:
+
+# line 37 "explist.l"
+    printf ( "Starting %s\n", yytext );
+break;
+case 6:
+
+# line 38 "explist.l"
+         printf ( "Schema finished\n" );
+break;
+case 7:
+
+# line 40 "explist.l"
+                { BEGIN(TYP); }
+break;
+case 8:
+
+# line 41 "explist.l"
+         { printf ( "TYPE %s\n", yytext ); BEGIN(TYP1); }
+break;
+case 9:
+
+# line 42 "explist.l"
+          ;
+break;
+case 10:
+
+# line 43 "explist.l"
+ { printf ( "\n" ); BEGIN(0); }
+break;
+case 11:
+
+# line 45 "explist.l"
+              { BEGIN(ENT); }
+break;
+case 12:
+
+# line 46 "explist.l"
+         { printf ( "ENTITY %s\n", yytext ); BEGIN(ENT1); }
+break;
+case 13:
+
+# line 47 "explist.l"
+          ;
+break;
+case 14:
+
+# line 48 "explist.l"
+ BEGIN(0);
+break;
+case 15:
+
+# line 50 "explist.l"
+     case 16:
+
+# line 51 "explist.l"
+      BEGIN(SKP);
+break;
+case 17:
+
+# line 52 "explist.l"
+           ;
+break;
+case 18:
+
+# line 54 "explist.l"
+ { BEGIN(FUN); fun_level++; }
+break;
+case 19:
+
+# line 55 "explist.l"
+         { printf ( "FUNCTION %s\n", yytext ); BEGIN(FUN1); }
+break;
+case 20:
+
+# line 56 "explist.l"
+          ;
+break;
+case 21:
+
+# line 57 "explist.l"
+ { fun_level--; if ( ! fun_level ) BEGIN(0); }
+break;
+case 22:
+
+# line 59 "explist.l"
+                { BEGIN(RUL); }
+break;
+case 23:
+
+# line 60 "explist.l"
+         { printf ( "RULE %s\n", yytext ); BEGIN(SKP); }
+break;
+case 24:
+
+# line 61 "explist.l"
+       BEGIN(0);
+break;
+case 25:
+
+# line 63 "explist.l"
+                ;
+break;
+case -1:
+break;
+default:
+(void)fprintf(yyout,"bad switch yylook %d",nstr);
+} return(0); }
+/* end of yylex */
+
+# line 66 "explist.l"
+
+/************************************/
+/* Section 3                        */
+/* calling and auxiliary procedures */
+
+int main ( void )
+{
+  yylex();
+}
+
+int yywrap(void) { return 1; }
+int yyvstop[] = {
+0,
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+25,
+0, 
+
+8,
+0, 
+
+9,
+0, 
+
+9,
+0, 
+
+12,
+0, 
+
+13,
+0, 
+
+13,
+0, 
+
+3,
+0, 
+
+3,
+0, 
+
+17,
+0, 
+
+17,
+0, 
+
+19,
+0, 
+
+20,
+0, 
+
+20,
+0, 
+
+20,
+0, 
+
+20,
+0, 
+
+23,
+0, 
+
+2,
+0, 
+
+1,
+0, 
+
+4,
+0, 
+
+22,
+0, 
+
+7,
+0, 
+
+16,
+0, 
+
+11,
+0, 
+
+15,
+0, 
+
+18,
+0, 
+
+10,
+0, 
+
+24,
+0, 
+
+5,
+0, 
+
+14,
+0, 
+
+6,
+0, 
+
+21,
+0, 
+0};
+# define YYTYPE unsigned char
+struct yywork { YYTYPE verify, advance; } yycrank[] = {
+0,0,   0,0,    1,25,   0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    1,25,   1,25,   
+0,0,   0,0,    2,32,   2,32,   
+0,0,   0,0,    22,52,  22,52,  
+32,62, 32,62,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   1,26,   111,119,        32,62,  
+0,0,   2,26,   1,27,   0,0,    
+45,69, 1,25,   2,27,   16,45,  
+15,44, 26,56,  27,57,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+15,44, 15,44,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    1,28,   5,34,   
+5,35,  8,39,   2,28,   2,33,   
+12,43, 18,47,  22,51,  22,53,  
+30,60, 32,63,  34,65,  1,29,   
+1,30,  1,31,   7,38,   2,29,   
+2,30,  2,31,   5,36,   28,58,  
+29,59, 15,45,  7,38,   7,38,   
+1,25,  31,61,  5,37,   15,44,  
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   5,37,   5,37,   
+5,37,  5,37,   33,64,  35,66,  
+36,67, 40,68,  47,70,  48,71,  
+54,72, 7,38,   58,73,  59,75,  
+60,76, 61,77,  64,78,  65,79,  
+66,80, 67,81,  68,82,  70,83,  
+71,84, 72,85,  15,44,  73,86,  
+74,87, 75,88,  58,74,  76,89,  
+77,90, 9,40,   7,39,   78,91,  
+79,92, 80,93,  81,94,  82,95,  
+83,96, 84,97,  85,98,  86,99,  
+87,100,        89,101, 91,102, 92,103, 
+57,57, 93,104, 94,105, 95,106, 
+97,108,        98,107, 99,109, 100,110,        
+57,57, 57,0,   101,111,        9,41,   
+7,38,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   9,41,   
+9,41,  9,41,   9,41,   10,40,  
+102,112,       103,113,        104,114,        106,115,        
+107,116,       96,106, 11,42,  57,57,  
+17,46, 108,117,        109,118,        112,120,        
+114,121,       115,122,        11,42,  11,42,  
+17,46, 17,46,  96,107, 116,123,        
+96,104,        117,124,        118,125,        120,127,        
+121,128,       10,41,  122,129,        10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 10,41,  10,41,  10,41,  
+10,41, 11,42,  57,57,  17,46,  
+123,130,       124,131,        125,132,        126,126,        
+126,126,       126,126,        126,126,        126,126,        
+126,126,       126,126,        126,126,        126,126,        
+126,126,       129,134,        126,133,        131,135,        
+132,136,       134,137,        11,43,  19,48,  
+17,47, 135,138,        136,139,        138,140,        
+140,141,       0,0,    21,50,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    21,50,  21,50,  
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+11,42, 19,49,  17,46,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 19,49,  19,49,  19,49,  
+19,49, 21,50,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   23,54,  21,51,  0,0,    
+0,0,   0,0,    0,0,    0,0,    
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    23,55,  
+21,50, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  23,55,  
+23,55, 23,55,  23,55,  37,37,  
+0,0,   37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  37,37,  
+37,37, 37,37,  37,37,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    41,41,  0,0,    
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  41,41,  41,41,  
+41,41, 41,41,  49,49,  0,0,    
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  49,49,  49,49,  
+49,49, 49,49,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+119,126,       0,0,    119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+119,126,       119,126,        119,126,        119,126,        
+0,0,   0,0,    0,0,    0,0,    
+0,0,   0,0,    0,0,    0,0,    
+0,0,   55,55,  0,0,    55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 55,55,  55,55,  55,55,  
+55,55, 0,0,    0,0,    0,0,    
+0,0};
+struct yysvf yysvec[] = {
+0,     0,      0,
+yycrank+-1,    0,              0,      
+yycrank+-5,    yysvec+1,       0,      
+yycrank+0,     0,              0,      
+yycrank+0,     0,              0,      
+yycrank+3,     0,              0,      
+yycrank+0,     yysvec+5,       0,      
+yycrank+-85,   0,              0,      
+yycrank+-4,    yysvec+7,       0,      
+yycrank+84,    yysvec+5,       0,      
+yycrank+138,   yysvec+5,       0,      
+yycrank+-213,  0,              0,      
+yycrank+-7,    yysvec+11,      0,      
+yycrank+0,     0,              0,      
+yycrank+0,     0,              0,      
+yycrank+-51,   0,              0,      
+yycrank+-9,    yysvec+15,      0,      
+yycrank+-215,  0,              0,      
+yycrank+-8,    yysvec+17,      0,      
+yycrank+214,   0,              0,      
+yycrank+0,     yysvec+19,      0,      
+yycrank+-289,  0,              0,      
+yycrank+-9,    yysvec+21,      0,      
+yycrank+288,   0,              0,      
+yycrank+0,     yysvec+23,      0,      
+yycrank+0,     0,              yyvstop+1,
+yycrank+11,    0,              yyvstop+3,
+yycrank+9,     0,              yyvstop+5,
+yycrank+13,    0,              yyvstop+7,
+yycrank+7,     0,              yyvstop+9,
+yycrank+13,    0,              yyvstop+11,
+yycrank+8,     0,              yyvstop+13,
+yycrank+11,    0,              yyvstop+15,
+yycrank+41,    0,              yyvstop+17,
+yycrank+13,    0,              0,      
+yycrank+49,    0,              0,      
+yycrank+56,    0,              0,      
+yycrank+316,   0,              yyvstop+19,
+yycrank+0,     0,              yyvstop+21,
+yycrank+0,     yysvec+35,      yyvstop+23,
+yycrank+51,    0,              0,      
+yycrank+391,   0,              yyvstop+25,
+yycrank+0,     0,              yyvstop+27,
+yycrank+0,     yysvec+40,      yyvstop+29,
+yycrank+0,     0,              yyvstop+31,
+yycrank+7,     0,              yyvstop+33,
+yycrank+0,     0,              yyvstop+35,
+yycrank+52,    0,              yyvstop+37,
+yycrank+53,    0,              0,      
+yycrank+419,   0,              yyvstop+39,
+yycrank+0,     0,              yyvstop+41,
+yycrank+0,     yysvec+48,      yyvstop+43,
+yycrank+0,     yysvec+32,      yyvstop+45,
+yycrank+0,     yysvec+33,      yyvstop+47,
+yycrank+54,    0,              0,      
+yycrank+494,   0,              yyvstop+49,
+yycrank+0,     0,              yyvstop+51,
+yycrank+-167,  0,              yyvstop+53,
+yycrank+66,    0,              0,      
+yycrank+59,    0,              0,      
+yycrank+64,    0,              0,      
+yycrank+57,    0,              0,      
+yycrank+0,     yysvec+32,      0,      
+yycrank+0,     yysvec+33,      0,      
+yycrank+60,    0,              0,      
+yycrank+57,    0,              0,      
+yycrank+72,    0,              0,      
+yycrank+72,    0,              0,      
+yycrank+74,    0,              0,      
+yycrank+0,     0,              yyvstop+55,
+yycrank+75,    0,              0,      
+yycrank+76,    0,              0,      
+yycrank+77,    0,              0,      
+yycrank+52,    0,              0,      
+yycrank+75,    0,              0,      
+yycrank+80,    0,              0,      
+yycrank+82,    0,              0,      
+yycrank+83,    0,              0,      
+yycrank+88,    0,              0,      
+yycrank+83,    0,              0,      
+yycrank+62,    0,              0,      
+yycrank+76,    0,              0,      
+yycrank+64,    0,              0,      
+yycrank+65,    0,              0,      
+yycrank+66,    0,              0,      
+yycrank+67,    0,              0,      
+yycrank+80,    0,              0,      
+yycrank+80,    0,              0,      
+yycrank+0,     0,              yyvstop+57,
+yycrank+88,    0,              0,      
+yycrank+0,     0,              yyvstop+59,
+yycrank+82,    0,              0,      
+yycrank+81,    0,              0,      
+yycrank+85,    0,              0,      
+yycrank+101,   0,              0,      
+yycrank+102,   0,              0,      
+yycrank+144,   0,              0,      
+yycrank+102,   0,              0,      
+yycrank+91,    0,              0,      
+yycrank+107,   0,              0,      
+yycrank+86,    0,              0,      
+yycrank+113,   0,              0,      
+yycrank+135,   0,              0,      
+yycrank+140,   0,              0,      
+yycrank+121,   0,              0,      
+yycrank+0,     0,              yyvstop+61,
+yycrank+133,   0,              0,      
+yycrank+127,   0,              0,      
+yycrank+132,   0,              0,      
+yycrank+146,   0,              0,      
+yycrank+0,     0,              yyvstop+63,
+yycrank+10,    0,              0,      
+yycrank+140,   0,              0,      
+yycrank+0,     0,              yyvstop+65,
+yycrank+140,   0,              0,      
+yycrank+137,   0,              0,      
+yycrank+151,   0,              0,      
+yycrank+151,   0,              0,      
+yycrank+161,   0,              0,      
+yycrank+457,   0,              0,      
+yycrank+153,   0,              0,      
+yycrank+163,   0,              0,      
+yycrank+161,   0,              0,      
+yycrank+195,   0,              0,      
+yycrank+198,   0,              0,      
+yycrank+189,   0,              0,      
+yycrank+219,   yysvec+119,     0,      
+yycrank+0,     0,              yyvstop+67,
+yycrank+0,     0,              yyvstop+69,
+yycrank+193,   0,              0,      
+yycrank+0,     0,              yyvstop+71,
+yycrank+195,   0,              0,      
+yycrank+215,   0,              0,      
+yycrank+0,     0,              yyvstop+73,
+yycrank+192,   0,              0,      
+yycrank+212,   0,              0,      
+yycrank+227,   0,              0,      
+yycrank+0,     0,              yyvstop+75,
+yycrank+208,   0,              0,      
+yycrank+0,     0,              yyvstop+77,
+yycrank+210,   0,              0,      
+yycrank+0,     0,              yyvstop+79,
+0,     0,      0};
+struct yywork *yytop = yycrank+616;
+struct yysvf *yybgin = yysvec+1;
+char yymatch[] = {
+  0,   1,   1,   1,   1,   1,   1,   1, 
+  1,   9,  10,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  9,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+ 48,  48,  48,  48,  48,  48,  48,  48, 
+ 48,  48,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,  95, 
+  1,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,  95,  95,  95,  95,  95, 
+ 95,  95,  95,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+  1,   1,   1,   1,   1,   1,   1,   1, 
+0};
+char yyextra[] = {
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,
+0};
+/*     Copyright (c) 1989 AT&T */
+/*       All Rights Reserved   */
+
+/*     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T     */
+/*     The copyright notice above does not evidence any        */
+/*     actual or intended publication of such source code.     */
+
+#pragma ident  "@(#)ncform     6.11    97/01/06 SMI"
+
+int yylineno =1;
+# define YYU(x) x
+# define NLSTATE yyprevious=YYNEWLINE
+struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
+char yysbuf[YYLMAX];
+char *yysptr = yysbuf;
+int *yyfnd;
+extern struct yysvf *yyestate;
+int yyprevious = YYNEWLINE;
+#if defined(__cplusplus) || defined(__STDC__)
+int yylook(void)
+#else
+yylook()
+#endif
+{
+       register struct yysvf *yystate, **lsp;
+       register struct yywork *yyt;
+       struct yysvf *yyz;
+       int yych, yyfirst;
+       struct yywork *yyr;
+# ifdef LEXDEBUG
+       int debug;
+# endif
+       char *yylastch;
+       /* start off machines */
+# ifdef LEXDEBUG
+       debug = 0;
+# endif
+       yyfirst=1;
+       if (!yymorfg)
+               yylastch = yytext;
+       else {
+               yymorfg=0;
+               yylastch = yytext+yyleng;
+               }
+       for(;;){
+               lsp = yylstate;
+               yyestate = yystate = yybgin;
+               if (yyprevious==YYNEWLINE) yystate++;
+               for (;;){
+# ifdef LEXDEBUG
+                       if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
+# endif
+                       yyt = yystate->yystoff;
+                       if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
+                               yyz = yystate->yyother;
+                               if(yyz == 0)break;
+                               if(yyz->yystoff == yycrank)break;
+                               }
+#ifndef __cplusplus
+                       *yylastch++ = yych = input();
+#else
+                       *yylastch++ = yych = lex_input();
+#endif
+#ifdef YYISARRAY
+                       if(yylastch > &yytext[YYLMAX]) {
+                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                               exit(1);
+                       }
+#else
+                       if (yylastch >= &yytext[ yytextsz ]) {
+                               int     x = yylastch - yytext;
+
+                               yytextsz += YYTEXTSZINC;
+                               if (yytext == yy_tbuf) {
+                                   yytext = (char *) malloc(yytextsz);
+                                   memcpy(yytext, yy_tbuf, sizeof (yy_tbuf));
+                               }
+                               else
+                                   yytext = (char *) realloc(yytext, yytextsz);
+                               if (!yytext) {
+                                   fprintf(yyout,
+                                       "Cannot realloc yytext\n");
+                                   exit(1);
+                               }
+                               yylastch = yytext + x;
+                       }
+#endif
+                       yyfirst=0;
+               tryagain:
+# ifdef LEXDEBUG
+                       if(debug){
+                               fprintf(yyout,"char ");
+                               allprint(yych);
+                               putchar('\n');
+                               }
+# endif
+                       yyr = yyt;
+                       if ( (int)yyt > (int)yycrank){
+                               yyt = yyr + yych;
+                               if (yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               }
+# ifdef YYOPTIM
+                       else if((int)yyt < (int)yycrank) {              /* r < yycrank */
+                               yyt = yyr = yycrank+(yycrank-yyt);
+# ifdef LEXDEBUG
+                               if(debug)fprintf(yyout,"compressed state\n");
+# endif
+                               yyt = yyt + yych;
+                               if(yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               yyt = yyr + YYU(yymatch[yych]);
+# ifdef LEXDEBUG
+                               if(debug){
+                                       fprintf(yyout,"try fall back character ");
+                                       allprint(YYU(yymatch[yych]));
+                                       putchar('\n');
+                                       }
+# endif
+                               if(yyt <= yytop && yyt->verify+yysvec == yystate){
+                                       if(yyt->advance+yysvec == YYLERR)       /* error transition */
+                                               {unput(*--yylastch);break;}
+                                       *lsp++ = yystate = yyt->advance+yysvec;
+                                       if(lsp > &yylstate[YYLMAX]) {
+                                               fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
+                                               exit(1);
+                                       }
+                                       goto contin;
+                                       }
+                               }
+                       if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
+# ifdef LEXDEBUG
+                               if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
+# endif
+                               goto tryagain;
+                               }
+# endif
+                       else
+                               {unput(*--yylastch);break;}
+               contin:
+# ifdef LEXDEBUG
+                       if(debug){
+                               fprintf(yyout,"state %d char ",yystate-yysvec-1);
+                               allprint(yych);
+                               putchar('\n');
+                               }
+# endif
+                       ;
+                       }
+# ifdef LEXDEBUG
+               if(debug){
+                       fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
+                       allprint(yych);
+                       putchar('\n');
+                       }
+# endif
+               while (lsp-- > yylstate){
+                       *yylastch-- = 0;
+                       if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
+                               yyolsp = lsp;
+                               if(yyextra[*yyfnd]){            /* must backup */
+                                       while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
+                                               lsp--;
+                                               unput(*yylastch--);
+                                               }
+                                       }
+                               yyprevious = YYU(*yylastch);
+                               yylsp = lsp;
+                               yyleng = yylastch-yytext+1;
+                               yytext[yyleng] = 0;
+# ifdef LEXDEBUG
+                               if(debug){
+                                       fprintf(yyout,"\nmatch ");
+                                       sprint(yytext);
+                                       fprintf(yyout," action %d\n",*yyfnd);
+                                       }
+# endif
+                               return(*yyfnd++);
+                               }
+                       unput(*yylastch);
+                       }
+               if (yytext[0] == 0  /* && feof(yyin) */)
+                       {
+                       yysptr=yysbuf;
+                       return(0);
+                       }
+#ifndef __cplusplus
+               yyprevious = yytext[0] = input();
+               if (yyprevious>0)
+                       output(yyprevious);
+#else
+               yyprevious = yytext[0] = lex_input();
+               if (yyprevious>0)
+                       lex_output(yyprevious);
+#endif
+               yylastch=yytext;
+# ifdef LEXDEBUG
+               if(debug)putchar('\n');
+# endif
+               }
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+int yyback(int *p, int m)
+#else
+yyback(p, m)
+       int *p;
+#endif
+{
+       if (p==0) return(0);
+       while (*p) {
+               if (*p++ == m)
+                       return(1);
+       }
+       return(0);
+}
+       /* the following are only used in the lex library */
+#if defined(__cplusplus) || defined(__STDC__)
+int yyinput(void)
+#else
+yyinput()
+#endif
+{
+#ifndef __cplusplus
+       return(input());
+#else
+       return(lex_input());
+#endif
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+void yyoutput(int c)
+#else
+yyoutput(c)
+  int c; 
+#endif
+{
+#ifndef __cplusplus
+       output(c);
+#else
+       lex_output(c);
+#endif
+       }
+#if defined(__cplusplus) || defined(__STDC__)
+void yyunput(int c)
+#else
+yyunput(c)
+   int c; 
+#endif
+{
+       unput(c);
+       }
diff --git a/src/ExpToCasExe/mkexpformat b/src/ExpToCasExe/mkexpformat
new file mode 100644 (file)
index 0000000..2c3fc8e
--- /dev/null
@@ -0,0 +1,2 @@
+lex expformat.l
+cc lex.yy.c -o expformat
diff --git a/src/ExpToCasExe/mkexplist b/src/ExpToCasExe/mkexplist
new file mode 100644 (file)
index 0000000..6c8826a
--- /dev/null
@@ -0,0 +1,2 @@
+lex explist.l
+cc lex.yy.c -o explist
diff --git a/src/ExpToCasExe/mkparser b/src/ExpToCasExe/mkparser
new file mode 100644 (file)
index 0000000..255bd74
--- /dev/null
@@ -0,0 +1,5 @@
+rm -f yy.tab.c y.tab.h expparse.cxx expparse.h
+#yacc -v -d exptocas.y
+yacc -d exptocas.y
+mv y.tab.c expparse.cxx
+mv y.tab.h expparse.h
diff --git a/src/ExpToCasExe/mkscanner b/src/ExpToCasExe/mkscanner
new file mode 100644 (file)
index 0000000..bfcefb4
--- /dev/null
@@ -0,0 +1 @@
+lex -t exptocas.l >expscan.cxx
diff --git a/src/ExpToCasExe/occt_step_entities.lst b/src/ExpToCasExe/occt_step_entities.lst
new file mode 100644 (file)
index 0000000..0472a22
--- /dev/null
@@ -0,0 +1,784 @@
+# Last update 03.04.2020
+#===============================================
+#             package StepAP203
+#===============================================
+ApprovedItem StepAP203
+CcDesignApproval StepAP203
+CcDesignCertification StepAP203
+CcDesignContract StepAP203
+CcDesignDateAndTimeAssignment StepAP203
+CcDesignPersonAndOrganizationAssignment StepAP203
+CcDesignSecurityClassification StepAP203
+CcDesignSpecificationReference StepAP203
+CertifiedItem StepAP203
+Change StepAP203
+ChangeRequest StepAP203
+ChangeRequestItem StepAP203
+ClassifiedItem StepAP203
+ContractedItem StepAP203
+DateTimeItem StepAP203
+PersonOrganizationItem StepAP203
+SpecifiedItem StepAP203
+StartRequest StepAP203
+StartRequestItem StepAP203
+StartWork StepAP203
+WorkItem StepAP203
+
+#===============================================
+#             package StepAP214
+#===============================================
+AppliedApprovalAssignment StepAP214
+AppliedDateAndTimeAssignment StepAP214
+AppliedDateAssignment StepAP214
+AppliedDocumentReference StepAP214
+AppliedExternalIdentificationAssignment StepAP214
+AppliedGroupAssignment StepAP214
+AppliedOrganizationAssignment StepAP214
+AppliedPersonAndOrganizationAssignment StepAP214
+AppliedPresentedItem StepAP214
+AppliedSecurityClassificationAssignment StepAP214
+ApprovalItem StepAP214
+AutoDesignActualDateAndTimeAssignment StepAP214
+AutoDesignActualDateAssignment StepAP214
+AutoDesignApprovalAssignment StepAP214
+AutoDesignDateAndPersonAssignment StepAP214
+AutoDesignDateAndPersonItem StepAP214
+AutoDesignDateAndTimeItem StepAP214
+AutoDesignDatedItem StepAP214
+AutoDesignDocumentReference StepAP214
+AutoDesignGeneralOrgItem StepAP214
+AutoDesignGroupAssignment StepAP214
+AutoDesignGroupedItem StepAP214
+AutoDesignNominalDateAndTimeAssignment StepAP214
+AutoDesignNominalDateAssignment StepAP214
+AutoDesignOrganizationAssignment StepAP214
+AutoDesignOrganizationItem StepAP214
+AutoDesignPersonAndOrganizationAssignment StepAP214
+AutoDesignPresentedItem StepAP214
+AutoDesignPresentedItemSelect StepAP214
+AutoDesignReferencingItem StepAP214
+AutoDesignSecurityClassificationAssignment StepAP214
+Class StepAP214
+DateAndTimeItem StepAP214
+DateItem StepAP214
+DocumentReferenceItem StepAP214
+ExternalIdentificationItem StepAP214
+ExternallyDefinedClass StepAP214
+ExternallyDefinedGeneralProperty StepAP214
+GroupItem StepAP214
+OrganizationItem StepAP214
+PersonAndOrganizationItem StepAP214
+PresentedItemSelect StepAP214
+Protocol StepAP214
+RepItemGroup StepAP214
+SecurityClassificationItem StepAP214
+
+#===============================================
+#             package StepAP242
+#===============================================
+DraughtingModelItemAssociation StepAP242
+GeometricItemSpecificUsage StepAP242
+IdAttribute StepAP242
+IdAttributeSelect StepAP242
+ItemIdentifiedRepresentationUsage StepAP242
+ItemIdentifiedRepresentationUsageDefinition StepAP242
+
+#===============================================
+#             package StepBasic
+#===============================================
+Action StepBasic
+ActionAssignment StepBasic
+ActionMethod StepBasic
+ActionRequestAssignment StepBasic
+ActionRequestSolution StepBasic
+Address StepBasic
+ApplicationContext StepBasic
+ApplicationContextElement StepBasic
+ApplicationProtocolDefinition StepBasic
+Approval StepBasic
+ApprovalAssignment StepBasic
+ApprovalDateTime StepBasic
+ApprovalPersonOrganization StepBasic
+ApprovalRelationship StepBasic
+ApprovalRole StepBasic
+ApprovalStatus StepBasic
+AreaUnit StepBasic
+CalendarDate StepBasic
+Certification StepBasic
+CertificationAssignment StepBasic
+CertificationType StepBasic
+CharacterizedObject StepBasic
+Contract StepBasic
+ContractAssignment StepBasic
+ContractType StepBasic
+ConversionBasedUnit StepBasic
+ConversionBasedUnitAndAreaUnit StepBasic
+ConversionBasedUnitAndLengthUnit StepBasic
+ConversionBasedUnitAndMassUnit StepBasic
+ConversionBasedUnitAndPlaneAngleUnit StepBasic
+ConversionBasedUnitAndRatioUnit StepBasic
+ConversionBasedUnitAndSolidAngleUnit StepBasic
+ConversionBasedUnitAndTimeUnit StepBasic
+ConversionBasedUnitAndVolumeUnit StepBasic
+CoordinatedUniversalTimeOffset StepBasic
+Date StepBasic
+DateAndTime StepBasic
+DateAndTimeAssignment StepBasic
+DateAssignment StepBasic
+DateRole StepBasic
+DateTimeRole StepBasic
+DateTimeSelect StepBasic
+DerivedUnit StepBasic
+DerivedUnitElement StepBasic
+DesignContext StepBasic
+DigitalDocument StepBasic
+DimensionalExponents StepBasic
+Document StepBasic
+DocumentFile StepBasic
+DocumentProductAssociation StepBasic
+DocumentProductEquivalence StepBasic
+DocumentReference StepBasic
+DocumentRelationship StepBasic
+DocumentRepresentationType StepBasic
+DocumentType StepBasic
+DocumentUsageConstraint StepBasic
+Effectivity StepBasic
+EffectivityAssignment StepBasic
+EulerAngles StepBasic
+ExternalIdentificationAssignment StepBasic
+ExternallyDefinedItem StepBasic
+ExternalSource StepBasic
+GeneralProperty StepBasic
+Group StepBasic
+GroupAssignment StepBasic
+GroupRelationship StepBasic
+IdentificationAssignment StepBasic
+IdentificationRole StepBasic
+LengthMeasureWithUnit StepBasic
+LengthUnit StepBasic
+LocalTime StepBasic
+MassMeasureWithUnit StepBasic
+MassUnit StepBasic
+MeasureValueMember StepBasic
+MeasureWithUnit StepBasic
+MechanicalContext StepBasic
+NameAssignment StepBasic
+NamedUnit StepBasic
+ObjectRole StepBasic
+OrdinalDate StepBasic
+Organization StepBasic
+OrganizationalAddress StepBasic
+OrganizationAssignment StepBasic
+OrganizationRole StepBasic
+Person StepBasic
+PersonalAddress StepBasic
+PersonAndOrganization StepBasic
+PersonAndOrganizationAssignment StepBasic
+PersonAndOrganizationRole StepBasic
+PersonOrganizationSelect StepBasic
+PhysicallyModeledProductDefinition StepBasic
+PlaneAngleMeasureWithUnit StepBasic
+PlaneAngleUnit StepBasic
+Product StepBasic
+ProductCategory StepBasic
+ProductCategoryRelationship StepBasic
+ProductConceptContext StepBasic
+ProductContext StepBasic
+ProductDefinition StepBasic
+ProductDefinitionContext StepBasic
+ProductDefinitionEffectivity StepBasic
+ProductDefinitionFormation StepBasic
+ProductDefinitionFormationRelationship StepBasic
+ProductDefinitionFormationWithSpecifiedSource StepBasic
+ProductDefinitionOrReference StepBasic
+ProductDefinitionReference StepBasic
+ProductDefinitionReferenceWithLocalRepresentation StepBasic
+ProductDefinitionRelationship StepBasic
+ProductDefinitionWithAssociatedDocuments StepBasic
+ProductOrFormationOrDefinition StepBasic
+ProductRelatedProductCategory StepBasic
+ProductType StepBasic
+RatioMeasureWithUnit StepBasic
+RatioUnit StepBasic
+RoleAssociation StepBasic
+RoleSelect StepBasic
+SecurityClassification StepBasic
+SecurityClassificationAssignment StepBasic
+SecurityClassificationLevel StepBasic
+SiUnit StepBasic
+SiUnitAndAreaUnit StepBasic
+SiUnitAndLengthUnit StepBasic
+SiUnitAndMassUnit StepBasic
+SiUnitAndPlaneAngleUnit StepBasic
+SiUnitAndRatioUnit StepBasic
+SiUnitAndSolidAngleUnit StepBasic
+SiUnitAndThermodynamicTemperatureUnit StepBasic
+SiUnitAndTimeUnit StepBasic
+SiUnitAndVolumeUnit StepBasic
+SizeMember StepBasic
+SizeSelect StepBasic
+SolidAngleMeasureWithUnit StepBasic
+SolidAngleUnit StepBasic
+SourceItem StepBasic
+ThermodynamicTemperatureUnit StepBasic
+TimeMeasureWithUnit StepBasic
+TimeUnit StepBasic
+UncertaintyMeasureWithUnit StepBasic
+Unit StepBasic
+VersionedActionRequest StepBasic
+VolumeUnit StepBasic
+WeekOfYearAndDayDate StepBasic
+
+#===============================================
+#             package StepDimTol
+#===============================================
+AngularityTolerance StepDimTol
+CircularRunoutTolerance StepDimTol
+CoaxialityTolerance StepDimTol
+CommonDatum StepDimTol
+ConcentricityTolerance StepDimTol
+CylindricityTolerance StepDimTol
+Datum StepDimTol
+DatumFeature StepDimTol
+DatumOrCommonDatum StepDimTol
+DatumReference StepDimTol
+DatumReferenceCompartment StepDimTol
+DatumReferenceElement StepDimTol
+DatumReferenceModifier StepDimTol
+DatumReferenceModifierWithValue StepDimTol
+DatumSystem StepDimTol
+DatumSystemOrReference StepDimTol
+DatumTarget StepDimTol
+FlatnessTolerance StepDimTol
+GeneralDatumReference StepDimTol
+GeometricTolerance StepDimTol
+GeometricToleranceRelationship StepDimTol
+GeometricToleranceTarget StepDimTol
+GeometricToleranceWithDatumReference StepDimTol
+GeometricToleranceWithDefinedAreaUnit StepDimTol
+GeometricToleranceWithDefinedUnit StepDimTol
+GeometricToleranceWithMaximumTolerance StepDimTol
+GeometricToleranceWithModifiers StepDimTol
+GeoTolAndGeoTolWthDatRef StepDimTol
+GeoTolAndGeoTolWthDatRefAndGeoTolWthMaxTol StepDimTol
+GeoTolAndGeoTolWthDatRefAndGeoTolWthMod StepDimTol
+GeoTolAndGeoTolWthDatRefAndModGeoTolAndPosTol StepDimTol
+GeoTolAndGeoTolWthDatRefAndUneqDisGeoTol StepDimTol
+GeoTolAndGeoTolWthMaxTol StepDimTol
+GeoTolAndGeoTolWthMod StepDimTol
+LineProfileTolerance StepDimTol
+ModifiedGeometricTolerance StepDimTol
+NonUniformZoneDefinition StepDimTol
+ParallelismTolerance StepDimTol
+PerpendicularityTolerance StepDimTol
+PlacedDatumTargetFeature StepDimTol
+PositionTolerance StepDimTol
+ProjectedZoneDefinition StepDimTol
+RoundnessTolerance StepDimTol
+RunoutZoneDefinition StepDimTol
+RunoutZoneOrientation StepDimTol
+ShapeToleranceSelect StepDimTol
+SimpleDatumReferenceModifierMember StepDimTol
+StraightnessTolerance StepDimTol
+SurfaceProfileTolerance StepDimTol
+SymmetryTolerance StepDimTol
+ToleranceZone StepDimTol
+ToleranceZoneDefinition StepDimTol
+ToleranceZoneForm StepDimTol
+ToleranceZoneTarget StepDimTol
+TotalRunoutTolerance StepDimTol
+UnequallyDisposedGeometricTolerance StepDimTol
+
+#===============================================
+#             package StepElement
+#===============================================
+AnalysisItemWithinRepresentation StepElement
+Curve3dElementDescriptor StepElement
+CurveElementEndReleasePacket StepElement
+CurveElementFreedom StepElement
+CurveElementFreedomMember StepElement
+CurveElementPurpose StepElement
+CurveElementPurposeMember StepElement
+CurveElementSectionDefinition StepElement
+CurveElementSectionDerivedDefinitions StepElement
+ElementAspect StepElement
+ElementAspectMember StepElement
+ElementDescriptor StepElement
+ElementMaterial StepElement
+MeasureOrUnspecifiedValue StepElement
+MeasureOrUnspecifiedValueMember StepElement
+Surface3dElementDescriptor StepElement
+SurfaceElementProperty StepElement
+SurfaceElementPurpose StepElement
+SurfaceElementPurposeMember StepElement
+SurfaceSection StepElement
+SurfaceSectionField StepElement
+SurfaceSectionFieldConstant StepElement
+SurfaceSectionFieldVarying StepElement
+UniformSurfaceSection StepElement
+Volume3dElementDescriptor StepElement
+VolumeElementPurpose StepElement
+VolumeElementPurposeMember StepElement
+
+#===============================================
+#             package StepFEA
+#===============================================
+AlignedCurve3dElementCoordinateSystem StepFEA
+AlignedSurface3dElementCoordinateSystem StepFEA
+ArbitraryVolume3dElementCoordinateSystem StepFEA
+ConstantSurface3dElementCoordinateSystem StepFEA
+Curve3dElementProperty StepFEA
+Curve3dElementRepresentation StepFEA
+CurveElementEndCoordinateSystem StepFEA
+CurveElementEndOffset StepFEA
+CurveElementEndRelease StepFEA
+CurveElementInterval StepFEA
+CurveElementIntervalConstant StepFEA
+CurveElementIntervalLinearlyVarying StepFEA
+CurveElementLocation StepFEA
+DegreeOfFreedom StepFEA
+DegreeOfFreedomMember StepFEA
+DummyNode StepFEA
+ElementGeometricRelationship StepFEA
+ElementGroup StepFEA
+ElementOrElementGroup StepFEA
+ElementRepresentation StepFEA
+FeaAreaDensity StepFEA
+FeaAxis2Placement3d StepFEA
+FeaCurveSectionGeometricRelationship StepFEA
+FeaGroup StepFEA
+FeaLinearElasticity StepFEA
+FeaMassDensity StepFEA
+FeaMaterialPropertyRepresentation StepFEA
+FeaMaterialPropertyRepresentationItem StepFEA
+FeaModel StepFEA
+FeaModel3d StepFEA
+FeaModelDefinition StepFEA
+FeaMoistureAbsorption StepFEA
+FeaParametricPoint StepFEA
+FeaRepresentationItem StepFEA
+FeaSecantCoefficientOfLinearThermalExpansion StepFEA
+FeaShellBendingStiffness StepFEA
+FeaShellMembraneBendingCouplingStiffness StepFEA
+FeaShellMembraneStiffness StepFEA
+FeaShellShearStiffness StepFEA
+FeaSurfaceSectionGeometricRelationship StepFEA
+FeaTangentialCoefficientOfLinearThermalExpansion StepFEA
+FreedomAndCoefficient StepFEA
+FreedomsList StepFEA
+GeometricNode StepFEA
+Node StepFEA
+NodeDefinition StepFEA
+NodeGroup StepFEA
+NodeRepresentation StepFEA
+NodeSet StepFEA
+NodeWithSolutionCoordinateSystem StepFEA
+NodeWithVector StepFEA
+ParametricCurve3dElementCoordinateDirection StepFEA
+ParametricCurve3dElementCoordinateSystem StepFEA
+ParametricSurface3dElementCoordinateSystem StepFEA
+Surface3dElementRepresentation StepFEA
+SymmetricTensor22d StepFEA
+SymmetricTensor23d StepFEA
+SymmetricTensor23dMember StepFEA
+SymmetricTensor42d StepFEA
+SymmetricTensor43d StepFEA
+SymmetricTensor43dMember StepFEA
+Volume3dElementRepresentation StepFEA
+
+#===============================================
+#             package StepGeom
+#===============================================
+Axis1Placement StepGeom
+Axis2Placement StepGeom
+Axis2Placement2d StepGeom
+Axis2Placement3d StepGeom
+BezierCurve StepGeom
+BezierCurveAndRationalBSplineCurve StepGeom
+BezierSurface StepGeom
+BezierSurfaceAndRationalBSplineSurface StepGeom
+BoundaryCurve StepGeom
+BoundedCurve StepGeom
+BoundedSurface StepGeom
+BSplineCurve StepGeom
+BSplineCurveWithKnots StepGeom
+BSplineCurveWithKnotsAndRationalBSplineCurve StepGeom
+BSplineSurface StepGeom
+BSplineSurfaceWithKnots StepGeom
+BSplineSurfaceWithKnotsAndRationalBSplineSurface StepGeom
+CartesianPoint StepGeom
+CartesianTransformationOperator StepGeom
+CartesianTransformationOperator2d StepGeom
+CartesianTransformationOperator3d StepGeom
+Circle StepGeom
+CompositeCurve StepGeom
+CompositeCurveOnSurface StepGeom
+CompositeCurveSegment StepGeom
+Conic StepGeom
+ConicalSurface StepGeom
+Curve StepGeom
+CurveBoundedSurface StepGeom
+CurveOnSurface StepGeom
+CurveReplica StepGeom
+CylindricalSurface StepGeom
+DegeneratePcurve StepGeom
+DegenerateToroidalSurface StepGeom
+Direction StepGeom
+ElementarySurface StepGeom
+Ellipse StepGeom
+EvaluatedDegeneratePcurve StepGeom
+GeometricRepresentationContext StepGeom
+GeometricRepresentationContextAndGlobalUnitAssignedContext StepGeom
+GeometricRepresentationContextAndParametricRepresentationContext StepGeom
+GeometricRepresentationItem StepGeom
+GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx StepGeom
+Hyperbola StepGeom
+IntersectionCurve StepGeom
+Line StepGeom
+OffsetCurve3d StepGeom
+OffsetSurface StepGeom
+OrientedSurface StepGeom
+OuterBoundaryCurve StepGeom
+Parabola StepGeom
+Pcurve StepGeom
+PcurveOrSurface StepGeom
+Placement StepGeom
+Plane StepGeom
+Point StepGeom
+PointOnCurve StepGeom
+PointOnSurface StepGeom
+PointReplica StepGeom
+Polyline StepGeom
+QuasiUniformCurve StepGeom
+QuasiUniformCurveAndRationalBSplineCurve StepGeom
+QuasiUniformSurface StepGeom
+QuasiUniformSurfaceAndRationalBSplineSurface StepGeom
+RationalBSplineCurve StepGeom
+RationalBSplineSurface StepGeom
+RectangularCompositeSurface StepGeom
+RectangularTrimmedSurface StepGeom
+ReparametrisedCompositeCurveSegment StepGeom
+SeamCurve StepGeom
+SphericalSurface StepGeom
+Surface StepGeom
+SurfaceBoundary StepGeom
+SurfaceCurveAndBoundedCurve StepGeom
+SurfaceOfLinearExtrusion StepGeom
+SurfaceOfRevolution StepGeom
+SurfacePatch StepGeom
+SurfaceReplica StepGeom
+SweptSurface StepGeom
+ToroidalSurface StepGeom
+TrimmedCurve StepGeom
+TrimmingMember StepGeom
+TrimmingSelect StepGeom
+UniformCurve StepGeom
+UniformCurveAndRationalBSplineCurve StepGeom
+UniformSurface StepGeom
+UniformSurfaceAndRationalBSplineSurface StepGeom
+Vector StepGeom
+VectorOrDirection StepGeom
+
+#===============================================
+#             package StepRepr
+#===============================================
+AllAroundShapeAspect StepRepr
+Apex StepRepr
+AssemblyComponentUsage StepRepr
+AssemblyComponentUsageSubstitute StepRepr
+BetweenShapeAspect StepRepr
+CentreOfSymmetry StepRepr
+CharacterizedDefinition StepRepr
+CharacterizedRepresentation StepRepr
+CompGroupShAspAndCompShAspAndDatumFeatAndShAsp StepRepr
+CompositeGroupShapeAspect StepRepr
+CompositeShapeAspect StepRepr
+CompoundRepresentationItem StepRepr
+CompShAspAndDatumFeatAndShAsp StepRepr
+ConfigurationDesign StepRepr
+ConfigurationDesignItem StepRepr
+ConfigurationEffectivity StepRepr
+ConfigurationItem StepRepr
+ConstructiveGeometryRepresentation StepRepr
+ConstructiveGeometryRepresentationRelationship StepRepr
+ContinuosShapeAspect StepRepr
+DataEnvironment StepRepr
+DefinitionalRepresentation StepRepr
+DerivedShapeAspect StepRepr
+DescriptiveRepresentationItem StepRepr
+Extension StepRepr
+ExternallyDefinedRepresentation StepRepr
+FeatureForDatumTargetRelationship StepRepr
+FunctionallyDefinedTransformation StepRepr
+GeometricAlignment StepRepr
+GlobalUncertaintyAssignedContext StepRepr
+GlobalUnitAssignedContext StepRepr
+IntegerRepresentationItem StepRepr
+ItemDefinedTransformation StepRepr
+MakeFromUsageOption StepRepr
+MappedItem StepRepr
+MaterialDesignation StepRepr
+MaterialProperty StepRepr
+MaterialPropertyRepresentation StepRepr
+MeasureRepresentationItem StepRepr
+NextAssemblyUsageOccurrence StepRepr
+ParallelOffset StepRepr
+ParametricRepresentationContext StepRepr
+PerpendicularTo StepRepr
+ProductConcept StepRepr
+ProductDefinitionShape StepRepr
+ProductDefinitionUsage StepRepr
+PromissoryUsageOccurrence StepRepr
+PropertyDefinition StepRepr
+PropertyDefinitionRelationship StepRepr
+PropertyDefinitionRepresentation StepRepr
+QuantifiedAssemblyComponentUsage StepRepr
+Representation StepRepr
+RepresentationContext StepRepr
+RepresentationItem StepRepr
+RepresentationMap StepRepr
+RepresentationRelationship StepRepr
+RepresentationRelationshipWithTransformation StepRepr
+RepresentedDefinition StepRepr
+ReprItemAndLengthMeasureWithUnit StepRepr
+ReprItemAndLengthMeasureWithUnitAndQRI StepRepr
+ReprItemAndMeasureWithUnit StepRepr
+ReprItemAndMeasureWithUnitAndQRI StepRepr
+ReprItemAndPlaneAngleMeasureWithUnit StepRepr
+ReprItemAndPlaneAngleMeasureWithUnitAndQRI StepRepr
+ShapeAspect StepRepr
+ShapeAspectDerivingRelationship StepRepr
+ShapeAspectRelationship StepRepr
+ShapeAspectTransition StepRepr
+ShapeDefinition StepRepr
+ShapeRepresentationRelationship StepRepr
+ShapeRepresentationRelationshipWithTransformation StepRepr
+SpecifiedHigherUsageOccurrence StepRepr
+StructuralResponseProperty StepRepr
+StructuralResponsePropertyDefinitionRepresentation StepRepr
+SuppliedPartRelationship StepRepr
+Tangent StepRepr
+Transformation StepRepr
+ValueRange StepRepr
+ValueRepresentationItem StepRepr
+
+#===============================================
+#             package StepShape
+#===============================================
+AdvancedBrepShapeRepresentation StepShape
+AdvancedFace StepShape
+AngularLocation StepShape
+AngularSize StepShape
+Block StepShape
+BooleanOperand StepShape
+BooleanResult StepShape
+BoxDomain StepShape
+BoxedHalfSpace StepShape
+BrepWithVoids StepShape
+ClosedShell StepShape
+CompoundShapeRepresentation StepShape
+ConnectedEdgeSet StepShape
+ConnectedFaceSet StepShape
+ConnectedFaceShapeRepresentation StepShape
+ConnectedFaceSubSet StepShape
+ContextDependentShapeRepresentation StepShape
+CsgPrimitive StepShape
+CsgSelect StepShape
+CsgShapeRepresentation StepShape
+CsgSolid StepShape
+DefinitionalRepresentationAndShapeRepresentation StepShape
+DimensionalCharacteristic StepShape
+DimensionalCharacteristicRepresentation StepShape
+DimensionalLocation StepShape
+DimensionalLocationWithPath StepShape
+DimensionalSize StepShape
+DimensionalSizeWithPath StepShape
+DirectedDimensionalLocation StepShape
+Edge StepShape
+EdgeBasedWireframeModel StepShape
+EdgeBasedWireframeShapeRepresentation StepShape
+EdgeCurve StepShape
+EdgeLoop StepShape
+ExtrudedAreaSolid StepShape
+ExtrudedFaceSolid StepShape
+Face StepShape
+FaceBasedSurfaceModel StepShape
+FaceBound StepShape
+FaceOuterBound StepShape
+FaceSurface StepShape
+FacetedBrep StepShape
+FacetedBrepAndBrepWithVoids StepShape
+FacetedBrepShapeRepresentation StepShape
+GeometricallyBoundedSurfaceShapeRepresentation StepShape
+GeometricallyBoundedWireframeShapeRepresentation StepShape
+GeometricCurveSet StepShape
+GeometricSet StepShape
+GeometricSetSelect StepShape
+HalfSpaceSolid StepShape
+LimitsAndFits StepShape
+Loop StepShape
+LoopAndPath StepShape
+ManifoldSolidBrep StepShape
+ManifoldSurfaceShapeRepresentation StepShape
+MeasureQualification StepShape
+MeasureRepresentationItemAndQualifiedRepresentationItem StepShape
+NonManifoldSurfaceShapeRepresentation StepShape
+OpenShell StepShape
+OrientedClosedShell StepShape
+OrientedEdge StepShape
+OrientedFace StepShape
+OrientedOpenShell StepShape
+OrientedPath StepShape
+Path StepShape
+PlusMinusTolerance StepShape
+PointRepresentation StepShape
+PolyLoop StepShape
+PrecisionQualifier StepShape
+QualifiedRepresentationItem StepShape
+ReversibleTopologyItem StepShape
+RevolvedAreaSolid StepShape
+RevolvedFaceSolid StepShape
+RightAngularWedge StepShape
+RightCircularCone StepShape
+RightCircularCylinder StepShape
+SeamEdge StepShape
+ShapeDefinitionRepresentation StepShape
+ShapeDimensionRepresentation StepShape
+ShapeDimensionRepresentationItem StepShape
+ShapeRepresentation StepShape
+ShapeRepresentationWithParameters StepShape
+Shell StepShape
+ShellBasedSurfaceModel StepShape
+SolidModel StepShape
+SolidReplica StepShape
+Sphere StepShape
+Subedge StepShape
+Subface StepShape
+SurfaceModel StepShape
+SweptAreaSolid StepShape
+SweptFaceSolid StepShape
+ToleranceMethodDefinition StepShape
+ToleranceValue StepShape
+TopologicalRepresentationItem StepShape
+Torus StepShape
+TransitionalShapeRepresentation StepShape
+TypeQualifier StepShape
+ValueFormatTypeQualifier StepShape
+ValueQualifier StepShape
+Vertex StepShape
+VertexLoop StepShape
+VertexPoint StepShape
+
+#===============================================
+#             package StepVisual
+#===============================================
+AnnotationCurveOccurrence StepVisual
+AnnotationCurveOccurrenceAndAnnotationOccurrenceAndGeomReprItemAndReprItemAndStyledItem StepVisual
+AnnotationFillArea StepVisual
+AnnotationFillAreaOccurrence StepVisual
+AnnotationOccurrence StepVisual
+AnnotationPlane StepVisual
+AnnotationPlaneElement StepVisual
+AnnotationText StepVisual
+AnnotationTextOccurrence StepVisual
+AreaInSet StepVisual
+AreaOrView StepVisual
+BackgroundColour StepVisual
+BoxCharacteristicSelect StepVisual
+CameraImage StepVisual
+CameraImage2dWithScale StepVisual
+CameraImage3dWithScale StepVisual
+CameraModel StepVisual
+CameraModelD2 StepVisual
+CameraModelD3 StepVisual
+CameraModelD3MultiClipping StepVisual
+CameraModelD3MultiClippingInterectionSelect StepVisual
+CameraModelD3MultiClippingIntersection StepVisual
+CameraModelD3MultiClippingUnion StepVisual
+CameraModelD3MultiClippingUnionSelect StepVisual
+CameraUsage StepVisual
+CharacterizedObjectAndCharacterizedRepresentationAndDraughtingModelAndRepresentation StepVisual
+Colour StepVisual
+ColourRgb StepVisual
+ColourSpecification StepVisual
+CompositeText StepVisual
+CompositeTextWithExtent StepVisual
+ContextDependentInvisibility StepVisual
+ContextDependentOverRidingStyledItem StepVisual
+CurveStyle StepVisual
+CurveStyleFont StepVisual
+CurveStyleFontPattern StepVisual
+CurveStyleFontSelect StepVisual
+DirectionCountSelect StepVisual
+DraughtingAnnotationOccurrence StepVisual
+DraughtingCallout StepVisual
+DraughtingCalloutElement StepVisual
+DraughtingModel StepVisual
+DraughtingPreDefinedColour StepVisual
+DraughtingPreDefinedCurveFont StepVisual
+ExternallyDefinedCurveFont StepVisual
+ExternallyDefinedTextFont StepVisual
+FillAreaStyle StepVisual
+FillAreaStyleColour StepVisual
+FillStyleSelect StepVisual
+FontSelect StepVisual
+Invisibility StepVisual
+InvisibilityContext StepVisual
+InvisibleItem StepVisual
+LayeredItem StepVisual
+MarkerMember StepVisual
+MarkerSelect StepVisual
+MechanicalDesignGeometricPresentationArea StepVisual
+MechanicalDesignGeometricPresentationRepresentation StepVisual
+NullStyleMember StepVisual
+OverRidingStyledItem StepVisual
+PlanarBox StepVisual
+PlanarExtent StepVisual
+PointStyle StepVisual
+PreDefinedColour StepVisual
+PreDefinedCurveFont StepVisual
+PreDefinedItem StepVisual
+PreDefinedTextFont StepVisual
+PresentationArea StepVisual
+PresentationLayerAssignment StepVisual
+PresentationLayerUsage StepVisual
+PresentationRepresentation StepVisual
+PresentationRepresentationSelect StepVisual
+PresentationSet StepVisual
+PresentationSize StepVisual
+PresentationSizeAssignmentSelect StepVisual
+PresentationStyleAssignment StepVisual
+PresentationStyleByContext StepVisual
+PresentationStyleSelect StepVisual
+PresentationView StepVisual
+PresentedItem StepVisual
+PresentedItemRepresentation StepVisual
+StyleContextSelect StepVisual
+StyledItem StepVisual
+StyledItemTarget StepVisual
+SurfaceSideStyle StepVisual
+SurfaceStyleBoundary StepVisual
+SurfaceStyleControlGrid StepVisual
+SurfaceStyleElementSelect StepVisual
+SurfaceStyleFillArea StepVisual
+SurfaceStyleParameterLine StepVisual
+SurfaceStyleSegmentationCurve StepVisual
+SurfaceStyleSilhouette StepVisual
+SurfaceStyleUsage StepVisual
+Template StepVisual
+TemplateInstance StepVisual
+TextLiteral StepVisual
+TextOrCharacter StepVisual
+TextStyle StepVisual
+TextStyleForDefinedFont StepVisual
+TextStyleWithBoxCharacteristics StepVisual
+ViewVolume StepVisual
+TessellatedAnnotationOccurrence StepVisual
+TessellatedItem StepVisual
+TessellatedGeometricSet StepVisual
+TessellatedCurveSet StepVisual
+CoordinatesList StepVisual
+SurfaceStyleTransparent StepVisual
+SurfaceStyleReflectanceAmbient StepVisual
+SurfaceStyleRendering StepVisual
+SurfaceStyleRenderingWithProperties StepVisual
diff --git a/src/ExpToCasExe/readme.txt b/src/ExpToCasExe/readme.txt
new file mode 100644 (file)
index 0000000..10ed624
--- /dev/null
@@ -0,0 +1,15 @@
+This is an auxiliary tool to generate code for implementation of new STEP entities into OCCT.
+
+Example how to run ExpToCas tool:
+ExpToCasExe.exe schemaAP000.exp to_add.lst occt_step_entities.lst N
+
+where
+* schemaAP000.exp - STEP schema, some lines in can be not parsed, just delete them.
+ap242.exp - cleaned schema for AP242 edition 2.
+* to_add.lst  - list of necessary entities, each line should be like this "ShapeAspect StepRepr".
+* occt_step_entities.lst - list of already implemented entities, please update the file after each generation.
+* N - a first index for entity registration (files StepAP214_Protocol.cxx, RWStepAP214_GeneralModule.cxx,RWStepAP214_ReadWriteModule.cxx)
+
+The result of generation consists of several folders:
+* two folders for each package for which new entities was generated.
+* a folder Registration with *.txt files with code to copy into common files (see description of last parameter).
\ No newline at end of file
diff --git a/src/Express/Express.cxx b/src/Express/Express.cxx
new file mode 100644 (file)
index 0000000..6ac1793
--- /dev/null
@@ -0,0 +1,118 @@
+// Created:    Wed Nov  3 14:39:28 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express.hxx>
+#include <Express_Schema.hxx>
+#include <TCollection_HAsciiString.hxx>
+#include <OSD_Process.hxx>
+
+#include <time.h>
+//#include <pwd.h>
+
+//=======================================================================
+//function : Schema
+//purpose  : 
+//=======================================================================
+
+Handle(Express_Schema) &Express::Schema () 
+{
+  static Handle(Express_Schema) schema;
+  return schema;
+}
+                              
+//=======================================================================
+//function : WriteFileStamp
+//purpose  : 
+//=======================================================================
+
+// Write header of HXX or CXX file
+void Express::WriteFileStamp (Standard_OStream &os)
+{
+  static const char *EC_VERSION = "2.0";
+
+  Standard_CString comm = "//";
+  TCollection_AsciiString timestring;
+  if ( getenv ( "EXPTOCAS_TIME" ) ) timestring = getenv ( "EXPTOCAS_TIME" );
+  else {
+    time_t curtime;
+    time ( &curtime );
+    timestring = ctime ( &curtime );
+    timestring.ChangeAll ( '\n', ' ' );
+  }
+  os << comm << " Created on : " << timestring << std::endl;
+
+  OSD_Process aProcess;
+  os << comm << " Created by: " << aProcess.UserName().ToCString() << std::endl;
+  os << comm << " Generator:   Express (EXPRESS -> CASCADE/XSTEP Translator) V" << EC_VERSION << std::endl;
+  os << comm << " Copyright (c) Open CASCADE 2020" << std::endl;
+  os << comm << std::endl;
+  os << comm << " This file is part of Open CASCADE Technology software library." << std::endl;
+  os << comm << std::endl;
+  os << comm << " This library is free software; you can redistribute it and/or modify it under" << std::endl;
+  os << comm << " the terms of the GNU Lesser General Public License version 2.1 as published" << std::endl;
+  os << comm << " by the Free Software Foundation, with special exception defined in the file" << std::endl;
+  os << comm << " OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT" << std::endl;
+  os << comm << " distribution for complete text of the license and disclaimer of any warranty." << std::endl;
+  os << comm << std::endl;
+  os << comm << " Alternatively, this file may be used under the terms of Open CASCADE" << std::endl;
+  os << comm << " commercial license or contractual agreement." << std::endl;
+  os << std::endl;
+}
+
+//=======================================================================
+//function : WriteMethodStamp
+//purpose  : 
+//=======================================================================
+
+void Express::WriteMethodStamp (Standard_OStream &os, const Handle(TCollection_HAsciiString) &name)
+{
+  os << std::endl;
+  os << "//=======================================================================" << std::endl;
+  os << "//function : " << name->ToCString() << std::endl;
+  os << "//purpose  : " << std::endl;
+  os << "//=======================================================================" << std::endl;
+  os << std::endl;
+}
+
+//=======================================================================
+//function : ToStepName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express::ToStepName (const Handle(TCollection_HAsciiString) &name)
+{
+  Handle(TCollection_HAsciiString) stepname = new TCollection_HAsciiString ( name );
+  for ( Standard_Integer i=2; i <= stepname->Length(); i++ )
+    if ( isupper ( stepname->Value(i) ) ) stepname->Insert ( i++, '_' );
+  stepname->LowerCase();
+  return stepname;
+}
+//=======================================================================
+//function : GetPrefixEnum
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express::EnumPrefix (const Handle(TCollection_HAsciiString) &name)
+{
+  Handle(TCollection_HAsciiString) stepname = new TCollection_HAsciiString; 
+  for ( Standard_Integer i=1; i <= name->Length(); i++ )
+    if ( isupper ( name->Value(i) ) ) {
+      
+      stepname->AssignCat (new TCollection_HAsciiString(name->Value(i)) );
+    }
+  stepname->LowerCase();
+  return stepname;
+}
+
diff --git a/src/Express/Express.hxx b/src/Express/Express.hxx
new file mode 100644 (file)
index 0000000..544b01d
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_HeaderFile
+#define _Express_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Standard_OStream.hxx>
+#include <Standard_Boolean.hxx>
+
+class Express_Schema;
+class TCollection_HAsciiString;
+
+//! Provides data structures for representation of EXPRESS schema
+//! (items, types, entities etc.)
+//! and tools for generating XSTEP classes (HXX and CXX) from
+//! items of the schema
+class Express 
+{
+public:
+
+  DEFINE_STANDARD_ALLOC
+
+  
+  //! Returns (modifiable) handle to static schema object
+  Standard_EXPORT static   Handle(Express_Schema)& Schema() ;
+  
+  //! Writes standard copyright stamp (creation date/time, user, etc.)
+  Standard_EXPORT static   void WriteFileStamp (Standard_OStream& os) ;
+  
+  //! Writes standard comment for method in CXX file
+  Standard_EXPORT static   void WriteMethodStamp (Standard_OStream& os, const Handle(TCollection_HAsciiString)& name) ;
+  
+  //! Converts item name from CASCADE to STEP style
+  //! e.g. BoundedCurve -> bounded_curve
+  Standard_EXPORT static   Handle(TCollection_HAsciiString) ToStepName (const Handle(TCollection_HAsciiString)& name) ;
+  
+  //! Converts item name from CASCADE to STEP style
+  //! e.g. BoundedCurve -> bounded_curve
+  Standard_EXPORT static   Handle(TCollection_HAsciiString) EnumPrefix (const Handle(TCollection_HAsciiString)& name) ;
+};
+
+#endif // _Express_HeaderFile
diff --git a/src/Express/Express_Alias.cxx b/src/Express/Express_Alias.cxx
new file mode 100644 (file)
index 0000000..b270fe4
--- /dev/null
@@ -0,0 +1,62 @@
+// Created:    Tue Nov  2 14:40:06 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Alias.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Alias,Express_Item)
+
+//=======================================================================
+//function : Express_Alias
+//purpose  : 
+//=======================================================================
+
+Express_Alias::Express_Alias (const Standard_CString name, 
+                               const Handle(Express_Type) &type)
+     : Express_Item(name), myType(type)
+{
+}
+
+//=======================================================================
+//function : Type
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_Type) &Express_Alias::Type () const
+{
+  return myType;
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Alias::CPPName () const
+{
+  return myType->CPPName();
+}
+
+//=======================================================================
+//function : GenerateClass
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Alias::GenerateClass () const
+{
+//  std::cout << "Warning: writing ALIAS is not yet implemented, cannot generate " << Name()->ToCString() << std::endl;
+  std::cout << "ALIAS " << Name()->ToCString() << " = " << Type()->CPPName()->ToCString() << " used; no generation is needed" << std::endl;
+  return Standard_False;
+}
diff --git a/src/Express/Express_Alias.hxx b/src/Express/Express_Alias.hxx
new file mode 100644 (file)
index 0000000..3498604
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Alias_HeaderFile
+#define _Express_Alias_HeaderFile
+
+#include <Standard_Type.hxx>
+#include <Express_Item.hxx>
+#include <Express_Type.hxx>
+
+class TCollection_HAsciiString;
+
+
+//! Implements TYPE = type (alias) item of the EXPRESS
+//! schema, with interface for deferred Item class.
+class Express_Alias : public Express_Item
+{
+
+public:
+
+  
+  //! Create ALIAS item and initialize it
+  Standard_EXPORT Express_Alias(const Standard_CString name, const Handle(Express_Type)& type);
+  
+  //! Returns aliased type
+  Standard_EXPORT  const  Handle(Express_Type)& Type()  const;
+  
+  //! Returns name of aliased type
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+  //! Create HXX/CXX files from item
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Alias,Express_Item)
+
+protected:
+
+
+
+
+private: 
+
+
+  Handle(Express_Type) myType;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Alias_HeaderFile
diff --git a/src/Express/Express_Array.hxx b/src/Express/Express_Array.hxx
new file mode 100644 (file)
index 0000000..8757064
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Array_HeaderFile
+#define _Express_Array_HeaderFile
+
+#include <Express_ComplexType.hxx>
+
+typedef Express_ComplexType Express_Array;
+
+#endif // _Express_Array_HeaderFile
diff --git a/src/Express/Express_Bag.hxx b/src/Express/Express_Bag.hxx
new file mode 100644 (file)
index 0000000..e55a2b6
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Bag_HeaderFile
+#define _Express_Bag_HeaderFile
+
+#include <Express_ComplexType.hxx>
+
+typedef Express_ComplexType Express_Bag;
+
+#endif // _Express_Bag_HeaderFile
diff --git a/src/Express/Express_Boolean.cxx b/src/Express/Express_Boolean.cxx
new file mode 100644 (file)
index 0000000..efa8f90
--- /dev/null
@@ -0,0 +1,38 @@
+// Created:    Tue Nov  2 15:27:26 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Boolean.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Boolean,Express_PredefinedType)
+
+//=======================================================================
+//function : Express_Boolean
+//purpose  : 
+//=======================================================================
+
+Express_Boolean::Express_Boolean () 
+{
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Boolean::CPPName () const
+{
+  return new TCollection_HAsciiString ( "Standard_Boolean" );
+}
diff --git a/src/Express/Express_Boolean.hxx b/src/Express/Express_Boolean.hxx
new file mode 100644 (file)
index 0000000..f97d846
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Boolean_HeaderFile
+#define _Express_Boolean_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_PredefinedType.hxx>
+class TCollection_HAsciiString;
+
+
+//! Implements EXPRESS type 'BOOLEAN'
+class Express_Boolean : public Express_PredefinedType
+{
+
+public:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_Boolean();
+  
+  //! Returns "Standard_Boolean"
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Boolean,Express_PredefinedType)
+
+protected:
+
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Boolean_HeaderFile
diff --git a/src/Express/Express_ComplexType.cxx b/src/Express/Express_ComplexType.cxx
new file mode 100644 (file)
index 0000000..b5fc6b0
--- /dev/null
@@ -0,0 +1,90 @@
+// Created:    Tue Nov  2 15:13:31 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_ComplexType.hxx>
+#include <Express_String.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_ComplexType,Express_Type)
+
+//=======================================================================
+//function : Express_ComplexType
+//purpose  : 
+//=======================================================================
+
+Express_ComplexType::Express_ComplexType (const Standard_Integer imin,
+                                           const Standard_Integer imax,
+                                           const Handle(Express_Type) &type) 
+{
+  myMin = imin;
+  myMax = imax;
+  myType = type;
+}
+
+//=======================================================================
+//function : Type
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_Type) &Express_ComplexType::Type () const
+{
+  return myType;
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_ComplexType::CPPName () const
+{
+   // check if array 2
+  Handle(Express_Type) type = myType;
+  if ( type->IsKind ( STANDARD_TYPE(Express_ComplexType) ) ) {
+    Handle(Express_ComplexType) c2 = Handle(Express_ComplexType)::DownCast ( type );
+    type = c2->Type();
+  }
+
+  // parse name of array argument
+  Handle(TCollection_HAsciiString) name = type->CPPName();
+  Standard_Integer split = name->Location ( 1, '_', 1, name->Length() );
+  Handle(TCollection_HAsciiString) cls;
+  if ( split ) cls = name->Split ( split );
+  else cls = name;
+  Handle(TCollection_HAsciiString) str = new TCollection_HAsciiString("TCollection");
+  Standard_Integer ind =name->Location(str,1,name->Length());
+  if(ind) 
+    name = new TCollection_HAsciiString ( "Interface_" );
+  // generate name
+  if ( type->IsStandard() || ! split ) {
+      name = new TCollection_HAsciiString ( "TColStd_" );
+  }
+  if ( type == myType ) name->AssignCat ( "HArray1Of" );
+  else                  name->AssignCat ( "HArray2Of" );
+  name->AssignCat ( cls );
+  return name;
+}
+
+//=======================================================================
+//function : Use
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_ComplexType::Use (const Handle(TCollection_HAsciiString) &pack,
+                                           const Standard_Boolean defer) const
+{
+  
+  return myType->Use ( pack, defer );
+}
diff --git a/src/Express/Express_ComplexType.hxx b/src/Express/Express_ComplexType.hxx
new file mode 100644 (file)
index 0000000..e002575
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_ComplexType_HeaderFile
+#define _Express_ComplexType_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Type.hxx>
+
+class TCollection_HAsciiString;
+
+
+//! Base class for complex types (ARRAY, LIST, BAG, SET)
+//! in EXPRESS schema
+//! Stores type of elements and
+class Express_ComplexType : public Express_Type
+{
+
+public:
+
+  
+  //! Creates an object and initializes fields
+  Standard_EXPORT Express_ComplexType(const Standard_Integer imin, const Standard_Integer imax, const Handle(Express_Type)& type);
+  
+  //! Returns type of complex type items
+  Standard_EXPORT  const  Handle(Express_Type)& Type()  const;
+  
+  //! Returns CPP-style name of the type
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+  //! Declares type as used by some item being generated.
+  //! Calls Use() for type of elements
+  Standard_EXPORT virtual   Standard_Boolean Use (const Handle(TCollection_HAsciiString)& pack, const Standard_Boolean defer = Standard_False)  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_ComplexType,Express_Type)
+
+protected:
+
+
+
+
+private: 
+
+
+  Standard_Integer myMin;
+  Standard_Integer myMax;
+  Handle(Express_Type) myType;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_ComplexType_HeaderFile
diff --git a/src/Express/Express_DataMapOfAsciiStringItem.hxx b/src/Express/Express_DataMapOfAsciiStringItem.hxx
new file mode 100644 (file)
index 0000000..6098317
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_DataMapOfAsciiStringItem_HeaderFile
+#define Express_DataMapOfAsciiStringItem_HeaderFile
+
+#include <TCollection_AsciiString.hxx>
+#include <Express_Item.hxx>
+#include <NCollection_DataMap.hxx>
+
+typedef NCollection_DataMap<TCollection_AsciiString,Handle(Express_Item),TCollection_AsciiString> Express_DataMapOfAsciiStringItem;
+typedef NCollection_DataMap<TCollection_AsciiString,Handle(Express_Item),TCollection_AsciiString>::Iterator Express_DataMapIteratorOfDataMapOfAsciiStringItem;
+
+#endif
diff --git a/src/Express/Express_Entity.cxx b/src/Express/Express_Entity.cxx
new file mode 100644 (file)
index 0000000..f507f4b
--- /dev/null
@@ -0,0 +1,1228 @@
+// Created:    Tue Nov  2 14:40:06 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Entity.hxx>
+#include <Express_Type.hxx>
+#include <Express_NamedType.hxx>
+#include <Express_Alias.hxx>
+#include <Express_ComplexType.hxx>
+#include <Express_String.hxx>
+#include <Express_Boolean.hxx>
+#include <Express_Logical.hxx>
+#include <Express_Number.hxx>
+#include <Express_Integer.hxx>
+#include <Express_Real.hxx>
+#include <Express_Select.hxx>
+#include <Express_Field.hxx>
+#include <Express.hxx>
+
+#include <TCollection_HAsciiString.hxx>
+#include <OSD_Directory.hxx>
+#include <OSD_Path.hxx>
+#include <OSD_Protection.hxx>
+#include <Express_Enum.hxx>
+#include <Express_HSequenceOfEntity.hxx>
+#include <Express_HSequenceOfField.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Entity,Express_Item)
+
+//=======================================================================
+//function : Express_Entity
+//purpose  : 
+//=======================================================================
+
+Express_Entity::Express_Entity (const Standard_CString name, 
+                                 const Handle(TColStd_HSequenceOfHAsciiString) &inherit,
+                                 const Handle(Express_HSequenceOfField) &flds)
+     : Express_Item(name), mySupers(inherit), myFields(flds)
+       
+{
+  // make empty lists to avoid checking every time
+  myInherit = new Express_HSequenceOfEntity;
+  if ( mySupers.IsNull() ) mySupers = new TColStd_HSequenceOfHAsciiString;
+  if ( myFields.IsNull() ) myFields = new Express_HSequenceOfField;
+  myisAbstract = Standard_False;
+}
+
+//=======================================================================
+//function : SuperTypes
+//purpose  : 
+//=======================================================================
+
+const Handle(TColStd_HSequenceOfHAsciiString) &Express_Entity::SuperTypes () const
+{
+  return mySupers;
+}
+
+//=======================================================================
+//function : Inherit
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_HSequenceOfEntity) &Express_Entity::Inherit () const
+{
+  return myInherit;
+}
+
+//=======================================================================
+//function : Fields
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_HSequenceOfField) &Express_Entity::Fields () const
+{
+  return myFields;
+}
+//=======================================================================
+//function : NbFields
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Entity::NbFields (const Standard_Boolean inherited) const
+{
+  Standard_Integer num = myFields->Length();
+  if ( inherited ) {
+    for ( Standard_Integer i=1; i <= myInherit->Length(); i++ )
+      num += myInherit->Value(i)->NbFields ( inherited );
+  }
+  return num;
+}
+
+//=======================================================================
+//function : WriteGetMethod
+//purpose  : 
+//=======================================================================
+
+static void WriteGetMethod (Standard_OStream &os, 
+                           const Handle(TCollection_HAsciiString) name,
+                           const Handle(TCollection_HAsciiString) field,
+                           const Handle(TCollection_HAsciiString) type,
+                           const Standard_Boolean isHandle,
+                           const Standard_Boolean /*isSimple*/)
+{
+  Handle(TCollection_HAsciiString) method = field;//new TCollection_HAsciiString ( "Get" );
+//  method->AssignCat ( field );
+  Express::WriteMethodStamp ( os, method );
+  os << ( isHandle ? "Handle(" : "" ) << type->ToCString() << ( isHandle ? ") " : " " ) <<
+       name->ToCString() << "::" << method->ToCString() << " () const" << std::endl;
+  os << "{" << std::endl << "  return my" << field->ToCString() << ";\n}" << std::endl;
+}
+
+//=======================================================================
+//function : WriteSetMethod
+//purpose  : 
+//=======================================================================
+
+static void WriteSetMethod (Standard_OStream &os, 
+                           const Handle(TCollection_HAsciiString) name,
+                           const Handle(TCollection_HAsciiString) field,
+                           const Handle(TCollection_HAsciiString) type,
+                           const Standard_Boolean isHandle,
+                           const Standard_Boolean isSimple)
+{
+  Handle(TCollection_HAsciiString) method = new TCollection_HAsciiString ( "Set" );
+  method->AssignCat ( field );
+  Express::WriteMethodStamp ( os, method );
+  os << "void " << name->ToCString() << "::" << method->ToCString() << " (const " <<
+        ( isHandle ? "Handle(" : "" ) << type->ToCString() << ( isHandle ? ")" : "" ) <<
+    ( isSimple ? "" : "&" ) << " the" << field->ToCString() << ")" << std::endl;
+  os << "{" << std::endl << "  my" << field->ToCString() << " = the" << field->ToCString() << ";\n}" << std::endl;
+}
+
+//=======================================================================
+//function : WriteSpaces
+//purpose  : 
+//=======================================================================
+
+static inline void WriteSpaces (Standard_OStream &os, Standard_Integer num)
+{
+  for ( Standard_Integer i=0; i < num; i++ ) os << " ";
+}
+
+//=======================================================================
+//function : GenerateClass
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Entity::GenerateClass () const
+{
+  Handle(TCollection_HAsciiString) CPPname = CPPName();
+  std::cout << "Generating ENTITY " << CPPname->ToCString() << std::endl;
+  
+  // create a package directory (if not yet exist)
+  OSD_Protection prot(OSD_RWXD, OSD_RWXD, OSD_RWXD, OSD_RWXD);
+  TCollection_AsciiString pack = GetPackageName()->String();
+  OSD_Path path ( pack );
+  OSD_Directory dir ( path );
+  dir.Build ( prot );
+  pack += "/";
+  pack += CPPname->String();
+  
+  //===============================
+  // Step 1: generating HXX
+  
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  Handle(TCollection_HAsciiString) InheritName = new TCollection_HAsciiString("Standard_Transient");
+  if (myInherit->Length() > 0) { // first inherited class will be actually inherited
+    Handle(Express_Entity) it = myInherit->Value(1);
+    it->Use(GetPackageName());
+    InheritName = it->CPPName();
+    if (myInherit->Length() > 1) {
+      std::cout << "Warning: ENTITY " << Name()->ToCString() << " defined with multiple inheritance;" << std::endl;
+      std::cout << "Warning: only first base class is actually inherited, others are made fields" << std::endl;
+    }
+  }
+
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
+  os << std::endl;
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_Type.hxx>" << std::endl;
+  os << "#include <" << InheritName->ToCString() << ".hxx>" << std::endl;
+  os << std::endl;
+  
+  // write includes section (also creates all used types)
+  DataMapOfStringInteger dict;
+  WriteIncludes(os, dict);
+  os << std::endl;
+
+  os << "DEFINE_STANDARD_HANDLE(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
+  os << std::endl;
+
+  // write start of declaration (inheritance)
+  os << "//! Representation of STEP entity " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public " << InheritName->ToCString();
+  os << std::endl << "{" << std::endl;
+  os << "public :" << std::endl << std::endl;
+  
+  // write constructor
+  os << "  //! default constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
+  os << std::endl;
+  
+  // write Init methods
+  if ( myInherit->Length() > 1 || myFields->Length() > 0 ) {
+    os << "  //! Initialize all fields (own and inherited)" << std::endl;
+    os << " Standard_EXPORT void Init(";
+    MakeInit ( os, 27, Standard_True, 0 );
+    os << ");" << std::endl;
+    os << std::endl;
+  }
+  
+  // write methods Get/Set
+  for ( Standard_Integer i=2; i <= myInherit->Length(); i++ ) {
+    Handle(Express_Entity) it = myInherit->Value(i);
+    Handle(TCollection_HAsciiString) name = it->Name();
+    os << "  //! Returns data for supertype " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT Handle(" << it->CPPName()->ToCString()
+       << ") " << name->ToCString() << "() const;" << std::endl;
+    os << "  //! Sets data for supertype " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT void Set" << name->ToCString() 
+       << " (const Handle(" << it->CPPName()->ToCString() << ")& the"<< name->ToCString() << ");" << std::endl;
+    os << std::endl;
+  }
+  for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+    Handle(Express_Field) field = myFields->Value(i);
+    os << "  //! Returns field " << field->Name()->ToCString() << std::endl;
+    if (field->Type()->IsHandle())
+      os << "  Standard_EXPORT Handle(" << field->Type()->CPPName()->ToCString() << ") "
+         << field->Name()->ToCString() << "() const;" << std::endl;
+    else
+      os << "  Standard_EXPORT " << field->Type()->CPPName()->ToCString() << " "
+         << field->Name()->ToCString() << "() const;" << std::endl;
+    os << "  //! Sets field " << field->Name()->ToCString() << std::endl;
+    if (field->Type()->IsHandle())
+      os << "  Standard_EXPORT void Set" << field->Name()->ToCString() << " (const Handle("
+        << field->Type()->CPPName()->ToCString() << ")& the" << field->Name()->ToCString() << ");" << std::endl;
+    else
+      os << "  Standard_EXPORT void Set" << field->Name()->ToCString() << " (const "
+         << field->Type()->CPPName()->ToCString() << " the" << field->Name()->ToCString() << ");" << std::endl;
+    if (field->IsOptional()) {
+      os << "  //! Returns True if optional field " << field->Name()->ToCString() << " is defined" << std::endl;
+      os << "  Standard_EXPORT Standard_Boolean Has" << field->Name()->ToCString() << "() const;" << std::endl;
+    }
+    os << std::endl;
+  }
+
+  os << "DEFINE_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
+  os << std::endl;
+
+  // write fields section
+  if ( myInherit->Length() >1 || myFields->Length() >0 ) {
+    os << "private:" << std::endl;
+    for (Standard_Integer i = 2; i <= myInherit->Length(); i++) {
+      Handle(Express_Entity) it = myInherit->Value(i);
+      Handle(TCollection_HAsciiString) name = it->Name();
+      os << "  Handle(" << it->CPPName()->ToCString() << ") my" << name->ToCString() << "; //!< supertype" << std::endl;
+    }
+    for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+      Handle(Express_Field) field = myFields->Value(i);
+      if (field->Type()->IsHandle())
+        os << "  Handle(" << field->Type()->CPPName()->ToCString() << ") my" << field->Name()->ToCString() << ";";
+      else
+        os << "  " << field->Type()->CPPName()->ToCString() << " my" << field->Name()->ToCString() << ";";
+      if (field->IsOptional()) os << " //!< optional";
+      os << std::endl;
+    }
+    // optional fields: flag 'is field set'
+    for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+      Handle(Express_Field) field = myFields->Value(i);
+      if (!field->IsOptional()) continue;
+      os << "  Standard_Boolean def" << field->Name()->ToCString() << "; //!< flag \"is " <<
+        field->Name()->ToCString() << " defined\"" << std::endl;
+    }
+    os << std::endl;
+  }
+  
+  // write end
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile_" << std::endl;
+  os.close();
+  
+  //===============================
+  // Step 2: generating CXX
+  
+  // Open CXX file 
+  os.open ( pack.Cat ( ".cxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  // write include section
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  os << std::endl;
+  os << "IMPLEMENT_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
+  
+  // write constructor
+  Express::WriteMethodStamp ( os, CPPname );
+  os << CPPname->ToCString() << "::" << CPPname->ToCString() << " ()" << std::endl;
+  os << "{" << std::endl;
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Field) field = myFields->Value ( i );
+    if ( field->IsOptional() ) os << "  def" << field->Name()->ToCString() << " = Standard_False;" << std::endl;
+  }
+  os << "}" << std::endl;
+
+  // write method Init()
+  if ( myInherit->Length() >1 || myFields->Length() >0 ) {
+    Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Init" ) );
+    os << "void " << CPPname->ToCString() << "::Init (";
+    MakeInit ( os, 13 + CPPname->Length(), Standard_True, 1 );
+    os << ")\n{";
+    MakeInit ( os, -2, Standard_True, 3 );
+    os << "\n}" << std::endl;
+  }
+  
+  // write "methods" section
+  for (Standard_Integer i=2; i <= myInherit->Length(); i++ ) {
+    Handle(Express_Entity) it = myInherit->Value(i);
+    WriteGetMethod ( os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False );
+    WriteSetMethod ( os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False );
+  }
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Field) field = myFields->Value ( i );
+    Handle(Express_Type) type = field->Type();
+    WriteGetMethod ( os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple() );
+    WriteSetMethod ( os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple() );
+    if ( ! field->IsOptional() ) continue;
+    Handle(TCollection_HAsciiString) method = new TCollection_HAsciiString ( "Has" );
+    method->AssignCat ( field->Name() );
+    Express::WriteMethodStamp ( os, method );
+    os << "Standard_Boolean " << CPPname->ToCString() << "::" << method->ToCString() << " () const" << std::endl;
+    os << "{" << std::endl << "  return def" << field->Name()->ToCString() << ";\n}" << std::endl;
+  }
+  
+  // close
+  os.close();
+  if(AbstractFlag()) return Standard_True;  
+  //===============================
+  // Step 3: generating HXX for Reader/Writer class
+  
+  // Open HXX file 
+  Handle(TCollection_HAsciiString) RWCPPName = new TCollection_HAsciiString ( "RW" );
+  RWCPPName->AssignCat ( GetPackageName() );
+  RWCPPName->AssignCat ( "_RW" );
+  RWCPPName->AssignCat ( Name() );
+
+  pack = "RW";
+  pack += GetPackageName()->String();
+  OSD_Path rwpath ( pack );
+  OSD_Directory rwdir ( rwpath );
+  rwdir.Build ( prot );
+  pack += "/";
+  pack += RWCPPName->String();
+  
+  os.open ( pack.Cat ( ".hxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  os << "#ifndef _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
+  os << "#define _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
+  os << std::endl;
+
+  // write insludes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_DefineAlloc.hxx>" << std::endl;
+  os << "#include <Standard_Handle.hxx>" << std::endl;
+  os << std::endl;
+  os << "class StepData_StepReaderData;" << std::endl;
+  os << "class Interface_Check;" << std::endl;
+  os << "class StepData_StepWriter;" << std::endl;
+  os << "class Interface_EntityIterator;" << std::endl;
+  os << "class " << CPPName()->ToCString() << ";" << std::endl;
+  os << std::endl;
+
+  // write start of declaration (inheritance)
+  os << "//! Read & Write tool for " << Name()->ToCString() << std::endl;
+  os << "class " << RWCPPName->ToCString() << std::endl;
+  os << "{" << std::endl;
+  os << "public:" << std::endl;
+  os << std::endl << "  DEFINE_STANDARD_ALLOC" << std::endl << std::endl;
+
+  // default constructor
+  os << "  Standard_EXPORT " << RWCPPName->ToCString() << "();" << std::endl << std::endl;
+
+  // read step
+  os << "  Standard_EXPORT void ReadStep(const Handle(StepData_StepReaderData)& data, const Standard_Integer num, Handle(Interface_Check)& ach, const Handle(" <<
+    CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl;
+
+  // write step
+  os << "  Standard_EXPORT void WriteStep(StepData_StepWriter& SW, const Handle(" <<
+    CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl;
+
+  // share
+  os << "  Standard_EXPORT void Share(const Handle(" <<
+    CPPName()->ToCString() << ")& ent, Interface_EntityIterator& iter) const;" << std::endl << std::endl;
+
+  // write end
+  os << "};" << std::endl;
+  os << "#endif // _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl;
+  os.close();
+  
+  //===============================
+  // Step 4: generating CXX for Read/Write tool
+  
+  // Open CXX file 
+  os.open ( pack.Cat ( ".cxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  // write include section
+  os << "#include <" << RWCPPName->ToCString() << ".hxx>" << std::endl;
+  dict.Clear();
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  dict.Bind(CPPname->ToCString(), 1);
+  os << "#include <Interface_EntityIterator.hxx>" << std::endl;
+  os << "#include <StepData_StepReaderData.hxx>" << std::endl;
+  os << "#include <StepData_StepWriter.hxx>" << std::endl;
+  WriteRWInclude ( os, dict );
+  // write constructor
+  Express::WriteMethodStamp ( os, RWCPPName );
+  os << RWCPPName->ToCString() << "::" << RWCPPName->ToCString() << "() {}" << std::endl << std::endl;
+
+  // write method ReadStep
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "ReadStep" ) );
+  os << "void " << RWCPPName->ToCString() << "::ReadStep (const Handle(StepData_StepReaderData)& data," << std::endl;
+  WriteSpaces ( os, 17 + RWCPPName->Length() );
+  os << "const Standard_Integer num," << std::endl;
+  WriteSpaces ( os, 17 + RWCPPName->Length() );
+  os << "Handle(Interface_Check)& ach," << std::endl;
+  WriteSpaces ( os, 17 + RWCPPName->Length() );
+  os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl;
+  os << "{" << std::endl;
+  Standard_Integer nbFld = NbFields ( Standard_True );
+  
+  os << "  // Check number of parameters" << std::endl;
+  os << "  if ( ! data->CheckNbParams(num," << nbFld << ",ach,\"" << 
+        Express::ToStepName ( Name() )->ToCString() << "\") ) return;" << std::endl;
+  WriteRWReadCode ( os, 1, Standard_True ); // write code for reading inherited and own fields
+  os << std::endl;
+  os << "  // Initialize entity" << std::endl;
+  os << "  ent->Init(";
+  MakeInit ( os, 12, Standard_True, 4 );
+  os << ");\n}" << std::endl;
+
+  // write method WriteStep
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "WriteStep" ) );
+  os << "void " << RWCPPName->ToCString() << "::WriteStep (StepData_StepWriter& SW," << std::endl;
+  WriteSpaces ( os, 18 + RWCPPName->Length() );
+  os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl;
+  os << "{" << std::endl;
+  
+  WriteRWWriteCode ( os, 0, Standard_True ); // write code for writing inherited and own fields
+  os << "}" << std::endl;
+
+  // write method Share
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Share" ) );
+  os << "void " << RWCPPName->ToCString() << "::Share (const Handle(" << CPPname->ToCString() << ")& ent," << std::endl;
+  WriteSpaces ( os, 14 + RWCPPName->Length() );
+  os << "Interface_EntityIterator& iter) const" << std::endl;
+  os << "{" << std::endl;
+  WriteRWShareCode ( os, 1, Standard_True ); // write code for filling graph of references
+  os << "}" << std::endl;
+  if(CheckFlag()) {
+    Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Check" ) );
+    os << "void " << RWCPPName->ToCString() << "::Check(const Handle(Standard_Transient)& entt," << std::endl;
+    WriteSpaces ( os, 18 + RWCPPName->Length() );
+    os << "const Interface_ShareTool& shares,"<< std::endl;
+    WriteSpaces ( os, 18 + RWCPPName->Length() );
+    os << "Interface_Check& check) const"<< std::endl;
+    os << "{" << std::endl;
+    //DownCast entity to it's type
+    os<<"  Handle("<<CPPname->ToCString() << ") ent = Handle("<<CPPname->ToCString() <<")::DownCast(entt);"<< std::endl;
+    os << "}" << std::endl;
+  }
+  if(FillSharedFlag()) {
+    Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "FillShared" ) );
+    os << "void " << RWCPPName->ToCString() << "::Share(const Handle(Interface_InterfaceModel)& model," << std::endl;
+    WriteSpaces ( os, 18 + RWCPPName->Length() );
+    os << "const Handle(Standard_Transient)& entt,"<< std::endl;
+    WriteSpaces ( os, 18 + RWCPPName->Length() );
+    os << "Interface_EntityIterator& iter) const"<< std::endl;
+    os << "{" << std::endl;
+    //DownCast entity to it's type
+    os<<"  Handle("<<CPPname->ToCString() << ") ent = Handle("<<CPPname->ToCString() <<")::DownCast(entt)"<< std::endl;
+    os << "}" << std::endl;
+  }
+  
+  // close
+  os.close();
+
+  //===============================
+  // Step 5: adding method for registartion of entities and include
+  
+  Standard_Integer anIndex = Express_Item::Index();
+  TCollection_AsciiString regDir = "Registration";
+  OSD_Path path_reg(regDir);
+  OSD_Directory dir_reg(regDir);
+  dir_reg.Build ( prot );
+  regDir += "/";
+  
+  TCollection_AsciiString packname_inc = "inc.txt";
+  TCollection_AsciiString packname_rwinc = "rwinc.txt";
+  // write file with includes
+  os.open(regDir.Cat(packname_inc).ToCString(), std::ios::app);
+  os <<"#include <" << CPPName()->ToCString() << ".hxx>" << std::endl;
+  os.close();
+  // write file with RW includes
+  os.open(regDir.Cat(packname_rwinc).ToCString(), std::ios::app);
+  os << "#include <" << RWCPPName->ToCString() << ".hxx>" << std::endl;
+  os.close();
+
+  // generate data for entity registration
+  if (anIndex > 0) {
+    // StepAP214_Protocol.cxx
+    TCollection_AsciiString packname_protocol = "protocol.txt";
+    os.open(regDir.Cat(packname_protocol).ToCString(), std::ios::app);
+    os << "types.Bind(STANDARD_TYPE(" << CPPName()->ToCString() << "), " << anIndex << ");" << std::endl;
+    os.close();
+    // RWStepAP214_GeneralModule.cxx
+    // FillSharedCase
+    TCollection_AsciiString packname_fillshared = "fillshared.txt";
+    os.open(regDir.Cat(packname_fillshared).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.Share(anent, iter);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // NewVoid
+    TCollection_AsciiString packname_newvoid = "newvoid.txt";
+    os.open(regDir.Cat(packname_newvoid).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "    ent = new " << CPPName()->ToCString() << ";" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // CategoryNumber
+    TCollection_AsciiString packname_category = "category.txt";
+    os.open(regDir.Cat(packname_category).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ": return " << Category()->ToCString() << ";" << std::endl;
+    os.close();
+    // RWStepAP214_ReadWriteModule.cxx
+    // Reco
+    Handle(TCollection_HAsciiString) recoName = Express::ToStepName(Name());
+    recoName->UpperCase();
+    TCollection_AsciiString packname_reco = "reco.txt";
+    os.open(regDir.Cat(packname_reco).ToCString(), std::ios::app);
+    os << "  static TCollection_AsciiString Reco_" << Name()->ToCString() << "(\""
+       << recoName->ToCString() << "\");" << std::endl;
+    os.close();
+    //type bind
+    TCollection_AsciiString packname_typebind = "typebind.txt";
+    os.open(regDir.Cat(packname_typebind).ToCString(), std::ios::app);
+    os << "  typenums.Bind(Reco_" << Name()->ToCString() << ", " << anIndex << ");" << std::endl;
+    os.close();
+    // StepType
+    TCollection_AsciiString packname_steptype = "steptype.txt";
+    os.open(regDir.Cat(packname_steptype).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ": return Reco_" << Name()->ToCString() << ";" << std::endl;
+    os.close();
+    // ReadStep
+    TCollection_AsciiString packname_readstep = "readstep.txt";
+    os.open(regDir.Cat(packname_readstep).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.ReadStep(data, num, ach, anent);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    // WriteStep
+    TCollection_AsciiString packname_writestep = "writestep.txt";
+    os.open(regDir.Cat(packname_writestep).ToCString(), std::ios::app);
+    os << "  case " << anIndex << ":" << std::endl;
+    os << "  {" << std::endl;
+    os << "    DeclareAndCast(" << CPPName()->ToCString() << ", anent, ent);" << std::endl;
+    os << "    " << RWCPPName->ToCString() << " tool;" << std::endl;
+    os << "    tool.WriteStep(SW, anent);" << std::endl;
+    os << "  }" << std::endl;
+    os << "  break;" << std::endl;
+    os.close();
+    Express_Item::SetIndex(anIndex + 1);
+  }
+  
+  return Standard_True;
+}
+
+//=======================================================================
+//function : WriteIncludes
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Entity::WriteIncludes (Standard_OStream &os, 
+                                            DataMapOfStringInteger &dict) const
+{
+  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) {
+    Handle(Express_Entity) it = myInherit->Value(i);
+    it->WriteIncludes ( os, dict );
+    if ( i <= 1 ) continue;
+
+    if ( dict.IsBound ( it->CPPName()->String() ) ) continue; // avoid duplicating
+    dict.Bind ( it->CPPName()->String(), 1 );
+    it->Use ( GetPackageName() );
+    os << "#include <" << it->CPPName()->ToCString() << ".hxx>" << std::endl;
+  }
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Type) type = myFields->Value(i)->Type();
+    if ( dict.IsBound ( type->CPPName()->String() ) ) continue; // avoid duplicating
+    dict.Bind ( type->CPPName()->String(), 1 );
+    type->Use ( GetPackageName() );
+    if ( type->IsStandard() ) continue;
+    os << "#include <" << type->CPPName()->ToCString() << ".hxx>" << std::endl;
+  }
+  return Standard_True;
+}
+
+//=======================================================================
+//function : WriteRWInclude
+//purpose  : 
+//=======================================================================
+
+void Express_Entity::WriteRWInclude (Standard_OStream &os, DataMapOfStringInteger &dict) const
+{
+  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) {
+    Handle(Express_Entity) it = myInherit->Value(i);
+    if ( i >1 ) { // include HXX for base classes which are implemented as fields
+      os << "#include <" << it->CPPName()->ToCString() << ".hxx>" << std::endl;
+    }
+    it->WriteRWInclude ( os, dict );
+  }
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Type) type = myFields->Value(i)->Type();
+    for ( Standard_Integer deep=0; deep < 10; deep++ ) {
+      if ( dict.IsBound ( type->CPPName()->String() ) ) break; // avoid duplicating
+      dict.Bind ( type->CPPName()->String(), 1 );
+      os << "#include <" << type->CPPName()->ToCString() << ".hxx>" << std::endl;
+      
+      Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+      if (complex.IsNull())
+        break;
+      type = complex->Type();
+    }
+  }
+}
+
+//=======================================================================
+//function : WriteRWReadField
+//purpose  : 
+//=======================================================================
+
+static Handle(TCollection_HAsciiString) TypeToSTEPName (const Handle(Express_Type) &type) 
+{
+  Handle(TCollection_HAsciiString) cppname = type->CPPName();
+  Handle(TCollection_HAsciiString) cls = cppname->Token ( "_", 2 );
+  if ( cls->Length() <1 ) cls = cppname;
+  return Express::ToStepName ( cls );
+}
+
+static void WriteRWReadField (Standard_OStream &os, 
+                              const Standard_CString index,
+                              const Standard_CString STEPName,
+                              const Standard_CString varname,
+                              const Handle(Express_Type) &vartype, 
+                              const Standard_Integer lev,
+                              const Standard_Boolean optional)
+{
+  // indent
+  TCollection_AsciiString shift ( "  " );
+  Standard_Integer level = 0;
+  for (; level < lev; level++ ) shift += "  ";
+  level += 2;
+
+  // name of variable identifying number of parameter in data
+  TCollection_AsciiString param ( "num" );
+  if ( lev >0 ) param += TCollection_AsciiString ( lev );
+  
+  // decode aliased types
+  Handle(Express_Type) type = vartype;
+  while ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( ! named->Item()->IsKind(STANDARD_TYPE(Express_Alias)) ) break;
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( named->Item() );
+    type = alias->Type();
+  }
+    
+  // declare variable
+  if ( type->IsHandle() ) os << shift << "Handle(" << type->CPPName()->ToCString() << ") a";
+  else os << shift << type->CPPName()->ToCString() << " a";
+  os << varname << ";" << std::endl;
+
+  if ( optional ) {
+    os << shift << "Standard_Boolean has" << varname << " = Standard_True;" << std::endl;
+    os << shift << "if ( data->IsParamDefined (" << param << "," << index << ") ) {" << std::endl;
+    shift += "  ";
+    level++;
+  }
+    
+  // read variable depending on its type
+  if ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( named->Item()->IsKind(STANDARD_TYPE(Express_Entity)) ) {
+      os << shift << "data->ReadEntity (" << param << ", " << index << ", \"" << STEPName <<
+                    "\", ach, STANDARD_TYPE(" << named->CPPName()->ToCString() << "), a" << 
+                    varname << ");" << std::endl;
+    }
+    else if ( named->Item()->IsKind(STANDARD_TYPE(Express_Select)) ) {
+      os << shift << "data->ReadEntity (" << param << ", " << index << ", \"" << STEPName <<
+                    "\", ach, a" << varname << ");" << std::endl;
+    }
+    else if ( named->Item()->IsKind(STANDARD_TYPE(Express_Enum)) ) {
+      os << shift << "if (data->ParamType (" << param << ", " << 
+                    index << ") == Interface_ParamEnum) {" << std::endl;
+      os << shift << "  Standard_CString text = data->ParamCValue(" << 
+                    param << ", " << index << ");" << std::endl;
+      Handle(Express_Enum) en = Handle(Express_Enum)::DownCast ( named->Item() );
+      Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(en->Name());
+      Handle(TColStd_HSequenceOfHAsciiString) names = en->Names();
+      TCollection_AsciiString enpack = en->GetPackageName()->String();
+      for ( Standard_Integer i=1; i <= names->Length(); i++ ) {
+       Handle(TCollection_HAsciiString) ename = Express::ToStepName ( names->Value(i) );
+       ename->UpperCase();
+       os << shift << ( i==1 ? "  if     " : "  else if" ) << 
+                      " (strcmp(text, \"." << ename->ToCString() << ".\")) a" << 
+                      varname << " = " << enpack.ToCString() << "_" << prefix->ToCString()<<
+                      names->Value(i)->ToCString() << ";" << std::endl;
+      }
+      os << shift << "  else ach->AddFail(\"Parameter #" << index << " (" <<
+                    STEPName << ") has not allowed value\");" << std::endl;
+      os << shift << "}" << std::endl;
+      os << shift << "else ach->AddFail(\"Parameter #" << index << " (" <<
+                    STEPName << ") is not enumeration\");" << std::endl;
+//      os << "!!! READING/WRITING ENUM NOT IMPLEMENTED !!!" << std::endl;
+//      std::cout << "Warning: Reading/Writing ENUMERATION not yet implemented (" << 
+//     STEPName << ", " << varname << ", " << type->CPPName()->ToCString() << ")" << std::endl;
+    }
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) {
+   
+    Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+    os << shift << "Standard_Integer sub" << index << " = 0;" << std::endl;
+    os << shift << "if ( data->ReadSubList (" << param << ", " << index << ", \"" << 
+                   STEPName << "\", ach, sub" << index << ") ) {" << std::endl;
+    os << shift << "  Standard_Integer nb" << lev << " = data->NbParams(sub" << index << ");" << std::endl;
+    TCollection_AsciiString iter = lev;
+    iter.Prepend ( "i" );
+    TCollection_AsciiString var = lev;
+    var.Prepend("nIt");
+    if ( complex->Type()->IsKind(STANDARD_TYPE(Express_ComplexType)) ) { // array 2
+      Handle(Express_ComplexType) complex2 = Handle(Express_ComplexType)::DownCast ( complex->Type() );
+      TCollection_AsciiString jter = lev;
+      jter.Prepend ( "j" );
+      os << shift << "  Standard_Integer nbj" << lev << " = data->NbParams(data->ParamNumber(sub" << index << ",1));" << std::endl;
+      os << shift << "  a" << varname << " = new " << type->CPPName()->ToCString() << " (1, nb" << lev << ", 1, nbj" << lev << ");" << std::endl;
+      os << shift << "  for ( Standard_Integer " << iter << "=1; " << iter << " <= nb" << lev << "; " << iter << "++ ) {" << std::endl;
+      os << shift << "    Standard_Integer subj" << index << " = 0;" << std::endl;
+      os << shift << "    if ( data->ReadSubList (sub" << index << ", " << iter << ", \"sub-part(" << 
+                     STEPName << ")\", ach, subj" << index << ") ) {" << std::endl;
+      os << shift << "      Standard_Integer num" << level+2 << " = subj" << index << ";" << std::endl;
+      os << shift << "      for ( Standard_Integer " << jter << "=1; " << jter << " <= nbj" << lev << "; " << jter << "++ ) {" << std::endl;
+      Handle(TCollection_HAsciiString) subName = TypeToSTEPName ( complex2->Type() );
+      WriteRWReadField (os, jter.ToCString(), subName->ToCString(), var.ToCString(), complex2->Type(), level+2, Standard_False );
+      os << shift << "        a" << varname << "->SetValue(" << iter << "," << jter << ", a" << var << ");" << std::endl;
+      os << shift << "      }" << std::endl;
+      os << shift << "    }" << std::endl;
+    } 
+    else { // simple array
+      os << shift << "  a" << varname << " = new " << type->CPPName()->ToCString() << " (1, nb" << lev << ");" << std::endl;
+      os << shift << "  Standard_Integer num" << level << " = sub" << index << ";" << std::endl;
+      os << shift << "  for ( Standard_Integer " << iter << "=1; " << iter << " <= nb" << lev << "; " << iter << "++ ) {" << std::endl;
+      Handle(TCollection_HAsciiString) subName = TypeToSTEPName ( complex->Type() );
+      WriteRWReadField (os, iter.ToCString(), subName->ToCString(), var.ToCString(), complex->Type(), level, Standard_False );
+      os << shift << "    a" << varname << "->SetValue(" << iter << ", a" << var << ");" << std::endl;
+    }
+    os << shift << "  }" << std::endl;
+    os << shift << "}" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_String)) ) {
+    os << shift << "data->ReadString (" << param << ", " << index << ", \"" << STEPName <<
+                   "\", ach, a" << varname << ");" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Logical)) ) {
+    os << shift << "data->ReadLogical (" << param << ", " << index << ", \"" << STEPName <<
+                   "\", ach, a" << varname << ");" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Boolean)) ) {
+    os << shift << "data->ReadBoolean (" << param << ", " << index << ", \"" << STEPName <<
+                   "\", ach, a" << varname << ");" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Number)) ||
+           type->IsKind(STANDARD_TYPE(Express_Integer)) ) {
+    os << shift << "data->ReadInteger (" << param << ", " << index << ", \"" << STEPName <<
+                   "\", ach, a" << varname << ");" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Real)) ) {
+    os << shift << "data->ReadReal (" << param << ", " << index << ", \"" << STEPName <<
+                   "\", ach, a" << varname << ");" << std::endl;
+  }
+
+  if ( optional ) {
+    shift.Remove ( 1, 2 );
+    os << shift << "}" << std::endl;
+    os << shift << "else {" << std::endl;
+    os << shift << "  has" << varname << " = Standard_False;" << std::endl;
+    os << shift << "  a" << varname;
+    if (type->IsHandle())
+      os << ".Nullify();";
+    else if (type->IsStandard())
+      os << " = 0;";
+    else
+      os << " = " << type->CPPName()->ToCString() << "();";
+    os << std::endl;
+    os << shift << "}" << std::endl;
+  }
+}
+
+//=======================================================================
+//function : WriteRWReadCode
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Entity::WriteRWReadCode (Standard_OStream &os, 
+                                                  const Standard_Integer start,
+                                                  const Standard_Integer own) const
+{
+  Standard_Integer num = start;
+  
+  // write code for reading inherited fields
+  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) 
+    num = myInherit->Value(i)->WriteRWReadCode ( os, num, Standard_False );
+
+  // write code for reading own fields
+  if ( myFields->Length() >0 ) {
+    if ( num >0 ) os << std::endl;
+    os << "  // " << ( own ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl;
+  }
+  
+  for (Standard_Integer i = 1; i <= myFields->Length(); i++) {
+    Handle(Express_Field) field = myFields->Value(i);
+    Handle(TCollection_HAsciiString) STEPName = Express::ToStepName(field->Name());
+    if (!own) STEPName->Prepend(Express::ToStepName(Name()->Cat(".")));
+    Handle(TCollection_HAsciiString) varName = new TCollection_HAsciiString(field->Name());
+    if (!own) varName->Prepend(Name()->Cat("_"));
+
+    os << std::endl;
+    WriteRWReadField(os, TCollection_AsciiString(num).ToCString(), STEPName->ToCString(),
+      varName->ToCString(), field->Type(), 0, field->IsOptional());
+    num++;
+  }
+  return num;
+}
+
+//=======================================================================
+//function : WriteRWWriteField
+//purpose  : 
+//=======================================================================
+
+static void WriteRWWriteField (Standard_OStream &os, 
+                              const Standard_CString varname,
+                              const Handle(Express_Type) &vartype, 
+                              const Standard_Integer index,
+                              const Standard_Integer lev)
+{
+  // indent
+  TCollection_AsciiString shift ( "  " );
+  Standard_Integer level = 0;
+  for (; level < lev; level++ ) shift += "  ";
+  level++;
+
+  // decode aliased types
+  Handle(Express_Type) type = vartype;
+  while ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( ! named->Item()->IsKind(STANDARD_TYPE(Express_Alias)) ) break;
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( named->Item() );
+    type = alias->Type();
+  }
+    
+  // write variable depending on its type
+  if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) {
+    
+    Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+    type = complex->Type();
+    TCollection_AsciiString var ( lev );
+    var.Prepend ( "Var" );
+    os << shift << "SW.OpenSub();" << std::endl;
+    os << shift << "for (Standard_Integer i" << index << "=1; i" << index << " <= ";
+    if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) { // array 2 
+      Handle(Express_ComplexType) complex2 = Handle(Express_ComplexType)::DownCast ( type );
+      type = complex2->Type();
+      os << varname << "->RowLength(); i" << index << "++ ) {" << std::endl;
+      os << shift << "  SW.NewLine(Standard_False);" << std::endl;
+      os << shift << "  SW.OpenSub();" << std::endl;
+      os << shift << "  for (Standard_Integer j" << index << "=1; j" << index << " <= " <<
+            varname << "->ColLength(); j" << index << "++ ) {" << std::endl;
+      os << shift << "  " << ( type->IsHandle() ? "  Handle(" : "  " ) << type->CPPName()->ToCString() <<
+                             ( type->IsHandle() ? ") " : " " ) << var.ToCString() << " = " <<
+                 varname << "->Value(i" << index << ",j" << index << ");" << std::endl;
+      WriteRWWriteField (os, var.ToCString(), type, index+1, level+1 );
+      os << shift << "  }" << std::endl;
+      os << shift << "  SW.CloseSub();" << std::endl;
+    } 
+    else { // simple array
+      os << varname << "->Length(); i" << index << "++ ) {" << std::endl;
+      os << shift << ( type->IsHandle() ? "  Handle(" : "  " ) << type->CPPName()->ToCString() <<
+                     ( type->IsHandle() ? ") " : " " ) << var.ToCString() << " = " <<
+                    varname << "->Value(i" << index << ");" << std::endl;
+      WriteRWWriteField (os, var.ToCString(), type, index+1, level );
+    }
+    os << shift << "}" << std::endl;
+    os << shift << "SW.CloseSub();" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Boolean)) ) {
+    os << shift << "SW.SendBoolean (" << varname << ");" << std::endl;
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_Logical)) ) {
+    os << shift << "SW.SendLogical (" << varname << ");" << std::endl;
+  }
+  else {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( ! named.IsNull() && named->Item()->IsKind(STANDARD_TYPE(Express_Enum)) ) {
+      Handle(Express_Enum) en = Handle(Express_Enum)::DownCast ( named->Item() );
+      Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(en->Name());
+      
+      Handle(TColStd_HSequenceOfHAsciiString) names = en->Names();
+      TCollection_AsciiString enpack = en->GetPackageName()->String();
+      os << shift << "switch (" << varname << ") {" << std::endl;
+      for ( Standard_Integer i=1; i <= names->Length(); i++ ) {
+       Handle(TCollection_HAsciiString) ename = Express::ToStepName ( names->Value(i) );
+       ename->UpperCase();
+       os << shift << "  case " << enpack.ToCString() << "_" << prefix->ToCString()<<
+                      names->Value(i)->ToCString() << ": SW.SendEnum (\"." << 
+                      ename->ToCString() << ".\"); break;" << std::endl;
+      }
+      os << shift << "}" << std::endl;
+    }
+    else {
+      os << shift << "SW.Send (" << varname;
+      if ( ! named.IsNull() && named->Item()->IsKind(STANDARD_TYPE(Express_Select)) ) 
+       os << ".Value()";
+      os << ");" << std::endl;
+    }
+  }
+}
+
+//=======================================================================
+//function : WriteRWWriteCode
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Entity::WriteRWWriteCode (Standard_OStream &os, 
+                                                   const Standard_Integer start,
+                                                   const Standard_Integer own) const
+{
+  Standard_Integer num = start;
+  
+  // write code for writing inherited fields
+  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) 
+    num = myInherit->Value(i)->WriteRWWriteCode ( os, num, ( i >1 ? -1 : 1 ) );
+
+  // write code for writing own fields
+  if ( myFields->Length() >0 ) {
+    os << std::endl;
+    os << "  // " << ( own == 1 ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl;
+  }
+  
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Field) field = myFields->Value(i);
+    TCollection_AsciiString varName ( field->Name()->String() );
+    if ( ! own ) varName.Prepend ( CPPName()->Cat ( "::" )->String() );
+    else if ( own ==-1 ) { // inherited base class implemented as field
+      varName.Prepend ( Name()->Cat ( "()->" )->String() );
+    }
+    varName.Prepend ( "ent->" );
+    varName.AssignCat ( "()" );
+    os << std::endl;
+    
+    if ( field->IsOptional() ) {
+      os << "  if ( ent->";
+      if ( ! own ) os << CPPName()->ToCString() << "::";
+      else if ( own ==-1 ) os << Name()->ToCString() << "()->";
+      os << "Has" << field->Name()->ToCString() << "() ) {" << std::endl;
+    }
+    WriteRWWriteField ( os, varName.ToCString(), field->Type(), num, ( field->IsOptional() ? 1 : 0 ) );
+    if ( field->IsOptional() ) {
+      os << "  }\n  else SW.SendUndef();" << std::endl;
+    }
+    num++;
+  }
+  
+  return num;
+}
+
+//=======================================================================
+//function : WriteRWShareField
+//purpose  : 
+//=======================================================================
+
+static Standard_Boolean WriteRWShareField (Standard_OStream &os, 
+                                          const Standard_CString varname,
+                                          const Handle(Express_Type) &vartype, 
+                                          const Standard_Integer index,
+                                          const Standard_Integer lev)
+{
+  // indent
+  TCollection_AsciiString shift ( "  " );
+  Standard_Integer level = 0;
+  for (; level < lev; level++ ) shift += "  ";
+  level++;
+
+  // decode aliased types
+  Handle(Express_Type) type = vartype;
+  while ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( ! named->Item()->IsKind(STANDARD_TYPE(Express_Alias)) ) break;
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( named->Item() );
+    type = alias->Type();
+  }
+    
+  // write variable depending on its type
+  if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) {
+    Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+    type = complex->Type();
+    TCollection_AsciiString var ( lev );
+    var.Prepend ( "Var" );
+    std::ostringstream oos;
+    if ( ! WriteRWShareField (oos, var.ToCString(), type, index + 1, level ) ) 
+      return Standard_False;
+    os << shift << "for (Standard_Integer i" << index << "=1; i" << index << " <= " << 
+                    varname << "->Length(); i" << index << "++ ) {" << std::endl;
+    os << shift << ( type->IsHandle() ? "  Handle(" : "  " ) << type->CPPName()->ToCString() <<
+                   ( type->IsHandle() ? ") " : " " ) << var.ToCString() << " = " <<
+                  varname << "->Value(i" << index << ");" << std::endl;
+
+    os << oos.str();
+    os << shift << "}" << std::endl;
+    return Standard_True;
+  }
+  if ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    if ( named->Item()->IsKind(STANDARD_TYPE(Express_Entity)) ) {
+      os << shift << "iter.AddItem (" << varname << ");" << std::endl;
+      return Standard_True;
+    }
+    if ( named->Item()->IsKind(STANDARD_TYPE(Express_Select)) ) {
+      os << shift << "iter.AddItem (" << varname << ".Value());" << std::endl;
+      return Standard_True;
+    }
+  }
+  return Standard_False;
+}
+
+//=======================================================================
+//function : WriteRWShareCode
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Entity::WriteRWShareCode (Standard_OStream &os, 
+                                                   const Standard_Integer start,
+                                                   const Standard_Integer own) const
+{
+  Standard_Integer num = start;
+  
+  // write code for sharing inherited fields
+  for ( Standard_Integer i=1; i <= myInherit->Length(); i++ ) 
+    num = myInherit->Value(i)->WriteRWShareCode ( os, num, ( i >1 ? -1 : Standard_False ) );
+
+  // write code for sharing own fields
+  if ( myFields->Length() >0 ) {
+    os << std::endl;
+    os << "  // " << ( own == 1 ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl;
+  }
+  
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Field) field = myFields->Value(i);
+    TCollection_AsciiString varName ( field->Name()->String() );
+    if ( ! own ) varName.Prepend ( CPPName()->Cat ( "::" )->String() );
+    else if ( own ==-1 ) { // inherited base class implemented as field
+      varName.Prepend ( Name()->Cat ( "()->" )->String() );
+    }
+    varName.Prepend ( "ent->" );
+    varName.AssignCat ( "()" );
+    
+    std::ostringstream oos;
+    if ( ! WriteRWShareField ( oos, varName.ToCString(), field->Type(), num,
+                              ( field->IsOptional() ? 1 : 0 ) ) ) continue;
+    num++;
+    os << std::endl;
+    if ( field->IsOptional() ) {
+      os << "  if ( ent->";
+      if ( ! own ) os << CPPName()->ToCString() << "::";
+      else if ( own ==-1 ) os << Name()->ToCString() << "()->";
+      os << "Has" << field->Name()->ToCString() << "() ) {" << std::endl;
+    }
+
+    os << oos.str();
+    if ( field->IsOptional() ) {
+      os << "  }" << std::endl;
+    }
+  }
+  return num;
+}
+
+//=======================================================================
+//function : MakeInit
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Entity::MakeInit (Standard_OStream &os, 
+                                           const Standard_Integer shift,
+                                           const Standard_Integer own,
+                                           const Standard_Integer mode) const
+{
+  Standard_Integer sh = shift;
+  
+  // write code for inherited fields
+  for (Standard_Integer i = 1; i <= myInherit->Length(); i++) {
+    Handle(Express_Entity) ent = myInherit->Value(i);
+    if (mode == 3) {
+      Standard_Integer s = 0;
+      if (i > 1) {
+        os << "\n  my" << ent->Name()->ToCString() << " = new " << ent->CPPName()->ToCString() << ";";
+        os << "\n  my" << ent->Name()->ToCString() << "->Init(";
+        s = 12 + ent->Name()->Length();
+      }
+      else {
+        os << "\n  " << ent->CPPName()->ToCString() << "::Init(";
+        s = 9 + ent->CPPName()->Length();
+      }
+      ent->MakeInit(os, s, Standard_False, 2);
+      os << ");";
+    }
+    else sh = ent->MakeInit(os, sh, (i > 1 ? -1 : Standard_False), mode);
+  }
+
+  // write code for own fields
+  
+  for (Standard_Integer i=1; i <= myFields->Length(); i++ ) {
+    Handle(Express_Field) field = myFields->Value(i);
+    Handle(TCollection_HAsciiString) varName = new TCollection_HAsciiString ( field->Name() );
+    if ( own != 1 ) varName->Prepend ( Name()->Cat ( "_" ) );
+
+    // make CR and indent
+    TCollection_AsciiString space = "";
+    for ( Standard_Integer sn=0; sn < abs(sh); sn++ ) space += " ";
+    Standard_Character delim = ( mode == 0 ? ',' : ( mode == 3 ? '\n' : ',' ) );
+    if ( sh < 0 ) os << delim << "\n" << space;
+    else sh = -sh;
+    
+    if ( field->IsOptional() ) {
+      if ( mode == 0 ) os << "const Standard_Boolean has" << varName->ToCString() << ",\n" << space;
+      else if ( mode == 1 ) os << "const Standard_Boolean has" << varName->ToCString() << ",\n" << space;
+      else if ( mode == 2 || mode == 4) os << "has" << varName->ToCString() << ",\n" << space;
+    }
+    
+    // write field
+    if ( mode == 0 || mode ==1) {
+      os << "const " << (field->Type()->IsHandle() ? "Handle(" : "") <<
+        field->Type()->CPPName()->ToCString() << (field->Type()->IsHandle() ? ")" : "") <<
+        (field->Type()->IsSimple() ? " the" : "& the") << varName->ToCString();
+    }
+    else if ( mode == 2 ) {
+      os << "the" << varName->ToCString();
+    }
+    else if (mode == 4) {
+      os << "a" << varName->ToCString();
+    }
+    else {
+      if (field->IsOptional()) {
+        os << "def" << field->Name()->ToCString() << " = has" << varName->ToCString() << ";" << std::endl;
+        os << "  if (def" << field->Name()->ToCString() << ") {\n    ";
+      }
+      os << "my" << field->Name()->ToCString() << " = the" << varName->ToCString() << ";";
+      if (field->IsOptional()) {
+        os << "\n  }\n  else my" << field->Name()->ToCString();
+        if (field->Type()->IsHandle())
+          os << ".Nullify();";
+        else if (field->Type()->IsStandard())
+          os << " = 0;";
+        else
+          os << " = " << field->Type()->CPPName()->ToCString() << "();";
+      }
+    }
+    if ( sh >0 ) sh = -sh;
+  }
+  
+  return sh;
+}
+//=======================================================================
+//function : SetAbstractFlag
+//purpose  : 
+//=======================================================================
+
+ void Express_Entity::SetAbstractFlag(const Standard_Boolean isAbstract) 
+{
+   myisAbstract = isAbstract;
+}
+
+//=======================================================================
+//function : AbstractFlag
+//purpose  : 
+//=======================================================================
+
+ Standard_Boolean Express_Entity::AbstractFlag() const
+{
+  return myisAbstract;
+}
+
diff --git a/src/Express/Express_Entity.hxx b/src/Express/Express_Entity.hxx
new file mode 100644 (file)
index 0000000..20ba8d2
--- /dev/null
@@ -0,0 +1,114 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Entity_HeaderFile
+#define _Express_Entity_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Item.hxx>
+#include <Standard_OStream.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <NCollection_DataMap.hxx>
+
+class Express_HSequenceOfEntity;
+class Express_HSequenceOfField;
+class Dico_DictionaryOfInteger;
+
+
+//! Implements ENTITY item of the EXPRESS
+//! schema, with interface for deferred Item class.
+class Express_Entity : public Express_Item
+{
+
+public:
+
+  
+  //! Create ENTITY item and initialize it
+  //! flags hasCheck and hasFillShared mark if generated class has
+  //! methods Check and FillShared cprrespondingly.
+  Standard_EXPORT Express_Entity(const Standard_CString name, const Handle(TColStd_HSequenceOfHAsciiString)& inherit, const Handle(Express_HSequenceOfField)& flds);
+  
+  //! Returns sequence of inherited classes (names)
+  Standard_EXPORT  const  Handle(TColStd_HSequenceOfHAsciiString)& SuperTypes()  const;
+  
+  //! Returns sequence of inherited items
+  Standard_EXPORT  const  Handle(Express_HSequenceOfEntity)& Inherit()  const;
+  
+  //! Returns sequence of fields
+  Standard_EXPORT  const  Handle(Express_HSequenceOfField)& Fields()  const;
+  
+  //! Returns number of fields (only own fields if inherited is False
+  //! and including fields of all supertypes if it is True)
+  Standard_EXPORT   Standard_Integer NbFields (const Standard_Boolean inherited = Standard_False)  const;
+  
+  //! Sets abstruct flag for entity;
+  Standard_EXPORT   void SetAbstractFlag (const Standard_Boolean isAbstract) ;
+  
+  //! Returns abstract flag.
+  Standard_EXPORT   Standard_Boolean AbstractFlag()  const;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Entity,Express_Item)
+
+protected:
+
+
+
+
+private: 
+
+  typedef NCollection_DataMap<TCollection_AsciiString,Standard_Integer,TCollection_AsciiString> DataMapOfStringInteger;
+  
+  //! Create HXX/CXX files from item
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const Standard_OVERRIDE;
+  
+  //! Writes includes section of HXX
+  Standard_EXPORT   Standard_Boolean WriteIncludes (Standard_OStream& os, DataMapOfStringInteger& dict)  const;
+  
+  //! Writes #include declarations for RW class
+  Standard_EXPORT   void WriteRWInclude (Standard_OStream& os, DataMapOfStringInteger& dict)  const;
+  
+  //! Writes code for reading all fields
+  Standard_EXPORT   Standard_Integer WriteRWReadCode (Standard_OStream& os, const Standard_Integer start, const Standard_Integer own)  const;
+  
+  //! Writes code for writing all fields
+  Standard_EXPORT   Standard_Integer WriteRWWriteCode (Standard_OStream& os, const Standard_Integer start, const Standard_Integer own)  const;
+  
+  //! Writes code for adding shared entities to the graph
+  Standard_EXPORT   Standard_Integer WriteRWShareCode (Standard_OStream& os, const Standard_Integer start, const Standard_Integer own)  const;
+  
+  //! Writes arguments and code for method Init()
+  //! Mode identifyes what code is being written:
+  //! 0 - HXX declaration
+  //! 1 - CXX declaration
+  //! 2 - call (argument list)
+  //! 3 - implementation
+  //! 4 - call (argument list for RW)
+  Standard_EXPORT   Standard_Integer MakeInit (Standard_OStream& os, const Standard_Integer shift, const Standard_Integer own, const Standard_Integer mode)  const;
+
+  Handle(TColStd_HSequenceOfHAsciiString) mySupers;
+  Handle(Express_HSequenceOfEntity) myInherit;
+  Handle(Express_HSequenceOfField) myFields;
+  Standard_Boolean myisAbstract;
+};
+
+
+
+
+
+
+
+#endif // _Express_Entity_HeaderFile
diff --git a/src/Express/Express_Enum.cxx b/src/Express/Express_Enum.cxx
new file mode 100644 (file)
index 0000000..76d64c2
--- /dev/null
@@ -0,0 +1,88 @@
+// Created:    Tue Nov  2 14:40:06 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Enum.hxx>
+#include <TCollection_HAsciiString.hxx>
+#include <OSD_Protection.hxx>
+#include <OSD_Path.hxx>
+#include <OSD_Directory.hxx>
+#include <Express.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Enum,Express_Item)
+
+//=======================================================================
+//function : Express_Enum
+//purpose  : 
+//=======================================================================
+
+Express_Enum::Express_Enum (const Standard_CString name, 
+                             const Handle(TColStd_HSequenceOfHAsciiString) &names)
+     : Express_Item(name), myNames(names)
+{
+}
+
+//=======================================================================
+//function : Names
+//purpose  : 
+//=======================================================================
+
+const Handle(TColStd_HSequenceOfHAsciiString) &Express_Enum::Names () const
+{
+  return myNames;
+}
+
+//=======================================================================
+//function : GenerateClass
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Enum::GenerateClass () const
+{
+  std::cout << "Generating ENUMERATION " << CPPName()->ToCString() << std::endl;
+  
+  // create a package directory (if not yet exist)
+  OSD_Protection prot ( OSD_RX, OSD_RWX, OSD_RX, OSD_RX );
+  TCollection_AsciiString pack = GetPackageName()->String();
+  OSD_Path path ( pack );
+  OSD_Directory dir ( path );
+  dir.Build ( prot );
+  pack += "/";
+  pack += CPPName()->String();
+  
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString(), std::ios::out | std::ios::ate );
+
+  // write header
+  Express::WriteFileStamp(os);
+
+  // write defines
+  os << "#ifndef _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
+
+  os << std::endl << "enum " << CPPName()->ToCString() << std::endl;
+  os << "{" << std::endl;
+  Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(Name());
+  for ( Standard_Integer i = 1; i <= myNames->Length(); i++ ) {
+    if ( i > 1 ) os << "," << std::endl;
+    os << "  " <<  GetPackageName()->ToCString() << "_" << prefix->ToCString()
+       << myNames->Value(i)->ToCString();
+  }
+
+  os << std::endl << "};" << std::endl;
+  os << "#endif // _" << CPPName()->ToCString() << "_HeaderFile" << std::endl;
+  os.close();
+  
+  return Standard_False;
+}
diff --git a/src/Express/Express_Enum.hxx b/src/Express/Express_Enum.hxx
new file mode 100644 (file)
index 0000000..fde36c4
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Enum_HeaderFile
+#define _Express_Enum_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Item.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+
+
+//! Implements TYPE ENUMERATION item of the EXPRESS
+//! schema, with interface for deferred Item class.
+class Express_Enum : public Express_Item
+{
+
+public:
+
+  
+  //! Create ENUM item and initialize it
+  Standard_EXPORT Express_Enum(const Standard_CString name, const Handle(TColStd_HSequenceOfHAsciiString)& names);
+  
+  //! Returns names of enumeration variants
+  Standard_EXPORT  const  Handle(TColStd_HSequenceOfHAsciiString)& Names()  const;
+  
+  //! Create HXX/CXX files from item
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Enum,Express_Item)
+
+protected:
+
+
+
+
+private: 
+
+
+  Handle(TColStd_HSequenceOfHAsciiString) myNames;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Enum_HeaderFile
diff --git a/src/Express/Express_Field.cxx b/src/Express/Express_Field.cxx
new file mode 100644 (file)
index 0000000..584a67f
--- /dev/null
@@ -0,0 +1,77 @@
+// Created:    Tue Nov  2 16:40:51 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Field.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Field,Standard_Transient)
+
+//=======================================================================
+//function : Express_Field
+//purpose  : 
+//=======================================================================
+
+Express_Field::Express_Field (const Standard_CString name,
+                               const Handle(Express_Type) &type,
+                               const Standard_Boolean opt)
+{
+  myName = new TCollection_HAsciiString ( name );
+  myType = type;
+  myOpt  = opt;
+}
+
+//=======================================================================
+//function : Express_Field
+//purpose  : 
+//=======================================================================
+
+Express_Field::Express_Field (const Handle(TCollection_HAsciiString) &name,
+                               const Handle(Express_Type) &type,
+                               const Standard_Boolean opt)
+{
+  myName = name;
+  myType = type;
+  myOpt  = opt;
+}
+
+//=======================================================================
+//function : Name
+//purpose  : 
+//=======================================================================
+
+const Handle(TCollection_HAsciiString) &Express_Field::Name () const 
+{
+  return myName;
+}
+
+//=======================================================================
+//function : Type
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_Type) &Express_Field::Type () const 
+{
+  return myType;
+}
+
+//=======================================================================
+//function : IsOptional
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Field::IsOptional () const 
+{
+  return myOpt;
+}
diff --git a/src/Express/Express_Field.hxx b/src/Express/Express_Field.hxx
new file mode 100644 (file)
index 0000000..05a1cea
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Field_HeaderFile
+#define _Express_Field_HeaderFile
+
+#include <Standard_Type.hxx>
+
+class TCollection_HAsciiString;
+class Express_Type;
+
+
+//! Represents field of the ENTITY item in the EXPRESS schema
+class Express_Field : public Standard_Transient
+{
+
+public:
+
+  
+  //! Create object and initialize it
+  Standard_EXPORT Express_Field(const Standard_CString name, const Handle(Express_Type)& type, const Standard_Boolean opt);
+  
+  //! Create object and initialize it
+  Standard_EXPORT Express_Field(const Handle(TCollection_HAsciiString)& name, const Handle(Express_Type)& type, const Standard_Boolean opt);
+  
+  //! Returns field name
+  Standard_EXPORT  const  Handle(TCollection_HAsciiString)& Name()  const;
+  
+  //! Returns field type
+  Standard_EXPORT  const  Handle(Express_Type)& Type()  const;
+  
+  //! Returns True if field is optional
+  Standard_EXPORT   Standard_Boolean IsOptional()  const;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Field,Standard_Transient)
+
+protected:
+
+
+
+
+private: 
+
+
+  Handle(TCollection_HAsciiString) myName;
+  Handle(Express_Type) myType;
+  Standard_Boolean myOpt;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Field_HeaderFile
diff --git a/src/Express/Express_HSequenceOfEntity.hxx b/src/Express/Express_HSequenceOfEntity.hxx
new file mode 100644 (file)
index 0000000..4d3ad2f
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_HSequenceOfEntity_HeaderFile
+#define Express_HSequenceOfEntity_HeaderFile
+
+#include <Express_SequenceOfEntity.hxx>
+#include <NCollection_DefineHSequence.hxx>
+
+DEFINE_HSEQUENCE(Express_HSequenceOfEntity, Express_SequenceOfEntity)
+
+
+#endif
diff --git a/src/Express/Express_HSequenceOfField.hxx b/src/Express/Express_HSequenceOfField.hxx
new file mode 100644 (file)
index 0000000..46ab070
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_HSequenceOfField_HeaderFile
+#define Express_HSequenceOfField_HeaderFile
+
+#include <Express_SequenceOfField.hxx>
+#include <NCollection_DefineHSequence.hxx>
+
+DEFINE_HSEQUENCE(Express_HSequenceOfField, Express_SequenceOfField)
+
+
+#endif
diff --git a/src/Express/Express_HSequenceOfItem.hxx b/src/Express/Express_HSequenceOfItem.hxx
new file mode 100644 (file)
index 0000000..6490991
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_HSequenceOfItem_HeaderFile
+#define Express_HSequenceOfItem_HeaderFile
+
+#include <Express_SequenceOfItem.hxx>
+#include <NCollection_DefineHSequence.hxx>
+
+DEFINE_HSEQUENCE(Express_HSequenceOfItem, Express_SequenceOfItem)
+
+
+#endif
diff --git a/src/Express/Express_Integer.cxx b/src/Express/Express_Integer.cxx
new file mode 100644 (file)
index 0000000..4595d17
--- /dev/null
@@ -0,0 +1,38 @@
+// Created:    Tue Nov  2 15:27:26 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Integer.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Integer,Express_PredefinedType)
+
+//=======================================================================
+//function : Express_Integer
+//purpose  : 
+//=======================================================================
+
+Express_Integer::Express_Integer () 
+{
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Integer::CPPName () const
+{
+  return new TCollection_HAsciiString ( "Standard_Integer" );
+}
diff --git a/src/Express/Express_Integer.hxx b/src/Express/Express_Integer.hxx
new file mode 100644 (file)
index 0000000..0490b5e
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Integer_HeaderFile
+#define _Express_Integer_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_PredefinedType.hxx>
+class TCollection_HAsciiString;
+
+
+//! Implements EXPRESS type 'INTEGER'
+class Express_Integer : public Express_PredefinedType
+{
+
+public:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_Integer();
+  
+  //! Returns "Standard_Integer"
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Integer,Express_PredefinedType)
+
+protected:
+
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Integer_HeaderFile
diff --git a/src/Express/Express_Item.cxx b/src/Express/Express_Item.cxx
new file mode 100644 (file)
index 0000000..b2e9aed
--- /dev/null
@@ -0,0 +1,263 @@
+// Created:    Tue Nov  2 13:14:31 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Item.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Item, Standard_Transient)
+
+Standard_Integer Express_Item::myIndex = -1;
+
+//=======================================================================
+//function : Express_Item
+//purpose  : 
+//=======================================================================
+
+Express_Item::Express_Item (const Standard_CString name)
+{
+  myName = new TCollection_HAsciiString ( name );
+  myMark = Standard_False;
+  myShortName = new TCollection_HAsciiString;
+  myCategory = new TCollection_HAsciiString;
+  myhasCheck = Standard_False;
+  myhasFillShared = Standard_False;
+}
+
+//=======================================================================
+//function : Express_Item
+//purpose  : 
+//=======================================================================
+
+Express_Item::Express_Item (const Handle(TCollection_HAsciiString) &name)
+{
+  myName = name;
+  myMark = Standard_False;
+  myShortName = new TCollection_HAsciiString;
+  myCategory = new TCollection_HAsciiString;
+  myhasCheck = Standard_False;
+  myhasFillShared = Standard_False;
+}
+
+//=======================================================================
+//function : Name
+//purpose  : 
+//=======================================================================
+
+const Handle(TCollection_HAsciiString) &Express_Item::Name () const
+{
+  return myName;
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Item::CPPName () const
+{
+  Handle(TCollection_HAsciiString) name = GetPackageName ( Standard_True )->Cat ( "_" );
+  name->AssignCat ( myName );
+  return name;
+}
+
+//=======================================================================
+//function : SetPackageName
+//purpose  : 
+//=======================================================================
+
+void Express_Item::SetPackageName (const Handle(TCollection_HAsciiString) &pack)
+{
+  myPack = pack;
+}
+
+//=======================================================================
+//function : GetPackageName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Item::GetPackageName (const Standard_Boolean Auto) const
+{
+  if ( myPack.IsNull() && Auto ) return new TCollection_HAsciiString ( "StepStep" );
+  return myPack;
+}
+
+//=======================================================================
+//function : GetMark
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Item::GetMark () const
+{
+  return myMark;
+}
+
+//=======================================================================
+//function : SetMark
+//purpose  : 
+//=======================================================================
+
+void Express_Item::SetMark (const Standard_Boolean mark) 
+{
+  myMark = mark;
+}
+
+//=======================================================================
+//function : Generate
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Item::Generate ()
+{
+  if ( ! GetMark() ) return Standard_False;
+  if ( GetPackageName().IsNull() )
+    SetPackageName ( GetPackageName ( Standard_True ) );
+  SetMark ( Standard_False );
+  return GenerateClass();
+}
+
+//=======================================================================
+//function : Use
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Item::Use (const Handle(TCollection_HAsciiString) &pack, 
+                                    const Standard_Boolean defer) 
+{
+  if ( ! GetPackageName().IsNull() ) {
+    // issue a warning message if item from known package uses item from unknown package (StepStep)
+    if ( pack->String().IsDifferent ( "StepStep" ) &&
+         GetPackageName()->String().IsEqual ( "StepStep" ) ) {
+      std::cout << "Warning: item " << Name()->ToCString() << " has no package assigned, but used from package " << pack->ToCString() << std::endl;
+    }
+  
+    return Standard_False;
+  }
+  
+  // issue a warning message if type still does not have package assigned
+  if ( pack->String().IsDifferent ( "StepStep" ) ) {
+    std::cout << "Warning: item " << Name()->ToCString() << " has no package assigned, setting " << pack->ToCString() << std::endl;
+  }
+  
+  SetPackageName ( pack );
+  SetMark ( Standard_True );
+  if ( defer ) return Standard_False;
+  
+  // manage indent for cout in order to mark structure of calls
+  static Standard_Integer shift=0;
+  shift++;
+  for ( Standard_Integer i=0; i < shift; i++ ) std::cout << "  ";
+  Standard_Boolean res = Generate(); 
+  shift--;
+  return res;
+}
+//=======================================================================
+//function : SetCategory
+//purpose  : 
+//=======================================================================
+
+ void Express_Item::SetCategory(const Handle(TCollection_HAsciiString)& categ) 
+{
+   myCategory = categ;
+}
+
+//=======================================================================
+//function : Cartegory
+//purpose  : 
+//=======================================================================
+
+ Handle(TCollection_HAsciiString) Express_Item::Category() const
+{
+  return myCategory;
+}
+
+//=======================================================================
+//function : SetShortName
+//purpose  : 
+//=======================================================================
+
+ void Express_Item::SetShortName(const Handle(TCollection_HAsciiString)& shname) 
+{
+   myShortName = shname;
+}
+
+//=======================================================================
+//function : ShortName
+//purpose  : 
+//=======================================================================
+
+ Handle(TCollection_HAsciiString) Express_Item::ShortName() const
+{
+  return  myShortName;
+}
+//=======================================================================
+//function : SetCheckFlag
+//purpose  : 
+//=======================================================================
+
+ void Express_Item::SetCheckFlag(const Standard_Boolean checkFlag) 
+{
+  myhasCheck = checkFlag;
+}
+
+//=======================================================================
+//function : CheckFlag
+//purpose  : 
+//=======================================================================
+
+ Standard_Boolean Express_Item::CheckFlag() const
+{
+  return myhasCheck;
+}
+
+//=======================================================================
+//function : SetFillSharedFlag
+//purpose  : 
+//=======================================================================
+
+ void Express_Item::SetFillSharedFlag(const Standard_Boolean fillsharedFlag) 
+{
+  myhasFillShared = fillsharedFlag;
+}
+
+//=======================================================================
+//function : FillSharedFlag
+//purpose  : 
+//=======================================================================
+
+ Standard_Boolean Express_Item::FillSharedFlag() const
+{
+  return myhasFillShared;
+}
+
+ //=======================================================================
+ //function : SetIndex
+ //purpose  : 
+ //=======================================================================
+
+ void Express_Item::SetIndex(const Standard_Integer theIndex)
+ {
+   myIndex = theIndex;
+ }
+
+ //=======================================================================
+ //function : Index
+ //purpose  : 
+ //=======================================================================
+
+ Standard_Integer Express_Item::Index()
+ {
+   return myIndex;
+ }
+
diff --git a/src/Express/Express_Item.hxx b/src/Express/Express_Item.hxx
new file mode 100644 (file)
index 0000000..1248a9c
--- /dev/null
@@ -0,0 +1,138 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Item_HeaderFile
+#define _Express_Item_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_DefineHandle.hxx>
+
+#include <Standard_Boolean.hxx>
+#include <Standard_Transient.hxx>
+#include <Standard_CString.hxx>
+class TCollection_HAsciiString;
+
+
+//! Base class for items of the schema. Stores a name of the class,
+//! package name and flag used to mark items for generation.
+//! Provides interface for writing generated class definitions to HXX
+//! and CXX files.
+class Express_Item : public Standard_Transient
+{
+public:
+
+  static Standard_Integer myIndex;
+
+  //! Returns item name
+  Standard_EXPORT  const  Handle(TCollection_HAsciiString)& Name()  const;
+  
+  //! Returns (generated) name for the item in CXX-style (Package_Class)
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const;
+  
+  //! Returns package name
+  //! If not defined, returns NULL if auto is False (default)
+  //! or "StepStep" if auto is True
+  Standard_EXPORT   Handle(TCollection_HAsciiString) GetPackageName (const Standard_Boolean Auto = Standard_False)  const;
+  
+  //! Sets package name
+  Standard_EXPORT   void SetPackageName (const Handle(TCollection_HAsciiString)& pack) ;
+  
+  //! Returns True if item is marked for generation
+  Standard_EXPORT   Standard_Boolean GetMark()  const;
+  
+  //! Change generation mark flag
+  Standard_EXPORT   void SetMark (const Standard_Boolean mark) ;
+  
+  //! General interface for creating HXX/CXX files from item
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const = 0;
+  
+  //! Checks that item is marked for generation and if yes,
+  //! generate it by calling GenerateClass. But firstly define
+  //! PackageName to "StepStep" if not yet defined and drop Mark flag.
+  Standard_EXPORT   Standard_Boolean Generate() ;
+  
+  //! Declares item as used by other item being generated
+  //! Checks that item has package defined. If not, package is defined
+  //! by pack argument (supposing that it is package of item that uses
+  //! current one) and Mark flag is set. Then, if defer is False,
+  //! calls Generate().
+  Standard_EXPORT   Standard_Boolean Use (const Handle(TCollection_HAsciiString)& pack, const Standard_Boolean defer = Standard_False) ;
+  
+  //! Set category for item
+  Standard_EXPORT   void SetCategory (const Handle(TCollection_HAsciiString)& categ) ;
+  
+  //! Get item category
+  Standard_EXPORT   Handle(TCollection_HAsciiString) Category()  const;
+  
+  //! Set short name for item
+  Standard_EXPORT   void SetShortName (const Handle(TCollection_HAsciiString)& shname) ;
+  
+  //! Get item short name
+  Standard_EXPORT   Handle(TCollection_HAsciiString) ShortName()  const;
+  
+  //! Set flag for presence of method Check in the class
+  Standard_EXPORT   void SetCheckFlag (const Standard_Boolean checkFlag) ;
+  
+  //! Get flag resposible for  presence of method Check in the class
+  Standard_EXPORT   Standard_Boolean CheckFlag()  const;
+  
+  //! Set flag for presence of method FillShared in the class
+  Standard_EXPORT   void SetFillSharedFlag (const Standard_Boolean fillsharedFlag) ;
+  
+  //! Get flag resposible for  presence of method FillShared in the class
+  Standard_EXPORT   Standard_Boolean FillSharedFlag()  const;
+
+  //! Set start entity index
+  Standard_EXPORT static void SetIndex(const Standard_Integer theIndex);
+
+  //! Get current entity index
+  Standard_EXPORT static Standard_Integer Index();
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Item,Standard_Transient)
+
+protected:
+
+  
+  //! Creates object and initialises fields PackageName and
+  //! CreateFlag by 0
+  Standard_EXPORT Express_Item(const Standard_CString name);
+  
+  //! Creates object and initialises fields PackageName and
+  //! CreateFlag by 0
+  Standard_EXPORT Express_Item(const Handle(TCollection_HAsciiString)& name);
+
+
+
+private: 
+
+
+  Handle(TCollection_HAsciiString) myName;
+  Handle(TCollection_HAsciiString) myPack;
+  Standard_Boolean myMark;
+  Handle(TCollection_HAsciiString) myShortName;
+  Handle(TCollection_HAsciiString) myCategory;
+  Standard_Boolean myhasCheck;
+  Standard_Boolean myhasFillShared;
+
+
+};
+
+
+
+
+
+
+#endif // _Express_Item_HeaderFile
diff --git a/src/Express/Express_List.hxx b/src/Express/Express_List.hxx
new file mode 100644 (file)
index 0000000..ec0a961
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_List_HeaderFile
+#define _Express_List_HeaderFile
+
+#include <Express_ComplexType.hxx>
+
+typedef Express_ComplexType Express_List;
+
+#endif // _Express_List_HeaderFile
diff --git a/src/Express/Express_Logical.cxx b/src/Express/Express_Logical.cxx
new file mode 100644 (file)
index 0000000..4b1e0a2
--- /dev/null
@@ -0,0 +1,69 @@
+// Created:    Tue Nov  2 15:27:26 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Logical.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Logical,Express_PredefinedType)
+
+//=======================================================================
+//function : Express_Logical
+//purpose  : 
+//=======================================================================
+
+Express_Logical::Express_Logical () 
+{
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Logical::CPPName () const
+{
+  return new TCollection_HAsciiString ( "StepData_Logical" );
+}
+
+//=======================================================================
+//function : IsStandard
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Logical::IsStandard () const
+{
+  return Standard_False;
+}
+
+//=======================================================================
+//function : IsSimple
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Logical::IsSimple () const
+{
+  return Standard_True;
+}
+
+//=======================================================================
+//function : IsHandle
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Logical::IsHandle () const
+{
+  return Standard_False;
+}
+
diff --git a/src/Express/Express_Logical.hxx b/src/Express/Express_Logical.hxx
new file mode 100644 (file)
index 0000000..01fb3c5
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Logical_HeaderFile
+#define _Express_Logical_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_PredefinedType.hxx>
+
+class TCollection_HAsciiString;
+
+
+//! Implements EXPRESS type 'LOGICAL'
+class Express_Logical : public Express_PredefinedType
+{
+
+public:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_Logical();
+  
+  //! Returns "StepData_Logical"
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+  //! Return False
+  Standard_EXPORT virtual   Standard_Boolean IsStandard()  const Standard_OVERRIDE;
+  
+  //! Return False
+  Standard_EXPORT virtual   Standard_Boolean IsSimple()  const Standard_OVERRIDE;
+  
+  //! Return False
+  Standard_EXPORT virtual   Standard_Boolean IsHandle()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Logical,Express_PredefinedType)
+
+protected:
+
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Logical_HeaderFile
diff --git a/src/Express/Express_NamedType.cxx b/src/Express/Express_NamedType.cxx
new file mode 100644 (file)
index 0000000..7c6c345
--- /dev/null
@@ -0,0 +1,137 @@
+// Created:    Tue Nov  2 15:13:31 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_NamedType.hxx>
+#include <Express_Item.hxx>
+#include <Express_Alias.hxx>
+#include <Express_Entity.hxx>
+#include <Express_Enum.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_NamedType,Express_Type)
+
+//=======================================================================
+//function : Express_NamedType
+//purpose  : 
+//=======================================================================
+
+Express_NamedType::Express_NamedType (const Standard_CString name) 
+{
+  myName = new TCollection_HAsciiString ( name );
+}
+
+//=======================================================================
+//function : Express_NamedType
+//purpose  : 
+//=======================================================================
+
+Express_NamedType::Express_NamedType (const Handle(TCollection_HAsciiString) &name) 
+{
+  myName = name;
+}
+
+//=======================================================================
+//function : Name
+//purpose  : 
+//=======================================================================
+
+const Handle(TCollection_HAsciiString) &Express_NamedType::Name () const
+{
+  return myName;
+}
+
+//=======================================================================
+//function : Item
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_Item) &Express_NamedType::Item () const
+{
+  return myItem;
+}
+
+//=======================================================================
+//function : SetItem
+//purpose  : 
+//=======================================================================
+
+void Express_NamedType::SetItem (const Handle(Express_Item) &it) 
+{
+  myItem = it;
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_NamedType::CPPName () const
+{
+  return myItem->CPPName();
+}
+
+//=======================================================================
+//function : IsStandard
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_NamedType::IsStandard () const
+{
+  if ( myItem->IsKind(STANDARD_TYPE(Express_Alias)) ) {
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( myItem );
+    return alias->Type()->IsStandard();
+  }
+  return Standard_False;
+}
+
+//=======================================================================
+//function : IsSimple
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_NamedType::IsSimple () const
+{
+  if ( myItem->IsKind(STANDARD_TYPE(Express_Alias)) ) {
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( myItem );
+    return alias->Type()->IsSimple();
+  }
+  if ( myItem->IsKind(STANDARD_TYPE(Express_Enum)) ) return Standard_True;
+  return Standard_False; // SELECT & ENTITY
+}
+
+//=======================================================================
+//function : IsHandle
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_NamedType::IsHandle () const
+{
+  if ( myItem->IsKind(STANDARD_TYPE(Express_Alias)) ) {
+    Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( myItem );
+    return alias->Type()->IsHandle();
+  }
+  if ( myItem->IsKind(STANDARD_TYPE(Express_Entity)) ) return Standard_True;
+  return Standard_False; // SELECT & ENUMERATION
+}
+
+//=======================================================================
+//function : Use
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_NamedType::Use (const Handle(TCollection_HAsciiString) &pack,
+                                         const Standard_Boolean defer) const
+{
+  return myItem->Use ( pack, defer );
+}
diff --git a/src/Express/Express_NamedType.hxx b/src/Express/Express_NamedType.hxx
new file mode 100644 (file)
index 0000000..e43daf0
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_NamedType_HeaderFile
+#define _Express_NamedType_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Type.hxx>
+
+class TCollection_HAsciiString;
+class Express_Item;
+
+
+//! Base class for complex types (ARRAY, LIST, BAG, SET)
+//! in EXPRESS schema
+//! Stores type of elements and
+class Express_NamedType : public Express_Type
+{
+
+public:
+
+  
+  //! Creates an object and initializes by name
+  Standard_EXPORT Express_NamedType(const Standard_CString name);
+  
+  //! Creates an object and initializes by name
+  Standard_EXPORT Express_NamedType(const Handle(TCollection_HAsciiString)& name);
+  
+  //! Returns name of type (item in schema)
+  Standard_EXPORT  const  Handle(TCollection_HAsciiString)& Name()  const;
+  
+  //! Returns handle to referred item in schema
+  Standard_EXPORT  const  Handle(Express_Item)& Item()  const;
+  
+  //! Sets handle to referred item in schema
+  Standard_EXPORT   void SetItem (const Handle(Express_Item)& it) ;
+  
+  //! Returns CPP-style name of the type
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+  //! Return True if type is defined in package Standard
+  Standard_EXPORT virtual   Standard_Boolean IsStandard()  const Standard_OVERRIDE;
+  
+  //! Return True if type is simple (not a class)
+  Standard_EXPORT virtual   Standard_Boolean IsSimple()  const Standard_OVERRIDE;
+  
+  //! Return True if type is inherited from Transient
+  Standard_EXPORT virtual   Standard_Boolean IsHandle()  const Standard_OVERRIDE;
+  
+  //! Declares type as used by some item being generated.
+  //! Calls Use() for referred item (found by name).
+  Standard_EXPORT virtual   Standard_Boolean Use(const Handle(TCollection_HAsciiString)& pack, const Standard_Boolean defer = Standard_False)  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_NamedType,Express_Type)
+
+protected:
+
+
+
+
+private: 
+
+
+  Handle(TCollection_HAsciiString) myName;
+  Handle(Express_Item) myItem;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_NamedType_HeaderFile
diff --git a/src/Express/Express_Number.hxx b/src/Express/Express_Number.hxx
new file mode 100644 (file)
index 0000000..7094c0e
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Number_HeaderFile
+#define _Express_Number_HeaderFile
+
+#include <Express_Integer.hxx>
+
+typedef Express_Integer Express_Number;
+
+#endif // _Express_Number_HeaderFile
diff --git a/src/Express/Express_PredefinedType.cxx b/src/Express/Express_PredefinedType.cxx
new file mode 100644 (file)
index 0000000..34d8251
--- /dev/null
@@ -0,0 +1,38 @@
+// Created:    Tue Nov  2 15:13:31 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_PredefinedType.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_PredefinedType,Express_Type)
+
+//=======================================================================
+//function : Express_PredefinedType
+//purpose  : 
+//=======================================================================
+
+Express_PredefinedType::Express_PredefinedType () 
+{
+}
+
+//=======================================================================
+//function : IsStandard
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_PredefinedType::IsStandard () const
+{
+  return Standard_True;
+}
+
diff --git a/src/Express/Express_PredefinedType.hxx b/src/Express/Express_PredefinedType.hxx
new file mode 100644 (file)
index 0000000..7f59a92
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_PredefinedType_HeaderFile
+#define _Express_PredefinedType_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Type.hxx>
+
+//! Base class for predefined types (like NUMBER or STRING)
+//! in EXPRESS schema
+class Express_PredefinedType : public Express_Type
+{
+
+public:
+
+  
+  //! Returns True
+  Standard_EXPORT virtual   Standard_Boolean IsStandard()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_PredefinedType,Express_Type)
+
+protected:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_PredefinedType();
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_PredefinedType_HeaderFile
diff --git a/src/Express/Express_Real.cxx b/src/Express/Express_Real.cxx
new file mode 100644 (file)
index 0000000..7ee5c21
--- /dev/null
@@ -0,0 +1,38 @@
+// Created:    Tue Nov  2 15:27:26 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Real.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Real,Express_PredefinedType)
+
+//=======================================================================
+//function : Express_Real
+//purpose  : 
+//=======================================================================
+
+Express_Real::Express_Real () 
+{
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_Real::CPPName () const
+{
+  return new TCollection_HAsciiString ( "Standard_Real" );
+}
diff --git a/src/Express/Express_Real.hxx b/src/Express/Express_Real.hxx
new file mode 100644 (file)
index 0000000..1d8deae
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Real_HeaderFile
+#define _Express_Real_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_PredefinedType.hxx>
+class TCollection_HAsciiString;
+
+
+//! Implements EXPRESS type 'REAL'
+class Express_Real : public Express_PredefinedType
+{
+
+public:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_Real();
+  
+  //! Returns "Standard_Real"
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Real,Express_PredefinedType)
+
+protected:
+
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Real_HeaderFile
diff --git a/src/Express/Express_Reference.cxx b/src/Express/Express_Reference.cxx
new file mode 100644 (file)
index 0000000..5671b21
--- /dev/null
@@ -0,0 +1,40 @@
+// Created:    Fri Nov 22 13:32:26 2002
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Reference.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Reference,Express_Item)
+
+//=======================================================================
+//function : Express_Reference
+//purpose  : 
+//=======================================================================
+
+Express_Reference::Express_Reference (const Standard_CString name,
+                                        const Handle(TColStd_HSequenceOfHAsciiString) &types)
+     : Express_Item ( name )
+{
+  myTypes = types;
+}
+
+//=======================================================================
+//function : GenerateClass
+//purpose  : dummy method
+//=======================================================================
+
+Standard_Boolean Express_Reference::GenerateClass () const
+{
+  return Standard_False;
+}
diff --git a/src/Express/Express_Reference.hxx b/src/Express/Express_Reference.hxx
new file mode 100644 (file)
index 0000000..a0856e3
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Reference_HeaderFile
+#define _Express_Reference_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Item.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+
+class Express_HSequenceOfItem;
+
+
+//! Implements REFERENCE FROM (list of types used from other schema)
+//! item of the EXPRESS schema, with interface for Item class.
+class Express_Reference : public Express_Item
+{
+
+public:
+
+  
+  //! Create Reference item and initialize it
+  Standard_EXPORT Express_Reference(const Standard_CString name, const Handle(TColStd_HSequenceOfHAsciiString)& types);
+  
+  //! Returns list of types referenced
+  const  Handle(TColStd_HSequenceOfHAsciiString)& Types() const { return myTypes; }
+
+  //! Returns handle to sequence of items corresponding to
+  //! listed types
+  const  Handle(Express_HSequenceOfItem)& Items() const { return myItems; }
+  
+  //! Redefined to empty (in order to be able to instantiate)
+  //! Returna False
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Reference,Express_Item)
+
+protected:
+
+
+
+
+private: 
+
+
+  Handle(TColStd_HSequenceOfHAsciiString) myTypes;
+  Handle(Express_HSequenceOfItem) myItems;
+
+
+};
+
+
+#endif // _Express_Reference_HeaderFile
diff --git a/src/Express/Express_Schema.cxx b/src/Express/Express_Schema.cxx
new file mode 100644 (file)
index 0000000..8a1e6a7
--- /dev/null
@@ -0,0 +1,282 @@
+// Created:    Tue Nov  2 12:29:06 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Schema.hxx>
+
+#include <Express_Type.hxx>
+#include <Express_NamedType.hxx>
+#include <Express_ComplexType.hxx>
+#include <Express_Alias.hxx>
+#include <Express_Select.hxx>
+#include <Express_Enum.hxx>
+#include <Express_Entity.hxx>
+#include <Express_Field.hxx>
+#include <Express_HSequenceOfField.hxx>
+#include <Express_HSequenceOfEntity.hxx>
+
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Schema,Standard_Transient)
+
+//=======================================================================
+//function : Express_Schema
+//purpose  : 
+//=======================================================================
+
+Express_Schema::Express_Schema (const Standard_CString name,
+                                 const Handle(Express_HSequenceOfItem) &items)
+{
+  myName = new TCollection_HAsciiString ( name );
+  myItems = items;
+  Prepare();
+}
+
+//=======================================================================
+//function : Express_Schema
+//purpose  : 
+//=======================================================================
+
+Express_Schema::Express_Schema (const Handle(TCollection_HAsciiString) &name,
+                                 const Handle(Express_HSequenceOfItem) &items)
+{
+  myName = name;
+  myItems = items;
+  Prepare();
+}
+
+//=======================================================================
+//function : Name
+//purpose  : 
+//=======================================================================
+
+const Handle(TCollection_HAsciiString) &Express_Schema::Name () const
+{
+  return myName;
+}
+
+//=======================================================================
+//function : Items
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_HSequenceOfItem) &Express_Schema::Items () const
+{
+  return myItems;
+}
+
+//=======================================================================
+//function : NbItems
+//purpose  : 
+//=======================================================================
+
+Standard_Integer Express_Schema::NbItems () const
+{
+  return myItems->Length();
+}
+
+//=======================================================================
+//function : Item
+//purpose  : 
+//=======================================================================
+
+Handle(Express_Item) Express_Schema::Item (const Standard_Integer num) const
+{
+  return myItems->Value(num);
+}
+
+//=======================================================================
+//function : Item
+//purpose  : 
+//=======================================================================
+
+Handle(Express_Item) Express_Schema::Item (const Standard_CString name, 
+                                            const Standard_Boolean silent) const
+{
+  if ( ! myDict.IsBound ( name ) ) {
+    if ( ! silent )
+      std::cout << "Error: attempt to access unknown item by name " << name << std::endl;
+    return 0;
+  }
+  return myDict.Find (name);
+}
+
+//=======================================================================
+//function : Item
+//purpose  : 
+//=======================================================================
+
+Handle(Express_Item) Express_Schema::Item (const TCollection_AsciiString &name) const
+{
+  return Item ( name.ToCString() );
+}
+
+//=======================================================================
+//function : Item
+//purpose  : 
+//=======================================================================
+
+Handle(Express_Item) Express_Schema::Item (const Handle(TCollection_HAsciiString) &name) const
+{
+  return Item ( name->ToCString() );
+}
+
+//=======================================================================
+//function : Prepare
+//purpose  : 
+//=======================================================================
+
+// Convert STEP-style name (lowercase, with underscores)
+// to CASCADE-style name (each word starts with uppercase, no intervals)
+static void NameToCasCade (const Handle(TCollection_HAsciiString) &name)
+{
+  if ( name.IsNull() ) return;
+  for ( Standard_Integer i=1; i <= name->Length(); i++ ) {
+    if ( name->Value(i) == '_' ) {
+      name->Remove ( i );
+    }
+    else if ( i >1 ) continue;
+    name->SetValue ( i, UpperCase ( name->Value(i) ) );
+  }
+}
+
+// Convert names for Type object
+static void NameToCasCade (const Handle(Express_Type) &type)
+{
+  if ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    const Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    NameToCasCade ( named->Name() );
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) {
+    const Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+    NameToCasCade ( complex->Type() );
+  }
+}
+
+// Prepare data: convert names to CasCade, fill dictionary of typenames
+// and set handles to items where they are referenced by names
+void Express_Schema::Prepare ()
+{
+  myDict.Clear();
+  if ( myItems.IsNull() ) return;
+  
+  Standard_Integer nbItems = NbItems();
+  
+  // convert names annd fill dictionary
+  for ( Standard_Integer num=1; num <= nbItems; num++ ) {
+    // get item
+    const Handle(Express_Item) item = Item(num);
+
+    // change item name
+    NameToCasCade ( item->Name() );
+
+    // change names of referred types and other names
+    if ( item->IsKind(STANDARD_TYPE(Express_Alias)) ) {
+      const Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( item );
+      NameToCasCade ( alias->Type() );
+    }
+    else if ( item->IsKind(STANDARD_TYPE(Express_Select)) ) {
+      const Handle(Express_Select) select = Handle(Express_Select)::DownCast ( item );
+      for ( Standard_Integer i=1; i <= select->Names()->Length(); i++ )
+       NameToCasCade ( select->Names()->Value(i) );
+    }
+    else if ( item->IsKind(STANDARD_TYPE(Express_Enum)) ) {
+      const Handle(Express_Enum) en = Handle(Express_Enum)::DownCast ( item );
+      for ( Standard_Integer i=1; i <= en->Names()->Length(); i++ )
+       NameToCasCade ( en->Names()->Value(i) );
+    }
+    else if ( item->IsKind(STANDARD_TYPE(Express_Entity)) ) {
+      const Handle(Express_Entity) ent = Handle(Express_Entity)::DownCast ( item );
+      for ( Standard_Integer i=1; i <= ent->SuperTypes()->Length(); i++ )
+       NameToCasCade ( ent->SuperTypes()->Value(i) );
+      const Handle(Express_HSequenceOfField) fields = ent->Fields();
+      for (Standard_Integer i=1; i <= fields->Length(); i++ ) {
+       NameToCasCade ( fields->Value(i)->Name() );
+       NameToCasCade ( fields->Value(i)->Type() );
+      }
+    }
+
+    // add to dictionary
+    myDict.Bind (item->Name()->String(), item);
+  }
+
+  // set references to items from other items and types
+  for (Standard_Integer num=1; num <= nbItems; num++ ) {
+    const Handle(Express_Item) item = Item(num);
+
+    if ( item->IsKind(STANDARD_TYPE(Express_Alias)) ) {
+      const Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast ( item );
+      PrepareType ( alias->Type() );
+      // for aliases, define package to avoid warnings
+      alias->SetPackageName ( new TCollection_HAsciiString ( "Standard" ) );
+      continue;
+    }
+    else if ( item->IsKind(STANDARD_TYPE(Express_Select)) ) {
+      const Handle(Express_Select) select = Handle(Express_Select)::DownCast ( item );
+      Handle(TColStd_HSequenceOfHAsciiString) names = select->Names();
+      Handle(Express_HSequenceOfItem) items = select->Items();
+      for ( Standard_Integer i=1; i <= names->Length(); i++ ) {
+       Handle(Express_Item) it = Item ( names->Value(i) );
+       // if select refers to another select, expand it
+       if ( it->IsKind(STANDARD_TYPE(Express_Select)) ) {
+         std::cout << "Info: SELECT " << item->Name()->ToCString() << " refers to another SELECT " << 
+                      it->Name()->ToCString() << "; expanded" << std::endl;
+         const Handle(Express_Select) sel = Handle(Express_Select)::DownCast ( it );
+          Standard_Integer j = 1;
+         for ( ; j <= sel->Names()->Length(); j++ )
+           names->InsertBefore ( i+j-1, sel->Names()->Value(j) );
+         names->Remove ( i+j-1 );
+         i--;
+         continue;
+       }
+       items->Append ( it );
+      }
+    }
+    else if ( item->IsKind(STANDARD_TYPE(Express_Entity)) ) {
+      const Handle(Express_Entity) ent = Handle(Express_Entity)::DownCast ( item );
+      Handle(TColStd_HSequenceOfHAsciiString) names = ent->SuperTypes();
+      Handle(Express_HSequenceOfEntity) inh = ent->Inherit();
+      for ( Standard_Integer i=1; i <= names->Length(); i++ ) {
+       Handle(Express_Entity) subent = Handle(Express_Entity)::DownCast ( Item ( names->Value(i) ) );
+       if ( ! subent.IsNull() ) inh->Append ( subent );
+       else 
+        {
+          std::cout << "Error in " << item->Name()->ToCString() << ": supertype " << 
+                       names->Value(i)->ToCString() << " is not an ENTITY; ignored" << std::endl;
+        }
+      }
+      const Handle(Express_HSequenceOfField) fields = ent->Fields();
+      for (Standard_Integer i=1; i <= fields->Length(); i++ )
+       PrepareType ( fields->Value(i)->Type() );
+    }
+  }
+
+}
+
+//=======================================================================
+//function : PrepareType
+//purpose  : 
+//=======================================================================
+
+void Express_Schema::PrepareType (const Handle(Express_Type) &type) const
+{
+  if ( type->IsKind(STANDARD_TYPE(Express_NamedType)) ) {
+    Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast ( type );
+    named->SetItem ( Item ( named->Name() ) );
+  }
+  else if ( type->IsKind(STANDARD_TYPE(Express_ComplexType)) ) {
+    Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast ( type );
+    PrepareType ( complex->Type() );
+  }
+}
diff --git a/src/Express/Express_Schema.hxx b/src/Express/Express_Schema.hxx
new file mode 100644 (file)
index 0000000..94551f2
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Schema_HeaderFile
+#define _Express_Schema_HeaderFile
+
+#include <Standard_Type.hxx>
+#include <Express_DataMapOfAsciiStringItem.hxx>
+#include <Express_HSequenceOfItem.hxx>
+
+class TCollection_HAsciiString;
+class Express_HSequenceOfItem;
+class Express_Item;
+class TCollection_AsciiString;
+class Express_Type;
+
+
+//! Represents a schema as a list of items and provides general
+//! tools for generating HXX/CXX files (including dictionary of
+//! item names)
+class Express_Schema : public Standard_Transient
+{
+
+public:
+
+  
+  //! Creates a schema with given name and given set of items
+  //! and calls Prepare()
+  Standard_EXPORT Express_Schema(const Standard_CString Name, const Handle(Express_HSequenceOfItem)& items);
+  
+  //! Creates a schema with given name and given set of items
+  //! and calls Prepare()
+  Standard_EXPORT Express_Schema(const Handle(TCollection_HAsciiString)& Name, const Handle(Express_HSequenceOfItem)& items);
+  
+  //! Returns schema name
+  Standard_EXPORT  const  Handle(TCollection_HAsciiString)& Name()  const;
+  
+  //! Returns sequence of items
+  Standard_EXPORT  const  Handle(Express_HSequenceOfItem)& Items()  const;
+  
+  //! Returns number of items
+  Standard_EXPORT   Standard_Integer NbItems()  const;
+  
+  //! Returns item by index
+  Standard_EXPORT   Handle(Express_Item) Item (const Standard_Integer num)  const;
+  
+  //! Returns item by name
+  Standard_EXPORT   Handle(Express_Item) Item (const Standard_CString name, const Standard_Boolean silent = Standard_False)  const;
+  
+  //! Returns item by name
+  Standard_EXPORT   Handle(Express_Item) Item (const TCollection_AsciiString& name)  const;
+  
+  //! Returns item by name
+  Standard_EXPORT   Handle(Express_Item) Item (const Handle(TCollection_HAsciiString)& name)  const;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Schema,Standard_Transient)
+
+protected:
+
+
+
+
+private: 
+
+  
+  //! Prepares data for further work. Converts all item names
+  //! from EXPRESS style (aaa_bb) to CASCADE style (AaaBb).
+  //! Then, makes a dictionary of item names and sets handles
+  //! to all items referred initially by name
+  Standard_EXPORT   void Prepare() ;
+  
+  //! Prepares type for work by setting its handle to item in the
+  //! schema according to dictionary (for types which refer items
+  //! by name)
+  Standard_EXPORT   void PrepareType (const Handle(Express_Type)& type)  const;
+
+  Handle(TCollection_HAsciiString) myName;
+  Handle(Express_HSequenceOfItem) myItems;
+  Express_DataMapOfAsciiStringItem myDict;
+};
+
+#endif // _Express_Schema_HeaderFile
diff --git a/src/Express/Express_Select.cxx b/src/Express/Express_Select.cxx
new file mode 100644 (file)
index 0000000..2d8cdd4
--- /dev/null
@@ -0,0 +1,562 @@
+// Created:    Tue Nov  2 14:40:06 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Select.hxx>
+#include <Express.hxx>
+
+#include <OSD_Protection.hxx>
+#include <OSD_Directory.hxx>
+#include <OSD_Path.hxx>
+#include <TCollection_HAsciiString.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+
+#include <Express_ComplexType.hxx>
+#include <Express_Enum.hxx>
+#include <Express_Entity.hxx>
+#include <Express_Alias.hxx>
+#include <Express_PredefinedType.hxx>
+#include <Express_Type.hxx>
+#include <Express_HSequenceOfItem.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Select,Express_Item)
+
+//=======================================================================
+//function : Express_Select
+//purpose  : 
+//=======================================================================
+
+Express_Select::Express_Select (const Standard_CString name, 
+                                 const Handle(TColStd_HSequenceOfHAsciiString) &names)
+     : Express_Item(name), myNames(names)
+{
+  myItems = new Express_HSequenceOfItem;
+}
+
+//=======================================================================
+//function : Names
+//purpose  : 
+//=======================================================================
+
+const Handle(TColStd_HSequenceOfHAsciiString) &Express_Select::Names () const
+{
+  return myNames;
+}
+
+//=======================================================================
+//function : Items
+//purpose  : 
+//=======================================================================
+
+const Handle(Express_HSequenceOfItem) &Express_Select::Items () const
+{
+  return myItems;
+}
+
+//=======================================================================
+//function : GenerateClass
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Select::GenerateClass () const
+{
+  Handle(TCollection_HAsciiString) CPPname = CPPName();
+  
+  Handle(TColStd_HSequenceOfInteger) seqMember = new TColStd_HSequenceOfInteger;
+  Handle(TColStd_HSequenceOfInteger) seqEntities = new TColStd_HSequenceOfInteger;
+  for ( Standard_Integer i=1; i <= myItems->Length(); i++ ) {
+    Handle(Express_Item) item = myItems->Value(i);
+    if (item->IsKind(STANDARD_TYPE(Express_Entity)) || item->IsKind(STANDARD_TYPE(Express_Select))
+      || item->IsKind(STANDARD_TYPE(Express_Alias)) || item->IsKind(STANDARD_TYPE(Express_ComplexType)))
+       seqEntities->Append(i);
+    else seqMember->Append(i);
+    
+  }
+  std::cout << "Generating SELECT " << CPPname->ToCString() << std::endl;
+  if(!seqMember->IsEmpty()) {
+    std::cout << "Generating SELECTMember " << CPPname->ToCString() << "Member"<< std::endl;
+    GenerateSelectMember(seqMember);
+  }
+  // create a package directory (if not yet exist)
+  OSD_Protection prot ( OSD_RX, OSD_RWX, OSD_RX, OSD_RX );
+  TCollection_AsciiString pack = GetPackageName()->String();
+  OSD_Path path ( pack );
+  OSD_Directory dir ( path );
+  dir.Build ( prot );
+  pack += "/";
+  pack += CPPname->String();
+  
+  //===============================
+  // Step 1: generating HXX
+  
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+  
+  // write start define
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << std::endl;
+
+  // write common includes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_DefineAlloc.hxx>" << std::endl;
+  os << "#include <Standard_Handle.hxx>" << std::endl;
+  os << "#include <StepData_SelectType.hxx>" << std::endl;
+  os << "#include <Standard_Integer.hxx>" << std::endl;
+  os << std::endl;
+
+  os << "class Standard_Transient;" << std::endl;
+  if (!seqMember->IsEmpty())
+    os << "class StepData_SelectMember;" << std::endl;
+
+  Standard_Integer jj = 1;
+  for (Standard_Integer i = 1; i <= myItems->Length(); i++) {
+    Handle(Express_Item) item = myItems->Value(i);
+    item->Use(GetPackageName());
+    if (item->IsKind(STANDARD_TYPE(Express_Alias))) {
+      Handle(Express_Type) type = Handle(Express_Alias)::DownCast(item)->Type();
+      TCollection_AsciiString ats = type->CPPName()->String();
+      if (type->IsStandard()) //(STANDARD_TYPE(Express_PredefinedType)))
+        continue;
+    }
+    os << "class " << item->CPPName()->ToCString() << ";" << std::endl;
+    jj++;
+  }
+  os << std::endl;
+
+  // class declaration
+  os << "//! Representation of STEP SELECT type " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public StepData_SelectType" << std::endl;
+  os << "{" << std::endl;
+  os << std::endl;
+  os << "public:" << std::endl;
+  os << std::endl;
+  os << "  DEFINE_STANDARD_ALLOC" << std::endl;
+  os << std::endl;
+
+  // default constructor
+  os << "  //! Empty constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
+  os << std::endl;
+  
+  // write common methods section
+  os << "  //! Recognizes a kind of " << Name()->ToCString() << " select type" << std::endl;
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++) {
+    Standard_Integer ind = seqEntities->Value(i);
+    os << "  //! -- " << i << " -> " << myNames->Value(ind)->ToCString() << std::endl;
+  }
+  os << "  Standard_EXPORT Standard_Integer CaseNum (const Handle(Standard_Transient)& ent) const Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+
+  if(!seqMember->IsEmpty()) {
+    os << "  //! Recognizes items of select member " << Name()->ToCString() << "Member" << std::endl;
+    for (Standard_Integer i = 1; i <= seqMember->Length(); i++) {
+      Standard_Integer ind = seqMember->Value(i);
+      os << "  //! -- " << i << " -> " << myNames->Value(ind)->ToCString() << std::endl;
+    }
+    os << "  //! -- 0 else" << std::endl;
+    os << "  Standard_EXPORT virtual Standard_Integer CaseMem (const Handle(StepData_SelectMember)& ent) const Standard_OVERRIDE;" << std::endl;
+    os << std::endl;
+
+    os << " //! Returns a new select member the type " << Name()->ToCString() << "Member" << std::endl;
+    os << "  Standard_EXPORT virtual Handle(StepData_SelectMember) NewMember() const Standard_OVERRIDE;" << std::endl;
+    os << std::endl;
+  }
+
+  // write methods get for entities
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++) {
+    Standard_Integer ind = seqEntities->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    Handle(TCollection_HAsciiString) name = item->Name();
+    os << "  //! Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  Standard_EXPORT Handle(" << item->CPPName()->ToCString() << ") "  << name->ToCString() << "() const;" << std::endl;
+    os << std::endl;
+  }
+
+  // writes method set and get for enum , integer, real and string.
+  for (Standard_Integer i = 1; i <= seqMember->Length(); i++) {
+    Standard_Integer ind = seqMember->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    Handle(TCollection_HAsciiString) name = item->Name();
+    os << "  //! Set Value for " << name->ToCString() << std::endl;
+    os << "  Standard_EXPORT void Set" << name->ToCString()
+       << " (const " << item->CPPName()->ToCString() << " theVal);"<< std::endl;
+    os << std::endl;
+    os << "  //! Returns Value as " << name->ToCString() << " (or Null if another type)" << std::endl;
+    os << "  " << item->CPPName()->ToCString() << " " << name->ToCString() << "() const;" << std::endl;
+    os << std::endl;
+  }
+  
+  // write end
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os.close();
+  
+  //===============================
+  // Step 2: generating CXX
+  
+  // Open CXX file 
+  os.open ( pack.Cat ( ".cxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  // write include section
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  if(!seqMember->IsEmpty()) {
+    os << "#include <" << CPPName()->ToCString() << "Member.hxx>"<< std::endl;
+    os << "#include <TCollection_HAsciiString.hxx>"<< std::endl;
+  }
+  for (Standard_Integer i = 1; i <= seqEntities->Length(); i++)  {
+    Standard_Integer ind = seqEntities->Value(i);
+    os << "#include <" <<
+      myItems->Value(ind)->CPPName()->ToCString() << ".hxx>" << std::endl;
+  }
+
+  // write constructor
+  Express::WriteMethodStamp ( os, CPPname );
+  os << CPPname->ToCString() << "::" << CPPname->ToCString() << " ()" << std::endl;
+  os << "{" << std::endl << "}" << std::endl;
+
+  // write CaseNum method
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "CaseNum" ) );
+  os << "Standard_Integer " << CPPname->ToCString() << "::CaseNum (const Handle(Standard_Transient)& ent) const" << std::endl;
+  os << "{" << std::endl;
+  
+  if(!seqEntities->IsEmpty()) {
+    os << "  if (ent.IsNull()) return 0;" << std::endl;
+    for (Standard_Integer i=1; i <= seqEntities->Length(); i++ )  {
+      Standard_Integer ind = seqEntities->Value(i);
+      os << "  if (ent->IsKind(STANDARD_TYPE(" << 
+        myItems->Value(ind)->CPPName()->ToCString() << "))) return " << i << ";" << std::endl;
+    }
+    os << "  return 0;\n}" << std::endl;
+  }
+  else os << "  return 0;\n}" << std::endl;
+
+  if(!seqMember->IsEmpty()) { //gka for AP209
+    //write CaseMem method
+    Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "CaseMem" ) );
+    os<<"Standard_Integer "<<CPPname->ToCString()<<"::CaseMem (const Handle(StepData_SelectMember)& ent) const"<< std::endl;
+    os<<"{"<< std::endl;
+    os<<" if(ent.IsNull()) return 0;"<< std::endl;
+    //os<<" Handle("<< CPPName()->ToCString()<<"Member sm = Handle("<<CPPName()->ToCString()<<"Member)::DownCast(ent);"<< std::endl; 
+    //os<<" if(sm.IsNull()) return 0;"<< std::endl;
+    //os<<" Handle(TCollection_HAsciiString) name;"<< std::endl;
+    for( int j = 1; j<= seqMember->Length(); j++) {
+      Standard_Integer ind = seqMember->Value(j);
+      //os<<"  name = new TCollection_HAsciiString(\""<<myNames->Value(ind)->ToCString()<<"\");"<< std::endl;
+      if(j ==1)
+        os<<" if(ent->Matches(\""<<myNames->Value(ind)->ToCString()<< "\")) return "<<j<<";"<< std::endl;
+      else os<<" else if(ent->Matches(\""<<myNames->Value(ind)->ToCString()<< "\")) return "<<j<<";"<< std::endl;
+    }
+    os<<" else return 0;"<< std::endl;
+    os<<"}"<< std::endl;
+    
+    //write NewMember method
+     Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "NewMember" ) );
+    os<<"Handle(StepData_SelectMember) "<<CPPname->ToCString()<<"::NewMember() const"<< std::endl;
+    os<<"{"<< std::endl;
+    os<<" return new "<<CPPname->ToCString()<<"Member;"<< std::endl;
+    os<<"}"<< std::endl;
+    
+  }
+  
+  
+  // write methods Get for entities.
+  for (Standard_Integer i=1; i <= seqEntities->Length(); i++ ) {
+    Standard_Integer ind = seqEntities->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    Express::WriteMethodStamp ( os, item->Name() );
+    os << "Handle(" << item->CPPName()->ToCString() << ") " << CPPname->ToCString() <<
+          "::" << item->Name()->ToCString() << " () const" << std::endl;
+    os << "{\n  return Handle(" << item->CPPName()->ToCString() << ")::DownCast(Value());\n}" << std::endl;
+  }
+  
+  //write methods Set and Get for Integer, Real, String and Enum
+  for (Standard_Integer i=1; i <= seqMember->Length(); i++ ) {
+    Standard_Integer ind = seqMember->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    Handle(TCollection_HAsciiString) stamp = new TCollection_HAsciiString("Set");
+    stamp->AssignCat(item->Name());
+    Express::WriteMethodStamp ( os, stamp );
+    
+    Standard_Boolean isString = (item->CPPName()->String().Location("HAsciiString",1,item->CPPName()->Length()) > 0);
+    Handle(TCollection_HAsciiString) nameFunc = new TCollection_HAsciiString;
+    Handle(TCollection_HAsciiString) Func = new TCollection_HAsciiString;
+    Standard_Boolean isEnum = item->IsKind(STANDARD_TYPE(Express_Enum));
+    if(!isEnum) {
+      if(isString)
+        Func->AssignCat("String");
+      else {
+        nameFunc->AssignCat(item->CPPName());
+        Func = nameFunc;
+        Standard_Integer splitind = nameFunc->String().Location("_",1,item->CPPName()->Length());
+        if(splitind)
+          Func = nameFunc->Split(splitind);
+      }
+    }
+    
+    //write method set
+    if(isString) {
+      os <<  "void "<<CPPname->ToCString() <<
+        "::" << "Set"<<item->Name()->ToCString() << " (const Handle("<<item->CPPName()->ToCString() << ") &val)" << std::endl;
+    }
+    else  
+      os <<  "void "<<CPPname->ToCString() <<
+          "::" << "Set"<<item->Name()->ToCString() << " (const "<<item->CPPName()->ToCString() << " val)" << std::endl;
+
+    os<<"{"<< std::endl;
+    
+    os<< "  Handle("<<CPPname->ToCString()<<"Member) SelMem = Handle(" << CPPname->ToCString()<<"Member)::DownCast(Value());"<< std::endl;
+    os<<"  if(SelMem.IsNull()) return;"<< std::endl;
+    os<<" Handle(TCollection_HAsciiString) name = new TCollection_HAsciiString(\""<<item->Name()->ToCString()<<"\");"<< std::endl;
+    os<<" SelMem->SetName(name->ToCString());"<< std::endl;
+    if(isEnum) 
+      os<<" SelMem->SetEnum((Standard_Integer)val);"<< std::endl;
+    else if(isString)
+      os<<" SelMem->Set"<<Func->ToCString()<<"(val->ToCString());"<< std::endl;
+    else 
+      os<<" SelMem->Set"<<Func->ToCString()<<"(val);"<< std::endl;
+    
+    os<<"}"<< std::endl;
+    
+    //write method get
+    Express::WriteMethodStamp ( os, item->Name() );
+    if(isString)
+       os << "Handle("<<item->CPPName()->ToCString() << ") "<<CPPname->ToCString() <<
+      "::" << item->Name()->ToCString() << " () const" << std::endl;
+    else 
+      os << item->CPPName()->ToCString() << " "<<CPPname->ToCString() <<
+      "::" << item->Name()->ToCString() << " () const" << std::endl;
+    
+    os<<"{"<< std::endl;
+    os<< "  Handle("<<CPPname->ToCString()<<"Member) SelMem = Handle(" << CPPname->ToCString()<<"Member)::DownCast(Value());"<< std::endl;
+    os<<"  if(SelMem.IsNull()) return 0;"<< std::endl;
+    os<<" Handle(TCollection_HAsciiString) name = new TCollection_HAsciiString;"<< std::endl;
+    os<<" name->AssignCat(SelMem->Name());"<< std::endl;
+    os<<" Handle(TCollection_HAsciiString) nameitem = new TCollection_HAsciiString(\""<<item->Name()->ToCString()<<"\");"<< std::endl;
+    os<<" if(name->IsDifferent(nameitem)) return 0;"<< std::endl;
+    if(isEnum) {
+      //nameFunc.AssignCat(item->Name()->ToCString());
+      os<<" Standard_Integer numit = SelMem->Enum();"<< std::endl;
+      os<<"  "<<item->CPPName()->ToCString()<<" val;"<< std::endl;
+      os<<" switch(numit) {"<< std::endl;
+      Handle(Express_Enum) Enum = Handle(Express_Enum)::DownCast(item);
+      Handle(TColStd_HSequenceOfHAsciiString) enitems =  Enum->Names();
+      Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(item->Name());
+      for(Standard_Integer k = 1; k <= enitems->Length(); k++)
+        os<<"    case "<<k<<" : val = "<<item->Name()->ToCString()<<"_"<<prefix->ToCString()<<enitems->Value(k)->ToCString()<<"; break;"<< std::endl;
+      os<<"    default : return 0;break;"<< std::endl;
+      os<<"  }"<< std::endl;
+    }
+    else if(isString) {
+      os<<" Handle(TCollection_HAsciiString) val = new TCollection_HAsciiString;"<< std::endl;
+      os<<" val->AssignCat(SelMem->String());"<< std::endl;
+    }
+    
+    else 
+      os<<" "<<item->CPPName()->ToCString()<<" val = SelMem->"<<Func->ToCString()<<"();"<< std::endl;
+      
+    
+    os<<" return val;"<< std::endl;
+    os<<"}"<< std::endl;
+      
+  }
+  // close CXX
+  os.close();
+    
+  return Standard_True;
+}
+//=======================================================================
+//function : GenerateSelectMember
+//purpose  : 
+//=======================================================================
+
+ Standard_Boolean Express_Select::GenerateSelectMember(const Handle(TColStd_HSequenceOfInteger)& seqMember) const
+{
+  Handle(TCollection_HAsciiString) CPPname = new TCollection_HAsciiString;
+  CPPname->AssignCat(CPPName());
+  CPPname->AssignCat("Member");
+    
+  Handle(TCollection_HAsciiString) MemberName = new TCollection_HAsciiString;
+  MemberName->AssignCat(Name());
+  MemberName->AssignCat("Member");
+   // create a package directory (if not yet exist)
+  OSD_Protection prot ( OSD_RX, OSD_RWX, OSD_RX, OSD_RX );
+  TCollection_AsciiString pack = GetPackageName()->String();
+  OSD_Path path ( pack );
+  OSD_Directory dir ( path );
+  dir.Build ( prot );
+  pack += "/";
+  pack += CPPname->String();
+  // Step 1: generating HXX
+  
+  // Open HXX file 
+  std::ofstream os ( pack.Cat ( ".hxx" ).ToCString() );
+  // write header
+  Express::WriteFileStamp ( os );
+
+  // write start define
+  os << "#ifndef _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << "#define _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os << std::endl;
+
+  // includes
+  os << "#include <Standard.hxx>" << std::endl;
+  os << "#include <Standard_Type.hxx>" << std::endl;
+  os << "#include <Standard_Boolean.hxx>" << std::endl;
+  os << "#include <Standard_CString.hxx>" << std::endl;
+  os << "#include <Standard_Integer.hxx>" << std::endl;
+  os << "#include <StepData_SelectNamed.hxx>" << std::endl;
+  os << std::endl;
+  os << "DEFINE_STANDARD_HANDLE(" << CPPname->ToCString() << ", StepData_SelectNamed)" << std::endl;
+  os << std::endl;
+
+  // write start of declaration (inheritance)
+  os << "  //! Representation of member for STEP SELECT type " << Name()->ToCString() << std::endl;
+  os << "class " << CPPname->ToCString() << " : public StepData_SelectNamed" << std::endl;
+  os << "{" << std::endl;
+  os << "public:" << std::endl;
+  
+   // write methods
+  os << "  //! Empty constructor" << std::endl;
+  os << "  Standard_EXPORT " << CPPname->ToCString() << "();" << std::endl;
+  os << std::endl;
+  
+  os << "  //! Returns True if has name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean HasName() const Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+  os << "  //! Returns set name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_CString Name() const Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+  os << "  //! Set name" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean SetName(const Standard_CString name) Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+  os << "  //! Tells if the name of a SelectMember matches a given one;" << std::endl;
+  os << "  Standard_EXPORT virtual Standard_Boolean Matches(const Standard_CString name) const Standard_OVERRIDE;" << std::endl;
+  os << std::endl;
+
+  //write fields
+  os <<"private:"<< std::endl;
+  os << "  Standard_Integer myCase;"<< std::endl<< std::endl;
+  // write end
+  os << "};" << std::endl;
+  os << "#endif // _" << CPPname->ToCString() << "_HeaderFile" << std::endl;
+  os.close();
+
+  //===============================
+  // Step 2: generating CXX
+   // Open CXX file 
+  os.open ( pack.Cat ( ".cxx" ).ToCString() );
+
+  // write header
+  Express::WriteFileStamp ( os );
+
+  // write include section
+  os << "#include <" << CPPname->ToCString() << ".hxx>" << std::endl;
+  os << "#include <TCollection_HAsciiString.hxx>"<< std::endl;
+  // write constructor
+  Express::WriteMethodStamp ( os, CPPname );
+  os << CPPname->ToCString() << "::" << CPPname->ToCString() << " () : myCase(0) " << std::endl;
+  os << "{" << std::endl << "}" << std::endl;
+  
+  //write method HasName
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("HasName") );
+  os<<"Standard_Boolean "<<CPPname->ToCString()<<"::HasName() const"<< std::endl;
+  os << "{" << std::endl;
+  os<< " return myCase > 0;"<< std::endl;
+  os<< "}" << std::endl;
+  
+  Standard_Boolean hasEnum = Standard_False;
+  //write method Name
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("Name") );
+  os<<"Standard_CString "<<CPPname->ToCString()<<"::Name() const"<< std::endl;
+  os << "{" << std::endl;
+  os << "  Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString;"<< std::endl;
+  os << "  switch(myCase)  {"<< std::endl;
+  Standard_Integer i = 1;
+  for( i = 1; i <= seqMember->Length(); i++) {
+    Standard_Integer ind = seqMember->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    if(item->IsKind(STANDARD_TYPE(Express_Enum)))
+      hasEnum = Standard_True;
+    os << "    case "<<i<<"  : aName->AssignCat(\""<<myNames->Value(ind)->ToCString()<<"\"); break;"<< std::endl;
+  }
+  os << "    default : break;"<< std::endl;
+  os<<"  }"<< std::endl;
+  os<<"  return aName->ToCString();"<< std::endl;
+  os<< "}" << std::endl;
+  
+  //write static method for compare name
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("CompareNames") );
+  os<<"static Standard_Integer CompareNames(const Standard_CString name";
+  if(hasEnum)
+    os<<",Standard_Integer &numen) "<< std::endl;
+  else
+    os<<")"<< std::endl;
+  os << "{" << std::endl;
+  os << "  Standard_Integer thecase = 0;"<< std::endl;
+  os << "  if (!name || name[0] == \'/0\') thecase = 0;"<< std::endl;
+  for( i = 1; i <= seqMember->Length(); i++) {
+    Standard_Integer ind = seqMember->Value(i);
+    Handle(Express_Item) item = myItems->Value(ind);
+    if(item->IsKind(STANDARD_TYPE(Express_Enum))) {
+      Handle(Express_Enum) en = Handle(Express_Enum)::DownCast(item);
+      for(Standard_Integer k =1 ; k <= en->Names()->Length();k++) {
+         os<<"   else if(!strcmp (name,\""<<en->Names()->Value(k)->ToCString()<<"\")) { "<< std::endl;
+         os<<"     thecase = "<<i<<";"<< std::endl;
+         os<<"     numen =  "<<k<<";"<< std::endl;
+         os<<"   }"<< std::endl; 
+         
+      }
+    }
+    else
+      os<<"   else if(!strcmp (name,\""<<myNames->Value(ind)->ToCString()<<"\")) thecase = "<<i<<";"<< std::endl;  
+  }
+  os << "  return thecase;"<< std::endl;
+  os << "}" << std::endl;
+  
+  //write method SetName
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("SetName") );
+  os<<"Standard_Boolean "<<CPPname->ToCString()<<"::SetName(const Standard_CString name) "<< std::endl;
+  os << "{" << std::endl;
+  if(hasEnum) {
+    os << "  Standard_Integer numit = 0;"<< std::endl;
+    os << "  myCase = CompareNames(name,numit);"<< std::endl;
+  
+    os << "  if (numit) SetInteger(numit);"<< std::endl;
+  }
+  else
+    os << "  myCase = CompareNames(name);"<< std::endl;
+  os << "  return (myCase >0);"<< std::endl;
+  
+  os<< "}" << std::endl;
+  //write method Matches
+  Express::WriteMethodStamp ( os, new TCollection_HAsciiString ("Matches") );
+  os<<"Standard_Boolean "<<CPPname->ToCString()<<"::Matches(const Standard_CString name) const"<< std::endl;
+  os << "{" << std::endl;
+  if(hasEnum) {
+    os << "  Standard_Integer numit = 0;"<< std::endl;
+    os<< " Standard_Integer thecase = CompareNames(name,numit);"<< std::endl;
+  }
+  else
+    os<< " Standard_Integer thecase = CompareNames(name);"<< std::endl;
+  os << "  return (thecase > 0);"<< std::endl;
+  os << "}" << std::endl;
+  return Standard_True;
+}
diff --git a/src/Express/Express_Select.hxx b/src/Express/Express_Select.hxx
new file mode 100644 (file)
index 0000000..3113c13
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Select_HeaderFile
+#define _Express_Select_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_Item.hxx>
+#include <Standard_CString.hxx>
+#include <Standard_Boolean.hxx>
+#include <TColStd_HSequenceOfHAsciiString.hxx>
+#include <TColStd_HSequenceOfInteger.hxx>
+
+class Express_HSequenceOfItem;
+
+//! Implements TYPE SELECT item of the EXPRESS
+//! schema, with interface for deferred Item class.
+class Express_Select : public Express_Item
+{
+
+public:
+
+  
+  //! Create SELECT item and initialize it
+  Standard_EXPORT Express_Select(const Standard_CString name, const Handle(TColStd_HSequenceOfHAsciiString)& names);
+  
+  //! Returns names of types included in this SELECT
+  Standard_EXPORT  const  Handle(TColStd_HSequenceOfHAsciiString)& Names()  const;
+  
+  //! Returns sequence of items corresponding to typenames
+  Standard_EXPORT  const  Handle(Express_HSequenceOfItem)& Items()  const;
+  
+  //! Create HXX/CXX files from item
+  Standard_EXPORT virtual   Standard_Boolean GenerateClass()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Select,Express_Item)
+
+protected:
+
+
+
+
+private: 
+
+  
+  Standard_EXPORT   Standard_Boolean GenerateSelectMember (const Handle(TColStd_HSequenceOfInteger)& seqMember)  const;
+
+  Handle(TColStd_HSequenceOfHAsciiString) myNames;
+  Handle(Express_HSequenceOfItem) myItems;
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Select_HeaderFile
diff --git a/src/Express/Express_SequenceOfEntity.hxx b/src/Express/Express_SequenceOfEntity.hxx
new file mode 100644 (file)
index 0000000..42e4d71
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_SequenceOfEntity_HeaderFile
+#define Express_SequenceOfEntity_HeaderFile
+
+#include <Express_Entity.hxx>
+#include <NCollection_Sequence.hxx>
+
+typedef NCollection_Sequence<Handle(Express_Entity)> Express_SequenceOfEntity;
+
+
+#endif
diff --git a/src/Express/Express_SequenceOfField.hxx b/src/Express/Express_SequenceOfField.hxx
new file mode 100644 (file)
index 0000000..69e67a9
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_SequenceOfField_HeaderFile
+#define Express_SequenceOfField_HeaderFile
+
+#include <Express_Field.hxx>
+#include <NCollection_Sequence.hxx>
+
+typedef NCollection_Sequence<Handle(Express_Field)> Express_SequenceOfField;
+
+
+#endif
diff --git a/src/Express/Express_SequenceOfItem.hxx b/src/Express/Express_SequenceOfItem.hxx
new file mode 100644 (file)
index 0000000..66ad4d5
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef Express_SequenceOfItem_HeaderFile
+#define Express_SequenceOfItem_HeaderFile
+
+#include <Express_Item.hxx>
+#include <NCollection_Sequence.hxx>
+
+typedef NCollection_Sequence<Handle(Express_Item)> Express_SequenceOfItem;
+
+
+#endif
diff --git a/src/Express/Express_Set.hxx b/src/Express/Express_Set.hxx
new file mode 100644 (file)
index 0000000..686115d
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Set_HeaderFile
+#define _Express_Set_HeaderFile
+
+#include <Express_ComplexType.hxx>
+
+typedef Express_ComplexType Express_Set;
+
+#endif // _Express_Set_HeaderFile
diff --git a/src/Express/Express_String.cxx b/src/Express/Express_String.cxx
new file mode 100644 (file)
index 0000000..0cf4d8c
--- /dev/null
@@ -0,0 +1,49 @@
+// Created:    Tue Nov  2 15:27:26 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_String.hxx>
+#include <TCollection_HAsciiString.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_String,Express_PredefinedType)
+
+//=======================================================================
+//function : Express_String
+//purpose  : 
+//=======================================================================
+
+Express_String::Express_String () 
+{
+}
+
+//=======================================================================
+//function : CPPName
+//purpose  : 
+//=======================================================================
+
+Handle(TCollection_HAsciiString) Express_String::CPPName () const
+{
+  return new TCollection_HAsciiString ( "TCollection_HAsciiString" );
+}
+
+//=======================================================================
+//function : IsStandard
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_String::IsStandard () const
+{
+  return Standard_False;
+}
+
diff --git a/src/Express/Express_String.hxx b/src/Express/Express_String.hxx
new file mode 100644 (file)
index 0000000..09c2af9
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_String_HeaderFile
+#define _Express_String_HeaderFile
+
+#include <Standard_Type.hxx>
+
+#include <Express_PredefinedType.hxx>
+
+class TCollection_HAsciiString;
+
+
+//! Implements EXPRESS type 'STRING'
+class Express_String : public Express_PredefinedType
+{
+
+public:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_String();
+  
+  //! Returns "Handle(TCollection_HAsciiString)"
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const Standard_OVERRIDE;
+  
+  //! Returns False
+  Standard_EXPORT virtual   Standard_Boolean IsStandard()  const Standard_OVERRIDE;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_String,Express_PredefinedType)
+
+protected:
+
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_String_HeaderFile
diff --git a/src/Express/Express_Type.cxx b/src/Express/Express_Type.cxx
new file mode 100644 (file)
index 0000000..77a7db8
--- /dev/null
@@ -0,0 +1,68 @@
+// Created:    Tue Nov  2 15:11:36 1999
+// Author:     Andrey BETENEV
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Express_Type.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(Express_Type,Standard_Transient)
+
+//=======================================================================
+//function : Express_Type
+//purpose  : 
+//=======================================================================
+
+Express_Type::Express_Type ()
+{
+}
+
+//=======================================================================
+//function : IsStandard
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Type::IsStandard () const
+{
+  return Standard_False;
+}
+
+//=======================================================================
+//function : IsSimple
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Type::IsSimple () const
+{
+  return IsStandard();
+}
+
+//=======================================================================
+//function : IsHandle
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Type::IsHandle () const
+{
+  return ! IsSimple();
+}
+
+//=======================================================================
+//function : Use
+//purpose  : 
+//=======================================================================
+
+Standard_Boolean Express_Type::Use (const Handle(TCollection_HAsciiString) &,
+                                    const Standard_Boolean ) const
+{
+  return Standard_False;
+}
diff --git a/src/Express/Express_Type.hxx b/src/Express/Express_Type.hxx
new file mode 100644 (file)
index 0000000..2268d0e
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright (c) 1999-2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Express_Type_HeaderFile
+#define _Express_Type_HeaderFile
+
+#include <Standard_Type.hxx>
+
+class TCollection_HAsciiString;
+
+//! Provides basis for identification (reference) to some type
+//! in express schema
+class Express_Type : public Standard_Transient
+{
+
+public:
+
+  
+  //! Returns CPP-style name of the type
+  Standard_EXPORT virtual   Handle(TCollection_HAsciiString) CPPName()  const = 0;
+  
+  //! Return True if type is defined in package Standard (False by default)
+  Standard_EXPORT virtual   Standard_Boolean IsStandard()  const;
+  
+  //! Return True if type is simple (not a class)
+  //! (by default returns IsStandard())
+  Standard_EXPORT virtual   Standard_Boolean IsSimple()  const;
+  
+  //! Return True if type is Transient
+  //! (by default returns ! IsSimple())
+  Standard_EXPORT virtual   Standard_Boolean IsHandle()  const;
+  
+  //! Declares type as used by some item being generated.
+  //! Calls Use() for all referred types and schema items.
+  //! Default instantiation does nothing
+  Standard_EXPORT virtual   Standard_Boolean Use (const Handle(TCollection_HAsciiString)& pack, const Standard_Boolean defer = Standard_False)  const;
+
+
+
+
+  DEFINE_STANDARD_RTTIEXT(Express_Type,Standard_Transient)
+
+protected:
+
+  
+  //! Empty constructor
+  Standard_EXPORT Express_Type();
+
+
+
+private: 
+
+
+
+
+};
+
+
+
+
+
+
+
+#endif // _Express_Type_HeaderFile
diff --git a/src/Express/FILES b/src/Express/FILES
new file mode 100644 (file)
index 0000000..3f35ed5
--- /dev/null
@@ -0,0 +1,48 @@
+Express.cxx
+Express.hxx
+Express_Alias.cxx
+Express_Alias.hxx
+Express_Array.hxx
+Express_Bag.hxx
+Express_Boolean.cxx
+Express_Boolean.hxx
+Express_ComplexType.cxx
+Express_ComplexType.hxx
+Express_DataMapOfAsciiStringItem.hxx
+Express_Entity.cxx
+Express_Entity.hxx
+Express_Enum.cxx
+Express_Enum.hxx
+Express_Field.cxx
+Express_Field.hxx
+Express_HSequenceOfEntity.hxx
+Express_HSequenceOfField.hxx
+Express_HSequenceOfItem.hxx
+Express_Integer.cxx
+Express_Integer.hxx
+Express_Item.cxx
+Express_Item.hxx
+Express_List.hxx
+Express_Logical.cxx
+Express_Logical.hxx
+Express_NamedType.cxx
+Express_NamedType.hxx
+Express_Number.hxx
+Express_PredefinedType.cxx
+Express_PredefinedType.hxx
+Express_Real.cxx
+Express_Real.hxx
+Express_Reference.cxx
+Express_Reference.hxx
+Express_Schema.cxx
+Express_Schema.hxx
+Express_Select.cxx
+Express_Select.hxx
+Express_SequenceOfEntity.hxx
+Express_SequenceOfField.hxx
+Express_SequenceOfItem.hxx
+Express_Set.hxx
+Express_String.cxx
+Express_String.hxx
+Express_Type.cxx
+Express_Type.hxx
index 25c823990cd57d1336d5626b5b320a6d281336f8..5de367d7625e268dadc28897909263a8231bccb4 100644 (file)
@@ -17,7 +17,7 @@
 proc DataExchange:toolkits { } {
     return [list TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES \
                TKXCAF TKXDEIGES TKXDESTEP \
-               TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh]
+               TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKExpress]
 }
 ;#
 ;# Autres UDs a prendre.
@@ -27,6 +27,7 @@ proc DataExchange:ressources { } {
            [list both r XSMessage {} ] \
            [list both r SHMessage {} ] \
            [list both r XSTEPResource {} ] \
+           [list both x ExpToCasExe {} ] \
            ]
 }
 ;#
diff --git a/src/TKExpress/CMakeLists.txt b/src/TKExpress/CMakeLists.txt
new file mode 100644 (file)
index 0000000..078099e
--- /dev/null
@@ -0,0 +1,3 @@
+project(TKExpress)
+
+OCCT_INCLUDE_CMAKE_FILE (adm/cmake/occt_toolkit)
diff --git a/src/TKExpress/EXTERNLIB b/src/TKExpress/EXTERNLIB
new file mode 100644 (file)
index 0000000..799bf4a
--- /dev/null
@@ -0,0 +1,2 @@
+TKernel
+CSF_TBB
\ No newline at end of file
diff --git a/src/TKExpress/FILES b/src/TKExpress/FILES
new file mode 100644 (file)
index 0000000..ca4f0e5
--- /dev/null
@@ -0,0 +1,2 @@
+EXTERNLIB
+PACKAGES
diff --git a/src/TKExpress/PACKAGES b/src/TKExpress/PACKAGES
new file mode 100644 (file)
index 0000000..8e20741
--- /dev/null
@@ -0,0 +1 @@
+Express