phino-0.0.152: test-resources/evaluate-packs/fails-on-a-bare-symbol-and-a-branch-holding-two-symbols-when-lenient.yaml
# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# A lenient join answers a copy of the branch a bare symbol stands against only
# when that branch holds exactly one symbol (#1817), since only then is it
# clear which symbol the bare one pairs with. Here the call of 'Ξ¦.bool' holds
# two, 'π2' and 'π3', so the join is refused and the firing gets stuck.
symbolic: |
- Ξ»: L_fork
morph:
π1: $.a
π2: $.b
join:
π3: [π1, π2]
lenient: true
π: π3
location: 'Q.y'
deep: true
input: |
β¦
bool(if) β¦ β¦ Ο β¦ ΞΎ.if( Ξ±0 β¦ β¦ Ξ β€ FF- β§, Ξ±1 β¦ β¦ Ξ β€ 00- β§ ) β§,
y β¦ β¦
r β¦ β¦
a β¦ β¦ Ξ» β€ π1 β§,
b β¦ β¦ Ο β¦ Ξ¦.bool( if β¦ β¦ Ξ» β€ L_fork, left β¦ β
, right β¦ β
, Ο β¦ β¦ Ξ» β€ π2 β§, was β¦ β¦ Ξ» β€ π3 β§ β§ ) β§,
Ξ» β€ L_fork
β§
β§
β§
fails: "No entry of --symbolic answers the Ξ» function 'L_fork'"
protocol: |
π(Ξ¦.y):
π(Ξ¦.y.r):
π(Ξ¦.y.r.b):
π(Ξ¦.y.r.b.Ο):
πΒ·0Β·1 := Ξ¦.bool( if(left, right) β¦ β¦ Ξ» β€ L_fork, Ο β¦ π2:Ξ», was β¦ π3:Ξ» β§ )
πΌ(L_fork):
π1Β·1 := π1:Ξ» # π(ΞΎ.a)
π(Ξ¦.aπ΅1):
π(Ξ¦.aπ΅1.Ο):
πΒ·1Β·1 := Ξ¦.bool( if(left, right) β¦ β¦ Ξ» β€ L_fork, Ο β¦ π2:Ξ», was β¦ π3:Ξ» β§ )
π2Β·1 := πΒ·1Β·1:Ο # π(ΞΎ.b)
stuck(L_fork)