packages feed

phino-0.0.154: test-resources/evaluate-packs/spends-the-step-budget-on-a-branch-whose-phi-leads-back-to-it.yaml

# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# The branch whose Ο† fires the same fork again, with no '--acyclic' to cut it.
# The step a lenient join takes into a branch of #1885 fires the way an
# 'evaluate' line does, spending a step on every firing (#1882), so the step
# limit ends the run instead of letting the join fire the fork forever. This
# is the control the pack asking for the guard stands against.
symbolic: |
  - Ξ»: L_fork
    morph:
      𝑛1: $.a
      𝑛2: $.b
    join:
      𝑛3: [𝑛1, 𝑛2]
    lenient: true
    𝑛: 𝑛3
location: 'Q.y'
steps: 6
input: '⟦ z ↦ ⟦ Ο† ↦ ΞΎ.f, f ↦ ⟦ Ξ» ‍ L_fork, a ↦ Ξ¦.z, b ↦ ⟦ Ο† ↦ ⟦ Ξ» ‍ 𝜎1 ⟧ ⟧ ⟧ ⟧, y ↦ ⟦ a ↦ Ξ¦.z, b ↦ ⟦ Ο† ↦ ⟦ Ξ» ‍ 𝜎2 ⟧ ⟧, Ξ» ‍ L_fork ⟧.Ο† ⟧'
fails: 'reaching the limit of steps'
protocol: |
  𝕄(Ξ¦.y):
    𝔼(L_fork):
      𝑛1Β·1 := ⟦ Ο† ↦ f, f ↦ ⟦ Ξ» ‍ L_fork, a ↦ Ξ¦.z, b ↦ 𝜎1:Ξ»:Ο† ⟧ ⟧  # 𝕄(ΞΎ.a)
      𝑛2Β·1 := 𝜎2:Ξ»:Ο†  # 𝕄(ΞΎ.b)
      𝑛1Β·1 := ⟦ Ξ» ‍ L_fork, a ↦ Ξ¦.z, b ↦ 𝜎1:Ξ»:Ο† ⟧  # 𝕄(𝑛1.Ο†)
      𝔼(L_fork):  # 𝔼(𝑛1)
        𝑛1Β·2 := ⟦ Ο† ↦ f, f ↦ ⟦ Ξ» ‍ L_fork, a ↦ Ξ¦.z, b ↦ 𝜎1:Ξ»:Ο† ⟧ ⟧  # 𝕄(ΞΎ.a)
        𝑛2Β·2 := 𝜎1:Ξ»:Ο†  # 𝕄(ΞΎ.b)
        𝑛1Β·2 := ⟦ Ξ» ‍ L_fork, a ↦ Ξ¦.z, b ↦ 𝜎1:Ξ»:Ο† ⟧  # 𝕄(𝑛1.Ο†)
        𝔼(L_fork):  # 𝔼(𝑛1)
          𝕄(Ξ¦.a🌡6):
            starved(6)