{
  "title": "One-use reservation",
  "profile": "zal/finite-fsm/1",
  "source_digest": "138294e67be19ba662069d3cbd713176eafe63f32c369a2262505075993664e9",
  "source_revision": "ad2cab2c0b540a12bf4c5380594134095aea071c904f28fe14a0c78d5b4be858",
  "model_revision": "8820429f288cf5d1a51152cc8d8493f0bc12a54e08128f1b94930ecdf8de8a4b",
  "model": {
    "events": [
      "release",
      "reserve"
    ],
    "facts": [
      "authorized"
    ],
    "initial": "unseen",
    "name": "lifecycle",
    "observation": "decision",
    "rows": [
      [
        "held",
        [
          "release",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "held"
          ]
        ]
      ],
      [
        "held",
        [
          "release",
          [
            true
          ]
        ],
        [
          [
            "Accept",
            "",
            "released"
          ]
        ]
      ],
      [
        "held",
        [
          "reserve",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "held"
          ]
        ]
      ],
      [
        "held",
        [
          "reserve",
          [
            true
          ]
        ],
        [
          [
            "Reject",
            "duplicate",
            "held"
          ]
        ]
      ],
      [
        "released",
        [
          "release",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "released"
          ]
        ]
      ],
      [
        "released",
        [
          "release",
          [
            true
          ]
        ],
        [
          [
            "Reject",
            "not_held",
            "released"
          ]
        ]
      ],
      [
        "released",
        [
          "reserve",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "released"
          ]
        ]
      ],
      [
        "released",
        [
          "reserve",
          [
            true
          ]
        ],
        [
          [
            "Reject",
            "duplicate",
            "released"
          ]
        ]
      ],
      [
        "unseen",
        [
          "release",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "unseen"
          ]
        ]
      ],
      [
        "unseen",
        [
          "release",
          [
            true
          ]
        ],
        [
          [
            "Reject",
            "not_held",
            "unseen"
          ]
        ]
      ],
      [
        "unseen",
        [
          "reserve",
          [
            false
          ]
        ],
        [
          [
            "Reject",
            "unauthorized",
            "unseen"
          ]
        ]
      ],
      [
        "unseen",
        [
          "reserve",
          [
            true
          ]
        ],
        [
          [
            "Accept",
            "",
            "held"
          ]
        ]
      ]
    ],
    "semantics": "total-synchronous-step/fresh-boolean-inputs/reject-unchanged",
    "states": [
      "held",
      "released",
      "unseen"
    ]
  },
  "english": "ZAL version 1.\nThe machine is one_use.\nThe states are held, released, unseen.\nThe events are release, reserve.\nThe context observations are authorized.\nInitially the state is unseen.\nEach step is atomic. Only the control state may change.\nOtherwise reject because unmatched and keep the state unchanged.\nRule r00: when the state is held and the event is release, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r01: when the state is held and the event is release, if authorized, move to released.\nRule r02: when the state is held and the event is reserve, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r03: when the state is held and the event is reserve, if authorized, reject because duplicate and keep the state unchanged.\nRule r04: when the state is released and the event is release, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r05: when the state is released and the event is release, if authorized, reject because not_held and keep the state unchanged.\nRule r06: when the state is released and the event is reserve, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r07: when the state is released and the event is reserve, if authorized, reject because duplicate and keep the state unchanged.\nRule r08: when the state is unseen and the event is release, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r09: when the state is unseen and the event is release, if authorized, reject because not_held and keep the state unchanged.\nRule r10: when the state is unseen and the event is reserve, if (not authorized), reject because unauthorized and keep the state unchanged.\nRule r11: when the state is unseen and the event is reserve, if authorized, move to held.\n",
  "symbolic": "zal 1;\nmachine one_use;\nstates held, released, unseen;\nevents release, reserve;\ncontext authorized;\ninitial unseen;\nstep atomic; frame control_only;\ndefault reject unmatched unchanged;\nrule r00: held + release [(!authorized)] -> reject unauthorized unchanged;\nrule r01: held + release [authorized] -> accept released;\nrule r02: held + reserve [(!authorized)] -> reject unauthorized unchanged;\nrule r03: held + reserve [authorized] -> reject duplicate unchanged;\nrule r04: released + release [(!authorized)] -> reject unauthorized unchanged;\nrule r05: released + release [authorized] -> reject not_held unchanged;\nrule r06: released + reserve [(!authorized)] -> reject unauthorized unchanged;\nrule r07: released + reserve [authorized] -> reject duplicate unchanged;\nrule r08: unseen + release [(!authorized)] -> reject unauthorized unchanged;\nrule r09: unseen + release [authorized] -> reject not_held unchanged;\nrule r10: unseen + reserve [(!authorized)] -> reject unauthorized unchanged;\nrule r11: unseen + reserve [authorized] -> accept held;\n",
  "scope": "One modeled request identity during one process lifetime. Supplied authorization is a Boolean observation. No authentication, persistence, concurrency, delivery, or liveness guarantee.",
  "provenance": "Read from the connected ZAL Abstraction Workspace using zal_layers on 2026-10-28. An illustrative site example; no human acceptance is asserted."
}
