packages feed

phino-0.0.161: test-resources/evaluate-packs/joins-a-bare-symbol-a-cast-brought-into-a-side-holding-a-symbol-off-its-phi-chain.yaml

# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# The right side ends its Ο† chain in a bare symbol, and it holds another one
# under 'ke', off that chain. What the right side holds does not matter to a
# 'cast' block, which used to cast nothing here (#2187): it casts the bare
# symbol on the left into a copy of the right side with 𝜎2 in place of 𝜎3,
# keeping 𝜎4 under 'ke' (#2223). The two sides then differ in their Ο† alone,
# and the join makes one term of them with 𝜎5 standing for that Ο†.
symbolic: |
  - Ξ»: L_fork
    dataize:
      𝛿1: $.c
    morph:
      𝑛1: $.a
      𝑛2: $.b
    cast:
      𝑛3: 𝑛1
      𝑛4: 𝑛2
    join:
      on: 𝛿1
      left: 𝑛3
      right: 𝑛4
location: 'Q.y'
input: '⟦ y ↦ ⟦ c ↦ ⟦ Ξ» ‍ 𝜎1 ⟧, a ↦ ⟦ Ξ» ‍ 𝜎2 ⟧, b ↦ ⟦ Ο† ↦ ⟦ Ξ» ‍ 𝜎3 ⟧, ke ↦ ⟦ Ξ» ‍ 𝜎4 ⟧ ⟧, Ξ» ‍ L_fork ⟧.Ο† ⟧'
result: '𝜎5:λ'
protocol: |
  𝕄(Ξ¦.y):
    𝔼(L_fork):
      𝔻(ΞΎ.c):
        𝛿·1Β·1 := 𝔻(𝜎1:Ξ»)
      𝛿1Β·1 := 𝛿·1Β·1  # 𝔻(ΞΎ.c)
      𝕄(ΞΎ.a):
        morphed 𝑛·1Β·1 := 𝜎2:Ξ»
      𝑛1Β·1 := 𝑛·1Β·1  # 𝕄(ΞΎ.a)
      𝕄(ΞΎ.b):
        morphed 𝑛·1Β·2 := ⟦ Ο† ↦ 𝜎3:Ξ», ke ↦ 𝜎4:Ξ» ⟧
      𝑛2Β·1 := 𝑛·1Β·2  # 𝕄(ΞΎ.b)
      cast 𝑛3Β·1 := ⟦ Ο† ↦ 𝜎2:Ξ», ke ↦ 𝜎4:Ξ» ⟧  # 𝑛1Β·1 up to 𝑛2Β·1
      joined 𝜎5 := 𝛿1Β·1 ? 𝜎2 : 𝜎3
      𝑛·1Β·3 := ⟦ Ο† ↦ 𝜎5:Ξ», ke ↦ 𝜎4:Ξ» ⟧
    morphed 𝑛·0Β·1 := 𝜎5:Ξ»