phino-0.0.157: test-resources/evaluate-packs/answers-its-own-sides-on-a-condition-another-join-read.yaml
# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# Two joins on one condition answer each its own sides (#1940). The memo of
# 'plausible' keeps the answer of a firing by the Ξ» name and the operands it
# came down to, and a join reads its sides as well as its condition, so the
# second join, on the condition the first one read, reduces its own sides and
# answers 70 instead of the 7 of the first join.
symbolic: |
- Ξ»: L_number_gt
dataize:
πΏ1: $.Ο
πΏ2: $.x
π: Ξ¦.bool( Ο β¦ β¦ Ξ» β€ π β§ )
- Ξ»: L_pick
dataize:
πΏ1: $.x
morph:
π1: $.y
evaluate:
π2: π1
π: π2
- Ξ»: L_fork
dataize:
πΏ1: $.Ο
join:
on: πΏ1
left: $.then
right: $.else
location: 'Q.@'
acyclic: plausible
input: >
β¦ bytes(Ο) β¦ β¦β§,
bool(Ο) β¦ β¦ if β¦ β¦ Ο β¦ β
, then β¦ β
, else β¦ β
, Ξ» β€ L_fork β§ β§,
number(Ο) β¦ β¦ gt(Ο, x) β¦ β¦ Ξ» β€ L_number_gt β§ β§,
pick(x, y) β¦ β¦ Ξ» β€ L_pick β§,
Ο β¦ Ξ¦.pick( 5.gt( 0 ).if( 7, 7 ), 5.gt( 0 ).if( 70, 70 ) ).Ο β§
result: 'β¦ Ο β¦ β¦ Ξ β€ 40-51-80-00-00-00-00-00 β§ β§'
protocol: |
π(Ξ¦.Ο):
πΒ·0Β·1 := Ξ¦.pick( x β¦ 5.gt( 0 ).if( 7, 7 ) )
πΒ·0Β·2 := πΒ·0Β·1( y β¦ 5.gt( 0 ).if( 70, 70 ) )
πΌ(L_pick):
π»(Ξ¦.aπ΅0):
π(Ξ¦.aπ΅0):
πΒ·1Β·1 := 5
πΒ·1Β·2 := πΒ·1Β·1.gt( x β¦ 0 )
πΌ(L_number_gt):
π»(Ξ¦.aπ΅1):
π(Ξ¦.aπ΅1):
πΒ·2Β·1 := 5
πΒ·2Β·2 := Ξ¦.bytes( Ο β¦ 40-14-00-00-00-00-00-00:Ξ )
πΏΒ·2Β·1 := 40-14-00-00-00-00-00-00 # 5.0
πΏ1Β·2 := πΏΒ·2Β·1 # π»(ΞΎ.Ο)
π»(Ξ¦.aπ΅2):
π(Ξ¦.aπ΅2):
πΒ·2Β·3 := 0
πΒ·2Β·4 := Ξ¦.bytes( Ο β¦ 00-00-00-00-00-00-00-00:Ξ )
πΏΒ·2Β·2 := 00-00-00-00-00-00-00-00 # 0.0
πΏ2Β·2 := πΏΒ·2Β·2 # π»(ΞΎ.x)
πΒ·2Β·5 := Ξ¦.bool( Ο β¦ π1:Ξ» ) # π
π(πΒ·2Β·5):
πΒ·2Β·6 := Ξ¦.bool( Ο β¦ π1:Ξ» )
πΒ·2Β·7 := πΒ·2Β·6 # π(πΒ·2Β·5)
πΒ·1Β·3 := πΒ·2Β·6.if( then β¦ 7 )
πΒ·1Β·4 := πΒ·1Β·3( else β¦ 7 )
πΌ(L_fork):
π»(Ξ¦.aπ΅3):
π(Ξ¦.aπ΅3):
πΒ·3Β·1 := Ξ¦.bool( Ο β¦ π1:Ξ» )
πΏ1Β·3 := π»(π1:Ξ») # π»(ΞΎ.Ο)
π(Ξ¦.aπ΅4):
πΒ·3Β·2 := 7
π(Ξ¦.aπ΅5):
πΒ·3Β·3 := 7
πΒ·3Β·4 := πΒ·3Β·3 # π(ΞΎ.then), π(ΞΎ.else)
π(Ξ¦.aπ΅0):
πΒ·1Β·5 := Ξ¦.bytes( Ο β¦ 40-1C-00-00-00-00-00-00:Ξ )
πΏΒ·1Β·1 := 40-1C-00-00-00-00-00-00 # 7.0
πΏ1Β·1 := πΏΒ·1Β·1 # π»(ΞΎ.x)
π(Ξ¦.aπ΅6):
πΒ·1Β·6 := Ξ¦.number( Ο β¦ πΒ·2Β·2 )
πΒ·1Β·7 := πΒ·1Β·6.gt( x β¦ πΒ·2Β·3 )
πΌ(L_number_gt):
πΒ·4Β·1 := πΒ·3Β·1 # π
πΒ·4Β·2 := πΒ·2Β·7 # π(πΒ·4Β·1)
πΒ·1Β·8 := πΒ·3Β·1.if( then β¦ 70 )
πΒ·1Β·9 := πΒ·1Β·8( else β¦ 70 )
π1Β·1 := πΒ·1Β·9 # π(ΞΎ.y)
πΌ(L_fork): # πΌ(π1)
π»(Ξ¦.aπ΅7):
π(Ξ¦.aπ΅7):
πΒ·5Β·1 := Ξ¦.bool( Ο β¦ π1:Ξ» )
πΏ1Β·5 := π»(π1:Ξ») # π»(ΞΎ.Ο)
π(Ξ¦.aπ΅8):
πΒ·5Β·2 := 70
π(Ξ¦.aπ΅9):
πΒ·5Β·3 := 70
πΒ·5Β·4 := πΒ·5Β·3 # π(ΞΎ.then), π(ΞΎ.else)
π2Β·1 := πΒ·5Β·3 # πΌ(π1)
πΒ·1Β·10 := πΒ·5Β·3 # π
πΒ·1Β·11 := πΒ·5Β·3 # π(πΒ·1Β·10)
πΒ·0Β·3 := Ξ¦.bytes( Ο β¦ 40-51-80-00-00-00-00-00:Ξ )