Navigation

Composed-shortcut

Pipeline per Impure step on a composed op: read op._side / op._inner, project the composed state with extract.Project, recurse via the matching per-side shortcut, then extract.OfElim on the sub-UniRet — Resume → composed Resume; Abort → composed Abort — repacking the sibling state slot via extract.PairRaw.

Soundness: kernel-side composedHandlerShortcutLemma (composed-shortcut-laws.nix) chains composeHandlersInl/InrLemma with per-effect uniform-shortcut lemmas; emitter-side, the _self.tests below conv-check kernel-composed vs shortcut-emitted Vals at concrete canonical ops.

composedHandlerShortcut

composedHandlerShortcut H_short_A H_short_B metaFor op stateVal — composed UniRet Val mirroring eval (composeHandlers … H_A H_B opVal stateVal). op carries _side/_inner sidecars from composedInl/composedInr; metaFor is the composed-UniRet metadata lookup keyed by inner-op tag; per-side shortcuts must return UniRet Vals. null propagates from any of the inputs (kernel fallback).

composedInl

composedInl Op_A Op_B subOp — H.inl Op_A Op_B subOp with _side = "composed-inl", _inner = subOp. Sidecars are ignored by elab and survive K.send's impureCon wrap.

composedInr

composedInr Op_A Op_B subOp — H.inr counterpart of composedInl.

mkComposedMeta

mkComposedMeta { SigmaSHoas; A; respHoas; } — precompute { sumDescVal; leftSigVal; rightSigVal; } for the composed UniRet at one canonical inner op (response type already ι-reduced).