exercise 24.1.
Put 𝐿 =𝜇𝑋.(𝖴𝗇𝗂𝗍 +𝖭𝖺𝗍 ×𝑋). The empty list has the derivation ⋅⊢𝗎𝗇𝗂𝗍:𝖴𝗇𝗂𝗍⋅⊢𝗂𝗇𝗅𝗎𝗇𝗂𝗍:𝖴𝗇𝗂𝗍+𝖭𝖺𝗍×𝐿T−Inl⋅⊢𝗇𝗂𝗅:𝐿T−Fold. Under 𝑛 :𝖭𝖺𝗍,𝑥𝑠 :𝐿, pairing and right injection give ⟨𝑛,𝑥𝑠⟩:𝖭𝖺𝗍×𝐿,𝗂𝗇𝗋⟨𝑛,𝑥𝑠⟩:𝖴𝗇𝗂𝗍+𝖭𝖺𝗍×𝐿. Rule T-Fold, followed by two lambda rules, therefore derives ⋅⊢𝖼𝗈𝗇𝗌:𝖭𝖺𝗍→𝐿→𝐿. The two applications complete the requested derivation: ⋅⊢𝖼𝗈𝗇𝗌:𝖭𝖺𝗍→𝐿→𝐿⋅⊢3:𝖭𝖺𝗍⋅⊢𝖼𝗈𝗇𝗌3:𝐿→𝐿T−App⋅⊢𝗇𝗂𝗅:𝐿⋅⊢𝖼𝗈𝗇𝗌3𝗇𝗂𝗅:𝐿T−App.
To keep the trace within the measure, first expose the two abbreviations: 𝑐=𝜆𝑛.𝜆𝑥𝑠.𝖿𝗈𝗅𝖽𝐿(𝗂𝗇𝗋⟨𝑛,𝑥𝑠⟩),𝐶[𝑡]=𝖼𝖺𝗌𝖾 (𝗎𝗇𝖿𝗈𝗅𝖽𝑡) 𝗈𝖿{𝗂𝗇𝗅𝑢↦𝗇𝗂𝗅; 𝗂𝗇𝗋𝑞↦𝗌𝗇𝖽𝑞}. Thus 𝑐 =𝖼𝗈𝗇𝗌, and 𝐶[ −] is exactly the displayed list case. Every reduction is 𝐶[𝑐3𝗇𝗂𝗅]⟼𝐶[(𝜆𝑥𝑠.𝖿𝗈𝗅𝖽𝐿(𝗂𝗇𝗋⟨3,𝑥𝑠⟩))𝗇𝗂𝗅]𝐸−𝐵𝑒𝑡𝑎⟼𝐶[𝖿𝗈𝗅𝖽𝐿(𝗂𝗇𝗋⟨3,𝗇𝗂𝗅⟩)]𝐸−𝐵𝑒𝑡𝑎⟼𝖼𝖺𝗌𝖾 (𝗂𝗇𝗋⟨3,𝗇𝗂𝗅⟩) 𝗈𝖿 {⋯}𝐸−𝑈𝑛𝑓𝑜𝑙𝑑𝐹𝑜𝑙𝑑⟼𝗌𝗇𝖽⟨3,𝗇𝗂𝗅⟩𝐸−𝐶𝑎𝑠𝑒𝐼𝑛𝑟⟼𝗇𝗂𝗅.product elimination The third reduction is the unique use of E-UnfoldFold.
exercise 24.2.
Let 𝑇=𝜇𝑋.(𝖭𝖺𝗍×𝑋+𝖴𝗇𝗂𝗍). The substitution instance in the fold premise is (𝖭𝖺𝗍×𝑋+𝖴𝗇𝗂𝗍)[𝑇/𝑋]=𝖭𝖺𝗍×𝑇+𝖴𝗇𝗂𝗍. If ⋅ ⊢𝑣 :𝖭𝖺𝗍 ×𝑇 +𝖴𝗇𝗂𝗍, the redex is typed by ⋅⊢𝑣:𝖭𝖺𝗍×𝑇+𝖴𝗇𝗂𝗍⋅⊢𝖿𝗈𝗅𝖽𝑇𝑣:𝑇T−Fold⋅⊢𝗎𝗇𝖿𝗈𝗅𝖽(𝖿𝗈𝗅𝖽𝑇𝑣):𝖭𝖺𝗍×𝑇+𝖴𝗇𝗂𝗍T−Unfold. Rule E-UnfoldFold contracts this term to 𝑣, which already has the type on the conclusion. No type-equality rule occurs: the common type is obtained by the displayed capture-avoiding substitution in the premises of T-Fold and T-Unfold.
exercise 24.3.
For 𝐷 =𝜇𝑋.(𝑋 →𝖭𝖺𝗍), the derivation under 𝑥 :𝐷 is 𝑥:𝐷⊢𝑥:𝐷𝑥:𝐷⊢𝗎𝗇𝖿𝗈𝗅𝖽𝑥:𝐷→𝖭𝖺𝗍T−Unfold𝑥:𝐷⊢𝑥:𝐷𝑥:𝐷⊢(𝗎𝗇𝖿𝗈𝗅𝖽𝑥)𝑥:𝖭𝖺𝗍T−App. Consequently ⋅⊢𝛿:𝐷→𝖭𝖺𝗍,⋅⊢𝖿𝗈𝗅𝖽𝐷𝛿:𝐷, and one application derives ⋅ ⊢Ω𝐷 :𝖭𝖺𝗍.
The displayed beta step followed by E-UnfoldFold gives Ω𝐷 ⟼2Ω𝐷. Induct on 𝑘. The case 𝑘 =0 is the empty trace. If Ω𝐷 ⟼2𝑘Ω𝐷, append the two-step cycle to obtain Ω𝐷 ⟼2𝑘+2Ω𝐷. Hence a return trace exists for every 2𝑘, and the deterministic term never reaches a value.
For 𝐷𝐴 =𝜇𝑋.(𝑋 →𝐴), assume 𝑓 :𝐴 →𝐴. Under 𝑥 :𝐷𝐴, (𝗎𝗇𝖿𝗈𝗅𝖽 𝑥)𝑥 :𝐴, so 𝑓((𝗎𝗇𝖿𝗈𝗅𝖽 𝑥)𝑥) :𝐴 and 𝛿𝑓 :𝐷𝐴 →𝐴. Thus 𝛿𝑓(𝖿𝗈𝗅𝖽𝐷𝐴𝛿𝑓):𝐴,𝖥𝗂𝗑𝐴:(𝐴→𝐴)→𝐴. For a closed function value 𝑣 :𝐴 →𝐴, write 𝑞𝑣 =𝛿𝑣(𝖿𝗈𝗅𝖽𝐷𝐴𝛿𝑣). The eager compatible reduction is 𝖥𝗂𝗑𝐴𝑣⟼𝑞𝑣⟼𝑣((𝗎𝗇𝖿𝗈𝗅𝖽(𝖿𝗈𝗅𝖽𝐷𝐴𝛿𝑣))(𝖿𝗈𝗅𝖽𝐷𝐴𝛿𝑣))⟼𝑣(𝑞𝑣). This is the precise unfolding equation. It does not assert that the eager application 𝑣(𝑞𝑣) subsequently terminates.
exercise 24.4.
Write 𝐿=𝜇𝑋.(𝖭𝖺𝗍×𝑋+𝖴𝗇𝗂𝗍),𝐵=𝖭𝖺𝗍×𝐿+𝖴𝗇𝗂𝗍. Ignoring duplicate pairs after their first visit, a left-to-right queue run visits pairchildren enqueued after head exposure(𝐿,𝐵)(𝖭𝖺𝗍×𝐿,𝖭𝖺𝗍×𝐿),(𝖴𝗇𝗂𝗍,𝖴𝗇𝗂𝗍)(𝖭𝖺𝗍×𝐿,𝖭𝖺𝗍×𝐿)(𝖭𝖺𝗍,𝖭𝖺𝗍),(𝐿,𝐿)(𝖴𝗇𝗂𝗍,𝖴𝗇𝗂𝗍)none(𝖭𝖺𝗍,𝖭𝖺𝗍)none(𝐿,𝐿)(𝖭𝖺𝗍×𝐿,𝖭𝖺𝗍×𝐿),(𝖴𝗇𝗂𝗍,𝖴𝗇𝗂𝗍). The last two children have already been visited, so the queue empties and the algorithm accepts.
If the right root is 𝐵′ =𝖡𝗈𝗈𝗅 ×𝐿 +𝖴𝗇𝗂𝗍, the exposed sums still match. Their product children enqueue (𝖭𝖺𝗍,𝖡𝗈𝗈𝗅) and (𝐿,𝐿). The first of these is the first rejecting pair: its constructor heads are distinct base types.
exercise 24.5.
Using the chapter’s abbreviations 𝑃 and 𝐵, the run is 𝑃12⟼(𝜆𝑚.𝜆𝑛.𝐵(𝑚,𝑛))12𝑃−𝑈𝑛𝑟𝑜𝑙𝑙⟼(𝜆𝑛.𝐵(1,𝑛))2𝑃−𝐵𝑒𝑡𝑎⟼𝐵(1,2)𝑃−𝐵𝑒𝑡𝑎⟼𝗌𝗎𝖼𝖼(𝑃02)𝑃−𝐼𝑓𝑆⟼𝗌𝗎𝖼𝖼((𝜆𝑚.𝜆𝑛.𝐵(𝑚,𝑛))02)𝑃−𝑈𝑛𝑟𝑜𝑙𝑙⟼𝗌𝗎𝖼𝖼((𝜆𝑛.𝐵(0,𝑛))2)𝑃−𝐵𝑒𝑡𝑎⟼𝗌𝗎𝖼𝖼(𝐵(0,2))𝑃−𝐵𝑒𝑡𝑎⟼𝗌𝗎𝖼𝖼2𝑃−𝐼𝑓𝑍⟼3.𝑃−𝑆𝑢𝑐𝑐𝑁 There are exactly four beta steps.
Call by name has no argument context, so (𝜆𝑥:𝖭𝖺𝗍.0)Ω𝖭𝖺𝗍⟼0𝑃−𝐵𝑒𝑡𝑎. Under the proposed call-by-value mutation, the beta root is unavailable until the argument is a value. The argument context lifts the self-loop Ω𝖭𝖺𝗍 ⟼Ω𝖭𝖺𝗍 to (𝜆𝑥.0)Ω𝖭𝖺𝗍⟼(𝜆𝑥.0)Ω𝖭𝖺𝗍. Repeating this step gives an infinite sequence, so the application never reaches 0.
exercise 24.6.
Assume 𝐹(𝑑) =𝑑. Induction on 𝑛 gives 𝐹𝑛(⊥) ⊑𝖣𝑑: the base is leastness of ⊥, and 𝐹𝑛+1(⊥)=𝐹(𝐹𝑛(⊥))⊑𝖣𝐹(𝑑)=𝑑 uses monotonicity and the fixed-point equation. Therefore ⨆𝑛𝐹𝑛(⊥) ⊑𝖣𝑑.
For the counterexample, take the pointed omega-chain 𝐶 ={0 ⊑𝖣1 ⊑𝖣⋯ ⊑𝖣𝜔} and define 𝐺(𝑛)=0(𝑛<𝜔),𝐺(𝜔)=𝜔. The map is monotone: all finite inputs have the same image, and that image is below 𝐺(𝜔). It is not continuous, since 𝐺(⨆𝑛𝑛)=𝐺(𝜔)=𝜔≠0=⨆𝑛𝐺(𝑛). Thus monotonicity alone does not justify the join calculation in the fixed- point proof.
exercise 24.7.
Let 𝑎0 =⊥ and 𝑎𝑖+1 =𝖼𝗈𝗇𝗌(0,𝑎𝑖). Its lub 𝑧 is the infinite all-zero list. The images form ⊥⊑𝖣↑𝗂𝗇𝗋(0,⊥)⊑𝖣↑𝗂𝗇𝗋(0,𝖼𝗈𝗇𝗌(0,⊥))⊑𝖣⋯. Using the componentwise product order and the lifting lub, ⨆𝑖𝗈𝗎𝗍(𝑎𝑖)=↑𝗂𝗇𝗋(0,⨆𝑖𝑎𝑖)=↑𝗂𝗇𝗋(0,𝑧)=𝗈𝗎𝗍(𝑧).
A chain in L that reaches a finite word ending in 𝗇𝗂𝗅 is constant from that stage onward: such a total finite word has no strict extension in the partial-list order. Equivalently, if the lub reveals nil after a finite prefix, compactness of that finite total word puts the same observation in some chain member, after which the chain is constant.
Now take a chain in (𝟏 +ℕ ×L)⊥. If it is constantly bottom, its image under 𝗂𝗇 is constantly ⊥. Otherwise it has a first nonbottom member. The separated-sum tag cannot subsequently change. For the left tag the chain is constantly ↑𝗂𝗇𝗅( ∗), and the image is constantly 𝗇𝗂𝗅. For the right tag discreteness of ℕ fixes one head 𝑛, while the tails form a chain (𝑑𝑖); hence 𝗂𝗇(⨆𝑖↑𝗂𝗇𝗋(𝑛,𝑑𝑖))=𝖼𝗈𝗇𝗌(𝑛,⨆𝑖𝑑𝑖)=⨆𝑖𝖼𝗈𝗇𝗌(𝑛,𝑑𝑖). These exhaustive cases prove that 𝗂𝗇 preserves omega-chain lubs. The same cases prove monotonicity, so it is continuous.
exercise 24.8.
Suppose the final typing rule has premise Γ,𝑥 :𝐴 ⊢𝑒 :𝐴, let 𝜂RΓ𝛾, and put 𝐹(𝑑)=[[𝑒]]𝜂[𝑥↦𝑑],𝑞=𝖿𝗂𝗑 𝑥:𝐴.𝑒[𝛾]. We prove 𝐹𝑘(⊥)R𝐴𝑞 by induction on 𝑘. Bottom is related to every closed term by admissibility’s bottom clause. At the inductive step, the exact environment invariant is 𝜂[𝑥↦𝐹𝑘(⊥)]RΓ,𝑥:𝐴𝛾[𝑥↦𝑞]. The body case of the fundamental induction therefore gives 𝐹𝑘+1(⊥)R𝐴𝑒[𝛾,𝑞/𝑥]. But P-Unroll gives 𝑞 ⟼𝑒[𝛾,𝑞/𝑥]. Finite anti-reduction on the term argument turns the preceding judgment into 𝐹𝑘+1(⊥)R𝐴𝑞.
Finally, the predicate 𝑑 ↦𝑑R𝐴𝑞 is admissible by lemma 24.37: it contains bottom and is closed under lubs of omega-chains. Applying the lub clause to the Kleene chain gives lfp(𝐹)=⨆𝑘𝐹𝑘(⊥)R𝐴𝑞, which is exactly the P-Fix conclusion.
exercise 24.9.
For recursive values, suppose 𝖿𝗈𝗅𝖽 𝑣 ≈𝜇𝑋.𝐴𝑛+1𝖿𝗈𝗅𝖽 𝑤. The defining clause gives 𝑣 ≈𝐴[𝜇𝑋.𝐴/𝑋]𝑛𝑤. At target index zero the value relation is universal. At target 𝑚 +1 ≤𝑛 +1, we have 𝑚 ≤𝑛, so the induction hypothesis gives 𝑣 ≈𝐴[𝜇𝑋.𝐴/𝑋]𝑚𝑤, and the recursive clause restores 𝖿𝗈𝗅𝖽 𝑣 ≈𝜇𝑋.𝐴𝑚+1𝖿𝗈𝗅𝖽 𝑤.
For arrows, suppose 𝑓 ≈𝐴→𝐵𝑛+1𝑔. Again index zero is immediate. If 𝑚 +1 ≤𝑛 +1, take any 𝑗 ≤𝑚 +1 and any 𝑎 ≈𝐴𝑗𝑏. Since also 𝑗 ≤𝑛 +1, the original arrow clause already gives 𝑓 𝑎E𝐵𝑗𝑔 𝑏. This is precisely the arrow clause at 𝑚 +1.
For the copier, retain the chapter’s abbreviations ℎ=𝖿𝗈𝗅𝖽𝜃,𝑟=(𝗎𝗇𝖿𝗈𝗅𝖽ℎ)ℎ,𝑔=𝜆𝑥𝑠.𝖼𝗈𝗉𝗒𝖡𝗈𝖽𝗒𝑟𝑥𝑠. The promised two steps are 𝑟=(𝗎𝗇𝖿𝗈𝗅𝖽(𝖿𝗈𝗅𝖽𝜃))ℎ⟼𝜃ℎ⟼𝑔, first by E-UnfoldFold, then by call-by-value beta. For a cons value, the remaining administrative betas expose 𝖼𝖺𝗌𝖾𝖫𝗂𝗌𝗍 (𝖼𝗈𝗇𝗌𝑘𝑦𝑠) 𝗈𝖿 {⋯}⟼∗𝖼𝗈𝗇𝗌𝑘(𝑔𝑦𝑠). This prefix evaluates 𝑟 to 𝑔, unfolds the folded input by E-UnfoldFold, and then uses the right sum-case root. The structural induction hypothesis is used exactly on 𝑔 𝑦𝑠 ⟼∗𝑦𝑠; compatible closure lifts that sequence through the argument position of 𝖼𝗈𝗇𝗌 𝑘[ −], equivalently through the pair, right-injection, and fold constructor contexts. Thus 𝖼𝗈𝗇𝗌𝑘(𝑔𝑦𝑠)⟼∗𝖼𝗈𝗇𝗌𝑘𝑦𝑠.
At an arbitrary 𝑛, fundamental reflexivity with equal empty substitutions gives 𝑣E𝖫𝗂𝗌𝗍𝖭𝖺𝗍𝑛𝑣. Structural convergence gives 𝖼𝗈𝗉𝗒 𝑣 ⟼∗𝑣. Apply the two-sided anti-reduction clause with this left prefix and an empty right prefix to obtain 𝖼𝗈𝗉𝗒 𝑣E𝖫𝗂𝗌𝗍𝖭𝖺𝗍𝑛𝑣.
exercise 24.10.
The classifications are:
Preservation of the type of Ω𝐷 is a safety claim. It constrains every finite reduct but does not assert that a value appears.
A division procedure that returns the quotient whenever it returns with a nonzero divisor satisfies partial correctness. Termination is not part of that implication.
The assertion that every recursive call to 𝗉𝗅𝗎𝗌 returns is a termination claim.
The assertion that every finite observation of the all-zero lazy list reveals another cons cell is productivity.
The assertion that 𝗉𝗅𝗎𝗌 terminates on all numeral inputs and returns their mathematical sum is totality: termination and partial correctness are both present.
The examples are deliberately not interchangeable. In particular, Ω𝐷 is safe without terminating, while productivity describes all finite tail observations of a domain element rather than return of an eager infinite value.
exercise 24.11.
Inverting a typed Pr-Unroll redex gives Γ,𝑝:𝑃⊢𝑒:𝑃,Γ⊢𝖿𝗂𝗑 𝑝:𝑃.𝑒:𝑃. Term substitution with the second judgment in the first yields Γ⊢𝑒[𝖿𝗂𝗑 𝑝:𝑃.𝑒/𝑝]:𝑃, which is the type of the reduct. This proves preservation for the root.
Preservation says only that a step retains its type. For 𝜔𝑃 =𝖿𝗂𝗑 𝑝 :𝑃.𝑝, Pr-Unroll is the self-loop 𝜔𝑃 ⟼𝜔𝑃, so normalization fails despite preservation. At 𝑃 =𝟎, rule Pr-Fix derives the closed inhabitant 𝜔𝟎 :𝟎. Thus the syntactic consistency statement “there is no closed term of type 𝟎” is already false even though evaluation produces no empty-type value.
exercise 24.12.
At index zero every pair of closed values of the same type is related. A list fold at index 𝑛 +1 consumes one index and compares its sum payload at index 𝑛.
For (𝑣0,𝑣1), index one reaches payload index zero, so the different 𝗂𝗇𝗅 and 𝗂𝗇𝗋 payloads are still related. At index two the fold clause reaches the sum clause at index one; the tags differ, so the pair is not related. The least index is 2.
For (𝑣1,𝑣2), index two follows fold at 2⟶right sum at 1⟶product at 1⟶0≈𝖭𝖺𝗍11, and the last judgment is false. Index one again stops at the universal payload relation, so the least index is 2.
For (𝑣3,𝑣4), index two compares the common outer head 0 and their tails at list index one, which consumes to payload index zero; hence they are related. At index three the clauses traverse outer fold at 3⟶right sum and product at 2⟶0=0,tail fold at 2⟶right sum and product at 1⟶1≠2. The final natural clause fails. Thus the least distinguishing index is 3.
exercise 24.13.
For 𝑝 =⊥, strict case analysis makes 𝐹𝑝 the constant-bottom map, so 𝐹𝑖𝑝(⊥) =⊥ for every 𝑖 and 𝜇Φ(⊥) =⊥. For 𝑝 =0, 𝐹𝑝 is the constant-zero map: 𝐹00(⊥)=⊥,𝐹𝑖0(⊥)=0(𝑖≥1),𝜇Φ(0)=0. For 𝑝 =𝑘 +1, 𝐹𝑝 =𝗌𝗎𝖼𝖼⊥. Because this operation is strict, every iterate starting at bottom is bottom, and therefore 𝜇Φ(𝑘 +1) =⊥.
It remains to check preservation of chain lubs by the resulting parameter map. A chain in the flat domain either remains bottom, or reaches one fixed numeral and is constant thereafter. In the first case both sides of the continuity equation are bottom. If the numeral is zero, the image chain is eventually zero and has lub zero. If it is positive, the image chain is constantly bottom. In all cases 𝜇Φ(⨆𝑖𝑝𝑖)=⨆𝑖𝜇Φ(𝑝𝑖), which directly verifies the conclusion of the parameterized fixed-point lemma for this Φ.
exercise 24.14.
For a closed list value 𝑣, call by value gives 𝐾[𝑣]=(𝜆𝑥𝑠.Ω𝐷)𝑣⟼Ω𝐷, after which the two-step cycle repeats forever. For the copied argument, the argument position is evaluated first. Structural convergence supplies 𝐾[𝖼𝗈𝗉𝗒𝑣]⟼∗(𝜆𝑥𝑠.Ω𝐷)𝑣⟼Ω𝐷, so this term also diverges.
For every numeral 𝑚, neither plugged term satisfies ⇓𝑚. The contextual biconditional of theorem 24.51 is therefore 𝖿𝖺𝗅𝗌𝖾 ⟺𝖿𝖺𝗅𝗌𝖾, and is true. The stronger assertion that both terms converge is false. Observational equivalence preserves any numeral that is produced; it does not manufacture convergence inside a diverging context.
exercise 24.15.
The body of Ω𝖭𝖺𝗍 denotes the identity map on ℕ⊥. Its Kleene chain is ⊥⊑𝖣𝗂𝖽(⊥)=⊥⊑𝖣𝗂𝖽2(⊥)=⊥⊑𝖣⋯, so [[Ω𝖭𝖺𝗍]] =⊥. If this closed typed term converged to a numeral 𝑛, the operational-to-denotational direction of adequacy would give ⊥ =𝑛, impossible in the flat domain. Progress and determinism leave an infinite reduction, which is the operational self-loop already displayed.
For addition, its semantic functional is 𝐻(𝑓)(𝑚)(𝑛)=𝖼𝖺𝗌𝖾ℕ⊥(𝑚,𝑛,𝑘↦𝗌𝗎𝖼𝖼⊥(𝑓(𝑘)(𝑛))). The third finite approximant already gives 𝐻3(⊥)(2)(1)=𝗌𝗎𝖼𝖼⊥(𝐻2(⊥)(1)(1))=𝗌𝗎𝖼𝖼⊥(2)=3. Later approximants agree there, so [[𝗉𝗅𝗎𝗌 2 1]] =3. The denotational-to- operational direction of adequacy recovers 𝗉𝗅𝗎𝗌 2 1 ⇓3. Conversely, applying the operational- to-denotational direction to the chapter’s displayed run recovers the same semantic equality. The two uses are logically distinct.
exercise 24.16.
Put 𝐵 =𝖴𝗇𝗂𝗍 +𝖭𝖺𝗍 ×𝐿. From ⋅ ⊢𝑝 :𝐵, the iso-recursive derivation is ⋅⊢𝑝:𝐵⋅⊢𝖿𝗈𝗅𝖽𝐿𝑝:𝐿T−Fold⋅⊢𝗎𝗇𝖿𝗈𝗅𝖽(𝖿𝗈𝗅𝖽𝐿𝑝):𝐵T−Unfold. Since 𝑝 is a value, 𝗎𝗇𝖿𝗈𝗅𝖽(𝖿𝗈𝗅𝖽𝐿𝑝)⟼𝑝𝐸−𝑈𝑛𝑓𝑜𝑙𝑑𝐹𝑜𝑙𝑑. This is an object-language operational contraction.
For equi-recursive equality, initialize the worklist by (𝐿,𝐵). Exposing the left root gives 𝐵, so the matching sum heads enqueue (𝖴𝗇𝗂𝗍,𝖴𝗇𝗂𝗍) and (𝖭𝖺𝗍 ×𝐿,𝖭𝖺𝗍 ×𝐿). The product pair enqueues (𝖭𝖺𝗍,𝖭𝖺𝗍) and (𝐿,𝐿). Exposing (𝐿,𝐿) only recreates already visited pairs, so the worklist empties and the algorithm accepts 𝐿 ≡𝜇𝐵. This is a metalevel type-equality decision on finite graphs. It is neither a term reduction nor a premise used by T-Fold, T-Unfold, or E-UnfoldFold in the iso-recursive calculus.