Navigation

Composed-shortcut-laws

fx.experimental.desc-interp.composed-shortcut-laws: six H.refl lemmas — state's three canonical ops on inl and error's three strategies on inr — anchoring composedHandlerShortcut soundness. Each chains composeHandlersInl/InrLemma, the per-effect uniform-shortcut lemma, and inner sumElim ι; all three reductions are conv-decidable.

errorCollectingInrLemma

H.refl proof of errorCollectingInrLemmaTy. Resume payload := tt; new s_B := cons E payload s_B.

errorCollectingInrLemmaTy

Π E S_A A. Π H_A. Π payload:E. Π s_A:S_A. Π s_B:List E. composeHandlers … H_A uniformOf_collecting (inr (error E payload)) (pair s_A s_B) ≡ mkResumeAt … tt (pair s_A (cons E payload s_B)).

errorResultInrLemma

H.refl proof of errorResultInrLemmaTy. Abort channel Sum E A_inner carries inl payload.

errorResultInrLemmaTy

Π E S_A S_B A_inner. Π H_A. Π payload:E. Π s_A:S_A. Π s_B:S_B. composeHandlers … H_A uniformOf_result (inr (error E payload)) (pair s_A s_B) ≡ mkAbortAt … (Sum E A_inner) (inl E A_inner payload) (pair s_A s_B).

errorStrictInrLemma

H.refl proof of errorStrictInrLemmaTy. Strict always aborts; abort payload := payload.

errorStrictInrLemmaTy

Π E S_A S_B. Π H_A. Π payload:E. Π s_A:S_A. Π s_B:S_B. composeHandlers … H_A uniformOf_strict (inr (error E payload)) (pair s_A s_B) ≡ mkAbortAt … E payload (pair s_A s_B).

stateGetInlLemma

H.refl proof of stateGetInlLemmaTy. handle_State (get S) s_A ι→ inl(pair s_A s_A); inner sumElim ι folds to the composed mkResumeAt.

stateGetInlLemmaTy

Π E S_A A. Π H_B. Π s_A:S_A. Π s_B:List E. composeHandlers … handle_State H_B (inl (get S_A)) (pair s_A s_B) ≡ mkResumeAt … (inl (get S_A)) A s_A (pair s_A s_B).

stateModifyInlLemma

H.refl proof of stateModifyInlLemmaTy. New sub-state := fn s_A; resume payload := tt.

stateModifyInlLemmaTy

Π E S_A A. Π H_B. Π fn:S_A→S_A. Π s_A:S_A. Π s_B:List E. composeHandlers … handle_State H_B (inl (modify S_A fn)) (pair s_A s_B) ≡ mkResumeAt … tt (pair (fn s_A) s_B).

statePutInlLemma

H.refl proof of statePutInlLemmaTy. New sub-state := param; resume payload := tt.

statePutInlLemmaTy

Π E S_A A. Π H_B. Π param s_A:S_A. Π s_B:List E. composeHandlers … handle_State H_B (inl (put S_A param)) (pair s_A s_B) ≡ mkResumeAt … tt (pair param s_B).