phino-0.0.160: test-resources/evaluate-packs/joins-a-bare-symbol-a-cast-brought-into-the-shape-of-a-decorator.yaml
# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# The right side is a bare symbol, a branch that already reached its data,
# while the left side wraps its data in Ļ and holds 'k' beside it, a branch
# one step short of its data. As they are, the two differ at .k, the right
# side has Ī», and the join diverges, even under 'otherwise' (#2187). A 'cast'
# block reads its two metas as one pair and casts the bare symbol into a copy
# of the left side with š3 in place of š2 at the end of its Ļ chain, so the
# two sides differ in their symbols alone and the join makes one term of them.
# The cast mints no symbol. The protocol writes the line of 'š20', which took
# the cast, as 'cast š20Ā·1 := ā¦' with the meta it read and the meta whose
# shape it took. The line of 'š19' binds its term as it is and writes
# nothing (#2192).
symbolic: |
- Ī»: L_fork
dataize:
šæ1: $.onšµ
morph:
š13: $.leftšµ
š14: $.rightšµ
cast:
š19: š13
š20: š14
join:
on: šæ1
left: š19
right: š20
otherwise: L_fork
location: 'Q.e1'
input: '⦠e1 ⦠⦠λ ⤠L_fork, onšµ ⦠⦠λ ⤠š1 ā§, leftšµ ⦠⦠k ⦠ā¦ā§, Ļ ā¦ ā¦ Ī» ⤠š2 ā§ ā§, rightšµ ⦠⦠λ ⤠š3 ā§ ā§.Ļ ā§'
result: 'š4:Ī»'
protocol: |
š(Φ.e1):
š¼(L_fork):
š»(ξ.onšµ):
šæĀ·1Ā·1 := š»(š1:Ī»)
šæ1Ā·1 := šæĀ·1Ā·1 # š»(ξ.onšµ)
š(ξ.leftšµ):
morphed šĀ·1Ā·1 := ⦠k ⦠ā¦ā§, Ļ ā¦ š2:Ī» ā§
š13Ā·1 := šĀ·1Ā·1 # š(ξ.leftšµ)
š(ξ.rightšµ):
morphed šĀ·1Ā·2 := š3:Ī»
š14Ā·1 := šĀ·1Ā·2 # š(ξ.rightšµ)
cast š20Ā·1 := ⦠k ⦠ā¦ā§, Ļ ā¦ š3:Ī» ā§ # š14Ā·1 up to š13Ā·1
joined š4 := šæ1Ā·1 ? š2 : š3
šĀ·1Ā·3 := ⦠k ⦠ā¦ā§, Ļ ā¦ š4:Ī» ā§
morphed šĀ·0Ā·1 := š4:Ī»