SysML 2.1b1 RTF Avatar
  1. OMG Issue

SYSML21 — Guard check binds a Boolean to an Expression variable

  • Key: SYSML21-713
  • Status: open  
  • Source: Diversitas Systems Engineering Ltd ( Geoffrey Tullener)
  • Summary:
    TransitionFeatureMembership::validateTransitionFeatureMembershipGuardExpression: Guard check binds a Boolean to an Expression variable
    
    Where:          SysML 2.0 (formal/2026-03-02), ยง8.3.18.8 TransitionFeatureMembership, PDF p.372 (printed 340)
    Published OCL:  kind = TransitionFeatureKind::guard implies transitionFeature.oclIsKindOf(Expression) and let guard : Expression = transitionFeature.oclIsKindOf(Expression) in guard.result.specializesFromLibrary('ScalarValues::Boolean') and guard.result.multiplicity <> null and guard.result.multiplicity.hasBounds(1,1)
    Correction proposed: kind = TransitionFeatureKind::guard implies transitionFeature.oclIsKindOf(Expression) and let guard : Expression = transitionFeature.oclAsType(Expression) in guard.result.specializesFromLibrary('ScalarValues::Boolean') and guard.result.multiplicities()->exists(m | m.allSupertypes()->including(m)->selectByKind(MultiplicityRange)->exists(r | r.hasBounds(1, 1)))
    Proof of fault: (a) A Boolean is bound to a variable declared Expression and then navigated as one. (b) Guard results never own a multiplicity, so the rule refuses every guard the library allows.
    Likely cause:   Original authoring error (no similar rule). No rule in KerML or SysML is similar (best match 25%): a wrong operator (test instead of cast), plus a multiplicity test that the library never satisfies.
    Basis of fix:   (a) is determined (the cast). (b) is an interpretation: owned-or-inherited multiplicity.
    

    Provenance: found by deterministic checks of the OCL against the metamodel and OMG's reference implementation; the argument was reviewed and challenged by the reporter before filing. Further information on these methods is available on request.

    Not blocking: we are proceeding with the correction above in our own implementation.

  • Reported: SysML 2.0 — Tue, 27 Oct 2026 18:46 GMT
  • Updated: Fri, 30 Oct 2026 21:23 GMT