Skip to content
SysML v2 (structure) templates

Teaching Case — A System That Cannot Be Built

`Assembly` composes a `Subassembly`, which composes a `Module`, which composes an `Assembly`. Composition is ownership, so no instance of any of the three can ever be constructed — building one requires building itself. It draws as three rectangles and three composition lines, usually across two pages of a decomposition view, and nobody traces the loop by eye. The same document also holds a `ref part` cycle, which is perfectly legal: a reference is not ownership, and this engine excludes reference edges deliberately rather than reporting the two together.

Template previewSysML v2 (structure)
ManufacturinginterconnectionAssemblyinteriorsub: Subassembly1 statement in this model contradicts another — over 5 definitions, 4features and 0 connections. 10 of the 13 checks had nothing to run on.ERRORAssembly contains Subassembly contains Module contains Assembly — andthat closes the loop. Composition is ownership, so no instance of any definitionin this chain can be built: constructing one requires constructing itself. It drawsas 3 rectangles and 3 composition lines, usually across two pages, and nobod…GAPNothing is connected here, so there was no end to resolve.GAPNo connection here joins two ports of one definition, so there was noconjugation to check.GAPNo connection joins two related port definitions that share a directed feature,so there was no direction to compare.GAPNo connection here names a definition with declared ends, so there was no endorder or arity to check.GAPNo flow is declared here, so there was no direction to check.GAPNo flow here declares a payload, so there was nothing to compare against adestination.GAPThe composition tree contains a cycle (`Manufacturing::Assembly`,`Manufacturing::Subassembly`, `Manufacturing::Module` and`Manufacturing::Assembly`), so it could not be walked and no port was placed.This question is unanswered — not answered clean.GAPThe composition tree contains a cycle (`Manufacturing::Assembly`,`Manufacturing::Subassembly`, `Manufacturing::Module` and`Manufacturing::Assembly`), so no interior could be walked. This question isunanswered — not answered clean.GAPNothing here redefines anything, so there was no replacement to verify.GAPNothing here redefines a feature a supertype declares, so there was nonarrowing to verify.OKAll 4 declared types resolve to a definition in this document, so every checkbelow had the definition it needed to read.OKEvery line was read and no cap bit: the 5 definitions above are the wholedocument, so the counts are totals rather than floors.

Make it your own.

package Manufacturing {

  part def Operator;

  part def Assembly {
    part sub : Subassembly;
  }

  part def Subassembly {
    part module : Module;
  }

  part def Module {
    // Closes the loop. Composition is ownership: nothing here can exist.
    part frame : Assembly;
  }

  // Legal, and deliberately not reported: a reference cycle is an
  // ordinary bidirectional association. The operator knows their station
  // and the station knows its operator.
  part def Station {
    ref part operator : Operator;
  }
}