ソースを参照

Add script that checks if "semantic oracle" statechart correctly infers semantics under all circumstances. Small 'refactor' to how combo-step maximality option is represented in abstract syntax (now the same as big-step maximality).

Joeri Exelmans 5 年 前
コミット
490196c118

+ 127 - 0
examples/semantics/run.py

@@ -0,0 +1,127 @@
+from sccd.statechart.parser.xml import *
+from sccd.statechart.dynamic.statechart_instance import *
+
+if __name__ == "__main__":
+  
+  # Load model
+  globals = Globals()
+  rules = statechart_parser_rules(globals, path=".")
+  statechart_model = parse_f("statechart_semantics.xml", [("statechart", rules)])
+  globals.init_durations()
+
+
+  # Generate semantic variants, and filter invalid ones
+  variants = statechart_model.generate_semantic_variants()
+
+  def is_valid(semantics):
+    if semantics.combo_step_maximality > semantics.big_step_maximality:
+      return False
+
+    if semantics.assignment_memory_protocol != semantics.enabledness_memory_protocol:
+      return False
+
+    must_have_combo_steps = (semantics.input_event_lifeline == InputEventLifeline.FIRST_COMBO_STEP or
+          semantics.internal_event_lifeline == InternalEventLifeline.NEXT_COMBO_STEP or
+          semantics.enabledness_memory_protocol == MemoryProtocol.COMBO_STEP)
+
+    if not must_have_combo_steps and semantics.combo_step_maximality > Maximality.TAKE_ONE:
+      return False
+
+    if semantics.big_step_maximality == Maximality.TAKE_ONE and must_have_combo_steps:
+      return False
+
+    return True
+
+  valid_variants = [v for v in variants if is_valid(v.semantics)]
+
+  print("Total variants:", len(variants))
+  print("Valid variants:", len(valid_variants))
+
+
+  # We'll need these mappings to translate the statechart's post-big-step configuration to a semantic configuration
+  state_name_to_semantics = {
+    "/P/BigStepMaximality/TakeOne": ("big_step_maximality", Maximality.TAKE_ONE),
+    "/P/BigStepMaximality/Syntactic": ("big_step_maximality", Maximality.SYNTACTIC),
+    "/P/BigStepMaximality/TakeMany": ("big_step_maximality", Maximality.TAKE_MANY),
+
+    "/P/ComboStepMaximality/ComboStepMaximality/TakeOne": ("combo_step_maximality", Maximality.TAKE_ONE),
+    "/P/ComboStepMaximality/ComboStepMaximality/Syntactic": ("combo_step_maximality", Maximality.SYNTACTIC),
+    "/P/ComboStepMaximality/ComboStepMaximality/TakeMany": ("combo_step_maximality", Maximality.TAKE_MANY),
+
+    "/P/InputEventLifeline/FirstSmallStep": ("input_event_lifeline", InputEventLifeline.FIRST_SMALL_STEP),
+    "/P/InputEventLifeline/FirstComboStep": ("input_event_lifeline", InputEventLifeline.FIRST_COMBO_STEP),
+    "/P/InputEventLifeline/Whole": ("input_event_lifeline", InputEventLifeline.WHOLE),
+
+    "/P/InternalEventLifeline/InternalEventLifeline/NextSmallStep": ("internal_event_lifeline", InternalEventLifeline.NEXT_SMALL_STEP),
+    "/P/InternalEventLifeline/InternalEventLifeline/NextComboStep": ("internal_event_lifeline", InternalEventLifeline.NEXT_COMBO_STEP),
+    "/P/InternalEventLifeline/InternalEventLifeline/Remainder": ("internal_event_lifeline", InternalEventLifeline.REMAINDER),
+    "/P/InternalEventLifeline/InternalEventLifeline/Queue": ("internal_event_lifeline", InternalEventLifeline.QUEUE),
+
+    "/P/MemoryProtocol/MemoryProtocol/BigStep": ("enabledness_memory_protocol", MemoryProtocol.BIG_STEP),
+    "/P/MemoryProtocol/MemoryProtocol/ComboStep": ("enabledness_memory_protocol", MemoryProtocol.COMBO_STEP),
+    "/P/MemoryProtocol/MemoryProtocol/SmallStep": ("enabledness_memory_protocol", MemoryProtocol.SMALL_STEP),
+
+    "/P/Priority/SourceParent": ("priority", Priority.SOURCE_PARENT),
+    "/P/Priority/SourceChild": ("priority", Priority.SOURCE_CHILD),
+  }
+
+  state_id_to_semantics = {
+    statechart_model.tree.state_dict[state_name].opt.state_id: tup
+      for state_name, tup in state_name_to_semantics.items()
+  }
+
+
+  # Some mock callbacks that we have pass to the StatechartInstance
+  def on_output(e: OutputEvent):
+    pass
+
+  def schedule(after, event, targets):
+    return 0
+
+  def cancel(id):
+    pass
+
+  # List of input events for the big-step is always the same, so declare it outside the loop
+  input0_id = globals.events.get_id("input0")
+  input_events = [InternalEvent(id=input0_id, name="", params=[])]
+
+  # Here we will accumulate our wrongly-inferred semantic configurations
+  incorrect = []
+
+  for v in valid_variants:
+    instance = StatechartInstance(
+      statechart=v,
+      object_manager=None,
+      output_callback=on_output,
+      schedule_callback=schedule,
+      cancel_callback=cancel)
+
+    instance.initialize()
+    instance.big_step(input_events)
+
+    inferred_semantics = SemanticConfiguration()
+    for state_id in bm_items(instance.execution.configuration):
+      if state_id in state_id_to_semantics:
+        aspect_name, aspect_val = state_id_to_semantics[state_id]
+        setattr(inferred_semantics, aspect_name, aspect_val)
+    inferred_semantics.assignment_memory_protocol = inferred_semantics.enabledness_memory_protocol
+
+    # print("\nActual semantics:")
+    # print(v.semantics)
+
+    # print("\nInferred semantics:")
+    # print(inferred_semantics)
+
+    if v.semantics != inferred_semantics:
+      incorrect.append((v.semantics, inferred_semantics))
+
+  if len(incorrect) > 0:
+    for actual, inferred in incorrect:
+      print("Actual semantics:")
+      print(actual)
+
+      print("Inferred semantics:")
+      print(inferred)
+    print("Did not correctly infer semantics for %d variants." % len(incorrect))
+  else:
+    print("Correctly inferred semantics for all semantic configurations!")

+ 193 - 193
test/test_demo.svg

@@ -4,40 +4,40 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="9138pt" height="1114pt"
- viewBox="0.00 0.00 9138.00 1113.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="8835pt" height="1114pt"
+ viewBox="0.00 0.00 8835.00 1113.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1109.5)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1109.5 9134,-1109.5 9134,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1109.5 8831,-1109.5 8831,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__P</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 9110,-8 9110,-8 9116,-8 9122,-14 9122,-20 9122,-20 9122,-1054.5 9122,-1054.5 9122,-1060.5 9116,-1066.5 9110,-1066.5 9110,-1066.5 20,-1066.5 20,-1066.5 14,-1066.5 8,-1060.5 8,-1054.5 8,-1054.5 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="4560.9986" y="-1047.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">P</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 8807,-8 8807,-8 8813,-8 8819,-14 8819,-20 8819,-20 8819,-1054.5 8819,-1054.5 8819,-1060.5 8813,-1066.5 8807,-1066.5 8807,-1066.5 20,-1066.5 20,-1066.5 14,-1066.5 8,-1060.5 8,-1054.5 8,-1054.5 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="4409.4986" y="-1047.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">P</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__P_ComboStepMaximality</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2503,-16C2503,-16 9102,-16 9102,-16 9108,-16 9114,-22 9114,-28 9114,-28 9114,-1016.5 9114,-1016.5 9114,-1022.5 9108,-1028.5 9102,-1028.5 9102,-1028.5 2503,-1028.5 2503,-1028.5 2497,-1028.5 2491,-1022.5 2491,-1016.5 2491,-1016.5 2491,-28 2491,-28 2491,-22 2497,-16 2503,-16"/>
-<text text-anchor="start" x="5742.4982" y="-1009.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboStepMaximality</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2503,-16C2503,-16 8799,-16 8799,-16 8805,-16 8811,-22 8811,-28 8811,-28 8811,-1016.5 8811,-1016.5 8811,-1022.5 8805,-1028.5 8799,-1028.5 8799,-1028.5 2503,-1028.5 2503,-1028.5 2497,-1028.5 2491,-1022.5 2491,-1016.5 2491,-1016.5 2491,-28 2491,-28 2491,-22 2497,-16 2503,-16"/>
+<text text-anchor="start" x="5590.9982" y="-1009.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboStepMaximality</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__P_ComboStepMaximality_ComboStepMaximality</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2965,-428 2965,-990.5 9106,-990.5 9106,-428 2965,-428"/>
-<text text-anchor="start" x="5975.4982" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboStepMaximality</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2953,-428 2953,-990.5 8803,-990.5 8803,-428 2953,-428"/>
+<text text-anchor="start" x="5817.9982" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboStepMaximality</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__P_ComboStepMaximality_MemoryProtocolDeducer</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2801,-24 2801,-990.5 2957,-990.5 2957,-24 2801,-24"/>
-<text text-anchor="start" x="2812.6628" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">MemoryProtocolDeducer</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2789,-24 2789,-990.5 2945,-990.5 2945,-24 2789,-24"/>
+<text text-anchor="start" x="2800.6628" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">MemoryProtocolDeducer</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__P_ComboStepMaximality_InternalEventDeducer</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2653,-24 2653,-990.5 2793,-990.5 2793,-24 2653,-24"/>
-<text text-anchor="start" x="2664.9848" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">InternalEventDeducer</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2641,-24 2641,-990.5 2781,-990.5 2781,-24 2641,-24"/>
+<text text-anchor="start" x="2652.9848" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">InternalEventDeducer</text>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster__P_ComboStepMaximality_InputEventDeducer</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2507,-24 2507,-990.5 2645,-990.5 2645,-24 2507,-24"/>
-<text text-anchor="start" x="2524.649" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">InputEventDeducer</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="2507,-24 2507,-990.5 2633,-990.5 2633,-24 2507,-24"/>
+<text text-anchor="start" x="2518.649" y="-971.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">InputEventDeducer</text>
 </g>
 <g id="clust7" class="cluster">
 <title>cluster__P_Priority</title>
@@ -117,291 +117,291 @@
 <!-- _P_ComboStepMaximality_ComboStepMaximality_initial -->
 <g id="node5" class="node">
 <title>_P_ComboStepMaximality_ComboStepMaximality_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="5647" cy="-947" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="5507" cy="-947" rx="5.5" ry="5.5"/>
 </g>
 <!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps -->
 <g id="node9" class="node">
 <title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="5700,-716 5594,-716 5594,-680 5700,-680 5700,-716"/>
-<text text-anchor="start" x="5604.6586" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">NoComboSteps</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M5606.3333,-681C5606.3333,-681 5687.6667,-681 5687.6667,-681 5693.3333,-681 5699,-686.6667 5699,-692.3333 5699,-692.3333 5699,-703.6667 5699,-703.6667 5699,-709.3333 5693.3333,-715 5687.6667,-715 5687.6667,-715 5606.3333,-715 5606.3333,-715 5600.6667,-715 5595,-709.3333 5595,-703.6667 5595,-703.6667 5595,-692.3333 5595,-692.3333 5595,-686.6667 5600.6667,-681 5606.3333,-681"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="5560,-716 5454,-716 5454,-680 5560,-680 5560,-716"/>
+<text text-anchor="start" x="5464.6586" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">NoComboSteps</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M5466.3333,-681C5466.3333,-681 5547.6667,-681 5547.6667,-681 5553.3333,-681 5559,-686.6667 5559,-692.3333 5559,-692.3333 5559,-703.6667 5559,-703.6667 5559,-709.3333 5553.3333,-715 5547.6667,-715 5547.6667,-715 5466.3333,-715 5466.3333,-715 5460.6667,-715 5455,-709.3333 5455,-703.6667 5455,-703.6667 5455,-692.3333 5455,-692.3333 5455,-686.6667 5460.6667,-681 5466.3333,-681"/>
 </g>
 <!-- _P_ComboStepMaximality_ComboStepMaximality_initial&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps -->
 <g id="edge2" class="edge">
 <title>_P_ComboStepMaximality_ComboStepMaximality_initial&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps</title>
-<path fill="none" stroke="#000000" d="M5647,-941.3288C5647,-936.6736 5647,-929.9097 5647,-924 5647,-924 5647,-924 5647,-733.5 5647,-731.1079 5647,-728.6252 5647,-726.1342"/>
-<polygon fill="#000000" stroke="#000000" points="5650.5001,-726.0597 5647,-716.0598 5643.5001,-726.0598 5650.5001,-726.0597"/>
-<text text-anchor="middle" x="5648.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M5507,-941.3288C5507,-936.6736 5507,-929.9097 5507,-924 5507,-924 5507,-924 5507,-733.5 5507,-731.1079 5507,-728.6252 5507,-726.1342"/>
+<polygon fill="#000000" stroke="#000000" points="5510.5001,-726.0597 5507,-716.0598 5503.5001,-726.0598 5510.5001,-726.0597"/>
+<text text-anchor="middle" x="5508.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_TakeMany -->
 <g id="node6" class="node">
-<title>_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="7754,-472 7638,-472 7638,-436 7754,-436 7754,-472"/>
-<text text-anchor="start" x="7648.6606" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeMany</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M7650.3333,-437C7650.3333,-437 7741.6667,-437 7741.6667,-437 7747.3333,-437 7753,-442.6667 7753,-448.3333 7753,-448.3333 7753,-459.6667 7753,-459.6667 7753,-465.3333 7747.3333,-471 7741.6667,-471 7741.6667,-471 7650.3333,-471 7650.3333,-471 7644.6667,-471 7639,-465.3333 7639,-459.6667 7639,-459.6667 7639,-448.3333 7639,-448.3333 7639,-442.6667 7644.6667,-437 7650.3333,-437"/>
+<title>_P_ComboStepMaximality_ComboStepMaximality_TakeMany</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="7497,-472 7419,-472 7419,-436 7497,-436 7497,-472"/>
+<text text-anchor="start" x="7429.9956" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeMany</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M7431.3333,-437C7431.3333,-437 7484.6667,-437 7484.6667,-437 7490.3333,-437 7496,-442.6667 7496,-448.3333 7496,-448.3333 7496,-459.6667 7496,-459.6667 7496,-465.3333 7490.3333,-471 7484.6667,-471 7484.6667,-471 7431.3333,-471 7431.3333,-471 7425.6667,-471 7420,-465.3333 7420,-459.6667 7420,-459.6667 7420,-448.3333 7420,-448.3333 7420,-442.6667 7425.6667,-437 7431.3333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_Syntactic -->
 <g id="node7" class="node">
-<title>_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="5701.5,-472 5592.5,-472 5592.5,-436 5701.5,-436 5701.5,-472"/>
-<text text-anchor="start" x="5603.8266" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboSyntactic</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M5604.8333,-437C5604.8333,-437 5689.1667,-437 5689.1667,-437 5694.8333,-437 5700.5,-442.6667 5700.5,-448.3333 5700.5,-448.3333 5700.5,-459.6667 5700.5,-459.6667 5700.5,-465.3333 5694.8333,-471 5689.1667,-471 5689.1667,-471 5604.8333,-471 5604.8333,-471 5599.1667,-471 5593.5,-465.3333 5593.5,-459.6667 5593.5,-459.6667 5593.5,-448.3333 5593.5,-448.3333 5593.5,-442.6667 5599.1667,-437 5604.8333,-437"/>
+<title>_P_ComboStepMaximality_ComboStepMaximality_Syntactic</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="5542,-472 5472,-472 5472,-436 5542,-436 5542,-472"/>
+<text text-anchor="start" x="5482.6616" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Syntactic</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M5484.3333,-437C5484.3333,-437 5529.6667,-437 5529.6667,-437 5535.3333,-437 5541,-442.6667 5541,-448.3333 5541,-448.3333 5541,-459.6667 5541,-459.6667 5541,-465.3333 5535.3333,-471 5529.6667,-471 5529.6667,-471 5484.3333,-471 5484.3333,-471 5478.6667,-471 5473,-465.3333 5473,-459.6667 5473,-459.6667 5473,-448.3333 5473,-448.3333 5473,-442.6667 5478.6667,-437 5484.3333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_TakeOne -->
 <g id="node8" class="node">
-<title>_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="3747,-472 3637,-472 3637,-436 3747,-436 3747,-472"/>
-<text text-anchor="start" x="3647.9906" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeOne</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M3649.3333,-437C3649.3333,-437 3734.6667,-437 3734.6667,-437 3740.3333,-437 3746,-442.6667 3746,-448.3333 3746,-448.3333 3746,-459.6667 3746,-459.6667 3746,-465.3333 3740.3333,-471 3734.6667,-471 3734.6667,-471 3649.3333,-471 3649.3333,-471 3643.6667,-471 3638,-465.3333 3638,-459.6667 3638,-459.6667 3638,-448.3333 3638,-448.3333 3638,-442.6667 3643.6667,-437 3649.3333,-437"/>
+<title>_P_ComboStepMaximality_ComboStepMaximality_TakeOne</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="3683.5,-472 3612.5,-472 3612.5,-436 3683.5,-436 3683.5,-472"/>
+<text text-anchor="start" x="3623.8256" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeOne</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M3624.8333,-437C3624.8333,-437 3671.1667,-437 3671.1667,-437 3676.8333,-437 3682.5,-442.6667 3682.5,-448.3333 3682.5,-448.3333 3682.5,-459.6667 3682.5,-459.6667 3682.5,-465.3333 3676.8333,-471 3671.1667,-471 3671.1667,-471 3624.8333,-471 3624.8333,-471 3619.1667,-471 3613.5,-465.3333 3613.5,-459.6667 3613.5,-459.6667 3613.5,-448.3333 3613.5,-448.3333 3613.5,-442.6667 3619.1667,-437 3624.8333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany -->
 <g id="edge5" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M5700.1666,-697.3916C5959.6888,-694.3365 7081,-680.1173 7081,-662.5 7081,-662.5 7081,-662.5 7081,-489.5 7081,-462.3725 7467.4057,-455.9458 7627.6443,-454.4469"/>
-<polygon fill="#000000" stroke="#000000" points="7627.8972,-457.9449 7637.8653,-454.3552 7627.8343,-450.9452 7627.8972,-457.9449"/>
-<text text-anchor="start" x="7081" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/ComboTakeMany&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany</title>
+<path fill="none" stroke="#000000" d="M5560.2074,-697.3267C5812.3736,-694.0506 6875,-679.2512 6875,-662.5 6875,-662.5 6875,-662.5 6875,-489.5 6875,-462.8515 7268.2007,-456.0302 7408.7737,-454.443"/>
+<polygon fill="#000000" stroke="#000000" points="7408.8812,-457.9421 7418.8425,-454.3334 7408.8049,-450.9425 7408.8812,-457.9421"/>
+<text text-anchor="start" x="6875" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/TakeMany&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany -->
 <g id="edge8" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M5700.2295,-697.7918C6022.2334,-696.4479 7696,-688.2247 7696,-662.5 7696,-662.5 7696,-662.5 7696,-489.5 7696,-487.1079 7696,-484.6252 7696,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="7699.5001,-482.0597 7696,-472.0598 7692.5001,-482.0598 7699.5001,-482.0597"/>
-<text text-anchor="start" x="7696" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/ComboTakeMany&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany</title>
+<path fill="none" stroke="#000000" d="M5560.1964,-697.745C5872.8851,-696.1614 7458,-686.9286 7458,-662.5 7458,-662.5 7458,-662.5 7458,-489.5 7458,-487.1079 7458,-484.6252 7458,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="7461.5001,-482.0597 7458,-472.0598 7454.5001,-482.0598 7461.5001,-482.0597"/>
+<text text-anchor="start" x="7458" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/TakeMany&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany -->
 <g id="edge11" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M5700.2808,-697.6819C6086.2748,-695.335 8439,-680.2998 8439,-662.5 8439,-662.5 8439,-662.5 8439,-489.5 8439,-472.7064 7948.1907,-459.7606 7764.3918,-455.5014"/>
-<polygon fill="#000000" stroke="#000000" points="7764.3799,-452.0003 7754.302,-455.2692 7764.2188,-458.9985 7764.3799,-452.0003"/>
-<text text-anchor="start" x="8439" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/ComboTakeMany&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeMany</title>
+<path fill="none" stroke="#000000" d="M5560.1745,-697.6492C5935.3567,-695.1321 8169,-679.4351 8169,-662.5 8169,-662.5 8169,-662.5 8169,-489.5 8169,-472.9091 7668.5113,-459.1685 7507.3547,-455.1741"/>
+<polygon fill="#000000" stroke="#000000" points="7507.3223,-451.6724 7497.2392,-454.9252 7507.15,-458.6702 7507.3223,-451.6724"/>
+<text text-anchor="start" x="8169" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/TakeMany&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic -->
 <g id="edge4" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M5593.7551,-697.6546C5445.3681,-696.343 5038,-690.2183 5038,-662.5 5038,-662.5 5038,-662.5 5038,-489.5 5038,-462.4852 5424.9533,-455.9818 5581.9678,-454.4549"/>
-<polygon fill="#000000" stroke="#000000" points="5582.4525,-457.9506 5592.4194,-454.3573 5582.3871,-450.9509 5582.4525,-457.9506"/>
-<text text-anchor="start" x="5038" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/ComboSyntactic&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic</title>
+<path fill="none" stroke="#000000" d="M5453.7515,-697.476C5310.9102,-695.7209 4930,-688.5944 4930,-662.5 4930,-662.5 4930,-662.5 4930,-489.5 4930,-462.9066 5325.6176,-456.0134 5461.6805,-454.4291"/>
+<polygon fill="#000000" stroke="#000000" points="5461.8146,-457.9279 5471.7746,-454.3158 5461.736,-450.9283 5461.8146,-457.9279"/>
+<text text-anchor="start" x="4930" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/Syntactic&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic -->
 <g id="edge7" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M5700.2474,-696.6747C5863.1811,-692.4456 6344,-678.6015 6344,-662.5 6344,-662.5 6344,-662.5 6344,-489.5 6344,-473.7672 5884.9506,-460.1896 5711.9315,-455.6309"/>
-<polygon fill="#000000" stroke="#000000" points="5711.7806,-452.1258 5701.6924,-455.3629 5711.5974,-459.1234 5711.7806,-452.1258"/>
-<text text-anchor="start" x="6344" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/ComboSyntactic&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic</title>
+<path fill="none" stroke="#000000" d="M5560.2155,-696.5382C5717.7802,-692.0361 6171,-677.76 6171,-662.5 6171,-662.5 6171,-662.5 6171,-489.5 6171,-473.9811 5702.2729,-459.4798 5552.4556,-455.2412"/>
+<polygon fill="#000000" stroke="#000000" points="5552.3251,-451.7362 5542.2307,-454.9538 5552.1284,-458.7334 5552.3251,-451.7362"/>
+<text text-anchor="start" x="6171" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/Syntactic&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic -->
 <g id="edge10" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M5647,-679.9402C5647,-674.3497 5647,-668.1701 5647,-662.5 5647,-662.5 5647,-662.5 5647,-489.5 5647,-487.1079 5647,-484.6252 5647,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="5650.5001,-482.0597 5647,-472.0598 5643.5001,-482.0598 5650.5001,-482.0597"/>
-<text text-anchor="start" x="5647" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/ComboSyntactic&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_Syntactic</title>
+<path fill="none" stroke="#000000" d="M5507,-679.9402C5507,-674.3497 5507,-668.1701 5507,-662.5 5507,-662.5 5507,-662.5 5507,-489.5 5507,-487.1079 5507,-484.6252 5507,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="5510.5001,-482.0597 5507,-472.0598 5503.5001,-482.0598 5510.5001,-482.0597"/>
+<text text-anchor="start" x="5507" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/Syntactic&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne -->
 <g id="edge3" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M5593.9489,-697.7477C5281.2253,-696.1762 3692,-686.9853 3692,-662.5 3692,-662.5 3692,-662.5 3692,-489.5 3692,-487.1079 3692,-484.6252 3692,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="3695.5001,-482.0597 3692,-472.0598 3688.5001,-482.0598 3695.5001,-482.0597"/>
-<text text-anchor="start" x="3692" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/ComboTakeOne&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne</title>
+<path fill="none" stroke="#000000" d="M5453.8645,-697.6968C5150.1976,-695.8791 3648,-685.714 3648,-662.5 3648,-662.5 3648,-662.5 3648,-489.5 3648,-487.1079 3648,-484.6252 3648,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="3651.5001,-482.0597 3648,-472.0598 3644.5001,-482.0598 3651.5001,-482.0597"/>
+<text text-anchor="start" x="3648" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬input0 [INSTATE([&quot;/P/InputEventLifeline/FirstComboStep&quot;,&quot;/P/ComboStepMaximality/InputEventDeducer/TakeOne&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne -->
 <g id="edge6" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M5593.8206,-697.3043C5344.2217,-693.9535 4301,-678.9638 4301,-662.5 4301,-662.5 4301,-662.5 4301,-489.5 4301,-462.4906 3914.2013,-455.9844 3757.1263,-454.4558"/>
-<polygon fill="#000000" stroke="#000000" points="3757.1511,-450.956 3747.1188,-454.3621 3757.0856,-457.9557 3757.1511,-450.956"/>
-<text text-anchor="start" x="4301" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/ComboTakeOne&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne</title>
+<path fill="none" stroke="#000000" d="M5453.9508,-697.2353C5212.0162,-693.6626 4225,-678.1293 4225,-662.5 4225,-662.5 4225,-662.5 4225,-489.5 4225,-462.9372 3830.2914,-456.0293 3693.7897,-454.4346"/>
+<polygon fill="#000000" stroke="#000000" points="3693.6973,-450.9334 3683.6585,-454.3205 3693.6184,-457.933 3693.6973,-450.9334"/>
+<text text-anchor="start" x="4225" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">¬internal0 [INSTATE([&quot;/P/InternalEventLifeline/InternalEventLifeline/NextComboStep&quot;,&quot;/P/ComboStepMaximality/InternalEventDeducer/TakeOne&quot;])] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne -->
 <g id="edge9" class="edge">
-<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M5593.726,-697.6459C5219.0664,-695.113 2995,-679.367 2995,-662.5 2995,-662.5 2995,-662.5 2995,-489.5 2995,-473.7779 3453.4238,-460.2081 3626.7143,-455.6402"/>
-<polygon fill="#000000" stroke="#000000" points="3626.8201,-459.1387 3636.725,-455.378 3626.6367,-452.1411 3626.8201,-459.1387"/>
-<text text-anchor="start" x="2995" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/ComboTakeOne&quot;])] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_ComboStepMaximality_NoComboSteps&#45;&gt;_P_ComboStepMaximality_ComboStepMaximality_TakeOne</title>
+<path fill="none" stroke="#000000" d="M5453.9919,-697.9683C5090.7015,-697.6669 2983,-694.5376 2983,-662.5 2983,-662.5 2983,-662.5 2983,-489.5 2983,-473.9754 3451.3679,-459.5052 3601.9638,-455.2538"/>
+<polygon fill="#000000" stroke="#000000" points="3602.3488,-458.7445 3612.2467,-454.9655 3602.1525,-451.7473 3602.3488,-458.7445"/>
+<text text-anchor="start" x="2983" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 1 and INSTATE([&quot;/P/MemoryProtocol/MemoryProtocol/ComboStep&quot;,&quot;/P/ComboStepMaximality/MemoryProtocolDeducer/TakeOne&quot;])] &#160;&#160;</text>
 </g>
 <!-- _P_ComboStepMaximality_MemoryProtocolDeducer -->
 <!-- _P_ComboStepMaximality_MemoryProtocolDeducer_initial -->
 <g id="node11" class="node">
 <title>_P_ComboStepMaximality_MemoryProtocolDeducer_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2879" cy="-947" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2856" cy="-947" rx="5.5" ry="5.5"/>
 </g>
 <!-- _P_ComboStepMaximality_MemoryProtocolDeducer_Initial -->
 <g id="node15" class="node">
 <title>_P_ComboStepMaximality_MemoryProtocolDeducer_Initial</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2907,-716 2851,-716 2851,-680 2907,-680 2907,-716"/>
-<text text-anchor="start" x="2865.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2863.3333,-681C2863.3333,-681 2894.6667,-681 2894.6667,-681 2900.3333,-681 2906,-686.6667 2906,-692.3333 2906,-692.3333 2906,-703.6667 2906,-703.6667 2906,-709.3333 2900.3333,-715 2894.6667,-715 2894.6667,-715 2863.3333,-715 2863.3333,-715 2857.6667,-715 2852,-709.3333 2852,-703.6667 2852,-703.6667 2852,-692.3333 2852,-692.3333 2852,-686.6667 2857.6667,-681 2863.3333,-681"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2884,-716 2828,-716 2828,-680 2884,-680 2884,-716"/>
+<text text-anchor="start" x="2842.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2840.3333,-681C2840.3333,-681 2871.6667,-681 2871.6667,-681 2877.3333,-681 2883,-686.6667 2883,-692.3333 2883,-692.3333 2883,-703.6667 2883,-703.6667 2883,-709.3333 2877.3333,-715 2871.6667,-715 2871.6667,-715 2840.3333,-715 2840.3333,-715 2834.6667,-715 2829,-709.3333 2829,-703.6667 2829,-703.6667 2829,-692.3333 2829,-692.3333 2829,-686.6667 2834.6667,-681 2840.3333,-681"/>
 </g>
 <!-- _P_ComboStepMaximality_MemoryProtocolDeducer_initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_Initial -->
 <g id="edge12" class="edge">
 <title>_P_ComboStepMaximality_MemoryProtocolDeducer_initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_Initial</title>
-<path fill="none" stroke="#000000" d="M2879,-941.3288C2879,-936.6736 2879,-929.9097 2879,-924 2879,-924 2879,-924 2879,-733.5 2879,-731.1079 2879,-728.6252 2879,-726.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2882.5001,-726.0597 2879,-716.0598 2875.5001,-726.0598 2882.5001,-726.0597"/>
-<text text-anchor="middle" x="2880.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M2856,-941.3288C2856,-936.6736 2856,-929.9097 2856,-924 2856,-924 2856,-924 2856,-733.5 2856,-731.1079 2856,-728.6252 2856,-726.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2859.5001,-726.0597 2856,-716.0598 2852.5001,-726.0598 2859.5001,-726.0597"/>
+<text text-anchor="middle" x="2857.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_TakeMany -->
 <g id="node12" class="node">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeMany</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2937,-68 2821,-68 2821,-32 2937,-32 2937,-68"/>
-<text text-anchor="start" x="2831.6606" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeMany</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2833.3333,-33C2833.3333,-33 2924.6667,-33 2924.6667,-33 2930.3333,-33 2936,-38.6667 2936,-44.3333 2936,-44.3333 2936,-55.6667 2936,-55.6667 2936,-61.3333 2930.3333,-67 2924.6667,-67 2924.6667,-67 2833.3333,-67 2833.3333,-67 2827.6667,-67 2822,-61.3333 2822,-55.6667 2822,-55.6667 2822,-44.3333 2822,-44.3333 2822,-38.6667 2827.6667,-33 2833.3333,-33"/>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_TakeMany</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2895,-68 2817,-68 2817,-32 2895,-32 2895,-68"/>
+<text text-anchor="start" x="2827.9956" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeMany</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2829.3333,-33C2829.3333,-33 2882.6667,-33 2882.6667,-33 2888.3333,-33 2894,-38.6667 2894,-44.3333 2894,-44.3333 2894,-55.6667 2894,-55.6667 2894,-61.3333 2888.3333,-67 2882.6667,-67 2882.6667,-67 2829.3333,-67 2829.3333,-67 2823.6667,-67 2818,-61.3333 2818,-55.6667 2818,-55.6667 2818,-44.3333 2818,-44.3333 2818,-38.6667 2823.6667,-33 2829.3333,-33"/>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic -->
 <g id="node13" class="node">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2940,-274 2818,-274 2818,-238 2940,-238 2940,-274"/>
-<text text-anchor="start" x="2828.657" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboSyntactic ✓</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2830.3333,-239C2830.3333,-239 2927.6667,-239 2927.6667,-239 2933.3333,-239 2939,-244.6667 2939,-250.3333 2939,-250.3333 2939,-261.6667 2939,-261.6667 2939,-267.3333 2933.3333,-273 2927.6667,-273 2927.6667,-273 2830.3333,-273 2830.3333,-273 2824.6667,-273 2819,-267.3333 2819,-261.6667 2819,-261.6667 2819,-250.3333 2819,-250.3333 2819,-244.6667 2824.6667,-239 2830.3333,-239"/>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2898,-274 2814,-274 2814,-238 2898,-238 2898,-274"/>
+<text text-anchor="start" x="2824.992" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Syntactic ✓</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2826.3333,-239C2826.3333,-239 2885.6667,-239 2885.6667,-239 2891.3333,-239 2897,-244.6667 2897,-250.3333 2897,-250.3333 2897,-261.6667 2897,-261.6667 2897,-267.3333 2891.3333,-273 2885.6667,-273 2885.6667,-273 2826.3333,-273 2826.3333,-273 2820.6667,-273 2815,-267.3333 2815,-261.6667 2815,-261.6667 2815,-250.3333 2815,-250.3333 2815,-244.6667 2820.6667,-239 2826.3333,-239"/>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_TakeMany -->
 <g id="edge13" class="edge">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M2879,-237.8863C2879,-228.0162 2879,-215.5868 2879,-204.5 2879,-204.5 2879,-204.5 2879,-85.5 2879,-83.1079 2879,-80.6252 2879,-78.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2882.5001,-78.0597 2879,-68.0598 2875.5001,-78.0598 2882.5001,-78.0597"/>
-<text text-anchor="start" x="2879" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_TakeMany</title>
+<path fill="none" stroke="#000000" d="M2856,-237.8863C2856,-228.0162 2856,-215.5868 2856,-204.5 2856,-204.5 2856,-204.5 2856,-85.5 2856,-83.1079 2856,-80.6252 2856,-78.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2859.5001,-78.0597 2856,-68.0598 2852.5001,-78.0598 2859.5001,-78.0597"/>
+<text text-anchor="start" x="2856" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne -->
 <g id="node14" class="node">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2934,-472 2824,-472 2824,-436 2934,-436 2934,-472"/>
-<text text-anchor="start" x="2834.9906" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeOne</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2836.3333,-437C2836.3333,-437 2921.6667,-437 2921.6667,-437 2927.3333,-437 2933,-442.6667 2933,-448.3333 2933,-448.3333 2933,-459.6667 2933,-459.6667 2933,-465.3333 2927.3333,-471 2921.6667,-471 2921.6667,-471 2836.3333,-471 2836.3333,-471 2830.6667,-471 2825,-465.3333 2825,-459.6667 2825,-459.6667 2825,-448.3333 2825,-448.3333 2825,-442.6667 2830.6667,-437 2836.3333,-437"/>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2891.5,-472 2820.5,-472 2820.5,-436 2891.5,-436 2891.5,-472"/>
+<text text-anchor="start" x="2831.8256" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeOne</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2832.8333,-437C2832.8333,-437 2879.1667,-437 2879.1667,-437 2884.8333,-437 2890.5,-442.6667 2890.5,-448.3333 2890.5,-448.3333 2890.5,-459.6667 2890.5,-459.6667 2890.5,-465.3333 2884.8333,-471 2879.1667,-471 2879.1667,-471 2832.8333,-471 2832.8333,-471 2827.1667,-471 2821.5,-465.3333 2821.5,-459.6667 2821.5,-459.6667 2821.5,-448.3333 2821.5,-448.3333 2821.5,-442.6667 2827.1667,-437 2832.8333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic -->
 <g id="edge14" class="edge">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M2879,-435.7983C2879,-428.007 2879,-418.8073 2879,-410.5 2879,-410.5 2879,-410.5 2879,-291.5 2879,-289.1079 2879,-286.6252 2879,-284.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2882.5001,-284.0597 2879,-274.0598 2875.5001,-284.0598 2882.5001,-284.0597"/>
-<text text-anchor="start" x="2879" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_Syntactic</title>
+<path fill="none" stroke="#000000" d="M2856,-435.7983C2856,-428.007 2856,-418.8073 2856,-410.5 2856,-410.5 2856,-410.5 2856,-291.5 2856,-289.1079 2856,-286.6252 2856,-284.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2859.5001,-284.0597 2856,-274.0598 2852.5001,-284.0598 2859.5001,-284.0597"/>
+<text text-anchor="start" x="2856" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_Initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_MemoryProtocolDeducer_Initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne -->
 <g id="edge15" class="edge">
-<title>_P_ComboStepMaximality_MemoryProtocolDeducer_Initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M2879,-679.9402C2879,-674.3497 2879,-668.1701 2879,-662.5 2879,-662.5 2879,-662.5 2879,-489.5 2879,-487.1079 2879,-484.6252 2879,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2882.5001,-482.0597 2879,-472.0598 2875.5001,-482.0598 2882.5001,-482.0597"/>
-<text text-anchor="start" x="2879" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
+<title>_P_ComboStepMaximality_MemoryProtocolDeducer_Initial&#45;&gt;_P_ComboStepMaximality_MemoryProtocolDeducer_TakeOne</title>
+<path fill="none" stroke="#000000" d="M2856,-679.9402C2856,-674.3497 2856,-668.1701 2856,-662.5 2856,-662.5 2856,-662.5 2856,-489.5 2856,-487.1079 2856,-484.6252 2856,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2859.5001,-482.0597 2856,-472.0598 2852.5001,-482.0598 2859.5001,-482.0597"/>
+<text text-anchor="start" x="2856" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x == 0] &#160;&#160;</text>
 </g>
 <!-- _P_ComboStepMaximality_InternalEventDeducer -->
 <!-- _P_ComboStepMaximality_InternalEventDeducer_initial -->
 <g id="node17" class="node">
 <title>_P_ComboStepMaximality_InternalEventDeducer_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2723" cy="-947" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2704" cy="-947" rx="5.5" ry="5.5"/>
 </g>
 <!-- _P_ComboStepMaximality_InternalEventDeducer_Initial -->
 <g id="node21" class="node">
 <title>_P_ComboStepMaximality_InternalEventDeducer_Initial</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2751,-716 2695,-716 2695,-680 2751,-680 2751,-716"/>
-<text text-anchor="start" x="2709.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2707.3333,-681C2707.3333,-681 2738.6667,-681 2738.6667,-681 2744.3333,-681 2750,-686.6667 2750,-692.3333 2750,-692.3333 2750,-703.6667 2750,-703.6667 2750,-709.3333 2744.3333,-715 2738.6667,-715 2738.6667,-715 2707.3333,-715 2707.3333,-715 2701.6667,-715 2696,-709.3333 2696,-703.6667 2696,-703.6667 2696,-692.3333 2696,-692.3333 2696,-686.6667 2701.6667,-681 2707.3333,-681"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2732,-716 2676,-716 2676,-680 2732,-680 2732,-716"/>
+<text text-anchor="start" x="2690.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2688.3333,-681C2688.3333,-681 2719.6667,-681 2719.6667,-681 2725.3333,-681 2731,-686.6667 2731,-692.3333 2731,-692.3333 2731,-703.6667 2731,-703.6667 2731,-709.3333 2725.3333,-715 2719.6667,-715 2719.6667,-715 2688.3333,-715 2688.3333,-715 2682.6667,-715 2677,-709.3333 2677,-703.6667 2677,-703.6667 2677,-692.3333 2677,-692.3333 2677,-686.6667 2682.6667,-681 2688.3333,-681"/>
 </g>
 <!-- _P_ComboStepMaximality_InternalEventDeducer_initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_Initial -->
 <g id="edge16" class="edge">
 <title>_P_ComboStepMaximality_InternalEventDeducer_initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_Initial</title>
-<path fill="none" stroke="#000000" d="M2723,-941.3288C2723,-936.6736 2723,-929.9097 2723,-924 2723,-924 2723,-924 2723,-733.5 2723,-731.1079 2723,-728.6252 2723,-726.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2726.5001,-726.0597 2723,-716.0598 2719.5001,-726.0598 2726.5001,-726.0597"/>
-<text text-anchor="middle" x="2724.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M2704,-941.3288C2704,-936.6736 2704,-929.9097 2704,-924 2704,-924 2704,-924 2704,-733.5 2704,-731.1079 2704,-728.6252 2704,-726.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2707.5001,-726.0597 2704,-716.0598 2700.5001,-726.0598 2707.5001,-726.0597"/>
+<text text-anchor="middle" x="2705.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_TakeMany -->
 <g id="node18" class="node">
-<title>_P_ComboStepMaximality_InternalEventDeducer_ComboTakeMany</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2781,-68 2665,-68 2665,-32 2781,-32 2781,-68"/>
-<text text-anchor="start" x="2675.6606" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeMany</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2677.3333,-33C2677.3333,-33 2768.6667,-33 2768.6667,-33 2774.3333,-33 2780,-38.6667 2780,-44.3333 2780,-44.3333 2780,-55.6667 2780,-55.6667 2780,-61.3333 2774.3333,-67 2768.6667,-67 2768.6667,-67 2677.3333,-67 2677.3333,-67 2671.6667,-67 2666,-61.3333 2666,-55.6667 2666,-55.6667 2666,-44.3333 2666,-44.3333 2666,-38.6667 2671.6667,-33 2677.3333,-33"/>
+<title>_P_ComboStepMaximality_InternalEventDeducer_TakeMany</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2743,-68 2665,-68 2665,-32 2743,-32 2743,-68"/>
+<text text-anchor="start" x="2675.9956" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeMany</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2677.3333,-33C2677.3333,-33 2730.6667,-33 2730.6667,-33 2736.3333,-33 2742,-38.6667 2742,-44.3333 2742,-44.3333 2742,-55.6667 2742,-55.6667 2742,-61.3333 2736.3333,-67 2730.6667,-67 2730.6667,-67 2677.3333,-67 2677.3333,-67 2671.6667,-67 2666,-61.3333 2666,-55.6667 2666,-55.6667 2666,-44.3333 2666,-44.3333 2666,-38.6667 2671.6667,-33 2677.3333,-33"/>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_Syntactic -->
 <g id="node19" class="node">
-<title>_P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2784,-274 2662,-274 2662,-238 2784,-238 2784,-274"/>
-<text text-anchor="start" x="2672.657" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboSyntactic ✓</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2674.3333,-239C2674.3333,-239 2771.6667,-239 2771.6667,-239 2777.3333,-239 2783,-244.6667 2783,-250.3333 2783,-250.3333 2783,-261.6667 2783,-261.6667 2783,-267.3333 2777.3333,-273 2771.6667,-273 2771.6667,-273 2674.3333,-273 2674.3333,-273 2668.6667,-273 2663,-267.3333 2663,-261.6667 2663,-261.6667 2663,-250.3333 2663,-250.3333 2663,-244.6667 2668.6667,-239 2674.3333,-239"/>
+<title>_P_ComboStepMaximality_InternalEventDeducer_Syntactic</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2746,-274 2662,-274 2662,-238 2746,-238 2746,-274"/>
+<text text-anchor="start" x="2672.992" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Syntactic ✓</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2674.3333,-239C2674.3333,-239 2733.6667,-239 2733.6667,-239 2739.3333,-239 2745,-244.6667 2745,-250.3333 2745,-250.3333 2745,-261.6667 2745,-261.6667 2745,-267.3333 2739.3333,-273 2733.6667,-273 2733.6667,-273 2674.3333,-273 2674.3333,-273 2668.6667,-273 2663,-267.3333 2663,-261.6667 2663,-261.6667 2663,-250.3333 2663,-250.3333 2663,-244.6667 2668.6667,-239 2674.3333,-239"/>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_TakeMany -->
 <g id="edge17" class="edge">
-<title>_P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M2723,-237.8863C2723,-228.0162 2723,-215.5868 2723,-204.5 2723,-204.5 2723,-204.5 2723,-85.5 2723,-83.1079 2723,-80.6252 2723,-78.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2726.5001,-78.0597 2723,-68.0598 2719.5001,-78.0598 2726.5001,-78.0597"/>
-<text text-anchor="start" x="2723" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InternalEventDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_TakeMany</title>
+<path fill="none" stroke="#000000" d="M2704,-237.8863C2704,-228.0162 2704,-215.5868 2704,-204.5 2704,-204.5 2704,-204.5 2704,-85.5 2704,-83.1079 2704,-80.6252 2704,-78.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2707.5001,-78.0597 2704,-68.0598 2700.5001,-78.0598 2707.5001,-78.0597"/>
+<text text-anchor="start" x="2704" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_TakeOne -->
 <g id="node20" class="node">
-<title>_P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2778,-472 2668,-472 2668,-436 2778,-436 2778,-472"/>
-<text text-anchor="start" x="2678.9906" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeOne</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2680.3333,-437C2680.3333,-437 2765.6667,-437 2765.6667,-437 2771.3333,-437 2777,-442.6667 2777,-448.3333 2777,-448.3333 2777,-459.6667 2777,-459.6667 2777,-465.3333 2771.3333,-471 2765.6667,-471 2765.6667,-471 2680.3333,-471 2680.3333,-471 2674.6667,-471 2669,-465.3333 2669,-459.6667 2669,-459.6667 2669,-448.3333 2669,-448.3333 2669,-442.6667 2674.6667,-437 2680.3333,-437"/>
+<title>_P_ComboStepMaximality_InternalEventDeducer_TakeOne</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2739.5,-472 2668.5,-472 2668.5,-436 2739.5,-436 2739.5,-472"/>
+<text text-anchor="start" x="2679.8256" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeOne</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2680.8333,-437C2680.8333,-437 2727.1667,-437 2727.1667,-437 2732.8333,-437 2738.5,-442.6667 2738.5,-448.3333 2738.5,-448.3333 2738.5,-459.6667 2738.5,-459.6667 2738.5,-465.3333 2732.8333,-471 2727.1667,-471 2727.1667,-471 2680.8333,-471 2680.8333,-471 2675.1667,-471 2669.5,-465.3333 2669.5,-459.6667 2669.5,-459.6667 2669.5,-448.3333 2669.5,-448.3333 2669.5,-442.6667 2675.1667,-437 2680.8333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_Syntactic -->
 <g id="edge18" class="edge">
-<title>_P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M2723,-435.7983C2723,-428.007 2723,-418.8073 2723,-410.5 2723,-410.5 2723,-410.5 2723,-291.5 2723,-289.1079 2723,-286.6252 2723,-284.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2726.5001,-284.0597 2723,-274.0598 2719.5001,-284.0598 2726.5001,-284.0597"/>
-<text text-anchor="start" x="2723" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InternalEventDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_Syntactic</title>
+<path fill="none" stroke="#000000" d="M2704,-435.7983C2704,-428.007 2704,-418.8073 2704,-410.5 2704,-410.5 2704,-410.5 2704,-291.5 2704,-289.1079 2704,-286.6252 2704,-284.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2707.5001,-284.0597 2704,-274.0598 2700.5001,-284.0598 2707.5001,-284.0597"/>
+<text text-anchor="start" x="2704" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_InternalEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_InternalEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_TakeOne -->
 <g id="edge19" class="edge">
-<title>_P_ComboStepMaximality_InternalEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M2723,-679.9402C2723,-674.3497 2723,-668.1701 2723,-662.5 2723,-662.5 2723,-662.5 2723,-489.5 2723,-487.1079 2723,-484.6252 2723,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2726.5001,-482.0597 2723,-472.0598 2719.5001,-482.0598 2726.5001,-482.0597"/>
-<text text-anchor="start" x="2723" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InternalEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InternalEventDeducer_TakeOne</title>
+<path fill="none" stroke="#000000" d="M2704,-679.9402C2704,-674.3497 2704,-668.1701 2704,-662.5 2704,-662.5 2704,-662.5 2704,-489.5 2704,-487.1079 2704,-484.6252 2704,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2707.5001,-482.0597 2704,-472.0598 2700.5001,-482.0598 2707.5001,-482.0597"/>
+<text text-anchor="start" x="2704" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">internal0 &#160;&#160;</text>
 </g>
 <!-- _P_ComboStepMaximality_InputEventDeducer -->
 <!-- _P_ComboStepMaximality_InputEventDeducer_initial -->
 <g id="node23" class="node">
 <title>_P_ComboStepMaximality_InputEventDeducer_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2576" cy="-947" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="2567" cy="-947" rx="5.5" ry="5.5"/>
 </g>
 <!-- _P_ComboStepMaximality_InputEventDeducer_Initial -->
 <g id="node27" class="node">
 <title>_P_ComboStepMaximality_InputEventDeducer_Initial</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2604,-716 2548,-716 2548,-680 2604,-680 2604,-716"/>
-<text text-anchor="start" x="2562.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2560.3333,-681C2560.3333,-681 2591.6667,-681 2591.6667,-681 2597.3333,-681 2603,-686.6667 2603,-692.3333 2603,-692.3333 2603,-703.6667 2603,-703.6667 2603,-709.3333 2597.3333,-715 2591.6667,-715 2591.6667,-715 2560.3333,-715 2560.3333,-715 2554.6667,-715 2549,-709.3333 2549,-703.6667 2549,-703.6667 2549,-692.3333 2549,-692.3333 2549,-686.6667 2554.6667,-681 2560.3333,-681"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2595,-716 2539,-716 2539,-680 2595,-680 2595,-716"/>
+<text text-anchor="start" x="2553.0002" y="-694.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Initial</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2551.3333,-681C2551.3333,-681 2582.6667,-681 2582.6667,-681 2588.3333,-681 2594,-686.6667 2594,-692.3333 2594,-692.3333 2594,-703.6667 2594,-703.6667 2594,-709.3333 2588.3333,-715 2582.6667,-715 2582.6667,-715 2551.3333,-715 2551.3333,-715 2545.6667,-715 2540,-709.3333 2540,-703.6667 2540,-703.6667 2540,-692.3333 2540,-692.3333 2540,-686.6667 2545.6667,-681 2551.3333,-681"/>
 </g>
 <!-- _P_ComboStepMaximality_InputEventDeducer_initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_Initial -->
 <g id="edge20" class="edge">
 <title>_P_ComboStepMaximality_InputEventDeducer_initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_Initial</title>
-<path fill="none" stroke="#000000" d="M2576,-941.3288C2576,-936.6736 2576,-929.9097 2576,-924 2576,-924 2576,-924 2576,-733.5 2576,-731.1079 2576,-728.6252 2576,-726.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2579.5001,-726.0597 2576,-716.0598 2572.5001,-726.0598 2579.5001,-726.0597"/>
-<text text-anchor="middle" x="2577.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M2567,-941.3288C2567,-936.6736 2567,-929.9097 2567,-924 2567,-924 2567,-924 2567,-733.5 2567,-731.1079 2567,-728.6252 2567,-726.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2570.5001,-726.0597 2567,-716.0598 2563.5001,-726.0598 2570.5001,-726.0597"/>
+<text text-anchor="middle" x="2568.3895" y="-813" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_TakeMany -->
 <g id="node24" class="node">
-<title>_P_ComboStepMaximality_InputEventDeducer_ComboTakeMany</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2634,-68 2518,-68 2518,-32 2634,-32 2634,-68"/>
-<text text-anchor="start" x="2528.6606" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeMany</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2530.3333,-33C2530.3333,-33 2621.6667,-33 2621.6667,-33 2627.3333,-33 2633,-38.6667 2633,-44.3333 2633,-44.3333 2633,-55.6667 2633,-55.6667 2633,-61.3333 2627.3333,-67 2621.6667,-67 2621.6667,-67 2530.3333,-67 2530.3333,-67 2524.6667,-67 2519,-61.3333 2519,-55.6667 2519,-55.6667 2519,-44.3333 2519,-44.3333 2519,-38.6667 2524.6667,-33 2530.3333,-33"/>
+<title>_P_ComboStepMaximality_InputEventDeducer_TakeMany</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2606,-68 2528,-68 2528,-32 2606,-32 2606,-68"/>
+<text text-anchor="start" x="2538.9956" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeMany</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2540.3333,-33C2540.3333,-33 2593.6667,-33 2593.6667,-33 2599.3333,-33 2605,-38.6667 2605,-44.3333 2605,-44.3333 2605,-55.6667 2605,-55.6667 2605,-61.3333 2599.3333,-67 2593.6667,-67 2593.6667,-67 2540.3333,-67 2540.3333,-67 2534.6667,-67 2529,-61.3333 2529,-55.6667 2529,-55.6667 2529,-44.3333 2529,-44.3333 2529,-38.6667 2534.6667,-33 2540.3333,-33"/>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_Syntactic -->
 <g id="node25" class="node">
-<title>_P_ComboStepMaximality_InputEventDeducer_ComboSyntactic</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2637,-274 2515,-274 2515,-238 2637,-238 2637,-274"/>
-<text text-anchor="start" x="2525.657" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboSyntactic ✓</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2527.3333,-239C2527.3333,-239 2624.6667,-239 2624.6667,-239 2630.3333,-239 2636,-244.6667 2636,-250.3333 2636,-250.3333 2636,-261.6667 2636,-261.6667 2636,-267.3333 2630.3333,-273 2624.6667,-273 2624.6667,-273 2527.3333,-273 2527.3333,-273 2521.6667,-273 2516,-267.3333 2516,-261.6667 2516,-261.6667 2516,-250.3333 2516,-250.3333 2516,-244.6667 2521.6667,-239 2527.3333,-239"/>
+<title>_P_ComboStepMaximality_InputEventDeducer_Syntactic</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2609,-274 2525,-274 2525,-238 2609,-238 2609,-274"/>
+<text text-anchor="start" x="2535.992" y="-252.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">Syntactic ✓</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2537.3333,-239C2537.3333,-239 2596.6667,-239 2596.6667,-239 2602.3333,-239 2608,-244.6667 2608,-250.3333 2608,-250.3333 2608,-261.6667 2608,-261.6667 2608,-267.3333 2602.3333,-273 2596.6667,-273 2596.6667,-273 2537.3333,-273 2537.3333,-273 2531.6667,-273 2526,-267.3333 2526,-261.6667 2526,-261.6667 2526,-250.3333 2526,-250.3333 2526,-244.6667 2531.6667,-239 2537.3333,-239"/>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboTakeMany -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_TakeMany -->
 <g id="edge21" class="edge">
-<title>_P_ComboStepMaximality_InputEventDeducer_ComboSyntactic&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboTakeMany</title>
-<path fill="none" stroke="#000000" d="M2576,-237.8863C2576,-228.0162 2576,-215.5868 2576,-204.5 2576,-204.5 2576,-204.5 2576,-85.5 2576,-83.1079 2576,-80.6252 2576,-78.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2579.5001,-78.0597 2576,-68.0598 2572.5001,-78.0598 2579.5001,-78.0597"/>
-<text text-anchor="start" x="2576" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InputEventDeducer_Syntactic&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_TakeMany</title>
+<path fill="none" stroke="#000000" d="M2567,-237.8863C2567,-228.0162 2567,-215.5868 2567,-204.5 2567,-204.5 2567,-204.5 2567,-85.5 2567,-83.1079 2567,-80.6252 2567,-78.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2570.5001,-78.0597 2567,-68.0598 2563.5001,-78.0598 2570.5001,-78.0597"/>
+<text text-anchor="start" x="2567" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_TakeOne -->
 <g id="node26" class="node">
-<title>_P_ComboStepMaximality_InputEventDeducer_ComboTakeOne</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2631,-472 2521,-472 2521,-436 2631,-436 2631,-472"/>
-<text text-anchor="start" x="2531.9906" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ComboTakeOne</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M2533.3333,-437C2533.3333,-437 2618.6667,-437 2618.6667,-437 2624.3333,-437 2630,-442.6667 2630,-448.3333 2630,-448.3333 2630,-459.6667 2630,-459.6667 2630,-465.3333 2624.3333,-471 2618.6667,-471 2618.6667,-471 2533.3333,-471 2533.3333,-471 2527.6667,-471 2522,-465.3333 2522,-459.6667 2522,-459.6667 2522,-448.3333 2522,-448.3333 2522,-442.6667 2527.6667,-437 2533.3333,-437"/>
+<title>_P_ComboStepMaximality_InputEventDeducer_TakeOne</title>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="2602.5,-472 2531.5,-472 2531.5,-436 2602.5,-436 2602.5,-472"/>
+<text text-anchor="start" x="2542.8256" y="-450.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">TakeOne</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M2543.8333,-437C2543.8333,-437 2590.1667,-437 2590.1667,-437 2595.8333,-437 2601.5,-442.6667 2601.5,-448.3333 2601.5,-448.3333 2601.5,-459.6667 2601.5,-459.6667 2601.5,-465.3333 2595.8333,-471 2590.1667,-471 2590.1667,-471 2543.8333,-471 2543.8333,-471 2538.1667,-471 2532.5,-465.3333 2532.5,-459.6667 2532.5,-459.6667 2532.5,-448.3333 2532.5,-448.3333 2532.5,-442.6667 2538.1667,-437 2543.8333,-437"/>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboSyntactic -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_Syntactic -->
 <g id="edge22" class="edge">
-<title>_P_ComboStepMaximality_InputEventDeducer_ComboTakeOne&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboSyntactic</title>
-<path fill="none" stroke="#000000" d="M2576,-435.7983C2576,-428.007 2576,-418.8073 2576,-410.5 2576,-410.5 2576,-410.5 2576,-291.5 2576,-289.1079 2576,-286.6252 2576,-284.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2579.5001,-284.0597 2576,-274.0598 2572.5001,-284.0598 2579.5001,-284.0597"/>
-<text text-anchor="start" x="2576" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InputEventDeducer_TakeOne&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_Syntactic</title>
+<path fill="none" stroke="#000000" d="M2567,-435.7983C2567,-428.007 2567,-418.8073 2567,-410.5 2567,-410.5 2567,-410.5 2567,-291.5 2567,-289.1079 2567,-286.6252 2567,-284.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2570.5001,-284.0597 2567,-274.0598 2563.5001,-284.0598 2570.5001,-284.0597"/>
+<text text-anchor="start" x="2567" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
 </g>
-<!-- _P_ComboStepMaximality_InputEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboTakeOne -->
+<!-- _P_ComboStepMaximality_InputEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_TakeOne -->
 <g id="edge23" class="edge">
-<title>_P_ComboStepMaximality_InputEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_ComboTakeOne</title>
-<path fill="none" stroke="#000000" d="M2576,-679.9402C2576,-674.3497 2576,-668.1701 2576,-662.5 2576,-662.5 2576,-662.5 2576,-489.5 2576,-487.1079 2576,-484.6252 2576,-482.1342"/>
-<polygon fill="#000000" stroke="#000000" points="2579.5001,-482.0597 2576,-472.0598 2572.5001,-482.0598 2579.5001,-482.0597"/>
-<text text-anchor="start" x="2576" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
+<title>_P_ComboStepMaximality_InputEventDeducer_Initial&#45;&gt;_P_ComboStepMaximality_InputEventDeducer_TakeOne</title>
+<path fill="none" stroke="#000000" d="M2567,-679.9402C2567,-674.3497 2567,-668.1701 2567,-662.5 2567,-662.5 2567,-662.5 2567,-489.5 2567,-487.1079 2567,-484.6252 2567,-482.1342"/>
+<polygon fill="#000000" stroke="#000000" points="2570.5001,-482.0597 2567,-472.0598 2563.5001,-482.0598 2570.5001,-482.0597"/>
+<text text-anchor="start" x="2567" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">input0 &#160;&#160;</text>
 </g>
 <!-- _P_Priority -->
 <!-- _P_Priority_initial -->

+ 203 - 0
examples/semantics/statechart_semantics.xml

@@ -0,0 +1,203 @@
+<?xml version="1.0" ?>
+<statechart>
+  <semantics
+    big_step_maximality="take_one, syntactic, take_many"
+    combo_step_maximality="take_one, syntactic, take_many"
+    input_event_lifeline="first_small_step, first_combo_step, whole"
+    internal_event_lifeline="next_small_step, next_combo_step, remainder, queue"
+    enabledness_memory_protocol="small_step, combo_step, big_step"
+    assignment_memory_protocol="small_step, combo_step, big_step"
+    concurrency="single"
+    priority="source_child, source_parent"/>
+
+  <datamodel>
+    x = 0;
+  </datamodel>
+
+  <inport name="in">
+    <event name="input0"/>
+    <event name="bigstep1"/>
+  </inport>
+
+
+  <root>
+    <parallel id="P">
+
+      <state id="BigStepMaximality" initial="Initial">
+        <state id="Initial">
+          <transition target="../TakeOne"/>
+        </state>
+        <state id="TakeOne">
+          <transition target="../Syntactic"/>
+        </state>
+        <state id="Syntactic" stable="true">
+          <transition target="../TakeMany"/>
+        </state>
+        <state id="TakeMany">
+        </state>
+      </state>
+
+      <state id="InputEventLifeline" initial="FirstSmallStep">
+        <!-- because BigStepMaximality region has higher priority,
+             it will 'consume' the input event upon FirstSmallStep -->
+        <state id="FirstSmallStep">
+          <transition event="input0" target="../Whole"/>
+        </state>
+        <state id="Whole">
+          <transition event="not input0" target="../FirstComboStep"/>
+        </state>
+        <state id="FirstComboStep">
+        </state>
+      </state>
+
+      <parallel id="InternalEventLifeline" >
+        <state id="RegionBroadcast" initial="Initial">
+          <state id="Initial">
+            <transition target="../Done">
+              <raise event="internal0"/>
+            </transition>
+          </state>
+          <state id="Done"/>
+        </state>
+        <state id="RegionReceive1" initial="Initial">
+          <state id="Initial">
+            <transition event="internal0" target="../GotEvent"/>
+          </state>
+          <state id="GotEvent">
+          </state>
+        </state>
+        <state id="RegionReceive2" initial="Initial">
+          <state id="Initial">
+            <transition event="internal0" target="../GotEvent"/>
+          </state>
+          <state id="GotEvent">
+          </state>
+        </state>
+
+        <state id="InternalEventLifeline" initial="Initial">
+          <!-- <state id="NonRemainder" initial="Initial"> -->
+          <state id="Initial">
+            <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent"]) and not INSTATE(["/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../NextSmallStep"/>
+            <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent", "/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../Remainder"/>
+            <transition target="../Queue"/>
+          </state>
+          <state id="NextSmallStep">
+          </state>
+          <state id="Remainder">
+          </state>
+          <state id="NextComboStep">
+          </state>
+          <state id="Queue">
+            <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent", "/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../NextComboStep"/>
+          </state>
+        </state>
+      </parallel>
+
+      <parallel id="MemoryProtocol">
+        <state id="RegionAssign" initial="Initial">
+          <state id="Initial">
+            <transition target="../Assigned">
+              <code> x = 1; </code>
+            </transition>
+          </state>
+          <state id="Assigned">
+          </state>
+        </state>
+        <state id="MemoryProtocol" initial="Initial">
+          <state id="Initial">
+            <transition cond="x == 1" target="../SmallStep"/>
+            <transition cond="x == 0" target="../BigStep"/>
+          </state>
+          <state id="BigStep">
+            <transition cond="x == 1" target="../ComboStep"/>
+          </state>
+          <state id="ComboStep">
+          </state>
+          <state id="SmallStep">
+          </state>
+        </state>
+      </parallel>
+
+      <state id="Priority" initial="Composite">
+        <state id="Composite">
+          <state id="Basic">
+            <transition target="../../SourceChild"/>
+          </state>
+          <transition target="../SourceParent"/>
+        </state>
+
+        <state id="SourceParent"/>
+        <state id="SourceChild"/>
+      </state>
+
+      <parallel id="ComboStepMaximality">
+
+        <state id="InputEventDeducer" initial="Initial">
+          <!-- suppose Input Event Lifeline is first_combo_step, then the "final" state of this region will indicate combo step maximality -->
+          <state id="Initial">
+            <transition event="input0" target="../TakeOne"/>
+          </state>
+          <state id="TakeOne">
+            <transition event="input0" target="../Syntactic"/>
+          </state>
+          <state id="Syntactic" stable="true">
+            <transition event="input0" target="../TakeMany"/>
+          </state>
+          <state id="TakeMany">
+          </state>
+        </state>
+        <state id="InternalEventDeducer" initial="Initial">
+          <!-- suppose Internal Event Lifeline is next_combo_step, then the "final" state of this region will indicate combo step maximality -->
+          <state id="Initial">
+            <transition event="internal0" target="../TakeOne"/>
+          </state>
+          <state id="TakeOne">
+            <transition event="internal0" target="../Syntactic"/>
+          </state>
+          <state id="Syntactic" stable="true">
+            <transition event="internal0" target="../TakeMany"/>
+          </state>
+          <state id="TakeMany">
+          </state>
+        </state>
+        <state id="MemoryProtocolDeducer" initial="Initial">
+          <!-- suppose Memory Protocol is combo_step, then the "final" state of this region will indicate combo step maximality -->
+          <state id="Initial">
+            <transition cond="x == 0" target="../TakeOne">
+              <!-- <code> y = 1; </code> y will be 1 in the next combo step -->
+            </transition>
+          </state>
+          <state id="TakeOne">
+            <transition cond="x == 0" target="../Syntactic"/>
+          </state>
+          <state id="Syntactic" stable="true">
+            <transition cond="x == 0" target="../TakeMany"/>
+          </state>
+          <state id="TakeMany">
+          </state>
+        </state>
+
+
+        <state id="ComboStepMaximality" initial="NoComboSteps">
+          <state id="NoComboSteps">
+            <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/TakeOne"])' target="../TakeOne"/>
+            <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/Syntactic"])' target="../Syntactic"/>
+            <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/TakeMany"])' target="../TakeMany"/>
+
+            <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/TakeOne"])' target="../TakeOne"/>
+            <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/Syntactic"])' target="../Syntactic"/>
+            <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/TakeMany"])' target="../TakeMany"/>
+
+            <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/TakeOne"])' target="../TakeOne"/>
+            <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/Syntactic"])' target="../Syntactic"/>
+            <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/TakeMany"])' target="../TakeMany"/>
+          </state>
+
+          <state id="TakeOne"/>
+          <state id="Syntactic"/>
+          <state id="TakeMany"/>
+        </state>
+      </parallel>
+    </parallel>
+  </root>
+</statechart>

+ 1 - 2
src/sccd/statechart/dynamic/event.py

@@ -22,8 +22,7 @@ class InternalEvent:
         return termcolor.colored(s, 'yellow')
 
     __repr__ = __str__
-
-
+    
 
 @dataclass
 class OutputEvent:

+ 7 - 7
src/sccd/statechart/dynamic/statechart_instance.py

@@ -61,32 +61,32 @@ class StatechartInstance(Instance):
         small_step = SmallStep(termcolor.colored("small", 'blue'), self.execution, generator)
 
 
-        if semantics.big_step_maximality == BigStepMaximality.TAKE_ONE:
+        if semantics.big_step_maximality == Maximality.TAKE_ONE:
             self._big_step = combo_step = SuperRound(termcolor.colored("big_one", 'red'), subround=small_step, maximality=TakeOne()) # No combo steps
 
-        elif semantics.big_step_maximality == BigStepMaximality.TAKE_MANY or semantics.big_step_maximality == BigStepMaximality.SYNTACTIC:
+        elif semantics.big_step_maximality == Maximality.TAKE_MANY or semantics.big_step_maximality == Maximality.SYNTACTIC:
             # Always add a layer of 'fairness' above our small steps, so
             # orthogonal transitions take turns fairly.
             combo_one = SuperRound(termcolor.colored("combo_one", 'magenta'), subround=small_step, maximality=TakeOne())
 
-            if semantics.combo_step_maximality == ComboStepMaximality.COMBO_TAKE_ONE:
+            if semantics.combo_step_maximality == Maximality.TAKE_ONE:
                 # Fairness round becomes our combo step round
                 combo_step = combo_one
 
-            elif semantics.combo_step_maximality == ComboStepMaximality.COMBO_TAKE_MANY:
+            elif semantics.combo_step_maximality == Maximality.TAKE_MANY:
                 # Add even more layers, basically an onion at this point.
                 combo_step = SuperRoundWithLimit(termcolor.colored("combo_many", 'cyan'), subround=combo_one, maximality=TakeMany(), limit=LIMIT)
 
-            elif semantics.combo_step_maximality == ComboStepMaximality.COMBO_SYNTACTIC:
+            elif semantics.combo_step_maximality == Maximality.SYNTACTIC:
                 combo_step = SuperRoundWithLimit(termcolor.colored("combo_syntactic", 'cyan'), subround=combo_one, maximality=Syntactic(), limit=LIMIT)
 
             else:
                 raise Exception("Unsupported option: %s" % semantics.combo_step_maximality)
 
-            if semantics.big_step_maximality == BigStepMaximality.TAKE_MANY:
+            if semantics.big_step_maximality == Maximality.TAKE_MANY:
                 self._big_step = SuperRoundWithLimit(termcolor.colored("big_many", 'red'), subround=combo_step, maximality=TakeMany(), limit=LIMIT)
 
-            elif semantics.big_step_maximality == BigStepMaximality.SYNTACTIC:
+            elif semantics.big_step_maximality == Maximality.SYNTACTIC:
                 self._big_step = SuperRoundWithLimit(termcolor.colored("big_syntactic", 'red'), subround=combo_step, maximality=Syntactic(), limit=LIMIT)
 
         else:

+ 1 - 1
src/sccd/statechart/static/globals.py

@@ -24,7 +24,7 @@ class Globals:
   # parameter delta: if set, this will be the model delta.
   # otherwise, model delta will be the GCD of all durations registered.
   # typically, a 'delta' of 100us to 1ms is desirable because this will also be the 'precision' of input event timestamps.
-  def init_durations(self, delta: Optional[Duration]):
+  def init_durations(self, delta: Optional[Duration] = None):
     gcd_delta = gcd(*(d.d for d in self.durations))
 
     # Ensure delta not too big

+ 39 - 9
src/sccd/statechart/static/statechart.py

@@ -10,15 +10,32 @@ class SemanticAspect:
     # Override default: only print field, not the type (e.g. "TAKE_ONE" instead of "BigStepMaximality.TAKE_ONE")
     return self.name
 
-class BigStepMaximality(SemanticAspect, Enum):
+  __repr__ = __str__
+
+class Maximality(SemanticAspect, Enum):
   TAKE_ONE = auto()
-  TAKE_MANY = auto()
   SYNTACTIC = auto()
+  TAKE_MANY = auto()
 
-class ComboStepMaximality(SemanticAspect, Enum):
-  COMBO_TAKE_ONE = auto()
-  COMBO_TAKE_MANY = auto()
-  COMBO_SYNTACTIC = auto()
+  # We define an ordering TAKE_ONE < SYNTACTIC < TAKE_MANY
+
+  def __lt__(self, other):
+    if self == other:
+      return False
+    if other == Maximality.TAKE_MANY:
+      return True
+    if other == Maximality.SYNTACTIC:
+      return self == Maximality.TAKE_ONE
+    return False
+
+  def __le__(self, other):
+    return self == other or self < other
+
+  def __gt__(self, other):
+    return not (self <= other)
+
+  def __ge__(self, other):
+    return not (self < other)
 
 class InternalEventLifeline(SemanticAspect, Enum):
   QUEUE = auto()
@@ -58,9 +75,9 @@ class SemanticConfiguration:
   # All semantic aspects and their default values.
   # Every field can be set to a list of multiple options, or just a value.
 
-  # The following is the default configuration:
-  big_step_maximality: SemanticChoice[BigStepMaximality] = BigStepMaximality.TAKE_MANY
-  combo_step_maximality: SemanticChoice[ComboStepMaximality] = ComboStepMaximality.COMBO_TAKE_ONE
+  # The following is the default configuration. Changing these values changes SCCD's default semantics:
+  big_step_maximality: SemanticChoice[Maximality] = Maximality.TAKE_MANY
+  combo_step_maximality: SemanticChoice[Maximality] = Maximality.TAKE_ONE
   internal_event_lifeline: SemanticChoice[InternalEventLifeline] = InternalEventLifeline.NEXT_COMBO_STEP
   input_event_lifeline: SemanticChoice[InputEventLifeline] = InputEventLifeline.FIRST_COMBO_STEP
   enabledness_memory_protocol: SemanticChoice[MemoryProtocol] = MemoryProtocol.COMBO_STEP
@@ -123,3 +140,16 @@ class Statechart(Freezable):
     self.event_outport: Dict[str, str] = event_outport
 
     self.tree: StateTree = tree
+
+  def generate_semantic_variants(self) -> List['Statechart']:
+    return [Statechart(
+        semantics=variant,
+        #  All other fields remain the same.
+        scope=self.scope,
+        datamodel=self.datamodel,
+        internal_events=self.internal_events,
+        internally_raised_events=self.internally_raised_events,
+        inport_events=self.inport_events,
+        event_outport=self.event_outport,
+        tree=self.tree)
+      for variant in self.semantics.generate_variants()]

+ 3 - 14
src/sccd/test/xml.py

@@ -75,7 +75,7 @@ def test_parser_rules(statechart_parser_rules):
 
     def finish_test(statechart):
       globals.init_durations(delta=None)
-      variants = statechart.semantics.generate_variants()
+      variants = statechart.generate_semantic_variants()
 
       def variant_description(i, variant) -> str:
         if not variant:
@@ -85,19 +85,8 @@ def test_parser_rules(statechart_parser_rules):
         return text
 
       return [TestVariant(
-        name=variant_description(i, variant),
-        cd=SingleInstanceCD(
-          globals,
-          Statechart(
-            semantics=variant,
-            #  All other fields remain the same
-            scope=statechart.scope,
-            datamodel=statechart.datamodel,
-            internal_events=statechart.internal_events,
-            internally_raised_events=statechart.internally_raised_events,
-            inport_events=statechart.inport_events,
-            event_outport=statechart.event_outport,
-            tree=statechart.tree)),
+        name=variant_description(i, variant.semantics),
+        cd=SingleInstanceCD(globals=globals, statechart=variant),
         input=input,
         output=output)
       for i, variant in enumerate(variants)]

+ 0 - 217
test/test_demo.xml

@@ -1,217 +0,0 @@
-<test>
-  <statechart>
-    <semantics
-      big_step_maximality="take_one, syntactic, take_many"
-      combo_step_maximality="combo_take_one, combo_syntactic, combo_take_many"
-      input_event_lifeline="first_small_step, first_combo_step, whole"
-      internal_event_lifeline="next_small_step, next_combo_step, remainder, queue"
-      enabledness_memory_protocol="small_step, combo_step, big_step"
-      assignment_memory_protocol="small_step, combo_step, big_step"
-      concurrency="single"
-      priority="source_child, source_parent"/>
-<!--     <semantics
-      big_step_maximality="syntactic"
-      combo_step_maximality="combo_take_one"
-      input_event_lifeline="whole"
-      internal_event_lifeline="next_small_step"
-      enabledness_memory_protocol="combo_step"
-      assignment_memory_protocol="combo_step"
-      priority="source_parent"/>
- -->
-    <datamodel>
-      x = 0;
-      #y = 0;
-    </datamodel>
-
-    <inport name="in">
-      <event name="input0"/>
-      <event name="bigstep1"/>
-    </inport>
-
-
-    <root>
-      <parallel id="P">
-
-        <state id="BigStepMaximality" initial="Initial">
-          <state id="Initial">
-            <transition target="../TakeOne"/>
-          </state>
-          <state id="TakeOne">
-            <transition target="../Syntactic"/>
-          </state>
-          <state id="Syntactic" stable="true">
-            <transition target="../TakeMany"/>
-          </state>
-          <state id="TakeMany">
-          </state>
-        </state>
-
-        <state id="InputEventLifeline" initial="FirstSmallStep">
-          <!-- because BigStepMaximality region has higher priority,
-               it will 'consume' the input event upon FirstSmallStep -->
-          <state id="FirstSmallStep">
-            <transition event="input0" target="../Whole"/>
-          </state>
-          <state id="Whole">
-            <transition event="not input0" target="../FirstComboStep"/>
-          </state>
-          <state id="FirstComboStep">
-          </state>
-        </state>
-
-        <parallel id="InternalEventLifeline" >
-          <state id="RegionBroadcast" initial="Initial">
-            <state id="Initial">
-              <transition target="../Done">
-                <raise event="internal0"/>
-              </transition>
-            </state>
-            <state id="Done"/>
-          </state>
-          <state id="RegionReceive1" initial="Initial">
-            <state id="Initial">
-              <transition event="internal0" target="../GotEvent"/>
-            </state>
-            <state id="GotEvent">
-            </state>
-          </state>
-          <state id="RegionReceive2" initial="Initial">
-            <state id="Initial">
-              <transition event="internal0" target="../GotEvent"/>
-            </state>
-            <state id="GotEvent">
-            </state>
-          </state>
-
-          <state id="InternalEventLifeline" initial="Initial">
-            <!-- <state id="NonRemainder" initial="Initial"> -->
-            <state id="Initial">
-              <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent"]) and not INSTATE(["/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../NextSmallStep"/>
-              <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent", "/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../Remainder"/>
-              <transition target="../Queue"/>
-            </state>
-            <state id="NextSmallStep">
-            </state>
-            <state id="Remainder">
-            </state>
-            <state id="NextComboStep">
-            </state>
-            <state id="Queue">
-              <transition cond='INSTATE(["/P/InternalEventLifeline/RegionReceive1/GotEvent", "/P/InternalEventLifeline/RegionReceive2/GotEvent"])' target="../NextComboStep"/>
-            </state>
-          </state>
-        </parallel>
-
-        <parallel id="MemoryProtocol">
-          <state id="RegionAssign" initial="Initial">
-            <state id="Initial">
-              <transition target="../Assigned">
-                <code> x = 1; </code>
-              </transition>
-            </state>
-            <state id="Assigned">
-            </state>
-          </state>
-          <state id="MemoryProtocol" initial="Initial">
-            <state id="Initial">
-              <transition cond="x == 1" target="../SmallStep"/>
-              <transition cond="x == 0" target="../BigStep"/>
-            </state>
-            <state id="BigStep">
-              <transition cond="x == 1" target="../ComboStep"/>
-            </state>
-            <state id="ComboStep">
-            </state>
-            <state id="SmallStep">
-            </state>
-          </state>
-        </parallel>
-
-        <state id="Priority" initial="Composite">
-          <state id="Composite">
-            <state id="Basic">
-              <transition target="../../SourceChild"/>
-            </state>
-            <transition target="../SourceParent"/>
-          </state>
-
-          <state id="SourceParent"/>
-          <state id="SourceChild"/>
-        </state>
-
-        <parallel id="ComboStepMaximality">
-
-          <state id="InputEventDeducer" initial="Initial">
-            <!-- suppose Input Event Lifeline is first_combo_step, then the "final" state of this region will indicate combo step maximality -->
-            <state id="Initial">
-              <transition event="input0" target="../ComboTakeOne"/>
-            </state>
-            <state id="ComboTakeOne">
-              <transition event="input0" target="../ComboSyntactic"/>
-            </state>
-            <state id="ComboSyntactic" stable="true">
-              <transition event="input0" target="../ComboTakeMany"/>
-            </state>
-            <state id="ComboTakeMany">
-            </state>
-          </state>
-          <state id="InternalEventDeducer" initial="Initial">
-            <!-- suppose Internal Event Lifeline is next_combo_step, then the "final" state of this region will indicate combo step maximality -->
-            <state id="Initial">
-              <transition event="internal0" target="../ComboTakeOne"/>
-            </state>
-            <state id="ComboTakeOne">
-              <transition event="internal0" target="../ComboSyntactic"/>
-            </state>
-            <state id="ComboSyntactic" stable="true">
-              <transition event="internal0" target="../ComboTakeMany"/>
-            </state>
-            <state id="ComboTakeMany">
-            </state>
-          </state>
-          <state id="MemoryProtocolDeducer" initial="Initial">
-            <!-- suppose Memory Protocol is combo_step, then the "final" state of this region will indicate combo step maximality -->
-            <state id="Initial">
-              <transition cond="x == 0" target="../ComboTakeOne">
-                <!-- <code> y = 1; </code> y will be 1 in the next combo step -->
-              </transition>
-            </state>
-            <state id="ComboTakeOne">
-              <transition cond="x == 0" target="../ComboSyntactic"/>
-            </state>
-            <state id="ComboSyntactic" stable="true">
-              <transition cond="x == 0" target="../ComboTakeMany"/>
-            </state>
-            <state id="ComboTakeMany">
-            </state>
-          </state>
-
-
-          <state id="ComboStepMaximality" initial="NoComboSteps">
-            <state id="NoComboSteps">
-              <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/ComboTakeOne"])' target="../ComboTakeOne"/>
-              <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/ComboSyntactic"])' target="../ComboSyntactic"/>
-              <transition event="not input0" cond='INSTATE(["/P/InputEventLifeline/FirstComboStep", "/P/ComboStepMaximality/InputEventDeducer/ComboTakeMany"])' target="../ComboTakeMany"/>
-
-              <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/ComboTakeOne"])' target="../ComboTakeOne"/>
-              <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/ComboSyntactic"])' target="../ComboSyntactic"/>
-              <transition event="not internal0" cond='INSTATE(["/P/InternalEventLifeline/InternalEventLifeline/NextComboStep", "/P/ComboStepMaximality/InternalEventDeducer/ComboTakeMany"])' target="../ComboTakeMany"/>
-
-              <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/ComboTakeOne"])' target="../ComboTakeOne"/>
-              <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/ComboSyntactic"])' target="../ComboSyntactic"/>
-              <transition cond='x == 1 and INSTATE(["/P/MemoryProtocol/MemoryProtocol/ComboStep", "/P/ComboStepMaximality/MemoryProtocolDeducer/ComboTakeMany"])' target="../ComboTakeMany"/>
-            </state>
-
-            <state id="ComboTakeOne"/>
-            <state id="ComboSyntactic"/>
-            <state id="ComboTakeMany"/>
-          </state>
-        </parallel>
-      </parallel>
-    </root>
-  </statechart>
-
-  <input>
-    <event port="in" name="input0" time="0 d"/>
-  </input>
-</test>

+ 3 - 3
test/test_files/day_atlee/statechart_fig1_redialer.xml

@@ -16,7 +16,7 @@
 
     digit = func(i:int, pos:int) {
       result = i // 10**pos % 10;
-      print("digit " + int_to_str(pos) + " of " + int_to_str(i) + " is " + int_to_str(result));
+      # print("digit " + int_to_str(pos) + " of " + int_to_str(i) + " is " + int_to_str(result));
       return result;
     };
 
@@ -52,7 +52,7 @@
           <!-- t2 -->
           <transition event="dial(d:int), redial" cond="c == 0" target="../DialDigits">
             <code>
-              print("got dial("+int_to_str(d)+")");
+              # print("got dial("+int_to_str(d)+")");
               lp = d;
               c = 1;
             </code>
@@ -65,7 +65,7 @@
           <!-- t3 -->
           <transition event="dial(d:int)" cond="c &lt; 10" target=".">
             <code>
-              print("got dial("+int_to_str(d)+")");
+              # print("got dial("+int_to_str(d)+")");
               lp = lp * 10 + d;
               c += 1;
             </code>

+ 1 - 1
test/test_files/features/after/test_after_reentry.xml

@@ -3,7 +3,7 @@
   <statechart>
     <semantics
         big_step_maximality="take_many"
-        combo_step_maximality="combo_take_one"/>
+        combo_step_maximality="take_one"/>
 
     <outport name="out">
       <event name="in_b"/>

+ 1 - 1
test/test_files/features/history/test_deep.xml

@@ -4,7 +4,7 @@
   <statechart>
     <semantics
       big_step_maximality="take_many"
-      combo_step_maximality="combo_take_many"
+      combo_step_maximality="take_many"
       internal_event_lifeline="queue"/>
 
     <inport name="in">