packages feed

phino-0.0.157: test-resources/evaluate-packs/joins-a-side-an-evaluate-line-fired-with-a-bool-it-left-as-it-is.yaml

# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# The sides of a join may go through 'evaluate' lines (#1999). The left side
# morphs down to a call of 'L_eq' 𝕄 left unfired, which could never join with
# a bool, so its 'evaluate' line fires it and binds the bool the entry
# answers. The right side is a bool already, a formation with no Ξ», so its
# 'evaluate' line leaves it as it is. The two bools differ in their symbols
# alone, and the join makes one term of them.
symbolic: |
  - Ξ»: L_eq
    𝑛: Ξ¦.bool( Ο† ↦ ⟦ Ξ» ‍ 𝜎 ⟧ )
  - Ξ»: L_fork
    dataize:
      𝛿1: $.c
    morph:
      𝑛1: $.a
      𝑛2: $.b
    evaluate:
      𝑛3: 𝑛1
      𝑛4: 𝑛2
    join:
      on: 𝛿1
      left: 𝑛3
      right: 𝑛4
location: 'Q.y'
input: '⟦ bool(Ο†) ↦ ⟦⟧, y ↦ ⟦ c ↦ ⟦ Ξ» ‍ 𝜎1 ⟧, a ↦ ⟦ Ξ» ‍ L_eq ⟧, b ↦ Ξ¦.bool( Ο† ↦ ⟦ Ξ» ‍ 𝜎2 ⟧ ), Ξ» ‍ L_fork ⟧.Ο† ⟧'
result: '𝜎4:λ'
protocol: |
  𝕄(Ξ¦.y):
    𝔼(L_fork):
      𝛿1Β·1 := 𝔻(𝜎1:Ξ»)  # 𝔻(ΞΎ.c)
      𝑛1Β·1 := L_eq:Ξ»  # 𝕄(ΞΎ.a)
      𝕄(Ξ¦.a🌡2):
        𝑛·1Β·1 := Ξ¦.bool( Ο† ↦ 𝜎2:Ξ» )
      𝑛2Β·1 := 𝑛·1Β·1  # 𝕄(ΞΎ.b)
      𝔼(L_eq):  # 𝔼(𝑛1)
        𝑛·2Β·1 := Ξ¦.bool( Ο† ↦ 𝜎3:Ξ» )  # 𝑛
        𝕄(𝑛·2Β·1):
          𝑛·2Β·2 := Ξ¦.bool( Ο† ↦ 𝜎3:Ξ» )
        𝑛·2Β·3 := 𝑛·2Β·2  # 𝕄(𝑛·2Β·1)
      𝑛3Β·1 := 𝑛·2Β·3  # 𝔼(𝑛1)
      𝑛4Β·1 := 𝑛2Β·1  # 𝔼(𝑛2)
      joined 𝜎4 := 𝛿1Β·1 ? 𝜎3 : 𝜎2
      𝑛·1Β·2 := 𝜎4:Ξ»:Ο†  # 𝑛3, 𝑛4