null : type. bool: type. false : bool. true : bool. nat : type. %name nat N n. z : nat. s : nat -> nat. id-nat : nat -> nat -> type. id-nat/refl : id-nat A A. sum : nat -> nat -> nat -> type. sum/z : sum z N N. sum/s : sum (s N1) N2 (s N3) <- sum N1 N2 N3. %mode sum +Dnat1 +Dnat2 -Dnat3. %worlds () (sum _ _ _). %total A (sum A _ _). %unique (sum +Dnat1 +Dnat2 -1Dnat3). sum-gen : {A}{B} sum A B C -> type. sum-gen/z : sum-gen _ _ sum/z. sum-gen/s : sum-gen _ _ (sum/s SUM) <- sum-gen _ _ SUM. %mode sum-gen +Dnat1 +Dnat2 -Ds. %worlds () (sum-gen _ _ _). %total A (sum-gen A _ _). %unique (sum +Dnat1 +Dnat2 -1Dnat3). sum-move-ltr : sum (s N1) N2 N3 -> sum N1 (s N2) N3 -> type. sum-move-ltr/z : sum-move-ltr (sum/s sum/z) sum/z. sum-move-ltr/s : sum-move-ltr (sum/s SUM1) (sum/s SUM2) <- sum-move-ltr SUM1 SUM2. %mode sum-move-ltr +Ds1 -Ds2. %worlds () (sum-move-ltr _ _). %total A (sum-move-ltr A _). sum-move-rtl : sum N1 (s N2) N3 -> sum (s N1) N2 N3 -> type. sum-move-rtl/z : sum-move-rtl sum/z (sum/s sum/z). sum-move-rtl/s : sum-move-rtl (sum/s SUM1) (sum/s SUM2) <- sum-move-rtl SUM1 SUM2. %mode sum-move-rtl +Ds1 -Ds2. %worlds () (sum-move-rtl _ _). %total A (sum-move-rtl A _). sum-z : {N} sum N z N -> type. sum-z/z : sum-z _ sum/z. sum-z/s : sum-z _ (sum/s SUM) <- sum-z _ SUM. %mode sum-z +Dn -Ds. %worlds () (sum-z _ _). %total A (sum-z A _). sum-s : sum N1 N2 N3 -> sum N1 (s N2) (s N3) -> type. sum-s/z : sum-s sum/z sum/z. sum-s/s : sum-s (sum/s SUM1) (sum/s SUM2) <- sum-s SUM1 SUM2. %mode sum-s +Ds1 -Ds2. %worlds () (sum-s _ _). %total A (sum-s A _). sum-comm : sum N1 N2 N3 -> sum N2 N1 N3 -> type. sum-comm/z : sum-comm sum/z SUM <- sum-z _ SUM. sum-comm/s : sum-comm (sum/s SUM1) SUM2 <- sum-comm SUM1 SUM3 <- sum-s SUM3 SUM2. %mode sum-comm +Ds1 -Ds2. %worlds () (sum-comm _ _). %total A (sum-comm A _). natleq : nat -> nat -> type. %infix none 20 natleq. natleq/z : z natleq N. natleq/s : N natleq M -> s N natleq s M. natleq-to-sum : N1 natleq N2 -> sum N1 N3 N2 -> type. natleq-to-sum/z : natleq-to-sum natleq/z sum/z. natleq-to-sum/s : natleq-to-sum (natleq/s LEQ) (sum/s SUM) <- natleq-to-sum LEQ SUM. %mode natleq-to-sum +Dn -Ds. %worlds () (natleq-to-sum _ _). %total A (natleq-to-sum A _). tm : type. %name tm E x. abs : (tm -> tm) -> tm. app : tm -> tm -> tm. %infix left 30 app. sft : (tm -> tm) -> tm. dol : tm -> tm -> tm. %infix right 20 dol. rst : tm -> tm = [e] (abs [x] x) dol e. %block tm-block : block {v:tm}. %block tm2-block : block {v:tm -> tm}. %worlds (tm-block | tm2-block) (tm). value : tm -> type. value/abs : value (abs E). %block vtm-block : block {v:tm} {_:value v}. var : tm -> type. %block var-block : block {v:tm} {_:value v} {_:var v}. tm-tag : type. abs-tag : tm-tag. app-tag : tm-tag. sft-tag : tm-tag. dol-tag : tm-tag. var-tag : tm-tag. tm-tag-id : tm-tag -> tm-tag -> type. tm-tag-id/refl : tm-tag-id A A. classify : tm -> tm-tag -> type. classify/abs : classify (abs E) abs-tag. classify/app : classify (E1 app E2) app-tag. classify/sft : classify (sft E) sft-tag. classify/dol : classify (E1 dol E2) dol-tag. classify/var : var E -> classify E var-tag. ctx : type. ctx/empty : ctx. ctx/appl : ctx -> tm -> ctx. ctx/appr : {E} value E -> ctx -> ctx. ctx/dol : ctx -> tm -> ctx. ectx : type. ectx/base : ctx -> ectx. ectx/cons : {E} value E -> ctx -> ectx -> ectx. ectx-inv : type. ectx-inv/empty : ectx-inv. ectx-inv/appl : ectx-inv -> tm -> ectx-inv. ectx-inv/appr : {E} value E -> ectx-inv -> ectx-inv. ectx-inv/dol : ectx-inv -> tm -> ectx-inv. ectx-inv/cons : {E} value E -> ectx-inv -> ectx-inv. id-tm : tm -> tm -> type. id-tm/refl : id-tm E E. id-ctx : ctx -> ctx -> type. id-ctx/refl : id-ctx E E. id-ectx : ectx -> ectx -> type. id-ectx/refl : id-ectx E E. id-ectx-inv : ectx-inv -> ectx-inv -> type. id-ectx-inv/refl : id-ectx-inv E E. value-respects-id : value E1 -> id-tm E1 E2 -> value E2 -> type. value-respects-id/- : value-respects-id V id-tm/refl V. %mode value-respects-id +Dv +Di -Dv'. %worlds (tm-block) (value-respects-id _ _ _). %total {} (value-respects-id _ _ _). id-ctx-congr-appl : id-ctx C1 C2 -> id-tm E1 E2 -> id-ctx (ctx/appl C1 E1) (ctx/appl C2 E2) -> type. id-ctx-congr-appl/- : id-ctx-congr-appl id-ctx/refl id-tm/refl id-ctx/refl. %mode id-ctx-congr-appl +Di1 +Di2 -Di3. %worlds (tm-block) (id-ctx-congr-appl _ _ _). %total {} (id-ctx-congr-appl _ _ _). id-ctx-congr-appr : id-tm E1 E2 -> {V1}{V2} id-ctx C1 C2 -> id-ctx (ctx/appr E1 V1 C1) (ctx/appr E2 V2 C2) -> type. id-ctx-congr-appr/- : id-ctx-congr-appr id-tm/refl _ _ id-ctx/refl id-ctx/refl. %mode id-ctx-congr-appr +Di1 +Dv1 +Dv2 +Di2 -Di3. %worlds (tm-block) (id-ctx-congr-appr _ _ _ _ _). %total {} (id-ctx-congr-appr _ _ _ _ _). id-tm-sym : id-tm E1 E2 -> id-tm E2 E1 -> type. id-tm-sym/- : id-tm-sym id-tm/refl id-tm/refl. %mode id-tm-sym +Di1 -Di2. %worlds (tm-block) (id-tm-sym _ _). %total {} (id-tm-sym _ _). id-tm-destr-dol : id-tm (E1 dol E2) (E1' dol E2') -> id-tm E1 E1' -> id-tm E2 E2' -> type. id-tm-destr-dol/- : id-tm-destr-dol id-tm/refl id-tm/refl id-tm/refl. %mode id-tm-destr-dol +Di1 -Di2 -Di3. %worlds (tm-block) (id-tm-destr-dol _ _ _). %total {} (id-tm-destr-dol _ _ _). id-tm-congr-app : id-tm E1 E1' -> id-tm E2 E2' -> id-tm (E1 app E2) (E1' app E2') -> type. id-tm-congr-app/- : id-tm-congr-app id-tm/refl id-tm/refl id-tm/refl. %mode id-tm-congr-app +Di1 +Di2 -Di3. %worlds (tm-block) (id-tm-congr-app _ _ _). %total {} (id-tm-congr-app _ _ _). id-tm-congr-dol : id-tm E1 E1' -> id-tm E2 E2' -> id-tm (E1 dol E2) (E1' dol E2') -> type. id-tm-congr-dol/- : id-tm-congr-dol id-tm/refl id-tm/refl id-tm/refl. %mode id-tm-congr-dol +Di1 +Di2 -Di3. %worlds (tm-block) (id-tm-congr-dol _ _ _). %total {} (id-tm-congr-dol _ _ _). id-tm-congr-abs : ({x} id-tm (E1 x) (E2 x)) -> id-tm (abs E1) (abs E2) -> type. id-tm-congr-abs/- : id-tm-congr-abs ([x] id-tm/refl) id-tm/refl. %mode id-tm-congr-abs +Di1 -Di3. %worlds (tm-block) (id-tm-congr-abs _ _). %total {} (id-tm-congr-abs _ _). id-tm-congr-sft : ({x} id-tm (E1 x) (E2 x)) -> id-tm (sft E1) (sft E2) -> type. id-tm-congr-sft/- : id-tm-congr-sft ([x] id-tm/refl) id-tm/refl. %mode id-tm-congr-sft +Di1 -Di3. %worlds (tm-block) (id-tm-congr-sft _ _). %total {} (id-tm-congr-sft _ _). id-tm-congr-rst : id-tm E1 E2 -> id-tm (rst E1) (rst E2) -> type. id-tm-congr-rst/- : id-tm-congr-rst id-tm/refl id-tm/refl. %mode id-tm-congr-rst +Di1 -Di2. %worlds (tm-block) (id-tm-congr-rst _ _). %total {} (id-tm-congr-rst _ _). id-tm-congr : id-tm E1 E2 -> {E} id-tm (E E1) (E E2) -> type. id-tm-congr/var : id-tm-congr ID ([x] x) ID. id-tm-congr/base : id-tm-congr _ ([x] E) id-tm/refl. id-tm-congr/app : id-tm-congr ID ([x] E1 x app E2 x) ID' <- id-tm-congr ID E1 ID1 <- id-tm-congr ID E2 ID2 <- id-tm-congr-app ID1 ID2 ID'. id-tm-congr/dol : id-tm-congr ID ([x] E1 x dol E2 x) ID' <- id-tm-congr ID E1 ID1 <- id-tm-congr ID E2 ID2 <- id-tm-congr-dol ID1 ID2 ID'. id-tm-congr/abs : id-tm-congr ID ([x] abs ([y] E y x)) ID' <- ({y} id-tm-congr ID (E y) (ID1 y)) <- id-tm-congr-abs ID1 ID'. id-tm-congr/sft : id-tm-congr ID ([x] sft ([y] E y x)) ID' <- ({y} id-tm-congr ID (E y) (ID1 y)) <- id-tm-congr-sft ID1 ID'. %mode id-tm-congr +Di1 +De -Di2. %worlds (tm-block) (id-tm-congr _ _ _). %total X (id-tm-congr _ X _). id-tm-compose : id-tm E E' -> ({x} id-tm (E1 x) (E1' x)) -> id-tm (E1 E) (E1' E') -> type. id-tm-compose/- : id-tm-compose id-tm/refl ([x] id-tm/refl) (id-tm/refl). %mode id-tm-compose +Di1 +De -Di2. %worlds (tm-block) (id-tm-compose _ _ _). %total X (id-tm-compose _ X _). classify-gen : {E} classify E T -> type. classify-gen/abs : classify-gen _ classify/abs. classify-gen/sft : classify-gen _ classify/sft. classify-gen/app : classify-gen _ classify/app. classify-gen/dol : classify-gen _ classify/dol. %block classify-block : block {x:tm} {_:value x} {vr:var x} {_:classify-gen x (classify/var vr)}. %mode classify-gen +De -Dc. %worlds (classify-block) (classify-gen _ _). %total {} (classify-gen _ _). ctx-to-tm : ctx -> (tm -> tm) -> type. ctx-to-tm/empty : ctx-to-tm ctx/empty ([x] x). ctx-to-tm/appl : ctx-to-tm (ctx/appl C E) ([x] EE (x app E)) <- ctx-to-tm C EE. ctx-to-tm/appr : ctx-to-tm (ctx/appr E V C) ([x] EE (E app x)) <- ctx-to-tm C EE. ctx-to-tm/dol : ctx-to-tm (ctx/dol C E) ([x] EE (x dol E)) <- ctx-to-tm C EE. %mode ctx-to-tm +Dx -Dx'. %worlds (tm-block) (ctx-to-tm _ _). %total A (ctx-to-tm A _). ectx-to-tm : ectx -> (tm -> tm) -> type. ectx-to-tm/base : ectx-to-tm (ectx/base C) EE <- ctx-to-tm C EE. ectx-to-tm/cons : ectx-to-tm (ectx/cons E V C EC) ([x] EEE (E dol EE x)) <- ctx-to-tm C EE <- ectx-to-tm EC EEE. %mode ectx-to-tm +Dx -Dx'. %worlds (tm-block) (ectx-to-tm _ _). %total A (ectx-to-tm A _). ectx-inv-to-tm : ectx-inv -> (tm -> tm) -> type. ectx-inv-to-tm/empty : ectx-inv-to-tm ectx-inv/empty ([x] x). ectx-inv-to-tm/appl : ectx-inv-to-tm (ectx-inv/appl EC E) ([x] EE x app E) <- ectx-inv-to-tm EC EE. ectx-inv-to-tm/appr : ectx-inv-to-tm (ectx-inv/appr E _ EC) ([x] E app EE x) <- ectx-inv-to-tm EC EE. ectx-inv-to-tm/dol : ectx-inv-to-tm (ectx-inv/dol EC E) ([x] EE x dol E) <- ectx-inv-to-tm EC EE. ectx-inv-to-tm/cons : ectx-inv-to-tm (ectx-inv/cons E _ EC) ([x] E dol EE x) <- ectx-inv-to-tm EC EE. %mode ectx-inv-to-tm +Dx -Dx'. %worlds (tm-block) (ectx-inv-to-tm _ _). %total A (ectx-inv-to-tm A _). ectx-inv-to-tm-respects-id : ectx-inv-to-tm ECI E -> id-ectx-inv ECI ECI' -> ({x} id-tm (E x) (E' x)) -> ectx-inv-to-tm ECI' E' -> type. ectx-inv-to-tm-respects-id/- : ectx-inv-to-tm-respects-id ECIE id-ectx-inv/refl ([x] id-tm/refl) ECIE. %mode ectx-inv-to-tm-respects-id +Dx1 +Dx2 +Dx3 -Dx4. %worlds (tm-block) (ectx-inv-to-tm-respects-id _ _ _ _). %total {} (ectx-inv-to-tm-respects-id _ _ _ _). ectx-inv-append : ectx-inv -> ectx-inv -> ectx-inv -> type. ectx-inv-append/empty : ectx-inv-append ectx-inv/empty ECI ECI. ectx-inv-append/appl : ectx-inv-append (ectx-inv/appl ECI1 E) ECI2 (ectx-inv/appl ECI3 E) <- ectx-inv-append ECI1 ECI2 ECI3. ectx-inv-append/appr : ectx-inv-append (ectx-inv/appr E V ECI1) ECI2 (ectx-inv/appr E V ECI3) <- ectx-inv-append ECI1 ECI2 ECI3. ectx-inv-append/dol : ectx-inv-append (ectx-inv/dol ECI1 E) ECI2 (ectx-inv/dol ECI3 E) <- ectx-inv-append ECI1 ECI2 ECI3. ectx-inv-append/cons : ectx-inv-append (ectx-inv/cons E V ECI1) ECI2 (ectx-inv/cons E V ECI3) <- ectx-inv-append ECI1 ECI2 ECI3. %mode ectx-inv-append +De1 +De2 -De3. %worlds (tm-block) (ectx-inv-append _ _ _). %total A (ectx-inv-append A _ _). ectx-inv-to-tm-append : ectx-inv-to-tm ECI1 E1 -> ectx-inv-to-tm ECI2 E2 -> ectx-inv-append ECI1 ECI2 ECI3 -> ectx-inv-to-tm ECI3 ([x] E1 (E2 x)) -> type. ectx-inv-to-tm-append/empty : ectx-inv-to-tm-append ectx-inv-to-tm/empty ECI ectx-inv-append/empty ECI. ectx-inv-to-tm-append/appl : ectx-inv-to-tm-append (ectx-inv-to-tm/appl ECI1) ECI2 (ectx-inv-append/appl X) (ectx-inv-to-tm/appl ECI3) <- ectx-inv-to-tm-append ECI1 ECI2 X ECI3. ectx-inv-to-tm-append/appr : ectx-inv-to-tm-append (ectx-inv-to-tm/appr ECI1) ECI2 (ectx-inv-append/appr X) (ectx-inv-to-tm/appr ECI3) <- ectx-inv-to-tm-append ECI1 ECI2 X ECI3. ectx-inv-to-tm-append/dol : ectx-inv-to-tm-append (ectx-inv-to-tm/dol ECI1) ECI2 (ectx-inv-append/dol X) (ectx-inv-to-tm/dol ECI3) <- ectx-inv-to-tm-append ECI1 ECI2 X ECI3. ectx-inv-to-tm-append/cons : ectx-inv-to-tm-append (ectx-inv-to-tm/cons ECI1) ECI2 (ectx-inv-append/cons X) (ectx-inv-to-tm/cons ECI3) <- ectx-inv-to-tm-append ECI1 ECI2 X ECI3. %mode ectx-inv-to-tm-append +De1 +De2 -De3 -De4. %worlds (tm-block) (ectx-inv-to-tm-append _ _ _ _). %total A (ectx-inv-to-tm-append A _ _ _). ectx-inv-to-ectx-acc : ectx-inv -> ectx -> ectx -> type. ectx-inv-to-ectx-acc/empty : ectx-inv-to-ectx-acc ectx-inv/empty EC EC. ectx-inv-to-ectx-acc/cons : ectx-inv-to-ectx-acc (ectx-inv/cons E V ECI) EC EC' <- ectx-inv-to-ectx-acc ECI (ectx/cons E V ctx/empty EC) EC'. ectx-inv-to-ectx-acc/appl-base : ectx-inv-to-ectx-acc (ectx-inv/appl ECI E) (ectx/base C) EC <- ectx-inv-to-ectx-acc ECI (ectx/base (ctx/appl C E)) EC. ectx-inv-to-ectx-acc/appl-cons : ectx-inv-to-ectx-acc (ectx-inv/appl ECI E) (ectx/cons BE BV C EC) EC' <- ectx-inv-to-ectx-acc ECI (ectx/cons BE BV (ctx/appl C E) EC) EC'. ectx-inv-to-ectx-acc/appr-base : ectx-inv-to-ectx-acc (ectx-inv/appr E V ECI) (ectx/base C) EC <- ectx-inv-to-ectx-acc ECI (ectx/base (ctx/appr E V C)) EC. ectx-inv-to-ectx-acc/appr-cons : ectx-inv-to-ectx-acc (ectx-inv/appr E V ECI) (ectx/cons BE BV C EC) EC' <- ectx-inv-to-ectx-acc ECI (ectx/cons BE BV (ctx/appr E V C) EC) EC'. ectx-inv-to-ectx-acc/dol-base : ectx-inv-to-ectx-acc (ectx-inv/dol ECI E) (ectx/base C) EC <- ectx-inv-to-ectx-acc ECI (ectx/base (ctx/dol C E)) EC. ectx-inv-to-ectx-acc/dol-cons : ectx-inv-to-ectx-acc (ectx-inv/dol ECI E) (ectx/cons BE BV C EC) EC' <- ectx-inv-to-ectx-acc ECI (ectx/cons BE BV (ctx/dol C E) EC) EC'. %mode ectx-inv-to-ectx-acc +Dc1 +Dc -Dc2. %worlds (tm-block) (ectx-inv-to-ectx-acc _ _ _). %total A (ectx-inv-to-ectx-acc A _ _). ectx-inv-to-ectx : ectx-inv -> ectx -> type. ectx-inv-to-ectx/- : ectx-inv-to-ectx ECI EC <- ectx-inv-to-ectx-acc ECI (ectx/base ctx/empty) EC. %mode ectx-inv-to-ectx +Dc1 -Dc2. %worlds (tm-block) (ectx-inv-to-ectx _ _). %total {} (ectx-inv-to-ectx _ _). ectx-base-to-ectx-inv-acc : ctx -> ectx-inv -> ectx-inv -> type. ectx-cons-to-ectx-inv-acc : {V} value V -> ctx -> ectx -> ectx-inv -> ectx-inv -> type. ectx-base-to-ectx-inv-acc/empty : ectx-base-to-ectx-inv-acc ctx/empty ECI ECI. ectx-base-to-ectx-inv-acc/appl : ectx-base-to-ectx-inv-acc (ctx/appl EC E) ECI ECI' <- ectx-base-to-ectx-inv-acc EC (ectx-inv/appl ECI E) ECI'. ectx-base-to-ectx-inv-acc/appr : ectx-base-to-ectx-inv-acc (ctx/appr E EV EC) ECI ECI' <- ectx-base-to-ectx-inv-acc EC (ectx-inv/appr E EV ECI) ECI'. ectx-base-to-ectx-inv-acc/dol : ectx-base-to-ectx-inv-acc (ctx/dol EC E) ECI ECI' <- ectx-base-to-ectx-inv-acc EC (ectx-inv/dol ECI E) ECI'. ectx-cons-to-ectx-inv-acc/base-empty : ectx-cons-to-ectx-inv-acc E V ctx/empty (ectx/base C) ECI ECI' <- ectx-base-to-ectx-inv-acc C (ectx-inv/cons E V ECI) ECI'. ectx-cons-to-ectx-inv-acc/cons-empty : ectx-cons-to-ectx-inv-acc E V ctx/empty (ectx/cons E' V' C EC) ECI ECI' <- ectx-cons-to-ectx-inv-acc E' V' C EC (ectx-inv/cons E V ECI) ECI'. ectx-cons-to-ectx-inv-acc/appl : ectx-cons-to-ectx-inv-acc E V (ctx/appl C E') EC ECI ECI' <- ectx-cons-to-ectx-inv-acc E V C EC (ectx-inv/appl ECI E') ECI'. ectx-cons-to-ectx-inv-acc/appr : ectx-cons-to-ectx-inv-acc E V (ctx/appr E' V' C) EC ECI ECI' <- ectx-cons-to-ectx-inv-acc E V C EC (ectx-inv/appr E' V' ECI) ECI'. ectx-cons-to-ectx-inv-acc/dol : ectx-cons-to-ectx-inv-acc E V (ctx/dol C E') EC ECI ECI' <- ectx-cons-to-ectx-inv-acc E V C EC (ectx-inv/dol ECI E') ECI'. %mode (ectx-base-to-ectx-inv-acc +Dc +Dc' -Dc'') (ectx-cons-to-ectx-inv-acc +Dv +Dvv +Dc +Dc1 +Dc' -Dc''). %worlds (tm-block) (ectx-base-to-ectx-inv-acc _ _ _) (ectx-cons-to-ectx-inv-acc _ _ _ _ _ _). %total A (ectx-base-to-ectx-inv-acc A _ _). %total {B A} (ectx-cons-to-ectx-inv-acc _ _ A B _ _). ectx-to-ectx-inv : ectx -> ectx-inv -> type. ectx-to-ectx-inv/base : ectx-to-ectx-inv (ectx/base C) ECI <- ectx-base-to-ectx-inv-acc C ectx-inv/empty ECI. ectx-to-ectx-inv/cons : ectx-to-ectx-inv (ectx/cons E V C EC) ECI <- ectx-cons-to-ectx-inv-acc E V C EC ectx-inv/empty ECI. %mode ectx-to-ectx-inv +Dc1 -Dc2. %worlds (tm-block) (ectx-to-ectx-inv _ _). %total {} (ectx-to-ectx-inv _ _). ectx-inv-to-tm-to-ectx-to-tm-acc : ectx-inv-to-tm ECI E -> ectx-to-tm EC E' -> ectx-inv-to-ectx-acc ECI EC EC' -> ectx-to-tm EC' ([x] E' (E x)) -> type. ectx-inv-to-tm-to-ectx-to-tm-acc/empty : ectx-inv-to-tm-to-ectx-to-tm-acc ectx-inv-to-tm/empty ECTE ectx-inv-to-ectx-acc/empty ECTE. ectx-inv-to-tm-to-ectx-to-tm-acc/cons : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/cons EITE) ECTE (ectx-inv-to-ectx-acc/cons X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/cons ECTE ctx-to-tm/empty) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/appl-base : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/appl EITE) (ectx-to-tm/base CTE) (ectx-inv-to-ectx-acc/appl-base X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/base (ctx-to-tm/appl CTE)) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/appl-cons : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/appl EITE) (ectx-to-tm/cons ECTE CTE) (ectx-inv-to-ectx-acc/appl-cons X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/cons ECTE (ctx-to-tm/appl CTE)) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/appr-base : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/appr EITE) (ectx-to-tm/base CTE) (ectx-inv-to-ectx-acc/appr-base X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/base (ctx-to-tm/appr CTE)) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/appr-cons : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/appr EITE) (ectx-to-tm/cons ECTE CTE) (ectx-inv-to-ectx-acc/appr-cons X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/cons ECTE (ctx-to-tm/appr CTE)) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/dol-base : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/dol EITE) (ectx-to-tm/base CTE) (ectx-inv-to-ectx-acc/dol-base X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/base (ctx-to-tm/dol CTE)) X ECTE'. ectx-inv-to-tm-to-ectx-to-tm-acc/dol-cons : ectx-inv-to-tm-to-ectx-to-tm-acc (ectx-inv-to-tm/dol EITE) (ectx-to-tm/cons ECTE CTE) (ectx-inv-to-ectx-acc/dol-cons X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc EITE (ectx-to-tm/cons ECTE (ctx-to-tm/dol CTE)) X ECTE'. %mode ectx-inv-to-tm-to-ectx-to-tm-acc +Dc1 +Dc -Dc2 -Dc3. %worlds (tm-block) (ectx-inv-to-tm-to-ectx-to-tm-acc _ _ _ _). %total A (ectx-inv-to-tm-to-ectx-to-tm-acc A _ _ _). ectx-inv-to-tm-to-ectx-to-tm : ectx-inv-to-tm ECI E -> ectx-inv-to-ectx ECI EC -> ectx-to-tm EC E -> type. ectx-inv-to-tm-to-ectx-to-tm/- : ectx-inv-to-tm-to-ectx-to-tm ECTE (ectx-inv-to-ectx/- X) ECTE' <- ectx-inv-to-tm-to-ectx-to-tm-acc ECTE (ectx-to-tm/base ctx-to-tm/empty) X ECTE'. %mode ectx-inv-to-tm-to-ectx-to-tm +Dc1 -Dc2 -Dc3. %worlds (tm-block) (ectx-inv-to-tm-to-ectx-to-tm _ _ _). %total {} (ectx-inv-to-tm-to-ectx-to-tm _ _ _). ectx-base-to-tm-to-ectx-inv-to-tm-acc : ctx-to-tm C EC -> ectx-inv-to-tm ECI EECI -> ectx-base-to-ectx-inv-acc C ECI ECI' -> ectx-inv-to-tm ECI' ([x] EC (EECI x)) -> type. ectx-base-to-tm-to-ectx-inv-to-tm-acc/empty : ectx-base-to-tm-to-ectx-inv-to-tm-acc ctx-to-tm/empty ECIE ectx-base-to-ectx-inv-acc/empty ECIE. ectx-base-to-tm-to-ectx-inv-to-tm-acc/appl : ectx-base-to-tm-to-ectx-inv-to-tm-acc (ctx-to-tm/appl CE) ECIE (ectx-base-to-ectx-inv-acc/appl X) ECIE' <- ectx-base-to-tm-to-ectx-inv-to-tm-acc CE (ectx-inv-to-tm/appl ECIE) X ECIE'. ectx-base-to-tm-to-ectx-inv-to-tm-acc/appr : ectx-base-to-tm-to-ectx-inv-to-tm-acc (ctx-to-tm/appr CE) ECIE (ectx-base-to-ectx-inv-acc/appr X) ECIE' <- ectx-base-to-tm-to-ectx-inv-to-tm-acc CE (ectx-inv-to-tm/appr ECIE) X ECIE'. ectx-base-to-tm-to-ectx-inv-to-tm-acc/dol : ectx-base-to-tm-to-ectx-inv-to-tm-acc (ctx-to-tm/dol CE) ECIE (ectx-base-to-ectx-inv-acc/dol X) ECIE' <- ectx-base-to-tm-to-ectx-inv-to-tm-acc CE (ectx-inv-to-tm/dol ECIE) X ECIE'. %mode ectx-base-to-tm-to-ectx-inv-to-tm-acc +Dc1 +Dc -Dc2 -Dc3. %worlds (tm-block) (ectx-base-to-tm-to-ectx-inv-to-tm-acc _ _ _ _). %total A (ectx-base-to-tm-to-ectx-inv-to-tm-acc A _ _ _). ectx-cons-to-tm-to-ectx-inv-to-tm-acc : {E}{V} ctx-to-tm C EC' -> ectx-to-tm EC EEC -> ectx-inv-to-tm ECI EECI -> ectx-cons-to-ectx-inv-acc E V C EC ECI ECI' -> ectx-inv-to-tm ECI' ([x] EEC (E dol EC' (EECI x))) -> type. ectx-cons-to-tm-to-ectx-inv-to-tm-acc/appl : ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V (ctx-to-tm/appl CE) ECE ECIE (ectx-cons-to-ectx-inv-acc/appl X) ECIE' <- ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V CE ECE (ectx-inv-to-tm/appl ECIE) X ECIE'. ectx-cons-to-tm-to-ectx-inv-to-tm-acc/appr : ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V (ctx-to-tm/appr CE) ECE ECIE (ectx-cons-to-ectx-inv-acc/appr X) ECIE' <- ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V CE ECE (ectx-inv-to-tm/appr ECIE) X ECIE'. ectx-cons-to-tm-to-ectx-inv-to-tm-acc/dol : ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V (ctx-to-tm/dol CE) ECE ECIE (ectx-cons-to-ectx-inv-acc/dol X) ECIE' <- ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V CE ECE (ectx-inv-to-tm/dol ECIE) X ECIE'. ectx-cons-to-tm-to-ectx-inv-to-tm-acc/base-empty : ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V ctx-to-tm/empty (ectx-to-tm/base CE) ECIE (ectx-cons-to-ectx-inv-acc/base-empty X) ECIE' <- ectx-base-to-tm-to-ectx-inv-to-tm-acc CE (ectx-inv-to-tm/cons ECIE) X ECIE'. ectx-cons-to-tm-to-ectx-inv-to-tm-acc/cons-empty : ectx-cons-to-tm-to-ectx-inv-to-tm-acc E V ctx-to-tm/empty (ectx-to-tm/cons ECE CE) ECIE (ectx-cons-to-ectx-inv-acc/cons-empty X) ECIE' <- ectx-cons-to-tm-to-ectx-inv-to-tm-acc _ _ CE ECE (ectx-inv-to-tm/cons ECIE) X ECIE'. %mode ectx-cons-to-tm-to-ectx-inv-to-tm-acc +De +Dv +Dc0 +Dc1 +Dc -Dc2 -Dc3. %worlds (tm-block) (ectx-cons-to-tm-to-ectx-inv-to-tm-acc _ _ _ _ _ _ _). %total {A B} (ectx-cons-to-tm-to-ectx-inv-to-tm-acc _ _ B A _ _ _). ectx-to-tm-to-ectx-inv-to-tm : ectx-to-tm EC E -> ectx-to-ectx-inv EC ECI -> ectx-inv-to-tm ECI E -> type. ectx-to-tm-to-ectx-inv-to-tm/base : ectx-to-tm-to-ectx-inv-to-tm (ectx-to-tm/base CE) (ectx-to-ectx-inv/base X) ECIE <- ectx-base-to-tm-to-ectx-inv-to-tm-acc CE ectx-inv-to-tm/empty X ECIE. ectx-to-tm-to-ectx-inv-to-tm/cons : ectx-to-tm-to-ectx-inv-to-tm (ectx-to-tm/cons ECE CE) (ectx-to-ectx-inv/cons X) ECIE <- ectx-cons-to-tm-to-ectx-inv-to-tm-acc _ _ CE ECE ectx-inv-to-tm/empty X ECIE. %mode ectx-to-tm-to-ectx-inv-to-tm +Dc1 -Dc2 -Dc3. %worlds (tm-block) (ectx-to-tm-to-ectx-inv-to-tm _ _ _). %total {} (ectx-to-tm-to-ectx-inv-to-tm _ _ _). amtm : type. amctx : type. %block amctx-block : block {x:amctx}. amtm : type. %name amtm E x. aabs : (amtm -> amtm) -> amtm. aapp : amtm -> amtm -> amtm. %infix left 30 aapp. asft : (amtm -> amtm) -> amtm. adol : amtm -> amtm -> amtm. %infix right 20 adol. arst : amtm -> amtm = [e] (aabs [x] x) adol e. actx : amctx -> amtm. %block amtm-block : block {v : amtm}. amvalue : amtm -> type. amvalue/abs : amvalue (aabs _). amvalue/ctx : amvalue (actx _). amctx/empty : (amtm -> amtm) -> amctx. amctx/appl : amctx -> amtm -> amctx. amctx/appr : {E} amvalue E -> amctx -> amctx. amctx/dol : amctx -> amtm -> amctx. amectx : type. %block amectx-block : block {x:amectx}. ab : amectx. ac : amctx -> amectx -> amectx. %infix right 10 ac. amectx-diff : (amectx -> amectx) -> type. amectx-diff/b : amectx-diff ([x] x). amectx-diff/c : amectx-diff E -> amectx-diff ([x] C ac E x). am : type. am/e : amtm -> amectx -> am. am/a : {E} amvalue E -> amectx -> am. amctx-good : amctx -> type. amctx-good/empty : amctx-good (amctx/empty [x] x). amctx-good/appl : amctx-good C -> amctx-good (amctx/appl C _). amctx-good/appr : amctx-good C -> amctx-good (amctx/appr _ _ C). amctx-good/dol : amctx-good C -> amctx-good (amctx/dol C _). amectx-good : amectx -> type. amectx-good/b : amctx-good C -> amectx-good (C ac ab). amectx-good/c : amectx-good EC -> amectx-good (_ ac EC). am-good : am -> type. am-good/e : amectx-good EC -> am-good (am/e _ EC). am-good/a : amectx-good EC -> am-good (am/a _ _ EC). am-final : am -> type. am-final/e : amvalue E -> am-final (am/e E ab). am-stuck : am -> type. am-good-final-stuck : am -> type. am-good-final-stuck/good : am-good AM -> am-good-final-stuck AM. am-good-final-stuck/final : am-final AM -> am-good-final-stuck AM. am-good-final-stuck/stuck : am-stuck AM -> am-good-final-stuck AM. am-step : am -> am -> type. am-step/e-abs : am-step (am/e (aabs E) (C ac EC)) (am/a (aabs E) amvalue/abs (C ac EC)). am-step/e-ctx : am-step (am/e (actx X) (C ac EC)) (am/a (actx X) amvalue/ctx (C ac EC)). am-step/e-app : am-step (am/e (E1 aapp E2) (C ac EC)) (am/e E1 (amctx/appl C E2 ac EC)). am-step/e-sft : am-step (am/e (asft E) (C ac C' ac EC)) (am/e (E (actx C)) (C' ac EC)). am-step/e-dol : am-step (am/e (E1 adol E2) (C ac EC)) (am/e E1 (amctx/dol C E2 ac EC)). am-step/a-dol-abs : am-step (am/a (aabs V) amvalue/abs (amctx/dol C E ac EC)) (am/e E (amctx/empty V ac C ac EC)). am-step/a-dol-ctx : am-step (am/a (actx V) amvalue/ctx (amctx/dol C E ac EC)) (am/e E (V ac C ac EC)). am-step/a-appl : am-step (am/a V VV (amctx/appl C E ac EC)) (am/e E (amctx/appr V VV C ac EC)). am-step/a-appr-abs : am-step (am/a V VV (amctx/appr (aabs E) amvalue/abs C ac EC)) (am/e (E V) (C ac EC)). am-step/a-appr-ctx : am-step (am/a V VV (amctx/appr (actx E) amvalue/ctx C ac EC)) (am/a V VV (E ac C ac EC)). am-step/a-empty : am-step (am/a V VV (amctx/empty E ac EC)) (am/e (E V) EC). am-steps : am -> am -> type. astz : am-steps E E. asts : am-step E E' -> am-steps E' E'' -> am-steps E E''. %infix right 25 asts. amectx-all-empty : nat -> amectx -> type. amectx-all-empty/z : amectx-all-empty z ab. amectx-all-empty/s : amectx-all-empty N CS -> amectx-all-empty (s N) ((amctx/empty [x] x) ac CS). id-amtm : amtm -> amtm -> type. id-amtm/refl : id-amtm E E. id-am : am -> am -> type. id-am/refl : id-am E E. id-amctx : amctx -> amctx -> type. id-amctx/refl : id-amctx E E. id-amectx : amectx -> amectx -> type. id-amectx/refl : id-amectx E E. id-amtm-congr-arst : id-amtm E1 E2 -> id-amtm (arst E1) (arst E2) -> type. id-amtm-congr-arst/- : id-amtm-congr-arst id-amtm/refl id-amtm/refl. %mode id-amtm-congr-arst +Di1 -Di2. %worlds (amtm-block) (id-amtm-congr-arst _ _). %total {} (id-amtm-congr-arst _ _). id-amectx-congr-ac : id-amctx C C' -> id-amectx EC EC' -> id-amectx (C ac EC) (C' ac EC') -> type. id-amectx-congr-ac/- : id-amectx-congr-ac id-amctx/refl id-amectx/refl id-amectx/refl. %mode id-amectx-congr-ac +Di1 +Di2 -Di3. %worlds (amtm-block | amctx-block | amectx-block) (id-amectx-congr-ac _ _ _). %total {} (id-amectx-congr-ac _ _ _). id-am-congr-e : id-amtm E1 E2 -> id-amectx AE1 AE2 -> id-am (am/e E1 AE1) (am/e E2 AE2) -> type. id-am-congr-e/- : id-am-congr-e id-amtm/refl id-amectx/refl id-am/refl. %mode id-am-congr-e +Di1 +Di2 -Di3. %worlds (amtm-block | amctx-block | amectx-block) (id-am-congr-e _ _ _). %total {} (id-am-congr-e _ _ _). am-steps-respects-id : am-steps AM1 AM2 -> id-am AM1 AM1' -> id-am AM2 AM2' -> am-steps AM1' AM2' -> type. am-steps-respects-id/- : am-steps-respects-id STS id-am/refl id-am/refl STS. %mode am-steps-respects-id +Das +Di1 +Di2 -Das'. %worlds (amtm-block | amctx-block | amectx-block) (am-steps-respects-id _ _ _ _). %total {} (am-steps-respects-id _ _ _ _). amectx-length : amectx -> nat -> type. amectx-length/z : amectx-length ab z. amectx-length/s : amectx-length (_ ac AC) (s N) <- amectx-length AC N. %mode amectx-length +Da -Dx. %worlds (amtm-block) (amectx-length _ _). %total A (amectx-length A _). am-steps-append : am-steps AM1 AM2 -> am-steps AM2 AM3 -> am-steps AM1 AM3 -> type. am-steps-append/z : am-steps-append astz STS STS. am-steps-append/s : am-steps-append (ST asts STS1) STS2 (ST asts STS3) <- am-steps-append STS1 STS2 STS3. %mode am-steps-append +Ds1 +Ds2 -Ds3. %worlds (amtm-block) (am-steps-append _ _ _). %total A (am-steps-append A _ _). amtm-to-tm : amtm -> tm -> type. amctx-to-tm : amctx -> (tm -> tm) -> type. amtm-to-tm/abs : ({ax}{x} amtm-to-tm ax x -> amtm-to-tm (AE ax) (E x)) -> amtm-to-tm (aabs AE) (abs E). amtm-to-tm/app : amtm-to-tm AE1 E1 -> amtm-to-tm AE2 E2 -> amtm-to-tm (AE1 aapp AE2) (E1 app E2). amtm-to-tm/sft : ({ax}{x} amtm-to-tm ax x -> amtm-to-tm (AE ax) (E x)) -> amtm-to-tm (asft AE) (sft E). amtm-to-tm/dol : amtm-to-tm AE1 E1 -> amtm-to-tm AE2 E2 -> amtm-to-tm (AE1 adol AE2) (E1 dol E2). amtm-to-tm/ctx : amctx-to-tm C E -> amtm-to-tm (actx C) (abs E). amctx-to-tm/empty : ({ax}{x} amtm-to-tm ax x -> amtm-to-tm (AE ax) (E x)) -> amctx-to-tm (amctx/empty AE) ([x] abs E dol x). amctx-to-tm/appl : amctx-to-tm C CE -> amtm-to-tm AE E -> amctx-to-tm (amctx/appl C AE) ([x] CE (x app E)). amctx-to-tm/appr : amtm-to-tm AE E -> amctx-to-tm C CE -> amctx-to-tm (amctx/appr AE _ C) ([x] CE (E app x)). amctx-to-tm/dol : amctx-to-tm C CE -> amtm-to-tm AE E -> amctx-to-tm (amctx/dol C AE) ([x] CE (x dol E)). %block amtm-to-tm-block : block {ax:amtm}{x:tm}{_:amtm-to-tm ax x}. %mode (amtm-to-tm +Da -De) (amctx-to-tm +Da -De). %worlds (amtm-to-tm-block) (amtm-to-tm _ _) (amctx-to-tm _ _). %total (A B) (amtm-to-tm A _) (amctx-to-tm B _). %unique (amtm-to-tm +Da -1De) (amctx-to-tm +Da -1De). tm-to-amtm : tm -> amtm -> type. tm-to-amtm/abs : ({ax}{x} tm-to-amtm x ax -> tm-to-amtm (E x) (AE ax)) -> tm-to-amtm (abs E) (aabs AE). tm-to-amtm/sft : ({ax}{x} tm-to-amtm x ax -> tm-to-amtm (E x) (AE ax)) -> tm-to-amtm (sft E) (asft AE). tm-to-amtm/app : tm-to-amtm E1 AE1 -> tm-to-amtm E2 AE2 -> tm-to-amtm (E1 app E2) (AE1 aapp AE2). tm-to-amtm/dol : tm-to-amtm E1 AE1 -> tm-to-amtm E2 AE2 -> tm-to-amtm (E1 dol E2) (AE1 adol AE2). %block tm-to-amtm-block : block {ax:amtm}{x:tm}{_:tm-to-amtm x ax}. %mode tm-to-amtm +Dt -Da. %worlds (tm-to-amtm-block) (tm-to-amtm _ _). %total A (tm-to-amtm A _). amtm-to-tm-gen : {A} amtm-to-tm A E -> type. amctx-to-tm-gen : {A} amctx-to-tm A E -> type. amtm-to-tm-gen/abs : amtm-to-tm-gen _ (amtm-to-tm/abs G) <- ({ax}{x}{g} amtm-to-tm-gen ax g -> amtm-to-tm-gen _ (G ax x g)). amtm-to-tm-gen/sft : amtm-to-tm-gen _ (amtm-to-tm/sft G) <- ({ax}{x}{g} amtm-to-tm-gen ax g -> amtm-to-tm-gen _ (G ax x g)). amtm-to-tm-gen/app : amtm-to-tm-gen _ (amtm-to-tm/app G1 G2) <- amtm-to-tm-gen _ G1 <- amtm-to-tm-gen _ G2. amtm-to-tm-gen/dol : amtm-to-tm-gen _ (amtm-to-tm/dol G1 G2) <- amtm-to-tm-gen _ G1 <- amtm-to-tm-gen _ G2. amtm-to-tm-gen/ctx : amtm-to-tm-gen _ (amtm-to-tm/ctx G) <- amctx-to-tm-gen _ G. amctx-to-tm-gen/empty : amctx-to-tm-gen _ (amctx-to-tm/empty G) <- ({ax}{x}{g} amtm-to-tm-gen ax g -> amtm-to-tm-gen _ (G ax x g)). amctx-to-tm-gen/appl : amctx-to-tm-gen _ (amctx-to-tm/appl G1 G2) <- amctx-to-tm-gen _ G1 <- amtm-to-tm-gen _ G2. amctx-to-tm-gen/appr : amctx-to-tm-gen _ (amctx-to-tm/appr G1 G2) <- amtm-to-tm-gen _ G1 <- amctx-to-tm-gen _ G2. amctx-to-tm-gen/dol : amctx-to-tm-gen _ (amctx-to-tm/dol G1 G2) <- amctx-to-tm-gen _ G1 <- amtm-to-tm-gen _ G2. %block amtm-to-tm-gen-block : block {ax:amtm}{x:tm}{g:amtm-to-tm ax x}{_:amtm-to-tm-gen ax g}. %mode (amtm-to-tm-gen +Da -De) (amctx-to-tm-gen +Da -De). %worlds (amtm-to-tm-gen-block) (amtm-to-tm-gen _ _) (amctx-to-tm-gen _ _). %total (A B) (amtm-to-tm-gen A _) (amctx-to-tm-gen B _). %unique (amtm-to-tm-gen +Da -1De) (amctx-to-tm-gen +Da -1De). amectx-to-amtm : amectx -> (amtm -> amtm) -> type. amectx-to-amtm/base : amectx-to-amtm ab ([x] x). amectx-to-amtm/cons : amectx-to-amtm (C ac EC) ([x] E (actx C adol x)) <- amectx-to-amtm EC E. %mode amectx-to-amtm +Da -Dc. %worlds (amtm-block) (amectx-to-amtm _ _). %total A (amectx-to-amtm A _). amectx-to-amctx : amectx -> amctx -> type. amectx-to-amctx/- : amectx-to-amctx EC (amctx/empty E) <- amectx-to-amtm EC E. %mode amectx-to-amctx +Da -Dc. %worlds (amtm-block) (amectx-to-amctx _ _). %total A (amectx-to-amctx A _). amectx-to-tm : amectx -> (tm -> tm) -> type. amectx-to-tm/base : amectx-to-tm ab ([x] x). amectx-to-tm/cons : amctx-to-tm C E -> amectx-to-tm EC EE -> amectx-to-tm (C ac EC) ([x] EE (E x)). %mode amectx-to-tm +Da -De. %worlds (amtm-to-tm-block) (amectx-to-tm _ _). %total A (amectx-to-tm A _). %unique amectx-to-tm +Da -1De. am-to-tm : am -> tm -> type. am-to-tm/e : amtm-to-tm AE E -> amectx-to-tm EC EE -> am-to-tm (am/e AE EC) (EE E). am-to-tm/a : amtm-to-tm AE E -> amectx-to-tm EC EE -> am-to-tm (am/a AE _ EC) (EE E). %mode am-to-tm +Da -De. %worlds (amtm-to-tm-block) (am-to-tm _ _). %total A (am-to-tm A _). %unique am-to-tm +Da -1De. amvalue-to-value : amvalue AE -> amtm-to-tm AE E -> value E -> type. amvalue-to-value/abs : amvalue-to-value amvalue/abs _ value/abs. amvalue-to-value/ctx : amvalue-to-value amvalue/ctx _ value/abs. %mode amvalue-to-value +Dv +Dt -De. %worlds (amtm-to-tm-block) (amvalue-to-value _ _ _). %total {} (amvalue-to-value _ _ _). %unique amvalue-to-value +Dv +Dt -1De. amvalue-to-value2 : amvalue AE -> value E -> type. amvalue-to-value2/abs : ({ax}{x} amtm-to-tm ax x -> amtm-to-tm (AE ax) (E x)) -> amvalue-to-value2 (amvalue/abs : amvalue (aabs AE)) (value/abs : value (abs E)). amvalue-to-value2/ctx : amctx-to-tm AE E -> amvalue-to-value2 (amvalue/ctx : amvalue (actx AE)) (value/abs : value (abs E)). %mode amvalue-to-value2 +Dv -De. %worlds (amtm-to-tm-block) (amvalue-to-value2 _ _). %total {} (amvalue-to-value2 _ _). %unique amvalue-to-value2 +Dv -1De. amvalue-to-value2-gen : {AV} amvalue-to-value2 AV V -> type. amvalue-to-value2-gen/abs : amvalue-to-value2-gen _ (amvalue-to-value2/abs ATT) <- ({ax}{x}{g} amtm-to-tm-gen ax g -> amtm-to-tm-gen _ (ATT ax x g)). amvalue-to-value2-gen/ctx : amvalue-to-value2-gen _ (amvalue-to-value2/ctx ATT) <- amctx-to-tm-gen _ ATT. %mode amvalue-to-value2-gen +Dv -De. %worlds (amtm-to-tm-gen-block) (amvalue-to-value2-gen _ _). %total {} (amvalue-to-value2-gen _ _). %unique amvalue-to-value2-gen +Dv -1De. amctx-to-ctx : amctx -> (tm -> tm) -> ctx -> type. amctx-to-ctx/empty : ({ax}{x} amtm-to-tm ax x -> amtm-to-tm (AE ax) (E x)) -> amctx-to-ctx (amctx/empty AE) E ctx/empty. amctx-to-ctx/appl : amctx-to-ctx AC EE C -> amtm-to-tm AE E -> amctx-to-ctx (amctx/appl AC AE) EE (ctx/appl C E). amctx-to-ctx/appr : amvalue-to-value2 AV V -> amctx-to-ctx AC EE C -> amctx-to-ctx (amctx/appr AE AV AC) EE (ctx/appr E V C). amctx-to-ctx/dol : amctx-to-ctx AC EE C -> amtm-to-tm AE E -> amctx-to-ctx (amctx/dol AC AE) EE (ctx/dol C E). %mode amctx-to-ctx +Da -Dt -Dc. %worlds (amtm-to-tm-block) (amctx-to-ctx _ _ _). %total A (amctx-to-ctx A _ _). %unique amctx-to-ctx +Da -1Dt -1Dc. amctx-to-ctx-gen : {A} amctx-to-ctx A E C -> type. amctx-to-ctx-gen/empty : amctx-to-ctx-gen _ (amctx-to-ctx/empty ATT) <- ({ax}{x}{g} amtm-to-tm-gen ax g -> amtm-to-tm-gen _ (ATT ax x g)). amctx-to-ctx-gen/appl : amctx-to-ctx-gen _ (amctx-to-ctx/appl CG EG) <- amctx-to-ctx-gen _ CG <- amtm-to-tm-gen _ EG. amctx-to-ctx-gen/appr : amctx-to-ctx-gen _ (amctx-to-ctx/appr EG CG) <- amvalue-to-value2-gen _ EG <- amctx-to-ctx-gen _ CG. amctx-to-ctx-gen/dol : amctx-to-ctx-gen _ (amctx-to-ctx/dol CG EG) <- amctx-to-ctx-gen _ CG <- amtm-to-tm-gen _ EG. %mode amctx-to-ctx-gen +Da -Dr. %worlds (amtm-to-tm-gen-block) (amctx-to-ctx-gen _ _). %total A (amctx-to-ctx-gen A _). amectx-to-ectx : amectx -> ectx -> type. amectx-to-ectx/base : amectx-to-ectx ab (ectx/base ctx/empty). amectx-to-ectx/cons : amectx-to-ectx (AC ac AEC) (ectx/cons (abs E) value/abs C EC) <- amectx-to-ectx AEC EC <- amctx-to-ctx AC E C. %mode amectx-to-ectx +Da -Dc. %worlds (amtm-to-tm-block) (amectx-to-ectx _ _). %total A (amectx-to-ectx A _). %unique amectx-to-ectx +Da -1Dc. ctx-to-tm-respects-id : ctx-to-tm EC E -> id-ctx EC EC' -> ({x} id-tm (E x) (E' x)) -> ctx-to-tm EC' E' -> type. ctx-to-tm-respects-id/- : ctx-to-tm-respects-id EC id-ctx/refl ([x] id-tm/refl) EC. %mode ctx-to-tm-respects-id +De +Di +Di' -De'. %worlds (tm-block) (ctx-to-tm-respects-id _ _ _ _). %total {} (ctx-to-tm-respects-id _ _ _ _). ectx-to-tm-respects-id : ectx-to-tm EC E -> id-ectx EC EC' -> ({x} id-tm (E x) (E' x)) -> ectx-to-tm EC' E' -> type. ectx-to-tm-respects-id/- : ectx-to-tm-respects-id EC id-ectx/refl ([x] id-tm/refl) EC. %mode ectx-to-tm-respects-id +De +Di +Di' -De'. %worlds (tm-block) (ectx-to-tm-respects-id _ _ _ _). %total {} (ectx-to-tm-respects-id _ _ _ _). ctx-to-tm-gen : {C} ctx-to-tm C E -> type. ctx-to-tm-gen/empty : ctx-to-tm-gen _ ctx-to-tm/empty. ctx-to-tm-gen/appl : ctx-to-tm-gen _ (ctx-to-tm/appl CTT) <- ctx-to-tm-gen _ CTT. ctx-to-tm-gen/appr : ctx-to-tm-gen _ (ctx-to-tm/appr CTT) <- ctx-to-tm-gen _ CTT. ctx-to-tm-gen/dol : ctx-to-tm-gen _ (ctx-to-tm/dol CTT) <- ctx-to-tm-gen _ CTT. %mode ctx-to-tm-gen +Dx -Dx'. %worlds (tm-block) (ctx-to-tm-gen _ _). %total A (ctx-to-tm-gen A _). ectx-to-tm-gen : {C} ectx-to-tm C E -> type. ectx-to-tm-gen/base : ectx-to-tm-gen _ (ectx-to-tm/base CTT) <- ctx-to-tm-gen _ CTT. ectx-to-tm-gen/cons : ectx-to-tm-gen _ (ectx-to-tm/cons ECTT CTT) <- ctx-to-tm-gen _ CTT <- ectx-to-tm-gen _ ECTT. %mode ectx-to-tm-gen +Dx -Dx'. %worlds (tm-block) (ectx-to-tm-gen _ _). %total A (ectx-to-tm-gen A _). ctx-append : ctx -> ctx -> ctx -> type. ctx-append/empty : ctx-append CTX ctx/empty CTX. ctx-append/appl : ctx-append CTX1 (ctx/appl CTX2 E) (ctx/appl CTX E) <- ctx-append CTX1 CTX2 CTX. ctx-append/appr : ctx-append CTX1 (ctx/appr E V CTX2) (ctx/appr E V CTX) <- ctx-append CTX1 CTX2 CTX. ctx-append/dol : ctx-append CTX1 (ctx/dol CTX2 E) (ctx/dol CTX E) <- ctx-append CTX1 CTX2 CTX. %mode ctx-append +Dc1 +Dc2 -Dc. %worlds (tm-block) (ctx-append _ _ _). %total A (ctx-append _ A _). ctx-to-tm-append : ctx-to-tm CTX1 E1 -> ctx-to-tm CTX2 E2 -> ctx-append CTX1 CTX2 CTX -> ctx-to-tm CTX ([x] E1 (E2 x)) -> type. ctx-to-tm-append/empty : ctx-to-tm-append CTX ctx-to-tm/empty ctx-append/empty CTX. ctx-to-tm-append/appl : ctx-to-tm-append CTX1 (ctx-to-tm/appl CTX2) (ctx-append/appl AP) (ctx-to-tm/appl CTX) <- ctx-to-tm-append CTX1 CTX2 AP CTX. ctx-to-tm-append/appr : ctx-to-tm-append CTX1 (ctx-to-tm/appr CTX2) (ctx-append/appr AP) (ctx-to-tm/appr CTX) <- ctx-to-tm-append CTX1 CTX2 AP CTX. ctx-to-tm-append/dol : ctx-to-tm-append CTX1 (ctx-to-tm/dol CTX2) (ctx-append/dol AP) (ctx-to-tm/dol CTX) <- ctx-to-tm-append CTX1 CTX2 AP CTX. %mode ctx-to-tm-append +Dc1 +Dc2 -Da -Dc. %worlds (tm-block) (ctx-to-tm-append _ _ _ _). %total A (ctx-to-tm-append _ A _ _). amectx-append : amectx -> amectx -> amectx -> type. amectx-append/base : amectx-append ab EC EC. amectx-append/cons : amectx-append (C ac EC2) EC1 (C ac EC3) <- amectx-append EC2 EC1 EC3. %mode amectx-append +Dc1 +Dc2 -Dc3. %worlds (amtm-block) (amectx-append _ _ _). %total A (amectx-append A _ _). %unique amectx-append +Dc1 +Dc2 -1Dc3. amectx-append-respects-id : amectx-append CS1 CS2 CS3 -> id-amectx CS1 CS1' -> id-amectx CS2 CS2' -> id-amectx CS3 CS3' -> amectx-append CS1' CS2' CS3' -> type. amectx-append-respects-id/- : amectx-append-respects-id AP id-amectx/refl id-amectx/refl id-amectx/refl AP. %mode amectx-append-respects-id +Da1 +Di1 +Di2 +Di3 -Da2'. %worlds (amtm-block) (amectx-append-respects-id _ _ _ _ _). %total {} (amectx-append-respects-id _ _ _ _ _). amectx-diff-cons : {C} amectx-diff EC -> amectx-diff ([x] EC (C ac x)) -> type. amectx-diff-cons/base : amectx-diff-cons _ amectx-diff/b (amectx-diff/c amectx-diff/b). amectx-diff-cons/cons : amectx-diff-cons C (amectx-diff/c AD) (amectx-diff/c AD') <- amectx-diff-cons C AD AD'. %mode amectx-diff-cons +Dcc +Dc1 -Dc2. %worlds (amtm-block) (amectx-diff-cons _ _ _). %total A (amectx-diff-cons _ A _). amectx-append-diff : {EC1} amectx-diff EC1 -> {EC2} amectx-append (EC1 ab) EC2 (EC1 EC2) -> type. amectx-append-diff/base : amectx-append-diff _ amectx-diff/b _ amectx-append/base. amectx-append-diff/cons : amectx-append-diff ([x] C ac EC1 x) (amectx-diff/c AD) EC2 (amectx-append/cons AP) <- amectx-append-diff EC1 AD EC2 AP. %mode amectx-append-diff +Dc +Dc1 +Dc2 -Dc3. %worlds (amtm-block) (amectx-append-diff _ _ _ _). %total A (amectx-append-diff _ A _ _). amectx-append-det : amectx-append EC1 EC2 EC3 -> amectx-append EC1 EC2 EC3' -> id-amectx EC3 EC3' -> type. amectx-append-det/- : amectx-append-det _ _ id-amectx/refl. %mode amectx-append-det +De1 +De2 -Did. %worlds (amtm-block) (amectx-append-det _ _ _). %total {} (amectx-append-det _ _ _). ectx-append : ectx -> ectx -> ectx -> type. ectx-append/base : ectx-append (ectx/base CTX1) (ectx/base CTX2) (ectx/base CTX) <- ctx-append CTX1 CTX2 CTX. ectx-append/base2 : ectx-append (ectx/cons E V CTX1 ECTX) (ectx/base CTX2) (ectx/cons E V CTX ECTX) <- ctx-append CTX1 CTX2 CTX. ectx-append/cons : ectx-append ECTX1 (ectx/cons E V CTX ECTX2) (ectx/cons E V CTX ECTX) <- ectx-append ECTX1 ECTX2 ECTX. %mode ectx-append +De1 +De2 -De3. %worlds (tm-block) (ectx-append _ _ _). %total A (ectx-append _ A _). ectx-to-tm-append : ectx-to-tm ECTX1 E1 -> ectx-to-tm ECTX2 E2 -> ectx-append ECTX1 ECTX2 ECTX -> ectx-to-tm ECTX ([x] E1 (E2 x)) -> type. ectx-to-tm-append/base : ectx-to-tm-append (ectx-to-tm/base CTX1) (ectx-to-tm/base CTX2) (ectx-append/base AP) (ectx-to-tm/base CTX) <- ctx-to-tm-append CTX1 CTX2 AP CTX. ectx-to-tm-append/base2 : ectx-to-tm-append (ectx-to-tm/cons Z CTX1) (ectx-to-tm/base CTX2) (ectx-append/base2 AP) (ectx-to-tm/cons Z CTX) <- ctx-to-tm-append CTX1 CTX2 AP CTX. ectx-to-tm-append/cons : ectx-to-tm-append ECTX1 (ectx-to-tm/cons ECTX2 CTX) (ectx-append/cons AP) (ectx-to-tm/cons ECTX CTX) <- ectx-to-tm-append ECTX1 ECTX2 AP ECTX. %mode ectx-to-tm-append +Dc1 +Dc2 -Da -Dc. %worlds (tm-block) (ectx-to-tm-append _ _ _ _). %total A (ectx-to-tm-append _ A _ _). ctx-ectx-append : ectx -> ctx -> ectx -> type. ctx-ectx-append/base : ctx-ectx-append (ectx/base CTX1) CTX2 (ectx/base CTX3) <- ctx-append CTX1 CTX2 CTX3. ctx-ectx-append/cons : ctx-ectx-append (ectx/cons E V CTX1 ECTX) CTX2 (ectx/cons E V CTX3 ECTX) <- ctx-append CTX1 CTX2 CTX3. %mode ctx-ectx-append +De1 +De2 -De3. %worlds (tm-block) (ctx-ectx-append _ _ _). %total {} (ctx-ectx-append _ _ _). ctx-ectx-to-tm-append : ectx-to-tm EC EE -> ctx-to-tm C E -> ctx-ectx-append EC C EC' -> ectx-to-tm EC' ([x] EE (E x)) -> type. ctx-ectx-to-tm-append/base : ctx-ectx-to-tm-append (ectx-to-tm/base CTT1) CTT2 (ctx-ectx-append/base AP) (ectx-to-tm/base CTT3) <- ctx-to-tm-append CTT1 CTT2 AP CTT3. ctx-ectx-to-tm-append/cons : ctx-ectx-to-tm-append (ectx-to-tm/cons ECTT CTT1) CTT2 (ctx-ectx-append/cons AP) (ectx-to-tm/cons ECTT CTT3) <- ctx-to-tm-append CTT1 CTT2 AP CTT3. %mode ctx-ectx-to-tm-append +Dc1 +Dc2 -Da -Dc. %worlds (tm-block) (ctx-ectx-to-tm-append _ _ _ _). %total {} (ctx-ectx-to-tm-append _ _ _ _). amtm-to-tm-to-amvalue-to-value2 : amtm-to-tm AE E -> {AV} amvalue-to-value2 (AV : amvalue AE) (V : value E) -> type. amtm-to-tm-to-amvalue-to-value2/abs : amtm-to-tm-to-amvalue-to-value2 (amtm-to-tm/abs ATT) amvalue/abs (amvalue-to-value2/abs ATT). amtm-to-tm-to-amvalue-to-value2/ctx : amtm-to-tm-to-amvalue-to-value2 (amtm-to-tm/ctx ATT) amvalue/ctx (amvalue-to-value2/ctx ATT). %mode amtm-to-tm-to-amvalue-to-value2 +Dt +Dv -Dt'. %worlds (amtm-to-tm-block) (amtm-to-tm-to-amvalue-to-value2 _ _ _). %total {} (amtm-to-tm-to-amvalue-to-value2 _ _ _). amctx-to-tm-to-ctx-to-tm : amctx-to-tm AC E -> amctx-to-ctx AC E' C -> ctx-to-tm C E'' -> ({x} id-tm (abs E' dol E'' x) (E x)) -> type. amctx-to-tm-to-ctx-to-tm/empty : amctx-to-tm-to-ctx-to-tm (amctx-to-tm/empty A) (amctx-to-ctx/empty A) ctx-to-tm/empty ([x] id-tm/refl). amctx-to-tm-to-ctx-to-tm/appl : amctx-to-tm-to-ctx-to-tm (amctx-to-tm/appl ATT AMTT) (amctx-to-ctx/appl ACC (AMTT : amtm-to-tm _ E)) (ctx-to-tm/appl CTT) ([x] ID (x app E)) <- amctx-to-tm-to-ctx-to-tm ATT ACC CTT ID. amctx-to-tm-to-ctx-to-tm/appr : amctx-to-tm-to-ctx-to-tm (amctx-to-tm/appr (AMTT : amtm-to-tm _ E) ATT) (amctx-to-ctx/appr AVTT ACC) (ctx-to-tm/appr CTT) ([x] ID (E app x)) <- amtm-to-tm-to-amvalue-to-value2 AMTT _ AVTT <- amctx-to-tm-to-ctx-to-tm ATT ACC CTT ID. amctx-to-tm-to-ctx-to-tm/dol : amctx-to-tm-to-ctx-to-tm (amctx-to-tm/dol ATT AMTT) (amctx-to-ctx/dol ACC (AMTT : amtm-to-tm _ E)) (ctx-to-tm/dol CTT) ([x] ID (x dol E)) <- amctx-to-tm-to-ctx-to-tm ATT ACC CTT ID. %mode amctx-to-tm-to-ctx-to-tm +Da1 -Da2 -Da3 -Da4. %worlds (amtm-to-tm-block) (amctx-to-tm-to-ctx-to-tm _ _ _ _). %total A (amctx-to-tm-to-ctx-to-tm A _ _ _). amectx-to-tm-to-ectx-to-tm : amectx-to-tm AEC E -> amectx-to-ectx AEC EC -> ectx-to-tm EC E -> type. amectx-to-tm-to-ectx-to-tm/base : amectx-to-tm-to-ectx-to-tm amectx-to-tm/base amectx-to-ectx/base (ectx-to-tm/base ctx-to-tm/empty). amectx-to-tm-to-ectx-to-tm/cons : amectx-to-tm-to-ectx-to-tm (amectx-to-tm/cons ATT AETT) (amectx-to-ectx/cons ATE AETE) ETT' <- amectx-to-tm-to-ectx-to-tm AETT AETE (ETT : ectx-to-tm _ E) <- amctx-to-tm-to-ctx-to-tm ATT ATE CTT ID <- ({x} id-tm-congr (ID x) E (ID' x)) <- ectx-to-tm-respects-id (ectx-to-tm/cons ETT CTT) id-ectx/refl ID' ETT'. %mode amectx-to-tm-to-ectx-to-tm +Dx -Da -De. %worlds (amtm-to-tm-block) (amectx-to-tm-to-ectx-to-tm _ _ _). %total A (amectx-to-tm-to-ectx-to-tm A _ _). reduction : tm -> tm -> type. reduction/abs+ : reduction (abs E app V) E' <- value V <- id-tm E' (E V). reduction/dol : reduction (F dol V) (F app V) <- value V <- value F. reduction/sft+ : {e} reduction (X dol E'') E' <- ctx-to-tm C K <- value X <- id-tm E'' (K (sft e)) <- id-tm (e (abs ([x] X dol K x))) E'. reduction/abs = reduction/abs+ id-tm/refl. reduction/sft : {e} reduction (X dol K (sft e)) (e (abs [x] X dol K x)) <- ctx-to-tm C K <- value X = [e] reduction/sft+ e id-tm/refl id-tm/refl. step : tm -> tm -> type. step/ec : step (E R) (E S) <- reduction R S <- ectx-to-tm C E. steps : tm -> tm -> type. stz : steps E E. sts : step E E' -> steps E' E'' -> steps E E''. %infix right 25 sts. step-inv : tm -> tm -> type. step-inv/ec : step-inv (E R) (E S) <- reduction R S <- ectx-inv-to-tm C E. steps-inv : tm -> tm -> type. stiz : steps-inv E E. stis : step-inv E E' -> steps-inv E' E'' -> steps-inv E E''. %infix right 25 stis. tm-geqv : bool -> tm -> tm -> type. %abbrev tm-eqv = tm-geqv false. %abbrev tm-2eqv = tm-geqv true. tm-eqv/refl : tm-geqv B E E. tm-eqv/sym : tm-geqv B E1 E2 -> tm-geqv B E2 E1. tm-eqv/trans : tm-geqv B E1 E2 -> tm-geqv B E2 E3 -> tm-geqv B E1 E3. tm-eqv/congr-app : tm-geqv B E1 E1' -> tm-geqv B E2 E2' -> tm-geqv B (E1 app E2) (E1' app E2'). tm-eqv/congr-dol : tm-geqv B E1 E1' -> tm-geqv B E2 E2' -> tm-geqv B (E1 dol E2) (E1' dol E2'). tm-eqv/congr-abs : ({x} tm-geqv B (E x) (E' x)) -> tm-geqv B (abs E) (abs E'). tm-eqv/congr-sft : ({x} tm-geqv B (E x) (E' x)) -> tm-geqv B (sft E) (sft E'). tm-eqv/dol-ctx+ : id-tm EE (EC E) -> value K -> ctx-to-tm CTX EC -> tm-geqv B (K dol EE) ((abs [x] K dol EC x) dol E). tm-eqv/dol-ctx : value K -> ctx-to-tm CTX EC -> tm-geqv B (K dol EC E) ((abs [x] K dol EC x) dol E) = tm-eqv/dol-ctx+ id-tm/refl. tm-eqv/dol-val : value K -> value V -> tm-geqv true (K dol V) (K app V). exfalso-tm-eqv : null -> {B}{E1}{E2} tm-geqv B E1 E2 -> type. %mode exfalso-tm-eqv +Dn +Db +De1 +De2 -Deq. %worlds (tm-block) (exfalso-tm-eqv _ _ _ _ _). %total {} (exfalso-tm-eqv _ _ _ _ _). tm-eqv-congr : tm-geqv B E1 E2 -> {E} tm-geqv B (E E1) (E E2) -> type. tm-eqv-congr/base : tm-eqv-congr EQ ([x] x) EQ. tm-eqv-congr/const : tm-eqv-congr _ ([x] E) tm-eqv/refl. tm-eqv-congr/app : tm-eqv-congr EQ ([x] E1 x app E2 x) (tm-eqv/congr-app EQ1 EQ2) <- tm-eqv-congr EQ E2 EQ2 <- tm-eqv-congr EQ E1 EQ1. tm-eqv-congr/dol : tm-eqv-congr EQ ([x] E1 x dol E2 x) (tm-eqv/congr-dol EQ1 EQ2) <- tm-eqv-congr EQ E2 EQ2 <- tm-eqv-congr EQ E1 EQ1. tm-eqv-congr/abs : tm-eqv-congr EQ ([x] abs [y] E y x) (tm-eqv/congr-abs EQ') <- ({x} tm-eqv-congr EQ (E x) (EQ' x)). tm-eqv-congr/sft : tm-eqv-congr EQ ([x] sft [y] E y x) (tm-eqv/congr-sft EQ') <- ({x} tm-eqv-congr EQ (E x) (EQ' x)). %mode tm-eqv-congr +De1 +Dc -De2. %worlds (tm-block) (tm-eqv-congr _ _ _). %total A (tm-eqv-congr _ A _). tm-eqv-respects-id : tm-geqv B E1 E2 -> id-tm E1 E1' -> id-tm E2 E2' -> tm-geqv B E1' E2' -> type. tm-eqv-respects-id/- : tm-eqv-respects-id ST id-tm/refl id-tm/refl ST. %mode tm-eqv-respects-id +Ds1 +Di1 +Di2 -Ds2. %worlds (tm-block) (tm-eqv-respects-id _ _ _ _). %total {} (tm-eqv-respects-id _ _ _ _). %reduces X = X' (tm-eqv-respects-id X _ _ X'). tm-eqv-var-respects-id : ({x:tm} tm-geqv B (E1 x) (E2 x)) -> ({x} id-tm (E1 x) (E1' x)) -> ({x} id-tm (E2 x) (E2' x)) -> ({x:tm} tm-geqv B (E1' x) (E2' x)) -> type. tm-eqv-var-respects-id/- : tm-eqv-var-respects-id ST ([x] id-tm/refl) ([x] id-tm/refl) ST. %mode tm-eqv-var-respects-id +Ds1 +Di1 +Di2 -Ds2. %worlds (tm-block) (tm-eqv-var-respects-id _ _ _ _). %total {} (tm-eqv-var-respects-id _ _ _ _). %reduces X = X' (tm-eqv-var-respects-id X _ _ X'). tm-eqv-preserv-tag : classify E1 T -> tm-eqv E1 E2 -> classify E2 T' -> type. tm-eqv-preserv-tag-rtl : classify E1 T -> tm-eqv E2 E1 -> classify E2 T' -> type. tm-eqv-preserv-tag/abs : tm-eqv-preserv-tag classify/abs _ classify/abs. tm-eqv-preserv-tag/app : tm-eqv-preserv-tag classify/app _ classify/app. tm-eqv-preserv-tag/sft : tm-eqv-preserv-tag classify/sft _ classify/sft. tm-eqv-preserv-tag/dol : tm-eqv-preserv-tag classify/dol _ classify/dol. tm-eqv-preserv-tag/var : tm-eqv-preserv-tag (classify/var V) _ (classify/var V). tm-eqv-preserv-tag/sym : tm-eqv-preserv-tag C (tm-eqv/sym EQ) C' <- tm-eqv-preserv-tag-rtl C EQ C'. tm-eqv-preserv-tag/trans : tm-eqv-preserv-tag C (tm-eqv/trans EQ1 EQ2) C'' <- tm-eqv-preserv-tag C EQ1 C' <- tm-eqv-preserv-tag C' EQ2 C''. tm-eqv-preserv-tag-rtl/abs : tm-eqv-preserv-tag-rtl classify/abs _ classify/abs. tm-eqv-preserv-tag-rtl/app : tm-eqv-preserv-tag-rtl classify/app _ classify/app. tm-eqv-preserv-tag-rtl/sft : tm-eqv-preserv-tag-rtl classify/sft _ classify/sft. tm-eqv-preserv-tag-rtl/dol : tm-eqv-preserv-tag-rtl classify/dol _ classify/dol. tm-eqv-preserv-tag-rtl/var : tm-eqv-preserv-tag-rtl (classify/var V) _ (classify/var V). tm-eqv-preserv-tag-rtl/sym : tm-eqv-preserv-tag-rtl C (tm-eqv/sym EQ) C' <- tm-eqv-preserv-tag C EQ C'. tm-eqv-preserv-tag-rtl/trans : tm-eqv-preserv-tag-rtl C (tm-eqv/trans EQ1 EQ2) C'' <- tm-eqv-preserv-tag-rtl C EQ2 C' <- tm-eqv-preserv-tag-rtl C' EQ1 C''. %mode (tm-eqv-preserv-tag +Dc +Deq -Dc') (tm-eqv-preserv-tag-rtl +Dc +Deq -Dc'). %worlds (classify-block) (tm-eqv-preserv-tag _ _ _) (tm-eqv-preserv-tag-rtl _ _ _). %total (A B) (tm-eqv-preserv-tag _ A _) (tm-eqv-preserv-tag-rtl _ B _). tm-eqv-destr-abs : tm-geqv B (abs E) E' -> ({x} tm-geqv B (E x) (E'' x)) -> id-tm E' (abs E'') -> type. tm-eqv-destr-abs-rtl : tm-geqv B E' (abs E) -> ({x} tm-geqv B (E'' x) (E x)) -> id-tm E' (abs E'') -> type. tm-eqv-destr-abs/abs : tm-eqv-destr-abs (tm-eqv/congr-abs EQV) EQV id-tm/refl. tm-eqv-destr-abs/refl : tm-eqv-destr-abs tm-eqv/refl ([x] tm-eqv/refl) id-tm/refl. tm-eqv-destr-abs/sym : tm-eqv-destr-abs (tm-eqv/sym EQ) ([x] tm-eqv/sym (EQ' x)) ID <- tm-eqv-destr-abs-rtl EQ EQ' ID. tm-eqv-destr-abs/trans : tm-eqv-destr-abs (tm-eqv/trans EQ1 EQ2) ([x] tm-eqv/trans (EQ1' x) (EQ2' x)) ID' <- tm-eqv-destr-abs EQ1 EQ1' ID <- tm-eqv-respects-id EQ2 ID id-tm/refl EQ2x <- tm-eqv-destr-abs EQ2x EQ2' ID'. tm-eqv-destr-abs-rtl/abs : tm-eqv-destr-abs-rtl (tm-eqv/congr-abs EQV) EQV id-tm/refl. tm-eqv-destr-abs-rtl/refl : tm-eqv-destr-abs-rtl tm-eqv/refl ([x] tm-eqv/refl) id-tm/refl. tm-eqv-destr-abs-rtl/sym : tm-eqv-destr-abs-rtl (tm-eqv/sym EQ) ([x] tm-eqv/sym (EQ' x)) ID <- tm-eqv-destr-abs EQ EQ' ID. tm-eqv-destr-abs-rtl/trans : tm-eqv-destr-abs-rtl (tm-eqv/trans EQ1 EQ2) ([x] tm-eqv/trans (EQ1' x) (EQ2' x)) ID' <- tm-eqv-destr-abs-rtl EQ2 EQ2' ID <- tm-eqv-respects-id EQ1 id-tm/refl ID EQ1x <- tm-eqv-destr-abs-rtl EQ1x EQ1' ID'. %mode (tm-eqv-destr-abs +Dt -Dt' -Did) (tm-eqv-destr-abs-rtl +Dt -Dt' -Did). %worlds (tm-block) (tm-eqv-destr-abs _ _ _) (tm-eqv-destr-abs-rtl _ _ _). %total (A B) (tm-eqv-destr-abs A _ _) (tm-eqv-destr-abs-rtl B _ _). steps-inv-congr-ectx-inv : steps-inv E1 E2 -> ectx-inv-to-tm _ E -> steps-inv (E E1) (E E2) -> type. steps-inv-congr-ectx-inv/z : steps-inv-congr-ectx-inv stiz _ stiz. steps-inv-congr-ectx-inv/s : steps-inv-congr-ectx-inv (step-inv/ec ECIE' RED stis STS) ECIE (step-inv/ec ECIE'' RED stis STS') <- ectx-inv-to-tm-append ECIE ECIE' _ ECIE'' <- steps-inv-congr-ectx-inv STS ECIE STS'. %mode steps-inv-congr-ectx-inv +Ds +De -Ds'. %worlds (tm-block) (steps-inv-congr-ectx-inv _ _ _). %total A (steps-inv-congr-ectx-inv A _ _). exfalso-steps-inv : null -> {E1}{E2} steps-inv E1 E2 -> type. %mode exfalso-steps-inv +Dn +De1 +De2 -Ds. %worlds (tm-block) (exfalso-steps-inv _ _ _ _). %total {} (exfalso-steps-inv _ _ _ _). steps-eqv : tm -> tm -> type. stez : tm-eqv E1 E2 -> steps-eqv E1 E2. stezz : steps-eqv E E = stez tm-eqv/refl. stes : step E E' -> steps-eqv E' E'' -> steps-eqv E E''. %infix right 25 stes. stee : tm-eqv E E' -> steps-eqv E' E'' -> steps-eqv E E''. %infix right 25 stee. steps-eqv-respects-id : steps-eqv E1 E2 -> id-tm E1 E1' -> id-tm E2 E2' -> steps-eqv E1' E2' -> type. steps-eqv-respects-id/- : steps-eqv-respects-id ST id-tm/refl id-tm/refl ST. %mode steps-eqv-respects-id +Ds1 +Di1 +Di2 -Ds2. %worlds (tm-block) (steps-eqv-respects-id _ _ _ _). %total {} (steps-eqv-respects-id _ _ _ _). reduction-respects-id : reduction E1 E2 -> id-tm E1 E1' -> id-tm E2 E2' -> reduction E1' E2' -> type. reduction-respects-id/- : reduction-respects-id ST id-tm/refl id-tm/refl ST. %mode reduction-respects-id +Ds +Di1 +Di2 -Ds'. %worlds (tm-block) (reduction-respects-id _ _ _ _). %total {} (reduction-respects-id _ _ _ _). step-respects-id : step E1 E2 -> id-tm E1 E1' -> id-tm E2 E2' -> step E1' E2' -> type. step-respects-id/- : step-respects-id ST id-tm/refl id-tm/refl ST. %mode step-respects-id +Ds +Di1 +Di2 -Ds'. %worlds (tm-block) (step-respects-id _ _ _ _). %total {} (step-respects-id _ _ _ _). steps-respects-id : steps E1 E2 -> id-tm E1 E1' -> id-tm E2 E2' -> steps E1' E2' -> type. steps-respects-id/- : steps-respects-id ST id-tm/refl id-tm/refl ST. %mode steps-respects-id +Ds +Di1 +Di2 -Ds'. %worlds (tm-block) (steps-respects-id _ _ _ _). %total {} (steps-respects-id _ _ _ _). am-step-value : {V:amvalue E}{C}{EC} am-step (am/e E (C ac EC)) (am/a E V (C ac EC)) -> type. am-step-value/abs : am-step-value amvalue/abs _ _ am-step/e-abs. am-step-value/ctx : am-step-value amvalue/ctx _ _ am-step/e-ctx. %mode am-step-value +Dv +Dc +Dec -Ds. %worlds (amtm-block) (am-step-value _ _ _ _). %total {} (am-step-value _ _ _ _). am-good-step : am-good A1 -> am-step A1 A2 -> am-good-final-stuck A2 -> type. am-good-step/e-abs : am-good-step (am-good/e G) am-step/e-abs (am-good-final-stuck/good (am-good/a G)). am-good-step/e-ctx : am-good-step (am-good/e G) am-step/e-ctx (am-good-final-stuck/good (am-good/a G)). am-good-step/e-app-b : am-good-step (am-good/e (amectx-good/b G)) am-step/e-app (am-good-final-stuck/good (am-good/e (amectx-good/b (amctx-good/appl G)))). am-good-step/e-dol-b : am-good-step (am-good/e (amectx-good/b G)) am-step/e-dol (am-good-final-stuck/good (am-good/e (amectx-good/b (amctx-good/dol G)))). am-good-step/e-app-c : am-good-step (am-good/e (amectx-good/c G)) am-step/e-app (am-good-final-stuck/good (am-good/e (amectx-good/c G))). am-good-step/e-dol-c : am-good-step (am-good/e (amectx-good/c G)) am-step/e-dol (am-good-final-stuck/good (am-good/e (amectx-good/c G))). am-good-step/e-sft-c : am-good-step (am-good/e (amectx-good/c G)) am-step/e-sft (am-good-final-stuck/good (am-good/e G)). am-good-step/a-empty-b : am-good-step (am-good/a (amectx-good/b amctx-good/empty) : am-good (am/a _ AV _)) (am-step/a-empty) (am-good-final-stuck/final (am-final/e AV)). am-good-step/a-empty-c : am-good-step (am-good/a (amectx-good/c G)) am-step/a-empty (am-good-final-stuck/good (am-good/e G)). am-good-step/a-appl-b : am-good-step (am-good/a (amectx-good/b (amctx-good/appl G))) am-step/a-appl (am-good-final-stuck/good (am-good/e (amectx-good/b (amctx-good/appr G)))). am-good-step/a-appl-c : am-good-step (am-good/a (amectx-good/c B)) am-step/a-appl (am-good-final-stuck/good (am-good/e (amectx-good/c B))). am-good-step/a-dol-abs-b : am-good-step (am-good/a (amectx-good/b (amctx-good/dol G))) am-step/a-dol-abs (am-good-final-stuck/good (am-good/e (amectx-good/c (amectx-good/b G)))). am-good-step/a-dol-ctx-b : am-good-step (am-good/a (amectx-good/b (amctx-good/dol G))) am-step/a-dol-ctx (am-good-final-stuck/good (am-good/e (amectx-good/c (amectx-good/b G)))). am-good-step/a-dol-abs-c : am-good-step (am-good/a (amectx-good/c G)) am-step/a-dol-abs (am-good-final-stuck/good (am-good/e (amectx-good/c (amectx-good/c G)))). am-good-step/a-dol-ctx-c : am-good-step (am-good/a (amectx-good/c G)) am-step/a-dol-ctx (am-good-final-stuck/good (am-good/e (amectx-good/c (amectx-good/c G)))). am-good-step/a-appr-abs-b : am-good-step (am-good/a (amectx-good/b (amctx-good/appr G))) am-step/a-appr-abs (am-good-final-stuck/good (am-good/e (amectx-good/b G))). am-good-step/a-appr-ctx-b : am-good-step (am-good/a (amectx-good/b (amctx-good/appr G))) am-step/a-appr-ctx (am-good-final-stuck/good (am-good/a (amectx-good/c (amectx-good/b G)))). am-good-step/a-appr-abs-c : am-good-step (am-good/a (amectx-good/c G)) am-step/a-appr-abs (am-good-final-stuck/good (am-good/e (amectx-good/c G))). am-good-step/a-appr-ctx-c : am-good-step (am-good/a (amectx-good/c G)) am-step/a-appr-ctx (am-good-final-stuck/good (am-good/a (amectx-good/c (amectx-good/c G)))). %mode am-good-step +Dg +Ds -Df. %worlds () (am-good-step _ _ _). %total {} (am-good-step _ _ _). am-step-to-steps-eqv : am-step A1 A2 -> am-to-tm A1 E1 -> am-to-tm A2 E2 -> steps-eqv E1 E2 -> type. am-step-to-steps-eqv/e-abs : am-step-to-steps-eqv am-step/e-abs (am-to-tm/e ATT AECT) (am-to-tm/a ATT AECT) stezz. am-step-to-steps-eqv/e-ctx : am-step-to-steps-eqv am-step/e-ctx (am-to-tm/e ATT AECT) (am-to-tm/a ATT AECT) stezz. am-step-to-steps-eqv/e-app : am-step-to-steps-eqv am-step/e-app (am-to-tm/e (amtm-to-tm/app AE1 AE2) (amectx-to-tm/cons ACT AECT)) (am-to-tm/e AE1 (amectx-to-tm/cons (amctx-to-tm/appl ACT AE2) AECT)) stezz. am-step-to-steps-eqv/e-dol : am-step-to-steps-eqv am-step/e-dol (am-to-tm/e (amtm-to-tm/dol AE1 AE2) (amectx-to-tm/cons ACT AECT)) (am-to-tm/e AE1 (amectx-to-tm/cons (amctx-to-tm/dol ACT AE2) AECT)) stezz. am-step-to-steps-eqv/a-appl : am-step-to-steps-eqv am-step/a-appl (am-to-tm/a ATT' (amectx-to-tm/cons (amctx-to-tm/appl ACT ATT) AECT)) (am-to-tm/e ATT (amectx-to-tm/cons (amctx-to-tm/appr ATT' ACT) AECT)) stezz. am-step-to-steps-eqv/a-appr-ctx : am-step-to-steps-eqv am-step/a-appr-ctx (am-to-tm/a ATT (amectx-to-tm/cons (amctx-to-tm/appr (amtm-to-tm/ctx ACT1) ACT2) AECT) : am-to-tm (am/a _ AV _) _) (am-to-tm/a ATT (amectx-to-tm/cons ACT1 (amectx-to-tm/cons ACT2 AECT))) (ST stes stezz) <- amvalue-to-value AV ATT V <- amectx-to-tm-to-ectx-to-tm AECT _ (ECT : ectx-to-tm _ ECTE) <- amctx-to-tm-to-ctx-to-tm (ACT2 : amctx-to-tm _ ACT2E) _ (CT : ctx-to-tm _ CTE) ID <- ({x} id-tm-congr (ID x) ECTE (ID' x)) <- step-respects-id (step/ec (ectx-to-tm/cons ECT CT : ectx-to-tm (ectx/cons _ value/abs _ _) _) (reduction/abs V)) (ID' _) (ID' _) ST. am-step-to-steps-eqv/a-appr-abs : am-step-to-steps-eqv am-step/a-appr-abs (am-to-tm/a ATT2 (amectx-to-tm/cons(amctx-to-tm/appr (amtm-to-tm/abs ATT1) ACT) AECT) : am-to-tm (am/a _ AV _) _) (am-to-tm/e (ATT1 _ _ ATT2) (amectx-to-tm/cons ACT AECT)) (ST stes stezz) <- amvalue-to-value AV ATT2 V <- amectx-to-tm-to-ectx-to-tm AECT _ (ECT : ectx-to-tm _ ECTE) <- amctx-to-tm-to-ctx-to-tm (ACT : amctx-to-tm _ ACTE) _ (CT : ctx-to-tm _ CTE) ID <- ({x} id-tm-congr (ID x) ECTE (ID' x)) <- step-respects-id (step/ec (ectx-to-tm/cons ECT CT : ectx-to-tm (ectx/cons _ value/abs _ _) _) (reduction/abs V)) (ID' _) (ID' _) ST. am-step-to-steps-eqv/a-empty : am-step-to-steps-eqv am-step/a-empty (am-to-tm/a ATT2 (amectx-to-tm/cons (amctx-to-tm/empty ATT1) AECT) : am-to-tm (am/a _ AV _) _) (am-to-tm/e (ATT1 _ _ ATT2) AECT) (step/ec ECT (reduction/dol value/abs V) stes step/ec ECT (reduction/abs V) stes stezz) <- amvalue-to-value AV ATT2 V <- amectx-to-tm-to-ectx-to-tm AECT _ (ECT : ectx-to-tm _ ECTE). am-step-to-steps-eqv/a-dol-abs : am-step-to-steps-eqv am-step/a-dol-abs (am-to-tm/a (amtm-to-tm/abs ATT1) (amectx-to-tm/cons (amctx-to-tm/dol ACT ATT) AECT)) (am-to-tm/e ATT (amectx-to-tm/cons (amctx-to-tm/empty ATT1) (amectx-to-tm/cons ACT AECT))) stezz. am-step-to-steps-eqv/a-dol-ctx : am-step-to-steps-eqv am-step/a-dol-ctx (am-to-tm/a (amtm-to-tm/ctx ACT1) (amectx-to-tm/cons (amctx-to-tm/dol ACT ATT) AECT)) (am-to-tm/e ATT (amectx-to-tm/cons (ACT1 : amctx-to-tm _ ACTE1) (amectx-to-tm/cons (ACT : amctx-to-tm _ ACTE) (AECT : amectx-to-tm _ AECTE)))) (stez EQV) <- amctx-to-tm-to-ctx-to-tm ACT1 _ CT1 ID <- id-tm-congr-abs ID ID'' <- id-tm-congr-dol ID'' id-tm/refl ID' <- tm-eqv-respects-id (tm-eqv/sym (tm-eqv/dol-ctx value/abs CT1)) ID' (ID _) EQV'' <- tm-eqv-congr EQV'' ACTE EQV' <- tm-eqv-congr EQV' AECTE EQV. am-step-to-steps-eqv/e-sft : am-step-to-steps-eqv am-step/e-sft (am-to-tm/e (amtm-to-tm/sft (ATT : {ax}{x} amtm-to-tm ax x -> amtm-to-tm _ (ATTE x))) (amectx-to-tm/cons ACT AECT)) (am-to-tm/e (ATT _ _ (amtm-to-tm/ctx ACT)) AECT) (step/ec ECT RED stes stezz) <- amectx-to-tm-to-ectx-to-tm AECT _ (ECT : ectx-to-tm _ ECTE) <- amctx-to-tm-to-ctx-to-tm (ACT : amctx-to-tm _ ACTE) (_ : amctx-to-ctx _ CCE _) (CT : ctx-to-tm _ CTE) ID <- id-tm-congr-abs ID ID'' <- id-tm-congr ID'' ATTE ID' <- reduction-respects-id (reduction/sft ATTE value/abs CT) (ID _) ID' RED. %mode am-step-to-steps-eqv +Ds +Dt1 -Dt2 -Ds'. %worlds (amtm-to-tm-block) (am-step-to-steps-eqv _ _ _ _). %total A (am-step-to-steps-eqv A _ _ _). htm : type. %name htm HE x. habs : (htm -> htm) -> htm. happ : htm -> htm -> htm. %infix left 30 happ. hrst : nat -> htm -> htm. hsft : nat -> (htm -> htm) -> htm. %block htm-block : block {v:htm}. ltm : type. %name ltm LE x. labs : (ltm -> ltm) -> ltm. lapp : ltm -> ltm -> ltm. %infix left 30 lapp. %block ltm-block : block {x:ltm}. %worlds (ltm-block) (ltm). ltid : ltm = labs [x] labs [k] k lapp x. ltabs : (ltm -> ltm) -> ltm = [e] labs [k] k lapp labs e. ltapp : ltm -> ltm -> ltm = [e1][e2] labs [k] e1 lapp (labs [f] e2 lapp (labs [v] f lapp v lapp k)). %infix left 30 ltapp. ltsft : (ltm -> ltm) -> ltm = labs. ltdol : ltm -> ltm -> ltm = [e1][e2] labs [k] e1 lapp (labs [f] e2 lapp f lapp k). %infix right 20 ltdol. ltrst : ltm -> ltm = [x] (labs [k] k lapp ltid) ltdol x. id-ltm : ltm -> ltm -> type. id-ltm/refl : id-ltm E E. %worlds (ltm-block) (id-ltm _ _). leq : ltm -> ltm -> type. %name leq LEQ. leq/beta* : id-ltm (E1 E2) E' -> leq (labs E1 lapp E2) E'. leq/beta : leq (labs E1 lapp E2) (E1 E2) = leq/beta* id-ltm/refl. leq/eta : leq (labs [x] E lapp x) E. leq/refl : leq E E. leq/sym : leq E1 E2 -> leq E2 E1. leq/trans : leq E1 E2 -> leq E2 E3 -> leq E1 E3. leq/congr-labs : ({x} leq (E1 x) (E2 x)) -> leq (labs E1) (labs E2). leq/congr-lapp : leq E1A E1B -> leq E2A E2B -> leq (E1A lapp E2A) (E1B lapp E2B). %worlds (ltm-block) (leq _ _). leq/congr-tapp : leq LE1 LE1' -> leq LE2 LE2' -> leq (LE1 ltapp LE2) (LE1' ltapp LE2') = [eq1][eq2] leq/congr-labs ([k] leq/congr-lapp eq1 (leq/congr-labs [f] leq/congr-lapp eq2 leq/refl)). leq/congr-tdol : leq LE1 LE1' -> leq LE2 LE2' -> leq (LE1 ltdol LE2) (LE1' ltdol LE2') = [eq1][eq2] leq/congr-labs ([k] leq/congr-lapp eq1 (leq/congr-labs [f] leq/congr-lapp (leq/congr-lapp eq2 leq/refl) leq/refl)). leq/congr-tabs : ({x} leq (LE1 x) (LE2 x)) -> leq (ltabs LE1) (ltabs LE2) = [eq] leq/congr-labs [k] leq/congr-lapp leq/refl (leq/congr-labs eq). cps : tm -> ltm -> type. cps/app : cps E1 LE1 -> cps E2 LE2 -> cps (E1 app E2) (LE1 ltapp LE2). cps/dol : cps E1 LE1 -> cps E2 LE2 -> cps (E1 dol E2) (LE1 ltdol LE2). cps/abs : ({x}{cx} cps x (labs [k] k lapp cx) -> cps (E x) (LE cx)) -> cps (abs E) (ltabs LE). cps/sft : ({x}{cx} cps x (labs [k] k lapp cx) -> cps (E x) (LE cx)) -> cps (sft E) (ltsft LE). %block cps-block : block {x:tm} {cx:ltm} {_:cps x (labs [k] k lapp cx)}. %mode cps +De1 -De2. %worlds (cps-block) (cps _ _). %total A (cps A _). %unique cps +De1 -1De2. cps/id : cps (abs [x] x) (labs [k] k lapp ltid) = cps/abs [x][lx][cc] cc. cps/rst : cps E LE -> cps (rst E) (labs [k] (labs [k] k lapp ltid) lapp (labs [v] LE lapp v lapp k)) = [cc] cps/dol cps/id cc. leq/dol-val : leq ((labs [k] k lapp LE1) ltdol LE2) (LE2 lapp LE1) = leq/trans (leq/congr-labs [k] leq/trans leq/beta leq/beta) leq/eta. leq/trst : leq (ltrst LE) (LE lapp ltid) = leq/dol-val. cps-gen : {E} cps E CE -> type. cps-gen/app : cps-gen (E1 app E2) (cps/app CE1 CE2) <- cps-gen E1 CE1 <- cps-gen E2 CE2. cps-gen/dol : cps-gen (E1 dol E2) (cps/dol CE1 CE2) <- cps-gen E1 CE1 <- cps-gen E2 CE2. cps-gen/abs : cps-gen (abs E) (cps/abs CE) <- ({x}{cx}{cg} cps-gen x cg -> cps-gen (E x) (CE x cx cg)). cps-gen/sft : cps-gen (sft E) (cps/sft CE) <- ({x}{cx}{cg} cps-gen x cg -> cps-gen (E x) (CE x cx cg)). %block cps-gen-block : block {x:tm}{cx:ltm}{cg:cps x (labs [k] k lapp cx)}{_:cps-gen x cg}. %mode cps-gen +De -Dce. %worlds (cps-gen-block) (cps-gen _ _). %total A (cps-gen A _). %unique cps-gen +De -1Dce. cps-gen-value : value E -> cps E (labs [k] k lapp V) -> type. cps-gen-value/abs : cps-gen-value value/abs (cps/abs CE) <- ({x}{cx}{cg} cps-gen x cg -> cps-gen (E x) (CE x cx cg)). %block cps-gen-value-block : block {x:tm}{v:value x}{cx:ltm}{cg:cps x (labs [k] k lapp cx)}{_:cps-gen x cg}{_:cps-gen-value v cg}. %mode (cps-gen-value +Dval -Dc). %worlds (cps-gen-value-block) (cps-gen-value _ _). %total {} (cps-gen-value _ _). %unique (cps-gen-value +Dval -1Dc). n-lapp-cps-id : nat -> (ltm -> ltm) -> type. n-lapp-cps-id/z : n-lapp-cps-id z ([x] x). n-lapp-cps-id/s : n-lapp-cps-id (s N) ([x] E x lapp ltid) <- n-lapp-cps-id N E. %mode n-lapp-cps-id +Dn -Dt'. %worlds (ltm-block) (n-lapp-cps-id _ _). %total A (n-lapp-cps-id A _). %unique n-lapp-cps-id +Dn -1Dt'. n-labs-lapp-hrst : nat -> nat -> ltm -> (ltm -> ltm) -> ltm -> type. n-labs-lapp-hrst/z : n-labs-lapp-hrst z N EX E (EI EX lapp (labs [v] E (ltid lapp v))) <- n-lapp-cps-id N EI. n-labs-lapp-hrst/s : n-labs-lapp-hrst (s N) N' EX E (labs EF) <- ({x} n-labs-lapp-hrst N N' EX ([y] E y lapp x) (EF x)). %mode n-labs-lapp-hrst +Dn +Dn' +Dq +Dq1 -Dt. %worlds (ltm-block) (n-labs-lapp-hrst _ _ _ _ _). %total A (n-labs-lapp-hrst A _ _ _ _). %unique n-labs-lapp-hrst +Dn +Dn' +Dq +Dq1 -1Dt. n-labs-lapp-hsft2 : nat -> (ltm -> ltm) -> (ltm -> ltm) -> (ltm -> ltm) -> type. n-labs-lapp-hsft2/z : n-labs-lapp-hsft2 z EE E ([v] EE (ltid lapp v) lapp (labs [w] E (ltid lapp w))). n-labs-lapp-hsft2/s : n-labs-lapp-hsft2 (s N) EE E ([v] labs (EF v)) <- ({x} n-labs-lapp-hsft2 N EE ([y] E y lapp x) ([v] EF v x)). %mode n-labs-lapp-hsft2 +Dn +Dq +Dq1 -Dt. %worlds (ltm-block) (n-labs-lapp-hsft2 _ _ _ _). %total A (n-labs-lapp-hsft2 A _ _ _). %unique n-labs-lapp-hsft2 +Dn +Dq +Dq1 -1Dt. n-labs-lapp-hsft1 : nat -> nat -> (ltm -> ltm) -> (ltm -> ltm) -> ltm -> type. n-labs-lapp-hsft1/z : n-labs-lapp-hsft1 z N EE E (EI (EE (labs EX))) <- n-lapp-cps-id N EI <- n-labs-lapp-hsft2 N E ([x] x) EX. n-labs-lapp-hsft1/s : n-labs-lapp-hsft1 (s N) N' EE E (labs EF) <- ({x} n-labs-lapp-hsft1 N N' EE ([y] E y lapp x) (EF x)). %mode n-labs-lapp-hsft1 +Dn +Dn' +Dq +Dq1 -Dt. %worlds (ltm-block) (n-labs-lapp-hsft1 _ _ _ _ _). %total A (n-labs-lapp-hsft1 A _ _ _ _). %unique n-labs-lapp-hsft1 +Dn +Dn' +Dq +Dq1 -1Dt. n-labs-lapp : nat -> (((ltm -> ltm) -> ltm) -> ltm) -> type. n-labs-lapp/z : n-labs-lapp z ([e] e ([x] x)). n-labs-lapp/s : n-labs-lapp (s N) ([e] labs [k] LEP ([lep] e ([x] lep (x lapp k)))) <- n-labs-lapp N LEP. %mode n-labs-lapp +Dn -Dt. %worlds (ltm-block) (n-labs-lapp _ _). %total A (n-labs-lapp A _). %unique n-labs-lapp +Dn -1Dt. n-rst : nat -> (tm -> tm) -> type. n-rst/z : n-rst z ([x] x). n-rst/s : n-rst N E -> n-rst (s N) ([x] rst (E x)). %mode n-rst +Dn -Dt. %worlds (tm-block) (n-rst _ _). %total A (n-rst A _). %unique n-rst +Dn -1Dt. n-arst : nat -> (amtm -> amtm) -> type. n-arst/z : n-arst z ([x] x). n-arst/s : n-arst N E -> n-arst (s N) ([x] arst (E x)). %mode n-arst +Dn -Dt. %worlds (amtm-block) (n-arst _ _). %total A (n-arst A _). %unique n-arst +Dn -1Dt. n-sft-dol-hsft2 : nat -> (tm -> tm) -> (tm -> tm) -> (tm -> tm) -> type. n-sft-dol-hsft2/z : n-sft-dol-hsft2 z EE E ([v] (abs [w] E w) dol EE v). n-sft-dol-hsft2/s : n-sft-dol-hsft2 (s N) EE E ([x] sft ([y] EF y x)) <- ({x} n-sft-dol-hsft2 N EE ([y] x dol E y) (EF x)). %mode n-sft-dol-hsft2 +Dn +Dq +Dq1 -Dt. %worlds (tm-block) (n-sft-dol-hsft2 _ _ _ _). %total A (n-sft-dol-hsft2 A _ _ _). %unique n-sft-dol-hsft2 +Dn +Dq +Dq1 -1Dt. n-sft-dol-hsft1 : nat -> nat -> (tm -> tm) -> (tm -> tm) -> tm -> type. n-sft-dol-hsft1/z : n-sft-dol-hsft1 z N EE E (EI (EE (abs EX))) <- n-rst N EI <- n-sft-dol-hsft2 N E ([x] x) EX. n-sft-dol-hsft1/s : n-sft-dol-hsft1 (s N) N' EE E (sft EF) <- ({x} n-sft-dol-hsft1 N N' EE ([y] x dol E y) (EF x)). %mode n-sft-dol-hsft1 +Dn +Dn' +Dq +Dq1 -Dt. %worlds (tm-block) (n-sft-dol-hsft1 _ _ _ _ _). %total A (n-sft-dol-hsft1 A _ _ _ _). %unique n-sft-dol-hsft1 +Dn +Dn' +Dq +Dq1 -1Dt. n-sft-dol-hrst : nat -> nat -> tm -> (tm -> tm) -> tm -> type. n-sft-dol-hrst/z : n-sft-dol-hrst z N EX E (abs E dol EI EX) <- n-rst N EI. n-sft-dol-hrst/s : n-sft-dol-hrst (s N) N' EX E (sft EF) <- ({x} n-sft-dol-hrst N N' EX ([y] x dol E y) (EF x)). %mode n-sft-dol-hrst +Dn +Dn' +Dq +Dq1 -Dt. %worlds (tm-block) (n-sft-dol-hrst _ _ _ _ _). %total A (n-sft-dol-hrst A _ _ _ _). %unique n-sft-dol-hrst +Dn +Dn' +Dq +Dq1 -1Dt. n-sft-dol : nat -> (((tm -> tm) -> tm) -> tm) -> type. n-sft-dol/z : n-sft-dol z ([e] e ([x] x)). n-sft-dol/s : n-sft-dol (s N) ([e] sft [k] LEP ([lep] e ([x] lep (k dol x)))) <- n-sft-dol N LEP. %mode n-sft-dol +Dn -Dt. %worlds (tm-block) (n-sft-dol _ _). %total A (n-sft-dol A _). %unique n-sft-dol +Dn -1Dt. hcps : htm -> ltm -> type. hcps/happ : hcps E1 LE1 -> hcps E2 LE2 -> hcps (E1 happ E2) (labs [k] LE1 lapp (labs [f] LE2 lapp (labs [v] f lapp v lapp k))). hcps/habs : ({x}{cx} hcps x (labs [k] k lapp cx) -> hcps (E x) (LE cx)) -> hcps (habs E) (labs [k] (k lapp labs LE)). hcps/hrst : n-labs-lapp-hrst (s N) N LE ([x] x) LEP -> hcps E LE -> hcps (hrst N E) LEP. hcps/hsft : n-labs-lapp-hsft1 N (s N) LE ([x] x) LEP -> ({x}{lx} hcps x (labs [k] k lapp lx) -> hcps (E x) (LE lx)) -> hcps (hsft N E) LEP. %block hcps-block : block {x:htm} {cx:ltm} {_:hcps x (labs [k] k lapp cx)}. %mode hcps +De1 -De2. %worlds (hcps-block) (hcps _ _). %total A (hcps A _). %unique hcps +De1 -1De2. htm-to-tm : htm -> tm -> type. htm-to-tm/happ : htm-to-tm HE1 E1 -> htm-to-tm HE2 E2 -> htm-to-tm (HE1 happ HE2) (E1 app E2). htm-to-tm/habs : ({x}{hx} htm-to-tm hx x -> htm-to-tm (HE hx) (E x)) -> htm-to-tm (habs HE) (abs E). htm-to-tm/hrst : n-sft-dol-hrst (s N) N E ([x] x) ET -> htm-to-tm HE E -> htm-to-tm (hrst N HE) ET. htm-to-tm/hsft : n-sft-dol-hsft1 N (s N) E ([x] x) ET -> ({x}{hx} htm-to-tm hx x -> htm-to-tm (HE hx) (E x)) -> htm-to-tm (hsft N HE) ET. %block htm-to-tm-block : block {x:tm}{hx:htm}{_:htm-to-tm hx x}. %mode htm-to-tm +Dht -Dt. %worlds (htm-to-tm-block) (htm-to-tm _ _). %total A (htm-to-tm A _). %unique htm-to-tm +Dht -1Dt. n-rst-cps : {N} n-rst N E -> ({x}{lx} cps x lx -> cps (E x) (LE lx)) -> n-lapp-cps-id N LE' -> ({lx} leq (LE lx) (LE' lx)) -> type. n-rst-cps/z : n-rst-cps z n-rst/z ([x][lx][cc] cc) n-lapp-cps-id/z ([x] leq/refl). n-rst-cps/s : n-rst-cps (s N) (n-rst/s NR) ([x][lx][cc] cps/rst (CC x lx cc)) (n-lapp-cps-id/s NL) ([x] leq/trans leq/trst (leq/congr-lapp (LEQ x) leq/refl)) <- n-rst-cps N NR CC NL LEQ. %mode n-rst-cps +Dn +Dnr -Dc -Dnl -Did. %worlds (cps-block) (n-rst-cps _ _ _ _ _). %total A (n-rst-cps A _ _ _ _). leq-congr : {C} ({x}{y} leq x y -> leq (C x) (C y)) -> type. leq-congr/base : leq-congr ([x] x) ([x][y][eq] eq). leq-congr/var : leq-congr ([x] X) ([x][y][eq] leq/refl). leq-congr/lapp : leq-congr ([x] LE1 x lapp LE2 x) ([x][y][eq] leq/congr-lapp (LEQ1 x y eq) (LEQ2 x y eq)) <- leq-congr LE1 LEQ1 <- leq-congr LE2 LEQ2. leq-congr/labs : leq-congr ([x] labs [y] LE y x) ([x][y][eq] leq/congr-labs (LEQ' x y eq)) <- ({z} leq-congr (LE z) ([x][y][eq] LEQ' x y eq z)). %mode leq-congr +De -Deq'. %worlds (ltm-block) (leq-congr _ _). %total A (leq-congr A _). htm-to-tm-adeq-rst : n-sft-dol-hrst N M E1 EX E2 -> n-labs-lapp-hrst N M LE1 LEX LE3 -> ({x}{lx} cps x lx -> cps (EX x) (LEX1 lx)) -> ({x} leq (LEX1 x) (LEX x)) -> cps E1 LE1Q -> leq LE1Q LE1 -> cps E2 LE4 -> leq LE3 LE4 -> type. htm-to-tm-adeq-rst/z : htm-to-tm-adeq-rst (n-sft-dol-hrst/z NSD) (n-labs-lapp-hrst/z (NAA : n-lapp-cps-id N1 BLE)) (C1 : {x}{lx} cps x lx -> cps (AE x) (ALE lx)) ZEQ (C2 : cps _ LL) FEQ (cps/dol (cps/abs ([x][x'][c] C1 _ _ c)) (C3 _ _ C2)) (leq/sym (leq/trans leq/dol-val (leq/congr-lapp (leq/trans (XEQ LL) (BEQ _ _ FEQ)) (leq/congr-labs ([x] leq/trans (AEQ _ _ (leq/sym leq/beta)) (ZEQ (ltid lapp x))))))) <- leq-congr ALE AEQ <- n-rst-cps _ NSD C3 NAA XEQ <- leq-congr BLE BEQ. ntm-to-tm-adeq-rst/s : htm-to-tm-adeq-rst (n-sft-dol-hrst/s NSD) (n-labs-lapp-hrst/s NAA) C1 EQQ C2 FEQ (cps/sft C3) (leq/congr-labs EQ1) <- ({x}{lx}{cx:cps x (labs [k] k lapp lx)} htm-to-tm-adeq-rst (NSD x) (NAA lx) ([y][ly][cy] cps/dol cx (C1 y ly cy)) ([x] leq/trans leq/dol-val (leq/congr-lapp (EQQ x) leq/refl)) C2 FEQ (C3 x lx cx) (EQ1 lx)). %mode htm-to-tm-adeq-rst +Dh1 -Dh2 +Dc1 +Dex +Dc3 +De3 -Dc2 -De. %worlds (cps-block) (htm-to-tm-adeq-rst _ _ _ _ _ _ _ _). %total A (htm-to-tm-adeq-rst A _ _ _ _ _ _ _). htm-to-tm-adeq-sft2 : n-sft-dol-hsft2 N E1 E2 ER -> n-labs-lapp-hsft2 N LE1 LE2 LER -> ({x}{lx} cps x lx -> cps (E1 x) (LE1' lx)) -> ({x} leq (LE1' x) (LE1 x)) -> ({x}{lx} cps x lx -> cps (E2 x) (LE2' lx)) -> ({x} leq (LE2' x) (LE2 x)) -> ({x}{lx} cps x (labs [k] k lapp lx) -> cps (ER x) (LER' lx)) -> ({x} leq (LER x) (LER' x)) -> type. htm-to-tm-adeq-sft2/s : htm-to-tm-adeq-sft2 (n-sft-dol-hsft2/s NSD) (n-labs-lapp-hsft2/s NAA) C1 EQ1 C2 EQ2 ([y][ly][cy] cps/sft ([x][lx][cx] C3 x lx cx y ly cy)) ([ly] leq/congr-labs ([lx] EQ3 lx ly)) <- ({x}{lx}{cx:cps x (labs [k] k lapp lx)} htm-to-tm-adeq-sft2 (NSD x) (NAA lx) C1 EQ1 ([y][ly][cy] cps/dol cx (C2 y ly cy)) ([y] leq/trans (leq/congr-tdol leq/refl (EQ2 y)) leq/dol-val) (C3 x lx cx) (EQ3 lx)). htm-to-tm-adeq-sft2/z : htm-to-tm-adeq-sft2 n-sft-dol-hsft2/z n-labs-lapp-hsft2/z C1 (EQ1 : {x} leq (LE1 x) _) C2 (EQ2 : {x} leq (LE2 x) _) ([v][lv][cv] cps/dol (cps/abs [w][lw][cw] C2 _ _ cw) (C1 _ _ cv)) ([v] leq/sym (leq/trans leq/dol-val (leq/congr-lapp (leq/trans (LEQ1 _ _ (leq/sym leq/beta)) (EQ1 (ltid lapp v))) (leq/congr-labs [w] leq/trans (LEQ2 _ _ (leq/sym leq/beta)) (EQ2 (ltid lapp w)))))) <- leq-congr LE1 LEQ1 <- leq-congr LE2 LEQ2. %mode htm-to-tm-adeq-sft2 +Dh1 -Dh2 +Dc1 +Dex +Dc3 +De3 -Dc2 -De. %worlds (cps-block) (htm-to-tm-adeq-sft2 _ _ _ _ _ _ _ _). %total A (htm-to-tm-adeq-sft2 A _ _ _ _ _ _ _). htm-to-tm-adeq-sft1 : n-sft-dol-hsft1 N N' E1 E2 ER -> n-labs-lapp-hsft1 N N' LE1 LE2 LER -> ({x}{lx} cps x (labs [k] k lapp lx) -> cps (E1 x) (LE1' lx)) -> ({x} leq (LE1' x) (LE1 x)) -> ({x}{lx} cps x lx -> cps (E2 x) (LE2' lx)) -> ({x} leq (LE2' x) (LE2 x)) -> cps ER LER' -> leq LER LER' -> type. htm-to-tm-adeq-sft1/s : htm-to-tm-adeq-sft1 (n-sft-dol-hsft1/s NSD) (n-labs-lapp-hsft1/s NAA) C1 EQ1 C2 EQ2 (cps/sft C3) (leq/congr-labs EQ3) <- ({x}{lx}{cx:cps x (labs [k] k lapp lx)} htm-to-tm-adeq-sft1 (NSD x) (NAA lx) C1 EQ1 ([y][ly][cy] cps/dol cx (C2 y ly cy)) ([y] leq/trans (leq/congr-tdol leq/refl (EQ2 y)) leq/dol-val) (C3 x lx cx) (EQ3 lx)). htm-to-tm-adeq-sft1/z : htm-to-tm-adeq-sft1 (n-sft-dol-hsft1/z NSD NR) (n-labs-lapp-hsft1/z NAA NI) (C1 : {x}{lx}{cx} cps (E1 x) _) (EQ1 : {x} leq (LE11 x) (LE12 x)) C2 EQ2 (CY _ _ (C1 _ _ (cps/abs CX))) (leq/trans (leq/sym (EQY _)) (LEQY1 _ _ (leq/sym (leq/trans (EQ1 _) (LEQ12 _ _ (leq/sym (leq/congr-labs EQX))))))) <- htm-to-tm-adeq-sft2 NSD NAA C2 EQ2 ([x][lx][cx] cx) ([x] leq/refl) CX EQX <- n-rst-cps _ NR (CY : {x}{lx}{cx} cps (EY x) _) NI (EQY : {x} leq (LEY1 x) (LEY2 x)) <- leq-congr LEY1 LEQY1 <- leq-congr LE12 LEQ12. %mode htm-to-tm-adeq-sft1 +Dh1 -Dh2 +Dc1 +Dex +Dc3 +De3 -Dc2 -De. %worlds (cps-block) (htm-to-tm-adeq-sft1 _ _ _ _ _ _ _ _). %total A (htm-to-tm-adeq-sft1 A _ _ _ _ _ _ _). htm-to-tm-adeq : {HE} htm-to-tm HE E -> hcps HE LH -> cps E L -> leq LH L -> type. htm-to-tm-adeq/app : htm-to-tm-adeq (HE1 happ HE2) (htm-to-tm/happ HT1 HT2) (hcps/happ HC1 HC2) (cps/app CC1 CC2) (leq/congr-tapp EQ1 EQ2) <- htm-to-tm-adeq HE1 HT1 HC1 CC1 EQ1 <- htm-to-tm-adeq HE2 HT2 HC2 CC2 EQ2. htm-to-tm-adeq/abs : htm-to-tm-adeq (habs HE) (htm-to-tm/habs HT) (hcps/habs HC) (cps/abs CC) (leq/congr-tabs EQ) <- ({x}{hx}{lx}{ht}{hc}{cc} htm-to-tm-adeq hx ht hc cc leq/refl -> htm-to-tm-adeq (HE hx) (HT x hx ht) (HC hx lx hc) (CC x lx cc) (EQ lx)). htm-to-tm-adeq/rst : htm-to-tm-adeq (hrst N HE) (htm-to-tm/hrst NSD HT) (hcps/hrst NAA HC) CP' XXEQ <- htm-to-tm-adeq HE HT HC CP EQ <- htm-to-tm-adeq-rst NSD NAA ([x][lx][cx] cx) ([x] leq/refl) CP (leq/sym EQ) CP' XXEQ. htm-to-tm-adeq/sft : htm-to-tm-adeq (hsft N HE) (htm-to-tm/hsft NSD HT) (hcps/hsft NAA HC) CP XEQ <- ({x}{hx}{lx}{ht}{hc}{cc} htm-to-tm-adeq hx ht hc cc leq/refl -> htm-to-tm-adeq (HE hx) (HT x hx ht) (HC hx lx hc) (CC x lx cc) (EQ lx)) <- htm-to-tm-adeq-sft1 NSD NAA CC ([x] leq/sym (EQ x)) ([x][lx][cx] cx) ([x] leq/refl) CP XEQ. %block htm-to-tm-adeq-block : block {x:tm}{hx:htm}{lx:ltm}{ht:htm-to-tm hx x}{hc:hcps hx (labs [k] k lapp lx)}{cc:cps x (labs [k] k lapp lx)}{_:htm-to-tm-adeq hx ht hc cc leq/refl}. %mode htm-to-tm-adeq +Dh +Dt -Dc1 -Dc2 -Deq. %worlds (htm-to-tm-adeq-block) (htm-to-tm-adeq _ _ _ _ _). %total A (htm-to-tm-adeq A _ _ _ _). tp : type. %name tp T t. ann : type. %name ann A a. atp : type. %name atp AT at. %block tp-block : block {t:tp}. arr : tp -> atp -> tp. %infix none 20 arr. eps : ann. con : atp -> atp -> ann. %infix right 30 con. a : tp -> ann -> atp. %infix right 30 a. pure : tp -> atp = [x] x a eps. %prefix 31 pure. parr : tp -> tp -> tp = [x][y] x arr pure y. %infix right 20 parr. pcon : atp -> tp -> ann = [x][y] x con pure y. %infix none 30 pcon. tp-s : tp -> tp -> type. %infix none 10 tp-s. ann-s : ann -> ann -> type. %infix none 10 ann-s. atp-s : atp -> atp -> type. %infix none 10 atp-s. %block tp-s-block : block {t:tp}{_:t tp-s t}. tp-s/arr : T' tp-s T -> AT atp-s AT' -> T arr AT tp-s T' arr AT'. ann-s/eps-eps : eps ann-s eps. ann-s/eps-con : AT atp-s AT' -> eps ann-s AT con AT'. ann-s/con-con : AT1' atp-s AT1 -> AT2 atp-s AT2' -> AT1 con AT2 ann-s AT1' con AT2'. atp-s/a : T tp-s T' -> A ann-s A' -> T a A atp-s T' a A'. tp-s-refl : {T} T tp-s T -> type. atp-s-refl : {AT} AT atp-s AT -> type. ann-s-refl : {A} A ann-s A -> type. tp-s-refl/arr : tp-s-refl _ (tp-s/arr TS ATS) <- tp-s-refl _ TS <- atp-s-refl _ ATS. atp-s-refl/a : atp-s-refl _ (atp-s/a TS AS) <- tp-s-refl _ TS <- ann-s-refl _ AS. ann-s-refl/eps-eps : ann-s-refl _ ann-s/eps-eps. ann-s-refl/con-con : ann-s-refl _ (ann-s/con-con ATS1 ATS2) <- atp-s-refl _ ATS1 <- atp-s-refl _ ATS2. %block tp-s-refl-block : block {t:tp}{r:t tp-s t}{_:tp-s-refl t r}. %mode (tp-s-refl +Dt -Dr) (atp-s-refl +Dt -Dr) (ann-s-refl +Dt -Dr). %worlds (tp-s-refl-block) (tp-s-refl _ _) (atp-s-refl _ _) (ann-s-refl _ _). %total (A B C) (tp-s-refl A _) (atp-s-refl B _) (ann-s-refl C _). of : tm -> atp -> type. %infix none 10 of. %name of OF. %abbrev pof : tm -> tp -> type = [e][t] e of pure t. %infix none 10 pof. %name pof POF. of/abs : ({x} x pof T -> (E x) of AT) -> abs E pof T arr AT. of/papp : E1 pof T arr AT -> E2 pof T -> E1 app E2 of AT. of/app : E1 of (T1 arr T2 a AT4 con AT3) a AT2 con AT1 -> E2 of T1 a AT3 con AT2 -> E1 app E2 of T2 a AT4 con AT1. of/sft : ({x} x pof T arr AT1 -> (E x) of AT2) -> sft E of T a AT1 con AT2. of/pdol : E1 pof T1 arr AT1 -> E2 of T1 a AT1 con AT2 -> E1 dol E2 of AT2. of/dol : E1 of (T1 arr AT) a AT2 con AT1 -> E2 of T1 a AT con T2 a AT3 con AT2 -> E1 dol E2 of T2 a AT3 con AT1. of/sub : E of AT -> AT atp-s AT' -> E of AT'. of/rst : E of T a pure T con AT -> rst E of AT = [o] of/pdol (of/abs [x][o] o) o. %block of-block : some {t:tp} block {x:tm}{_:x pof t}. value-of : value E -> E of T a _ -> E of T a eps -> type. value-of/abs : value-of value/abs (of/abs OF) (of/abs OF). value-of/sub : value-of V (of/sub OF (atp-s/a TPS _)) (of/sub OF' (atp-s/a TPS ann-s/eps-eps)) <- value-of V OF OF'. %mode value-of +Dv +Do -Do'. %worlds (of-block | tp-s-refl-block) (value-of _ _ _). %total A (value-of _ A _). id-tp : tp -> tp -> type. id-tp/refl : id-tp T T. id-ann : ann -> ann -> type. id-ann/refl : id-ann AT AT. id-atp : atp -> atp -> type. id-atp/refl : id-atp AT AT. id-atp-congr-a : id-tp T T' -> id-ann A A' -> id-atp (T a A) (T' a A') -> type. id-atp-congr-a/- : id-atp-congr-a id-tp/refl id-ann/refl id-atp/refl. %mode id-atp-congr-a +Di1 +Di2 -Di3. %worlds (tp-block) (id-atp-congr-a _ _ _). %total {} (id-atp-congr-a _ _ _). id-ann-congr-con : id-atp AT1 AT1' -> id-atp AT2 AT2' -> id-ann (AT1 con AT2) (AT1' con AT2') -> type. id-ann-congr-con/- : id-ann-congr-con id-atp/refl id-atp/refl id-ann/refl. %mode id-ann-congr-con +Di1 +Di2 -Di3. %worlds (tp-block) (id-ann-congr-con _ _ _). %total {} (id-ann-congr-con _ _ _). of-respects-id : E of AT -> id-tm E E' -> id-atp AT AT' -> E' of AT' -> type. of-respects-id/- : of-respects-id O id-tm/refl id-atp/refl O. %mode of-respects-id +Do +Di1 +Di2 -Do'. %worlds (of-block | tp-s-block) (of-respects-id _ _ _ _). %total {} (of-respects-id _ _ _ _). of-var-respects-id : ({x} x pof T -> E x of AT) -> ({x} id-tm (E x) (E' x)) -> id-tp T T' -> id-atp AT AT' -> ({x} x pof T' -> E' x of AT') -> type. of-var-respects-id/- : of-var-respects-id O ([x] id-tm/refl) id-tp/refl id-atp/refl O. %mode of-var-respects-id +Do +Di1 +Di2 +Di3 -Do'. %worlds (of-block | tp-s-block) (of-var-respects-id _ _ _ _ _). %total {} (of-var-respects-id _ _ _ _ _). % Biernacka and Biernacki's language and type system btm : type. %name btm BE bx. bctm : nat -> type. %name bctm BCE bcx. bctx : nat -> type. bsfttm : nat -> nat -> type. bvalue : btm -> type. bprogs : nat -> nat -> type. %abbrev bprog : nat -> type = bprogs z. bams : nat -> nat -> type. %abbrev bam : nat -> type = bams z. bcapptm : nat -> nat -> type. bctxs : nat -> nat -> type. bctxsr : nat -> nat -> type. btm-lvl : btm -> nat -> type. bsfttm-lvl : bsfttm _ _ -> nat -> type. babs : (btm -> btm) -> btm. bapp : btm -> btm -> btm. %infix left 30 bapp. brst : nat -> btm -> btm. bsft : bsfttm N z -> btm. bcapp : bcapptm N z -> btm -> btm. %infix right 23 bcapp. baz : bcapptm z M. bas : bctm M -> bcapptm N (s M) -> bcapptm (s N) M. %infix right 25 bas. bsz : btm -> bsfttm z M. bss : (bctm M -> bsfttm N (s M)) -> bsfttm (s N) M. bctmctx : bctx N -> bctm N. bvalue/babs : bvalue (babs _). bctx/empty : bctx N. bctx/appl : bctx z -> btm -> bctx z. bctx/appr : {BE} bvalue BE -> bctx z -> bctx z. bctx/capp : bcapptm N z -> bctx z -> bctx z. bctx/cons : bctx (s N) -> bctx N -> bctx (s N). bcz : bctxs z M. bcs : bctx M -> bctxs N (s M) -> bctxs (s N) M. %infix right 25 bcs. bcrz : bctxsr z M. bcrs : bctx M -> bctxsr N M -> bctxsr (s N) (s M). %infix right 25 bcrs. bprog/- : btm -> bctxs (s N) M -> bprogs M N. btm-lvl/bapp : btm-lvl E1 N -> btm-lvl E2 N -> btm-lvl (E1 bapp E2) N. btm-lvl/babs : ({bx} ({n} btm-lvl bx n) -> btm-lvl (BE bx) N) -> btm-lvl (babs BE) N. btm-lvl/bcapp : M natleq N -> btm-lvl BE N -> btm-lvl ((_ : bcapptm M z) bcapp BE) N. btm-lvl/brst : M natleq N -> btm-lvl BE N -> btm-lvl (brst M BE) N. btm-lvl/bsft : M natleq N -> bsfttm-lvl BE N -> btm-lvl (bsft (BE : bsfttm M z)) N. bsfttm-lvl/bsz : btm-lvl BE N -> bsfttm-lvl (bsz BE) N. bsfttm-lvl/bss : ({x} bsfttm-lvl (BE x) N) -> bsfttm-lvl (bss BE) N. bam/e : btm -> bctxs (s N) M -> bams N M. bam/a : {BE} bvalue BE -> bctxs (s N) M -> bams N M. %block btm-block : block {v:btm}. %block bctm-block : some {n:nat} block {v:bctm n}. id-btm : btm -> btm -> type. id-btm/refl : id-btm BE BE. id-bctxs : bctxs _ _ -> bctxs _ _ -> type. id-bctxs/refl : id-bctxs BE BE. bplug : bctx N -> (btm -> btm) -> type. bplug/empty : bplug bctx/empty ([x] x). bplug/appl : bplug C EC -> bplug (bctx/appl C E) ([x] EC (x bapp E)). bplug/appr : bplug C EC -> bplug (bctx/appr E V C) ([x] EC (E bapp x)). bplug/capp : bplug C EC -> bplug (bctx/capp A C) ([x] EC (A bcapp x)). bplug/cons : bplug C1 EC1 -> bplug C2 EC2 -> bplug (bctx/cons C1 C2 : bctx (s N)) ([x] EC1 (brst N (EC2 x))). %mode bplug +Dc -Dt. %worlds (btm-block | bctm-block) (bplug _ _). %total A (bplug A _). bsfttm-plug-bctxs : bsfttm N A -> bctxs M A -> bsfttm NM B -> type. bsfttm-plug-bctxs/z : bsfttm-plug-bctxs A bcz A. bsfttm-plug-bctxs/s : bsfttm-plug-bctxs (bss BE) (BC bcs BCS) BE' <- bsfttm-plug-bctxs (BE (bctmctx BC)) BCS BE'. bsfttm-plug-bctxs-gen : {X1:bsfttm N A}{X2:bctxs M A} sum M MN N -> sum M A B -> bsfttm-plug-bctxs X1 X2 (X3 : bsfttm MN B) -> type. bsfttm-plug-bctxs-gen/z : bsfttm-plug-bctxs-gen _ _ _ _ bsfttm-plug-bctxs/z. bsfttm-plug-bctxs-gen/s : bsfttm-plug-bctxs-gen _ _ (sum/s SUM) (sum/s SUM1) (bsfttm-plug-bctxs/s BS) <- sum-s SUM1 SUM1' <- bsfttm-plug-bctxs-gen _ _ SUM SUM1' BS. %mode bsfttm-plug-bctxs-gen +Dx1 +Dx2 +Ds +Ds1 -Dp. %worlds (btm-block | bctm-block) (bsfttm-plug-bctxs-gen _ _ _ _ _). %total A (bsfttm-plug-bctxs-gen _ A _ _ _). bcapptm-to-bctxs : bcapptm N M -> bctxs N M -> type. bcapptm-to-bctxs/z : bcapptm-to-bctxs baz bcz. bcapptm-to-bctxs/s : bcapptm-to-bctxs (bctmctx C bas CS) (C bcs BCS) <- bcapptm-to-bctxs CS BCS. %mode bcapptm-to-bctxs +Dc -Dc'. %worlds (btm-block) (bcapptm-to-bctxs _ _). %total A (bcapptm-to-bctxs A _). %unique bcapptm-to-bctxs +Dc -1Dc'. bcapptm-to-bctxs-det : bcapptm-to-bctxs BCA BCS -> bcapptm-to-bctxs BCA BCS' -> id-bctxs BCS BCS' -> type. bcapptm-to-bctxs-det/- : bcapptm-to-bctxs-det _ _ id-bctxs/refl. %mode bcapptm-to-bctxs-det +Db1 +Db2 -Did. %worlds (btm-block | bctm-block) (bcapptm-to-bctxs-det _ _ _). %total {} (bcapptm-to-bctxs-det _ _ _). bctxs-to-bctx-acc : bctxs _ (s N) -> bctx N -> bctx _ -> type. bctxs-to-bctx-acc/z : bctxs-to-bctx-acc bcz BC BC. bctxs-to-bctx-acc/s : bctxs-to-bctx-acc (BC bcs BCS) BC' BC'' <- bctxs-to-bctx-acc BCS (bctx/cons BC BC') BC''. %mode bctxs-to-bctx-acc +Dbs +Dq -Db. %worlds (btm-block | bctm-block) (bctxs-to-bctx-acc _ _ _). %total A (bctxs-to-bctx-acc A _ _). bctxs-to-bctx : bctxs (s _) N -> bctx _ -> type. bctxs-to-bctx/z : bctxs-to-bctx (BC bcs BCS) BC' <- bctxs-to-bctx-acc BCS BC BC'. %mode bctxs-to-bctx +Dbs -Db. %worlds (btm-block | bctm-block) (bctxs-to-bctx _ _). %total {} (bctxs-to-bctx _ _). bctx-to-bctxs-acc : bctx N -> bctxs _ (s N) -> bctxs _ _ -> type. bctx-to-bctxs-acc/empty : bctx-to-bctxs-acc (bctx/empty : bctx (s N)) BCS (bctx/empty bcs BCS). bctx-to-bctxs-acc/z : bctx-to-bctxs-acc (BC : bctx z) BCS (BC bcs BCS). bctx-to-bctxs-acc/s : bctx-to-bctxs-acc (bctx/cons BC BC') BCS BCS' <- bctx-to-bctxs-acc BC' (BC bcs BCS) BCS'. %mode bctx-to-bctxs-acc +Dbs +Dq -Db. %worlds (btm-block | bctm-block) (bctx-to-bctxs-acc _ _ _). %total A (bctx-to-bctxs-acc A _ _). bctx-to-bctxs : bctx _ -> bctxs _ _ -> type. bctx-to-bctxs/- : bctx-to-bctxs BC BCS <- bctx-to-bctxs-acc BC bcz BCS. %mode bctx-to-bctxs +Dbs -Db. %worlds (btm-block | bctm-block) (bctx-to-bctxs _ _). %total {} (bctx-to-bctxs _ _). bctx-to-bctxs-fill-acc : {N} bctx N -> bctxs M (s N) -> bctxs (s NM) z -> type. bctx-to-bctxs-fill-acc/empty : bctx-to-bctxs-fill-acc (s N) bctx/empty BCS BCS' <- bctx-to-bctxs-fill-acc N bctx/empty (bctx/empty bcs BCS) BCS'. bctx-to-bctxs-fill-acc/z : bctx-to-bctxs-fill-acc z BC BCS (BC bcs BCS). bctx-to-bctxs-fill-acc/s : bctx-to-bctxs-fill-acc _ (bctx/cons BC BC') BCS BCS' <- bctx-to-bctxs-fill-acc _ BC' (BC bcs BCS) BCS'. %mode bctx-to-bctxs-fill-acc +Dn +Dbs +Dq -Db. %worlds (btm-block | bctm-block) (bctx-to-bctxs-fill-acc _ _ _ _). %total A (bctx-to-bctxs-fill-acc A _ _ _). %unique bctx-to-bctxs-fill-acc +Dn +Dbs +Dq -1Db. bctx-to-bctxs-fill : bctx _ -> bctxs _ z -> type. bctx-to-bctxs-fill/- : bctx-to-bctxs-fill BC BCS <- bctx-to-bctxs-fill-acc _ BC bcz BCS. %mode bctx-to-bctxs-fill +Dbs -Db. %worlds (btm-block | bctm-block) (bctx-to-bctxs-fill _ _). %total {} (bctx-to-bctxs-fill _ _). bctxs-to-bctxsr-acc : bctxs N A -> bctxsr M A -> bctxsr NM B -> type. bctxs-to-bctxsr-acc/z : bctxs-to-bctxsr-acc bcz BCRS BCRS. bctxs-to-bctxsr-acc/s : bctxs-to-bctxsr-acc (BC bcs BCS) BCRS BCRS' <- bctxs-to-bctxsr-acc BCS (BC bcrs BCRS) BCRS'. %mode bctxs-to-bctxsr-acc +Db1 +Db3 -Db2. %worlds (btm-block | bctm-block) (bctxs-to-bctxsr-acc _ _ _). %total A (bctxs-to-bctxsr-acc A _ _). bctxs-to-bctxsr : bctxs N A -> bctxsr N' B -> type. bctxs-to-bctxsr/- : bctxs-to-bctxsr BCS BCRS <- bctxs-to-bctxsr-acc BCS bcrz BCRS. %mode bctxs-to-bctxsr +Db1 -Db2. %worlds (btm-block | bctm-block) (bctxs-to-bctxsr _ _). %total {} (bctxs-to-bctxsr _ _). bsfttm-plugall-bctxs : bsfttm A N -> bctxs A N -> btm -> type. bsfttm-plugall-bctxs/- : bsfttm-plugall-bctxs BST BCS BE <- bsfttm-plug-bctxs BST BCS (bsz BE). bsfttm-plugall-bctxs-gen : {X1:bsfttm A N} {X2:bctxs A N} bsfttm-plugall-bctxs X1 X2 X3 -> type. bsfttm-plugall-bctxs-gen/- : bsfttm-plugall-bctxs-gen A B (bsfttm-plugall-bctxs/- BSP) <- sum-z _ SUM <- sum-gen _ _ SUM1 <- bsfttm-plug-bctxs-gen A B SUM SUM1 BSP. %mode bsfttm-plugall-bctxs-gen +Dx1 +Dx2 -Dp. %worlds (btm-block | bctm-block) (bsfttm-plugall-bctxs-gen _ _ _). %total {} (bsfttm-plugall-bctxs-gen _ _ _). bctxs-tail : {N} sum N NM M -> bctxs M A -> bctxs NM B -> type. bctxs-tail/z : bctxs-tail _ sum/z C C. bctxs-tail/s : bctxs-tail _ (sum/s SUM) (_ bcs C) C' <- bctxs-tail _ SUM C C'. %mode bctxs-tail +Dn +Ds +Db -Db'. %worlds (btm-block | bctm-block) (bctxs-tail _ _ _ _). %total A (bctxs-tail A _ _ _). bctxs-append : bctxs N1 M -> bctxs N2 M' -> bctxs N M -> type. bctxs-append/z : bctxs-append bcz BCS BCS. bctxs-append/s : bctxs-append (C bcs BCS) BCS' (C bcs BCS'') <- bctxs-append BCS BCS' BCS''. bctxs-append-gen : {X1:bctxs N1 M} {X2:bctxs N2 M'} sum N1 M M' -> sum N1 N2 N -> bctxs-append X1 X2 (X3 : bctxs N M) -> type. bctxs-append-gen/z : bctxs-append-gen _ _ sum/z sum/z bctxs-append/z. bctxs-append-gen/s : bctxs-append-gen _ _ SUM1 (sum/s SUM2) (bctxs-append/s BCA) <- sum-move-ltr SUM1 SUM1' <- bctxs-append-gen _ _ SUM1' SUM2 BCA. %mode bctxs-append-gen +Ds1 +Db1 +Db2 +Ds2 -Dp. %worlds (btm-block | bctm-block) (bctxs-append-gen _ _ _ _ _). %total A (bctxs-append-gen A _ _ _ _). bctx-append : bctx N -> bctxs N1 (s N) -> bctxs N3 N4 -> type. bctx-append/z : bctx-append (BC : bctx z) BCS (BC bcs BCS). bctx-append/empty : bctx-append (bctx/empty : bctx (s N)) BCS (bctx/empty bcs BCS). bctx-append/cons : bctx-append (bctx/cons BC1 BC2) BCS BCS' <- bctx-append BC2 (BC1 bcs BCS) BCS'. %mode bctx-append +Dc +Dcs -Dcs'. %worlds (btm-block | bctm-block) (bctx-append _ _ _). %total A (bctx-append A _ _). btp : nat -> type. batp : nat -> nat -> type. bctp : nat -> nat -> type. barr : btp N -> batp N z -> btp N. %infix right 10 barr. bcarr : btp N -> batp N (s M) -> bctp N M. %infix right 10 bcarr. batp/z : btp N -> batp N N. batp/s : bctp N M -> batp N (s M) -> batp N M. bof : {N} btm -> batp N z -> type. bvof : {N} btm -> btp N -> type. bcof : {N}{M} bctm M -> bctp N M -> type. bctxof : {N}{M} bctx M -> bctp N M -> type. bofsft : {N}{M} bsfttm O M -> batp N M -> type. bofcapp : {N} bcapptm B A -> batp N X -> batp N A -> type. bofcapp/z : bofcapp _ baz BAT BAT. bofcapp/s : bcof N _ C BCT -> bofcapp N CS BAT BAT' -> bofcapp N (C bas CS) BAT (batp/s BCT BAT'). bcappwtf : {N} nat -> btp N -> batp N A -> batp N B -> batp N A -> type. bcappwtf/z : bcappwtf Q z BT BAT' (batp/s (BT bcarr BAT') BAT) BAT. bcappwtf/s : bcappwtf Q N BAT0 BAT BATY BATX -> bcappwtf Q (s N) BAT0 (batp/s BCT BAT) BATY (batp/s BCT BATX). bctp-id : bctp N _ -> type. bctp-id/- : bctp-id (T bcarr batp/s (T bcarr AT) AT). batp-pure-tp : batp N _ -> btp N -> type. batp-pure-tp/- : batp-pure-tp (batp/s (T bcarr AT) AT) T. batp-extend-id : {M} sum M NM N -> batp X N -> batp X NM -> type. batp-extend-id/z : batp-extend-id z sum/z AT AT. batp-extend-id/s : bctp-id CT -> batp-extend-id M _ AT AT' -> batp-extend-id (s M) _ AT (batp/s CT AT'). brstatp : {N}{M} nat -> batp N M -> bctp N M -> batp N (s M) -> type. bof/var : bvof N E T -> bof N E (batp/s (T bcarr X) X). bof/babs : ({x} bvof N x T -> bof N (E x) AT) -> bof N (babs E) (batp/s ((T barr AT) bcarr X) X). bof/bapp : bof N E1 (batp/s ((T barr (batp/s CT AT)) bcarr AT'') AT') -> bof N E2 (batp/s (T bcarr AT) AT'') -> bof N (E1 bapp E2) (batp/s CT AT'). bof/bsft : bofsft N z BST AT -> bof N (bsft BST) AT. bof/brst : bof N E AT -> brstatp N z N' AT CT AT' -> bof N (brst N' E) (batp/s CT AT'). bof/bcapp : batp-pure-tp ATY TY -> bcappwtf N (s M) A1 (batp/s (A1 bcarr QWQW) QWQW) ATI (batp/s (TZ bcarr ATZ1) ATZ2) -> bofcapp N TA ATI ATY -> bof N E (batp/s (TY bcarr ATZ2) AT) -> bof N ((TA : bcapptm M z) bcapp E) (batp/s (TZ bcarr ATZ1) AT). % TODO bofsft/bsz : bof N E AT' -> batp-extend-id M SUM AT AT' -> bofsft N M (bsz E) AT. bofsft/bss : ({x} bcof N M x CT -> bofsft N (s M) (E x) AT) -> bofsft N M (bss E) (batp/s CT AT). brstatp/z : brstatp N _ z (batp/s CT AT) CT AT. brstatp/s : brstatp N _ A AT' (T bcarr ATC) AT -> bctp-id CT' -> brstatp N _ (s A) (batp/s CT' AT') (T bcarr batp/s CT ATC) (batp/s CT AT). bcof/bctx : bctxof NN N C CT -> bcof NN N (bctmctx C) CT. bctxof/empty : bctp-id CT -> bctxof NN N bctx/empty CT. bctxof/appl : bctxof N z C CT -> bof N E (batp/s (T bcarr AT) AT'') -> bctxof N z (bctx/appl C E) ((T barr batp/s CT AT) bcarr AT''). bctxof/appr : bof N E (batp/s ((T barr batp/s CT AT) bcarr AT'') AT'') -> bctxof N z C CT -> bctxof N z (bctx/appr E _ C) (T bcarr AT). bctxof/cons : bctxof N (s M) C1 CT -> bctxof N M C2 (T bcarr batp/s CT AT) -> bctxof N (s M) (bctx/cons C1 C2) (T bcarr AT). btp-to-tp : btp N -> tp -> type. batp-to-atp : batp N M -> atp -> type. bctp-to-arrtp : bctp N M -> tp -> atp -> type. btp-to-tp/barr : btp-to-tp BT T -> batp-to-atp BAT AT -> btp-to-tp (BT barr BAT) (T arr AT). batp-to-atp/z : btp-to-tp BT T -> batp-to-atp (batp/z BT) (pure T). batp-to-atp/s : bctp-to-arrtp BCT T AT' -> batp-to-atp BAT AT -> batp-to-atp (batp/s BCT BAT) (T a AT' con AT). bctp-to-arrtp/bcarr : btp-to-tp BT T -> batp-to-atp BAT AT -> bctp-to-arrtp (BT bcarr BAT) T AT. %block btp-to-tp-block : some {N:nat} block {bt:btp N}{t:tp}{_:btp-to-tp bt t}. %mode (btp-to-tp +Dt1 -Dt2) (batp-to-atp +Dt1 -Dt2) (bctp-to-arrtp +Dt1 -Dt2 -Dt3). %worlds (btp-to-tp-block) (btp-to-tp _ _) (batp-to-atp _ _) (bctp-to-arrtp _ _ _). %total (A B C) (btp-to-tp A _) (batp-to-atp B _) (bctp-to-arrtp C _ _). %unique (btp-to-tp +Dt1 -1Dt2) (batp-to-atp +Dt1 -1Dt2) (bctp-to-arrtp +Dt1 -1Dt2 -1Dt3). btp-to-tp-gen : {BT} btp-to-tp BT T -> type. batp-to-atp-gen : {BAT} batp-to-atp BAT AT -> type. bctp-to-arrtp-gen : {BCT} bctp-to-arrtp BCT T AT -> type. btp-to-tp-gen/barr : btp-to-tp-gen _ (btp-to-tp/barr BT BAT) <- btp-to-tp-gen _ BT <- batp-to-atp-gen _ BAT. batp-to-atp-gen/z : batp-to-atp-gen _ (batp-to-atp/z BT) <- btp-to-tp-gen _ BT. batp-to-atp-gen/s : batp-to-atp-gen _ (batp-to-atp/s BCT BAT) <- bctp-to-arrtp-gen _ BCT <- batp-to-atp-gen _ BAT. bctp-to-arrtp-gen/bcarr : bctp-to-arrtp-gen _ (bctp-to-arrtp/bcarr BT BAT) <- btp-to-tp-gen _ BT <- batp-to-atp-gen _ BAT. %block btp-to-tp-gen-block : some {N:nat} block {bt:btp N}{t:tp}{x:btp-to-tp bt t}{_:btp-to-tp-gen bt x}. %mode (btp-to-tp-gen +Dt1 -Dt2) (batp-to-atp-gen +Dt1 -Dt2) (bctp-to-arrtp-gen +Dt1 -Dt2). %worlds (btp-to-tp-gen-block) (btp-to-tp-gen _ _) (batp-to-atp-gen _ _) (bctp-to-arrtp-gen _ _). %total (A B C) (btp-to-tp-gen A _) (batp-to-atp-gen B _) (bctp-to-arrtp-gen C _). btp-to-tp-det : btp-to-tp BT T1 -> btp-to-tp BT T2 -> id-tp T1 T2 -> type. batp-to-atp-det : batp-to-atp BAT AT1 -> batp-to-atp BAT AT2 -> id-atp AT1 AT2 -> type. bctp-to-arrtp-det : bctp-to-arrtp BCT T1 AT1 -> bctp-to-arrtp BCT T2 AT2 -> id-tp T1 T2 -> id-atp AT1 AT2 -> type. btp-to-tp-det/- : btp-to-tp-det _ _ id-tp/refl. batp-to-atp-det/- : batp-to-atp-det _ _ id-atp/refl. bctp-to-arrtp-det/- : bctp-to-arrtp-det _ _ id-tp/refl id-atp/refl. %mode (btp-to-tp-det +Dt1 +Dt2 -Di) (batp-to-atp-det +Dt1 +Dt2 -Di) (bctp-to-arrtp-det +Dt1 +Dt2 -Di1 -Di2). %worlds (btp-to-tp-gen-block) (btp-to-tp-det _ _ _) (batp-to-atp-det _ _ _) (bctp-to-arrtp-det _ _ _ _). %total {} (btp-to-tp-det _ _ _) (batp-to-atp-det _ _ _) (bctp-to-arrtp-det _ _ _ _). n-sft-dol-brst : nat -> tm -> (tm -> tm) -> tm -> type. n-sft-dol-brst/z : n-sft-dol-brst z EX E (abs E dol EX). n-sft-dol-brst/s : n-sft-dol-brst (s N) EX E (sft EF) <- ({x} n-sft-dol-brst N (rst EX) ([y] x dol E y) (EF x)). %mode n-sft-dol-brst +Dn +Dq +Dq1 -Dt. %worlds (tm-block) (n-sft-dol-brst _ _ _ _). %total A (n-sft-dol-brst A _ _ _). %unique n-sft-dol-brst +Dn +Dq +Dq1 -1Dt. n-asft-adol-brst : nat -> amtm -> (amtm -> amtm) -> amtm -> type. n-asft-adol-brst/z : n-asft-adol-brst z EX E (aabs E adol EX). n-asft-adol-brst/s : n-asft-adol-brst (s N) EX E (asft EF) <- ({x} n-asft-adol-brst N (arst EX) ([y] x adol E y) (EF x)). %mode n-asft-adol-brst +Dn +Dq +Dq1 -Dt. %worlds (amtm-block) (n-asft-adol-brst _ _ _ _). %total A (n-asft-adol-brst A _ _ _). %unique n-asft-adol-brst +Dn +Dq +Dq1 -1Dt. n-sft-dol-bcapp : nat -> (tm -> tm) -> tm -> tm -> type. n-sft-dol-bcapp/z : n-sft-dol-bcapp z EE E ((abs [w] EE w) dol E). n-sft-dol-bcapp/s : n-sft-dol-bcapp (s N) EE E (sft EF) <- ({x} n-sft-dol-bcapp N ([y] x dol EE y) E (EF x)). %mode n-sft-dol-bcapp +Dn +De1 +De2 -De3. %worlds (tm-block) (n-sft-dol-bcapp _ _ _ _). %total A (n-sft-dol-bcapp A _ _ _). %unique n-sft-dol-bcapp +Dn +De1 +De2 -1De3. n-asft-adol-bcapp : nat -> (amtm -> amtm) -> amtm -> amtm -> type. n-asft-adol-bcapp/z : n-asft-adol-bcapp z EE E ((aabs [w] EE w) adol E). n-asft-adol-bcapp/s : n-asft-adol-bcapp (s N) EE E (asft EF) <- ({x} n-asft-adol-bcapp N ([y] x adol EE y) E (EF x)). %mode n-asft-adol-bcapp +Dn +De1 +De2 -De3. %worlds (amtm-block) (n-asft-adol-bcapp _ _ _ _). %total A (n-asft-adol-bcapp A _ _ _). %unique n-asft-adol-bcapp +Dn +De1 +De2 -1De3. btm-to-tm : btm -> tm -> type. bctm-to-tm : bctm N -> tm -> type. bsfttm-to-tm : bsfttm N M -> tm -> type. bctx-to-tm : bctx N -> (tm -> tm) -> type. bctxz-to-tm : bctx z -> (tm -> tm) -> type. bcapptm-to-tm : bcapptm N M -> (tm -> tm) -> type. btm-to-tm/bapp : btm-to-tm BE1 E1 -> btm-to-tm BE2 E2 -> btm-to-tm (BE1 bapp BE2) (E1 app E2). btm-to-tm/babs : ({bx}{x} btm-to-tm bx x -> btm-to-tm (BE bx) (E x)) -> btm-to-tm (babs BE) (abs E). btm-to-tm/brst : ({x} n-sft-dol-brst N E ([y] x dol y) (ET x)) -> btm-to-tm BE E -> btm-to-tm (brst N BE) (sft ET). btm-to-tm/bsft : bsfttm-to-tm BST E -> btm-to-tm (bsft BST) E. btm-to-tm/bcapp : ({v} n-sft-dol-bcapp (s N) ([x] x) (E' v) (EF v)) -> bcapptm-to-tm (BCA : bcapptm N _) E' -> btm-to-tm BE E -> btm-to-tm (BCA bcapp BE) (abs EF app E). bctm-to-tm/bctx : bctx-to-tm C E -> bctm-to-tm (bctmctx C) (abs [x] abs E dol x). bsfttm-to-tm/z : n-rst N ER -> btm-to-tm BE E -> bsfttm-to-tm (bsz BE : bsfttm _ N) (ER E). bsfttm-to-tm/s : ({bx}{x} bctm-to-tm bx x -> bsfttm-to-tm (BE bx) (E x)) -> bsfttm-to-tm (bss BE) (sft E). bctxz-to-tm/empty : bctxz-to-tm bctx/empty ([x] x). bctxz-to-tm/appl : btm-to-tm BE E -> bctxz-to-tm BC EC -> bctxz-to-tm (bctx/appl BC BE) ([x] EC (x app E)). bctxz-to-tm/appr : btm-to-tm BE E -> bctxz-to-tm BC EC -> bctxz-to-tm (bctx/appr BE _ BC) ([x] EC (E app x)). bctxz-to-tm/capp : ({v} n-sft-dol-bcapp (s N) ([x] x) (E' v) (EF v)) -> bcapptm-to-tm (BCA : bcapptm N _) E' -> bctxz-to-tm BC EC -> bctxz-to-tm (bctx/capp BCA BC) ([x] EC (abs EF app x)). bctx-to-tm/z : bctxz-to-tm BC E -> bctx-to-tm BC ([x] rst (E x)). bctx-to-tm/empty : bctx-to-tm (bctx/empty : bctx (s N)) ([x] rst x). bctx-to-tm/cons : bctx-to-tm BC E -> bctx-to-tm SBC SE -> bctx-to-tm (bctx/cons BC SBC) ([x] abs E dol SE x). bcapptm-to-tm/z : bcapptm-to-tm baz ([x] x). bcapptm-to-tm/s : bctm-to-tm BCE E' -> bcapptm-to-tm BCA E -> bcapptm-to-tm (BCE bas BCA) ([x] E (E' dol x)). %block btm-to-tm-block : block {bx:btm}{x:tm}{_:btm-to-tm bx x}. %block bctm-to-tm-block : some {n:nat} block {bx:bctm n}{x:tm}{_:bctm-to-tm bx x}. %mode (btm-to-tm +De -De') (bctm-to-tm +De -De') (bsfttm-to-tm +De -De') (bctxz-to-tm +De -De') (bctx-to-tm +De -De') (bcapptm-to-tm +De -De'). %worlds (btm-to-tm-block | bctm-to-tm-block) (btm-to-tm _ _) (bctm-to-tm _ _) (bsfttm-to-tm _ _) (bctxz-to-tm _ _) (bctx-to-tm _ _) (bcapptm-to-tm _ _). %total (A B C D E F) (btm-to-tm A _) (bctm-to-tm B _) (bsfttm-to-tm C _) (bctxz-to-tm D _) (bctx-to-tm E _) (bcapptm-to-tm F _). %unique (btm-to-tm +De -1De') (bctm-to-tm +De -1De') (bsfttm-to-tm +De -1De') (bctxz-to-tm +De -1De') (bctx-to-tm +De -1De') (bcapptm-to-tm +De -1De'). bctx-to-amctx-cond : nat -> amctx -> type. bctx-to-amctx-cond/z : bctx-to-amctx-cond z C. bctx-to-amctx-cond/s : bctx-to-amctx-cond (s N) (amctx/empty _). btm-to-amtm : btm -> amtm -> type. bctm-to-amtm : bctm N -> amtm -> type. bsfttm-to-amtm : bsfttm N M -> nat -> amtm -> type. bctx-to-amctx : bctx N -> {AC:amctx} bctx-to-amctx-cond (s z) AC -> type. bctx-to-amctx-left : bctx N -> {AC:amctx} bctx-to-amctx-cond N AC -> type. bcapptm-to-amtm : bcapptm N M -> (amtm -> amtm) -> type. bvalue-to-amvalue2 : bvalue BE -> amvalue E -> type. btm-to-amtm/bapp : btm-to-amtm BE1 E1 -> btm-to-amtm BE2 E2 -> btm-to-amtm (BE1 bapp BE2) (E1 aapp E2). btm-to-amtm/babs : ({bx}{x} btm-to-amtm bx x -> btm-to-amtm (BE bx) (E x)) -> btm-to-amtm (babs BE) (aabs E). btm-to-amtm/brst : ({x} n-asft-adol-brst N E ([y] x adol y) (ET x)) -> btm-to-amtm BE E -> btm-to-amtm (brst N BE) (asft ET). btm-to-amtm/bsft : bsfttm-to-amtm BST z E -> btm-to-amtm (bsft BST) E. btm-to-amtm/bcapp : ({v} n-asft-adol-bcapp (s N) ([x] x) (E' v) (EF v)) -> bcapptm-to-amtm (BCA : bcapptm N _) E' -> btm-to-amtm BE E -> btm-to-amtm (BCA bcapp BE) (aabs EF aapp E). bctm-to-amtm/bctx : bctx-to-amctx-left BC C _ -> bctm-to-amtm (bctmctx BC) (actx C). bctx-to-amctx/s-empty : bctx-to-amctx (bctx/empty : bctx (s _)) (amctx/empty [x] actx (amctx/empty [x] x) adol x) bctx-to-amctx-cond/s. bctx-to-amctx/z : bctx-to-amctx-left (BC : bctx z) AC _ -> bctx-to-amctx BC (amctx/empty [x] actx AC adol x) bctx-to-amctx-cond/s. bctx-to-amctx/cons : bctx-to-amctx-left (bctx/cons BC1 BC2) (amctx/empty E) bctx-to-amctx-cond/s -> bctx-to-amctx (bctx/cons BC1 BC2) (amctx/empty E) bctx-to-amctx-cond/s. bctx-to-amctx-left/s-cons : bctx-to-amctx-left BC1 E1 _ -> bctx-to-amctx BC2 (amctx/empty E2) bctx-to-amctx-cond/s -> bctx-to-amctx-left (bctx/cons BC1 BC2) (amctx/empty [x] actx E1 adol E2 x) bctx-to-amctx-cond/s. bctx-to-amctx-left/z-empty : bctx-to-amctx-left bctx/empty (amctx/empty [x] x) bctx-to-amctx-cond/z. bctx-to-amctx-left/s-empty : bctx-to-amctx-left bctx/empty (amctx/empty [x] x) bctx-to-amctx-cond/s. bctx-to-amctx-left/appl : bctx-to-amctx-left BC C _ -> btm-to-amtm BE E -> bctx-to-amctx-left (bctx/appl BC BE) (amctx/appl C E) bctx-to-amctx-cond/z. bctx-to-amctx-left/appr : bvalue-to-amvalue2 BV V -> bctx-to-amctx-left BC C _ -> bctx-to-amctx-left (bctx/appr BE BV BC) (amctx/appr E V C) bctx-to-amctx-cond/z. bctx-to-amctx-left/capp : ({v} n-asft-adol-bcapp (s N) ([x] x) (E' v) (EF v)) -> bcapptm-to-amtm BCT E' -> bctx-to-amctx-left BC C _ -> bctx-to-amctx-left (bctx/capp (BCT : bcapptm N _) BC) (amctx/appr (aabs EF) amvalue/abs C) bctx-to-amctx-cond/z. bvalue-to-amvalue2/babs : ({bx}{x} btm-to-amtm bx x -> btm-to-amtm (BE bx) (E x)) -> bvalue-to-amvalue2 (bvalue/babs : bvalue (babs BE)) (amvalue/abs : amvalue (aabs E)). bsfttm-to-amtm/z : n-arst N RE -> btm-to-amtm BE E -> bsfttm-to-amtm (bsz BE) N (RE E). bsfttm-to-amtm/s : ({bx}{x} bctm-to-amtm bx x -> bsfttm-to-amtm (BST bx) (s N) (E x)) -> bsfttm-to-amtm (bss BST) N (asft E). bcapptm-to-amtm/z : bcapptm-to-amtm baz ([x] x). bcapptm-to-amtm/s : bctm-to-amtm BCE E -> bcapptm-to-amtm BAS EE -> bcapptm-to-amtm (BCE bas BAS) ([x] EE (E adol x)). %block btm-to-amtm-block : block {bx:btm}{x:amtm}{_:btm-to-amtm bx x}. %block bctm-to-amtm-block : some {n:nat} block {bx:bctm n}{x:amtm}{_:bctm-to-amtm bx x}. %mode (btm-to-amtm +De -De') (bctm-to-amtm +De -De') (bctx-to-amctx +De -De' -Dc) (bctx-to-amctx-left +De -De' -Dc) (bvalue-to-amvalue2 +Dv -Dv') (bsfttm-to-amtm +De +Dn -De') (bcapptm-to-amtm +De -De'). %worlds (btm-to-amtm-block | bctm-to-amtm-block) (btm-to-amtm _ _) (bctm-to-amtm _ _) (bctx-to-amctx _ _ _) (bctx-to-amctx-left _ _ _) (bvalue-to-amvalue2 _ _) (bsfttm-to-amtm _ _ _) (bcapptm-to-amtm _ _). %total (A B C D E F G) (btm-to-amtm A _) (bctm-to-amtm B _) (bctx-to-amctx-left C _ _) (bctx-to-amctx G _ _) (bvalue-to-amvalue2 D _) (bsfttm-to-amtm E _ _) (bcapptm-to-amtm F _). %unique (btm-to-amtm +De -1De') (bctm-to-amtm +De -1De') (bctx-to-amctx +De -1De' -1Dc) (bctx-to-amctx-left +De -1De' -1Dc) (bvalue-to-amvalue2 +Dv -1Dv') (bsfttm-to-amtm +De +Dn -1De') (bcapptm-to-amtm +De -1De'). bctxs-to-amtm : bctxs _ _ -> (amtm -> amtm) -> type. bctxs-to-amtm/z : bctxs-to-amtm bcz ([x] x). bctxs-to-amtm/s : bctxs-to-amtm (BC bcs BCS) ([x] EE (actx E adol x)) <- bctxs-to-amtm BCS EE <- bctx-to-amctx-left BC E _. %mode bctxs-to-amtm +Db -Dt. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amtm _ _). %total A (bctxs-to-amtm A _). bctxs-to-amtm-respects-id : bctxs-to-amtm BCS1 E1 -> id-bctxs BCS1 BCS2 -> ({x} id-amtm (E1 x) (E2 x)) -> bctxs-to-amtm BCS2 E2 -> type. bctxs-to-amtm-respects-id/- : bctxs-to-amtm-respects-id BCS id-bctxs/refl ([x] id-amtm/refl) BCS. %mode bctxs-to-amtm-respects-id +Db1 +Di1 +Di2 -Db2. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amtm-respects-id _ _ _ _). %total {} (bctxs-to-amtm-respects-id _ _ _ _). bctxsr-to-amtm : bctxsr _ _ -> (amtm -> amtm) -> type. bctxsr-to-amtm/z : bctxsr-to-amtm bcrz ([x] x). bctxsr-to-amtm/s : bctxsr-to-amtm (BC bcrs BCS) ([x] actx E adol EE x) <- bctxsr-to-amtm BCS EE <- bctx-to-amctx-left BC E _. %mode bctxsr-to-amtm +Db -Dt. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxsr-to-amtm _ _). %total A (bctxsr-to-amtm A _). bctxs-to-amtm-acc-to-bctxsr-to-amtm : bctxs-to-amtm BC E -> bctxs-to-bctxsr-acc BC BCRA BCR -> bctxsr-to-amtm BCRA ERA -> bctxsr-to-amtm BCR ([x] E (ERA x)) -> type. bctxs-to-amtm-acc-to-bctxsr-to-amtm/z : bctxs-to-amtm-acc-to-bctxsr-to-amtm bctxs-to-amtm/z bctxs-to-bctxsr-acc/z BCRE BCRE. bctxs-to-amtm-acc-to-bctxsr-to-amtm/s : bctxs-to-amtm-acc-to-bctxsr-to-amtm (bctxs-to-amtm/s BCTE BCSTE) (bctxs-to-bctxsr-acc/s BTBR) BCSRTE BCSRTE' <- bctxs-to-amtm-acc-to-bctxsr-to-amtm BCSTE BTBR (bctxsr-to-amtm/s BCTE BCSRTE) BCSRTE'. %mode bctxs-to-amtm-acc-to-bctxsr-to-amtm +Db -Dt +Dt' -Db'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amtm-acc-to-bctxsr-to-amtm _ _ _ _). %total A (bctxs-to-amtm-acc-to-bctxsr-to-amtm A _ _ _). bctxs-to-amtm-to-bctxsr-to-amtm : bctxs-to-amtm BC E -> bctxs-to-bctxsr BC BCR -> bctxsr-to-amtm BCR E -> type. bctxs-to-amtm-to-bctxsr-to-amtm/- : bctxs-to-amtm-to-bctxsr-to-amtm BCSTE (bctxs-to-bctxsr/- BTBR) BCSRTE <- bctxs-to-amtm-acc-to-bctxsr-to-amtm BCSTE BTBR bctxsr-to-amtm/z BCSRTE. %mode bctxs-to-amtm-to-bctxsr-to-amtm +Db -Dt -Db'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amtm-to-bctxsr-to-amtm _ _ _). %total {} (bctxs-to-amtm-to-bctxsr-to-amtm _ _ _). bcapptm-to-amtm-to-bctxs-to-amtm : bcapptm-to-amtm BCA E -> bcapptm-to-bctxs BCA BCS -> bctxs-to-amtm BCS E -> type. bcapptm-to-amtm-to-bctxs-to-amtm/z : bcapptm-to-amtm-to-bctxs-to-amtm bcapptm-to-amtm/z bcapptm-to-bctxs/z bctxs-to-amtm/z. bcapptm-to-amtm-to-bctxs-to-amtm/s : bcapptm-to-amtm-to-bctxs-to-amtm (bcapptm-to-amtm/s (bctm-to-amtm/bctx BCCE) BCTE) (bcapptm-to-bctxs/s BCN) (bctxs-to-amtm/s BCCE BCSTE) <- bcapptm-to-amtm-to-bctxs-to-amtm BCTE BCN BCSTE. %mode bcapptm-to-amtm-to-bctxs-to-amtm +Db1 -Db2 -Db3. %worlds (btm-to-amtm-block) (bcapptm-to-amtm-to-bctxs-to-amtm _ _ _). %total A (bcapptm-to-amtm-to-bctxs-to-amtm A _ _). bcapptm-to-amtm-to-bctxs-to-amtm+ : bcapptm-to-amtm BCA E -> bcapptm-to-bctxs BCA BCS -> bctxs-to-amtm BCS E -> type. bcapptm-to-amtm-to-bctxs-to-amtm+/- : bcapptm-to-amtm-to-bctxs-to-amtm+ BCATE BCATBCS BCSTE' <- bcapptm-to-amtm-to-bctxs-to-amtm BCATE BCATBCS' BCSTE <- bcapptm-to-bctxs-det BCATBCS' BCATBCS ID <- bctxs-to-amtm-respects-id BCSTE ID ([x] id-amtm/refl) BCSTE'. %mode bcapptm-to-amtm-to-bctxs-to-amtm+ +Db1 +Db2 -Db3. %worlds (btm-to-amtm-block) (bcapptm-to-amtm-to-bctxs-to-amtm+ _ _ _). %total {} (bcapptm-to-amtm-to-bctxs-to-amtm+ _ _ _). bctx-to-amtm-s : bctx N -> (amtm -> amtm) -> type. bctx-to-amtm-s/z : bctx-to-amtm-s (BC : bctx z) ([x] actx C adol x) <- bctx-to-amctx-left BC C _. bctx-to-amtm-s/empty : bctx-to-amtm-s (bctx/empty : bctx (s N)) ([x] actx (amctx/empty [x] x) adol x). bctx-to-amtm-s/cons : bctx-to-amtm-s (bctx/cons BC1 BC2) ([x] actx C adol E x) <- bctx-to-amtm-s BC2 E <- bctx-to-amctx-left BC1 C _. %mode bctx-to-amtm-s +Db -Dt. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amtm-s _ _). %total A (bctx-to-amtm-s A _). bctx-to-amctx-empty : {N}{I : bctx-to-amctx-cond (s z) (amctx/empty [x] actx (amctx/empty [x] x) adol x)} bctx-to-amctx (bctx/empty : bctx N) (amctx/empty [x] actx (amctx/empty [x] x) adol x) I -> type. bctx-to-amctx-empty/z : bctx-to-amctx-empty z _ (bctx-to-amctx/z bctx-to-amctx-left/z-empty : bctx-to-amctx bctx/empty _ bctx-to-amctx-cond/s). bctx-to-amctx-empty/s : bctx-to-amctx-empty (s _) _ bctx-to-amctx/s-empty. %mode bctx-to-amctx-empty +Dn -Dc -Dr. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amctx-empty _ _ _). %total {} (bctx-to-amctx-empty _ _ _). bctx-to-amctx-left-empty : {N}{I : bctx-to-amctx-cond N (amctx/empty [x] x)} bctx-to-amctx-left (bctx/empty : bctx N) (amctx/empty [x] x) I -> type. bctx-to-amctx-empty/z : bctx-to-amctx-left-empty z _ bctx-to-amctx-left/z-empty. bctx-to-amctx-empty/s : bctx-to-amctx-left-empty (s _) _ bctx-to-amctx-left/s-empty. %mode bctx-to-amctx-left-empty +Dn -Dc -Dr. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amctx-left-empty _ _ _). %total {} (bctx-to-amctx-left-empty _ _ _). bctx-to-amctx-left-cons : bctx-to-amctx-left C1 AC1 _ -> bctx-to-amctx C2 AC2 _ -> bctx-to-amctx-left (bctx/cons C1 C2 : bctx (s N)) AC3 I -> type. bctx-to-amctx-left-cons/s : bctx-to-amctx-left-cons BC1 BC2 (bctx-to-amctx-left/s-cons BC1 BC2). %mode bctx-to-amctx-left-cons +Dt1 +Dt2 -Dr. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amctx-left-cons _ _ _). %total {} (bctx-to-amctx-left-cons _ _ _). bctx-to-amctx-cons : bctx-to-amctx-left C1 AC1 _ -> bctx-to-amctx C2 AC2 _ -> bctx-to-amctx (bctx/cons C1 C2 : bctx (s N)) AC3 I -> type. bctx-to-amctx-cons/s : bctx-to-amctx-cons BC1 BC2 (bctx-to-amctx/cons (bctx-to-amctx-left/s-cons BC1 BC2)). %mode bctx-to-amctx-cons +Dt1 +Dt2 -Dr. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amctx-cons _ _ _). %total {} (bctx-to-amctx-cons _ _ _). bctxs-to-amectx : bctxs M N -> amectx -> type. bctxs-to-amectx/z : bctxs-to-amectx bcz ab. bctxs-to-amectx/s : bctxs-to-amectx (BC bcs BCS) (C ac CS) <- bctxs-to-amectx BCS CS <- bctx-to-amctx-left BC C _. %mode bctxs-to-amectx +Db -Da. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx _ _). %total A (bctxs-to-amectx A _). %unique bctxs-to-amectx +Db -1Da. bctxs-to-amectx-det : bctxs-to-amectx BCS CS -> bctxs-to-amectx BCS CS' -> id-amectx CS CS' -> type. bctxs-to-amectx-det/- : bctxs-to-amectx-det _ _ id-amectx/refl. %mode bctxs-to-amectx-det +Dx1 +Dx2 -Did. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-det _ _ _). %total {} (bctxs-to-amectx-det _ _ _). bctxsr-to-amectx-diff : bctxsr _ _ -> (amectx -> amectx) -> type. bctxsr-to-amectx-diff/z : bctxsr-to-amectx-diff bcrz ([x] x). bctxsr-to-amectx-diff/s : bctxsr-to-amectx-diff (BC bcrs BCRS) ([x] CS (C ac x)) <- bctxsr-to-amectx-diff BCRS CS <- bctx-to-amctx-left BC C _. %mode bctxsr-to-amectx-diff +Db -Da. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxsr-to-amectx-diff _ _). %total A (bctxsr-to-amectx-diff A _). bctxsr-to-amectx-diff-amectx-diff : bctxsr-to-amectx-diff BCS CS -> amectx-diff CS -> type. bctxsr-to-amectx-diff-amectx-diff/z : bctxsr-to-amectx-diff-amectx-diff bctxsr-to-amectx-diff/z amectx-diff/b. bctxsr-to-amectx-diff-amectx-diff/s : bctxsr-to-amectx-diff-amectx-diff (bctxsr-to-amectx-diff/s _ BCSTA) AD' <- bctxsr-to-amectx-diff-amectx-diff (BCSTA : bctxsr-to-amectx-diff _ Q) AD <- amectx-diff-cons _ AD AD'. %mode bctxsr-to-amectx-diff-amectx-diff +Db -Da. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxsr-to-amectx-diff-amectx-diff _ _). %total A (bctxsr-to-amectx-diff-amectx-diff A _). bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc : bctxsr-to-amectx-diff BCSR CS -> bctxs-to-bctxsr-acc BCS BCSR' BCSR -> bctxsr-to-amectx-diff BCSR' CS' -> bctxs-to-amectx BCS CS'' -> id-amectx (CS' CS'') (CS ab) -> type. bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc/z : bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc BCRT bctxs-to-bctxsr-acc/z BCRT bctxs-to-amectx/z id-amectx/refl. bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc/s : bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc BCRTE1 (bctxs-to-bctxsr-acc/s BTB) BCRTE (bctxs-to-amectx/s BCTE BCSTE) ID <- bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc BCRTE1 BTB (bctxsr-to-amectx-diff/s BCTE BCRTE) BCSTE ID. %mode bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc +Dx1 +Dx2 -Dx33 -Dx3 -Di. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc _ _ _ _ _). %total A (bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc _ A _ _ _). bctxs-to-amectx-respects-id : bctxs-to-amectx BCS1 CS1 -> id-bctxs BCS1 BCS2 -> id-amectx CS1 CS2 -> bctxs-to-amectx BCS2 CS2 -> type. bctxs-to-amectx-respects-id/- : bctxs-to-amectx-respects-id BTC id-bctxs/refl id-amectx/refl BTC. %mode bctxs-to-amectx-respects-id +Da1 +Di1 +Di2 -Da2. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-respects-id _ _ _ _). %total A (bctxs-to-amectx-respects-id A _ _ _). bctxsr-to-amectx-diff-to-bctxs-to-amectx : bctxsr-to-amectx-diff BCSR CS -> bctxs-to-bctxsr BCS BCSR -> bctxs-to-amectx BCS (CS ab) -> type. bctxsr-to-amectx-diff-to-bctxs-to-amectx/- : bctxsr-to-amectx-diff-to-bctxs-to-amectx BCRTE (bctxs-to-bctxsr/- BTB) BCTE' <- bctxsr-to-amectx-diff-to-bctxs-to-amectx-acc BCRTE BTB bctxsr-to-amectx-diff/z BCTE ID <- bctxs-to-amectx-respects-id BCTE id-bctxs/refl ID BCTE'. %mode bctxsr-to-amectx-diff-to-bctxs-to-amectx +Dx1 +Dx2 -Dx3. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxsr-to-amectx-diff-to-bctxs-to-amectx _ _ _). %total {} (bctxsr-to-amectx-diff-to-bctxs-to-amectx _ _ _). bctxs-to-amectx-am : bctxs M N -> amectx -> type. bctxs-to-amectx-am/z : bctxs-to-amectx-am bcz ((amctx/empty [x] x) ac ab). bctxs-to-amectx-am/s : bctxs-to-amectx-am (BC bcs BCS) (C ac CS) <- bctxs-to-amectx-am BCS CS <- bctx-to-amctx-left BC C _. %mode bctxs-to-amectx-am +Db -Da. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-am _ _). %total A (bctxs-to-amectx-am A _). bctxs-to-amectx-am-respects-id : bctxs-to-amectx-am BC AC -> id-bctxs BC BC' -> id-amectx AC AC' -> bctxs-to-amectx-am BC' AC' -> type. bctxs-to-amectx-am-respects-id/- : bctxs-to-amectx-am-respects-id BTC id-bctxs/refl id-amectx/refl BTC. %mode bctxs-to-amectx-am-respects-id +Db +Di1 +Di2 -Db'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-am-respects-id _ _ _ _). %total {} (bctxs-to-amectx-am-respects-id _ _ _ _). btm-to-tm-respects-id : btm-to-tm BE E -> id-btm BE BE' -> id-tm E E' -> btm-to-tm BE' E' -> type. btm-to-tm-respects-id/- : btm-to-tm-respects-id BT id-btm/refl id-tm/refl BT. %mode btm-to-tm-respects-id +Db +Di1 +Di2 -Db'. %worlds (btm-to-tm-block | bctm-to-tm-block) (btm-to-tm-respects-id _ _ _ _). %total {} (btm-to-tm-respects-id _ _ _ _). bctx-to-tm-empty : {N} bctx-to-tm (bctx/empty : bctx N) ([x] rst x) -> type. bctx-to-tm-empty/z : bctx-to-tm-empty _ (bctx-to-tm/z bctxz-to-tm/empty). bctx-to-tm-empty/s : bctx-to-tm-empty _ bctx-to-tm/empty. %mode bctx-to-tm-empty +Dk -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctx-to-tm-empty _ _). %total {} (bctx-to-tm-empty _ _). bvalue-to-value : bvalue BE -> btm-to-tm BE E -> value E -> type. bvalue-to-value/abs : bvalue-to-value bvalue/babs BTM value/abs. %mode bvalue-to-value +Dbv +Dt -Dv. %worlds (btm-to-tm-block | bctm-to-tm-block) (bvalue-to-value _ _ _). %total {} (bvalue-to-value _ _ _). %unique bvalue-to-value +Dbv +Dt -1Dv. bvalue-to-value2 : bvalue BE -> value E -> type. bvalue-to-value2/abs : bvalue-to-value2 (bvalue/babs : bvalue (babs BE)) (value/abs : value (abs E)) <- ({bx}{x} btm-to-tm bx x -> btm-to-tm (BE bx) (E x)). %mode bvalue-to-value2 +Dbv -Dv. %worlds (btm-to-tm-block | bctm-to-tm-block) (bvalue-to-value2 _ _). %total {} (bvalue-to-value2 _ _). %unique bvalue-to-value2 +Dbv -1Dv. n-rst-exchange : n-rst N E -> ({x} id-tm (E (rst x)) (rst (E x))) -> type. n-rst-exchange/z : n-rst-exchange n-rst/z ([x] id-tm/refl). n-rst-exchange/s : n-rst-exchange (n-rst/s NRST) ID' <- n-rst-exchange NRST ID <- ({x} id-tm-congr-rst (ID x) (ID' x)). %mode n-rst-exchange +Dn -Di. %worlds (tm-block) (n-rst-exchange _ _). %total A (n-rst-exchange A _). n-arst-exchange : n-arst N E -> ({x} id-amtm (E (arst x)) (arst (E x))) -> type. n-arst-exchange/z : n-arst-exchange n-arst/z ([x] id-amtm/refl). n-arst-exchange/s : n-arst-exchange (n-arst/s NRST) ID' <- n-arst-exchange NRST ID <- ({x} id-amtm-congr-arst (ID x) (ID' x)). %mode n-arst-exchange +Dn -Di. %worlds (amtm-block) (n-arst-exchange _ _). %total A (n-arst-exchange A _). atp-extend-id : nat -> atp -> atp -> type. atp-extend-id/z : atp-extend-id z AT AT. atp-extend-id/s : atp-extend-id N AT AT' -> atp-extend-id (s N) AT (T a (T a A con A) con AT'). atp-extend-id-respects-id : atp-extend-id N AT1 AT2 -> id-nat N N' -> id-atp AT1 AT1' -> id-atp AT2 AT2' -> atp-extend-id N' AT1' AT2' -> type. atp-extend-id-respects-id/- : atp-extend-id-respects-id A id-nat/refl id-atp/refl id-atp/refl A. %mode atp-extend-id-respects-id +Da +Di1 +Di2 +Di3 -Da'. %worlds (tp-block) (atp-extend-id-respects-id _ _ _ _ _). %total {} (atp-extend-id-respects-id _ _ _ _ _). batp-extend-id-to-atp : batp-extend-id N SUM BAT1 BAT2 -> batp-to-atp BAT1 AT1 -> batp-to-atp BAT2 AT2 -> atp-extend-id N AT1 AT2 -> type. batp-extend-id-to-atp/z : batp-extend-id-to-atp batp-extend-id/z BATP BATP atp-extend-id/z <- batp-to-atp-gen _ BATP. batp-extend-id-to-atp/s : batp-extend-id-to-atp (batp-extend-id/s bctp-id/- BEX) BATP1 (batp-to-atp/s (bctp-to-arrtp/bcarr BTP (batp-to-atp/s (bctp-to-arrtp/bcarr BTP BATP3) BATP3)) BATP2) (atp-extend-id/s EX) <- batp-extend-id-to-atp BEX BATP1 BATP2 EX <- btp-to-tp-gen _ BTP <- batp-to-atp-gen _ BATP3. %mode batp-extend-id-to-atp +Da -Dx1 -Dx2 -Da1. %worlds (btp-to-tp-gen-block) (batp-extend-id-to-atp _ _ _ _). %total A (batp-extend-id-to-atp A _ _ _). batp-extend-id-to-atp+ : batp-extend-id N SUM BAT1 BAT2 -> batp-to-atp BAT1 AT1 -> batp-to-atp BAT2 AT2 -> atp-extend-id N AT1 AT2 -> type. batp-extend-id-to-atp+/- : batp-extend-id-to-atp+ BAE BATP1 BATP2 AE <- batp-extend-id-to-atp BAE BATP1 BATP2' AE' <- batp-to-atp-det BATP2' BATP2 ID <- atp-extend-id-respects-id AE' id-nat/refl id-atp/refl ID AE. %mode batp-extend-id-to-atp+ +Da -Dx1 +Dx2 -Da1. %worlds (btp-to-tp-gen-block) (batp-extend-id-to-atp+ _ _ _ _). %total A (batp-extend-id-to-atp+ A _ _ _). atp-extend-id-to-of : atp-extend-id N AT1 AT2 -> n-rst N E -> E' of AT2 -> E E' of AT1 -> type. atp-extend-id-to-of/z : atp-extend-id-to-of atp-extend-id/z n-rst/z OF OF. atp-extend-id-to-of/s : atp-extend-id-to-of (atp-extend-id/s X) (n-rst/s N) (OF : E2 of _) OF'' <- tp-s-refl _ TSUB <- atp-s-refl _ ATSUB1 <- atp-s-refl _ ATSUB2 <- atp-extend-id-to-of X N (of/rst (of/sub OF (atp-s/a TSUB (ann-s/con-con (atp-s/a TSUB (ann-s/eps-con ATSUB1)) ATSUB2)))) OF' <- n-rst-exchange N ID <- of-respects-id OF' (ID E2) id-atp/refl OF''. %mode atp-extend-id-to-of +Dx1 -Dx2 +Dx6 -Dx4. %worlds (tp-s-refl-block | of-block) (atp-extend-id-to-of _ _ _ _). %total A (atp-extend-id-to-of A _ _ _). rstatp : nat -> atp -> tp -> atp -> atp -> type. rstatp/z : rstatp z (T a AT con AT') T AT AT'. rstatp/s : rstatp N AT' T ATC AT -> rstatp (s N) (CTT' a (CTT' a CAT' con CAT') con AT') T (CTT a CTA con ATC) (CTT a CTA con AT). brstatp-to-rstatp : brstatp N M A BAT1 BCT BAT2 -> batp-to-atp BAT1 AT1 -> bctp-to-arrtp BCT CT CAT -> batp-to-atp BAT2 AT2 -> rstatp A AT1 CT CAT AT2 -> type. brstatp-to-rstatp/z : brstatp-to-rstatp brstatp/z (batp-to-atp/s BCT BAT) BCT BAT rstatp/z. brstatp-to-rstatp/s : brstatp-to-rstatp (brstatp/s BS bctp-id/-) (batp-to-atp/s (bctp-to-arrtp/bcarr _ (batp-to-atp/s (bctp-to-arrtp/bcarr _ _) _)) BAT) (bctp-to-arrtp/bcarr BCT (batp-to-atp/s BCTG BAT1)) (batp-to-atp/s BCTG BAT2) (rstatp/s S) <- bctp-to-arrtp-gen _ BCTG <- brstatp-to-rstatp BS BAT (bctp-to-arrtp/bcarr BCT BAT1) BAT2 S. %mode brstatp-to-rstatp +Da1 +Dx1 -Dx2 -Dx3 -Da2. %worlds (btp-to-tp-gen-block) (brstatp-to-rstatp _ _ _ _ _). %total A (brstatp-to-rstatp A _ _ _ _). rstatp-to-of : rstatp N AT CT CAT AT' -> n-sft-dol-brst N E CE E' -> E of AT -> ({x} x pof CT -> CE x of CAT) -> E' of AT' -> type. rstatp-to-of/z : rstatp-to-of rstatp/z n-sft-dol-brst/z OF1 OF2 (of/pdol (of/abs OF2) OF1). rstatp-to-of/s : rstatp-to-of (rstatp/s S) (n-sft-dol-brst/s NSD) OF1 OF2 (of/sft OF3) <- tp-s-refl _ TPS <- atp-s-refl _ ATPS1 <- atp-s-refl _ ATPS2 <- ({x}{ox} rstatp-to-of S (NSD x) (of/rst (of/sub OF1 (atp-s/a TPS (ann-s/con-con (atp-s/a TPS (ann-s/eps-con ATPS1)) ATPS2)))) ([y][oy] of/pdol ox (OF2 y oy)) (OF3 x ox)). %mode rstatp-to-of +Dr -Dsd +Do1 +Do2 -Do3. %worlds (tp-s-refl-block | of-block) (rstatp-to-of _ _ _ _ _). %total A (rstatp-to-of A _ _ _ _). cappwtf : nat -> tp -> atp -> atp -> atp -> type. cappwtf/z : cappwtf z T AT' (T a AT' con AT) AT. cappwtf/s : cappwtf N T AT ATY ATX -> cappwtf (s N) T (T' a AT' con AT) ATY (T' a AT' con ATX). cappwtf-respects-id : cappwtf N AT1 AT2 AT3 AT4 -> id-nat N N' -> id-tp AT1 AT1' -> id-atp AT2 AT2' -> id-atp AT3 AT3' -> id-atp AT4 AT4' -> cappwtf N' AT1' AT2' AT3' AT4' -> type. cappwtf-respects-id/- : cappwtf-respects-id CW id-nat/refl id-tp/refl id-atp/refl id-atp/refl id-atp/refl CW. %mode cappwtf-respects-id +Dc +Di1 +Di2 +Di3 +Di4 +Di5 -Dc'. %worlds (tp-block) (cappwtf-respects-id _ _ _ _ _ _ _). %total {} (cappwtf-respects-id _ _ _ _ _ _ _). bcappwtf-to-cappwtf : bcappwtf _ N BAT0 BAT1 BAT2 BAT3 -> btp-to-tp BAT0 AT0 -> batp-to-atp BAT1 AT1 -> batp-to-atp BAT2 AT2 -> batp-to-atp BAT3 AT3 -> cappwtf N AT0 AT1 AT2 AT3 -> type. bcappwtf-to-cappwtf/z : bcappwtf-to-cappwtf bcappwtf/z BTP BATPx (batp-to-atp/s (bctp-to-arrtp/bcarr BTP BATP) BATP') BATP' C <- batp-to-atp-det BATP BATPx ID <- cappwtf-respects-id cappwtf/z id-nat/refl id-tp/refl ID id-atp/refl id-atp/refl C. bcappwtf-to-cappwtf/s : bcappwtf-to-cappwtf (bcappwtf/s BCW) BATP (batp-to-atp/s BCTP BATP') BATP'' (batp-to-atp/s BCTP BATP''') (cappwtf/s CW) <- bcappwtf-to-cappwtf BCW BATP BATP' BATP'' BATP''' CW. %mode bcappwtf-to-cappwtf +Dx -Dt1 +Dt2 +Dt3 -Dt4 -Dx'. %worlds (btp-to-tp-gen-block) (bcappwtf-to-cappwtf _ _ _ _ _ _). %total A (bcappwtf-to-cappwtf A _ _ _ _ _). bcappwtf-to-cappwtf-help : bcappwtf _ N BT1 (batp/s (BT1 bcarr BAT1) BAT1) BAT2 BAT3 -> btp-to-tp BT1 T1 -> batp-to-atp BAT1 AT1 -> batp-to-atp BAT2 AT2 -> batp-to-atp BAT3 AT3 -> cappwtf N T1 (T1 a AT1 con AT1) AT2 AT3 -> type. bcappwtf-to-cappwtf-help/- : bcappwtf-to-cappwtf-help BCW BT1 BAT1 BAT2 BAT3 CW' <- bcappwtf-to-cappwtf BCW BT1' (batp-to-atp/s (bctp-to-arrtp/bcarr BT1 BAT1) BAT1) BAT2 BAT3 CW <- btp-to-tp-det BT1' BT1 ID <- cappwtf-respects-id CW id-nat/refl ID id-atp/refl id-atp/refl id-atp/refl CW'. %mode bcappwtf-to-cappwtf-help +Dx +Dt1 +Dt2 +Dt3 -Dt4 -Dx'. %worlds (btp-to-tp-gen-block) (bcappwtf-to-cappwtf-help _ _ _ _ _ _). %total {} (bcappwtf-to-cappwtf-help _ _ _ _ _ _). cappwtf-to-of : cappwtf N ATR1 ATR AT AT' -> n-sft-dol-bcapp N EE E ER -> ({x} x pof ATR1 -> EE x of ATR) -> E of AT -> ER of AT' -> type. cappwtf-to-of/z : cappwtf-to-of cappwtf/z n-sft-dol-bcapp/z OF OF' (of/pdol (of/abs [x][ox] OF _ ox) OF'). cappwtf-to-of/s : cappwtf-to-of (cappwtf/s CW) (n-sft-dol-bcapp/s NSD) OF1 OF3 (of/sft OF2) <- ({x}{ox:x of _} cappwtf-to-of CW (NSD x) ([y][oy] of/pdol ox (OF1 _ oy)) OF3 (OF2 x ox)). %mode cappwtf-to-of +Dr -Dsd +Do1 +Do2 -Do3. %worlds (tp-s-refl-block | of-block) (cappwtf-to-of _ _ _ _ _). %total A (cappwtf-to-of A _ _ _ _). ofcapp : (tm -> tm) -> atp -> atp -> type. ofcapp/z : ofcapp ([x] x) AT AT. ofcapp/s : C pof TC arr ATC -> ofcapp CS AT AT' -> ofcapp ([x] CS (C dol x)) AT (TC a ATC con AT'). ofcapp-respects-id : ofcapp E AT1 AT2 -> ({x} id-tm (E x) (E' x)) -> id-atp AT1 AT1' -> id-atp AT2 AT2' -> ofcapp E' AT1' AT2' -> type. ofcapp-respects-id/refl : ofcapp-respects-id OC ([x] id-tm/refl) id-atp/refl id-atp/refl OC. %mode ofcapp-respects-id +Do +Di1 +Di2 +Di3 -Do'. %worlds (of-block | tp-s-refl-block) (ofcapp-respects-id _ _ _ _ _). %total {} (ofcapp-respects-id _ _ _ _ _). ofcapp-of : ofcapp E AT AT' -> E' of AT' -> E E' of AT -> type. ofcapp-of/z : ofcapp-of ofcapp/z OF OF. ofcapp-of/s : ofcapp-of (ofcapp/s OF1 OC) OF OF' <- ofcapp-of OC (of/pdol OF1 OF) OF'. %mode ofcapp-of +Dx +Do1 -Do2. %worlds (tp-s-refl-block | of-block) (ofcapp-of _ _ _). %total A (ofcapp-of A _ _). bvof-to-of : bvof N BE BT -> btm-to-tm BE E -> btp-to-tp BT T -> E pof T -> type. bof-to-of : bof N BE BT -> btm-to-tm BE E -> batp-to-atp BT T -> E of T -> type. bof-to-of+ : bof N BE BT -> btm-to-tm BE E -> batp-to-atp BT T -> E of T -> type. bcof-to-of : bcof NN N BE BT -> bctm-to-tm BE E -> bctp-to-arrtp BT T AT -> E pof T arr AT -> type. bctxof-to-of : bctxof NN N BE BT -> bctx-to-tm BE E -> bctp-to-arrtp BT T AT -> ({x} x pof T -> E x of AT) -> type. bctxzof-to-of : bctxof NN z BE BT -> bctxz-to-tm BE E -> bctp-to-arrtp BT T AT -> ({at} at atp-s at -> {x} x of T a AT con at -> rst (E x) of at) -> type. bofsft-to-of : bofsft N M BS BAT -> bsfttm-to-tm (BS : bsfttm _ M) E -> batp-to-atp BAT AT -> E of AT -> type. bofcapp-to-ofcapp : bofcapp _ BCA BAT BAT' -> bcapptm-to-tm BCA E -> batp-to-atp BAT AT -> batp-to-atp BAT' AT' -> ofcapp E AT AT' -> type. bofcapp-to-ofcapp+ : bofcapp _ BCA BAT BAT' -> bcapptm-to-tm BCA E -> batp-to-atp BAT AT -> batp-to-atp BAT' AT' -> ofcapp E AT AT' -> type. bof-to-of/var : bof-to-of (bof/var BO) BTM (batp-to-atp/s (bctp-to-arrtp/bcarr BTP BATP) BATP) (of/sub O (atp-s/a TSUB (ann-s/eps-con ATSUB))) <- bvof-to-of BO BTM BTP O <- tp-s-refl _ TSUB <- batp-to-atp-gen _ BATP <- atp-s-refl _ ATSUB. bof-to-of/abs : bof-to-of (bof/babs BO) (btm-to-tm/babs BTM) (batp-to-atp/s (bctp-to-arrtp/bcarr (btp-to-tp/barr BTP1 BATP1) BATP) BATP) (of/sub (of/abs O) (atp-s/a TSUB (ann-s/eps-con ATSUB))) <- btp-to-tp-gen _ BTP1 <- batp-to-atp-gen _ BATP <- ({bx}{bo}{x}{o}{tr} bvof-to-of bo tr BTP1 o -> bof-to-of (BO bx bo) (BTM bx x tr) BATP1 (O x o)) <- tp-s-refl _ TSUB <- atp-s-refl _ ATSUB. bof-to-of/app : bof-to-of (bof/bapp BO1 BO2) (btm-to-tm/bapp BTM1 BTM2) (batp-to-atp/s BCTP BATP) (of/app O1 O2) <- bof-to-of BO1 BTM1 (batp-to-atp/s (bctp-to-arrtp/bcarr (btp-to-tp/barr BTP (batp-to-atp/s BCTP BATP')) BATP'') BATP) O1 <- bof-to-of+ BO2 BTM2 (batp-to-atp/s (bctp-to-arrtp/bcarr BTP BATP') BATP'') O2. bof-to-of/bsft : bof-to-of (bof/bsft BS) (btm-to-tm/bsft BTM) BATP O <- bofsft-to-of BS BTM BATP O. bof-to-of+/- : bof-to-of+ BO BTM BATP OF' <- bof-to-of BO BTM BATP' OF <- batp-to-atp-det BATP' BATP ID <- of-respects-id OF id-tm/refl ID OF'. bofsft-to-of/bsz : bofsft-to-of (bofsft/bsz BO BX) (bsfttm-to-tm/z NRST BTM) BATPX2 OF' <- bof-to-of BO BTM BATPX1 OF <- batp-extend-id-to-atp+ BX BATPX2 BATPX1 X <- atp-extend-id-to-of X NRST OF OF'. bofsft-to-of/bss : bofsft-to-of (bofsft/bss BO) (bsfttm-to-tm/s BTT) (batp-to-atp/s BCTP BATP) (of/sft OF) <- bctp-to-arrtp-gen _ BCTP <- ({bx}{bo}{x}{o}{tr} bcof-to-of bo tr BCTP o -> bofsft-to-of (BO bx bo) (BTT bx x tr) BATP (OF x o)). bof-to-of/brst : bof-to-of (bof/brst BO BR) (btm-to-tm/brst NSD BTM) (batp-to-atp/s BCTP BATP') (of/sft OF') <- bof-to-of BO BTM BATP OF <- brstatp-to-rstatp BR BATP BCTP BATP' R <- tp-s-refl _ TPS <- atp-s-refl _ ATPS <- ({x}{ox} rstatp-to-of R (NSD x) OF ([y][oy] of/pdol ox (of/sub oy (atp-s/a TPS (ann-s/eps-con ATPS)))) (OF' x ox)). bofcapp-to-ofcapp/z : bofcapp-to-ofcapp bofcapp/z bcapptm-to-tm/z BAT BAT ofcapp/z. bofcapp-to-ofcapp/s : bofcapp-to-ofcapp (bofcapp/s BCO BOC) (bcapptm-to-tm/s BCTM BCA) BAT (batp-to-atp/s BCT BAT') (ofcapp/s OFC OC) <- bcof-to-of BCO BCTM BCT OFC <- bofcapp-to-ofcapp BOC BCA BAT BAT' OC. bofcapp-to-ofcapp+/- : bofcapp-to-ofcapp+ BOC BCA BAT1 BAT2 OC <- batp-to-atp-gen _ BAT1 <- bofcapp-to-ofcapp BOC BCA BAT1 BAT2' OC' <- batp-to-atp-det BAT2' BAT2 ID <- ofcapp-respects-id OC' ([x] id-tm/refl) id-atp/refl ID OC. bcof-to-of/bctx : bcof-to-of (bcof/bctx BCO) (bctm-to-tm/bctx BC) BCT (of/abs [x][ox] of/pdol (of/abs OF) (of/sub ox (atp-s/a TPS (ann-s/eps-con ATPS)))) <- bctxof-to-of BCO BC BCT OF <- tp-s-refl _ TPS <- atp-s-refl _ ATPS. bctxof-to-of/empty : bctxof-to-of (bctxof/empty bctp-id/-) bctx-to-tm/empty (bctp-to-arrtp/bcarr BT (batp-to-atp/s (bctp-to-arrtp/bcarr BT BAT) BAT)) ([x][ox] of/sub (of/rst (of/sub ox (atp-s/a TPS (ann-s/eps-con (atp-s/a TPS ann-s/eps-eps))))) (atp-s/a TPS (ann-s/eps-con ATPS))) <- btp-to-tp-gen _ BT <- batp-to-atp-gen _ BAT <- tp-s-refl _ TPS <- atp-s-refl _ ATPS. bctxof-to-of/cons : bctxof-to-of (bctxof/cons C1 C2) (bctx-to-tm/cons BC1 BC2) (bctp-to-arrtp/bcarr BT BAT) ([x][ox] of/pdol (of/abs OF') (OFB _ ox)) <- bctxof-to-of C1 BC1 BCT (OF : {x} x pof _ -> EA x of _) <- bctxof-to-of C2 BC2 (bctp-to-arrtp/bcarr BT (batp-to-atp/s BCT' BAT)) (OFB : {x} x pof _ -> EB x of _) <- bctp-to-arrtp-det BCT BCT' ID1 ID2 <- of-var-respects-id OF ([x] id-tm/refl) ID1 ID2 OF'. bctxof-to-of/z : bctxof-to-of BCOF (bctx-to-tm/z BC) BCT ([x][ox] OF _ ATPS _ (of/sub ox (atp-s/a TPS (ann-s/eps-con ATPS)))) <- bctxzof-to-of BCOF BC BCT OF <- tp-s-refl _ TPS <- atp-s-refl _ ATPS. bctxzof-to-of/appl : bctxzof-to-of (bctxof/appl BCOF BOF) (bctxz-to-tm/appl BTM BC) (bctp-to-arrtp/bcarr (btp-to-tp/barr BT (batp-to-atp/s BCT BAT)) BAT') ([at][ats][x][ox] COF at ats _ (of/app ox OF)) <- bctxzof-to-of BCOF BC BCT (COF : {at} at atp-s at -> {x} x of _ -> rst (EA x) of _) <- bof-to-of BOF BTM (batp-to-atp/s (bctp-to-arrtp/bcarr BT BAT) BAT') OF. bctxzof-to-of/appr : bctxzof-to-of (bctxof/appr BOF BCOF : bctxof _ _ (bctx/appr _ BV _) _) (bctxz-to-tm/appr BTM BC) (bctp-to-arrtp/bcarr BT BAT) ([at][ats][x][ox] COF at ats _ (of/app (of/sub OF' (atp-s/a TPS (ann-s/eps-con ats))) ox)) <- bctxzof-to-of BCOF BC BCT (COF : {at} at atp-s at -> {x} x of _ -> rst (EA x) of _) <- batp-to-atp-gen _ BAT1 <- batp-to-atp-gen _ BAT <- btp-to-tp-gen _ BT <- bof-to-of+ BOF BTM (batp-to-atp/s (bctp-to-arrtp/bcarr (btp-to-tp/barr BT (batp-to-atp/s BCT BAT)) BAT1) BAT1) OF <- bvalue-to-value BV BTM V <- value-of V OF OF' <- tp-s-refl _ TPS. bctxzof-to-of/empty : bctxzof-to-of (bctxof/empty bctp-id/-) bctxz-to-tm/empty (bctp-to-arrtp/bcarr BTP (batp-to-atp/s (bctp-to-arrtp/bcarr BTP BATP) BATP)) ([at][ats][x][ox] of/rst (of/sub ox (atp-s/a TPS (ann-s/con-con (atp-s/a TPS (ann-s/eps-con ATPS)) ats)))) <- btp-to-tp-gen _ BTP <- batp-to-atp-gen _ BATP <- tp-s-refl _ TPS <- atp-s-refl _ ATPS. bof-to-of/bcapp : bof-to-of (bof/bcapp batp-pure-tp/- BCW BOC BOF) (btm-to-tm/bcapp NSD BCA BTM) (batp-to-atp/s BTC1 BAT) (of/app (of/sub (of/abs OFZ) (atp-s/a TPS (ann-s/eps-con ATPS))) OF) <- bof-to-of BOF BTM (batp-to-atp/s (bctp-to-arrtp/bcarr BTC BATC) BAT) OF <- batp-to-atp-gen _ BATX <- bofcapp-to-ofcapp+ BOC BCA BATY (batp-to-atp/s (bctp-to-arrtp/bcarr BTC BATX) BATX) OC <- btp-to-tp-gen _ BTZ <- batp-to-atp-gen _ BATZ <- bcappwtf-to-cappwtf-help BCW BTZ BATZ BATY (batp-to-atp/s BTC1 BATC') CW' <- batp-to-atp-det BATC' BATC BID <- id-ann-congr-con id-atp/refl BID BIDC <- id-atp-congr-a id-tp/refl BIDC BIDA <- cappwtf-respects-id CW' id-nat/refl id-tp/refl id-atp/refl id-atp/refl BIDA CW <- tp-s-refl _ TPS1 <- atp-s-refl _ ATPS1 <- ({x}{ox:x pof _} ofcapp-of OC (of/sub ox (atp-s/a TPS1 (ann-s/eps-con ATPS1))) (OFI x ox)) <- tp-s-refl _ TPS2 <- atp-s-refl _ ATPS2 <- ({x}{ox:x pof _} cappwtf-to-of CW (NSD x) ([y][oy] of/sub oy (atp-s/a TPS2 (ann-s/eps-con ATPS2))) (OFI x ox) (OFZ x ox)) <- tp-s-refl _ TPS <- atp-s-refl _ ATPS. %block btm-to-tm-of-block : some {N:nat}{bt:btp N}{t:tp}{tt:btp-to-tp bt t} block {bx:btm}{bo:bvof N bx bt}{x:tm}{o:x pof t}{tr:btm-to-tm bx x}{_:bvof-to-of bo tr tt o}. %block bctm-to-tm-of-block : some {N:nat}{n:nat}{bt:bctp N n}{t:tp}{at:atp}{tt:bctp-to-arrtp bt t at} block {bx:bctm n}{bo:bcof N n bx bt}{x:tm}{o:x pof (t arr at)}{tr:bctm-to-tm bx x}{_:bcof-to-of bo tr tt o}. %block btp-to-tp-of-block : some {N:nat} block {bt:btp N}{t:tp}{r:t tp-s t}{_:tp-s-refl t r}{x:btp-to-tp bt t}{_:btp-to-tp-gen bt x}. %mode (bvof-to-of +Do -Dx1 -Dx2 -Do2) (bof-to-of +Do -Dx1 -Dx2 -Do2) (bof-to-of+ +Do -Dx1 +Dx2 -Do2) (bcof-to-of +Do -Dx1 -Dx2 -Do2) (bctxof-to-of +Do -Dx1 -Dx2 -Do2) (bctxzof-to-of +Do -Dx1 -Dx2 -Do2) (bofsft-to-of +Do -Dx1 -Dx2 -Do2) (bofcapp-to-ofcapp +Db -Dx1 +Dx2 -Dx3 -Do2) (bofcapp-to-ofcapp+ +Db -Dx1 -Dx2 +Dx3 -Do2). %worlds (btm-to-tm-of-block | bctm-to-tm-of-block | btp-to-tp-of-block) (bvof-to-of _ _ _ _) (bof-to-of _ _ _ _) (bof-to-of+ _ _ _ _) (bcof-to-of _ _ _ _) (bctxof-to-of _ _ _ _) (bctxzof-to-of _ _ _ _) (bofsft-to-of _ _ _ _) (bofcapp-to-ofcapp _ _ _ _ _) (bofcapp-to-ofcapp+ _ _ _ _ _). %total (A B C D E F G I J) (bvof-to-of C _ _ _) (bof-to-of A _ _ _) (bof-to-of+ D _ _ _) (bcof-to-of B _ _ _) (bctxzof-to-of I _ _ _) (bctxof-to-of J _ _ _) (bofsft-to-of E _ _ _) (bofcapp-to-ofcapp F _ _ _ _) (bofcapp-to-ofcapp+ G _ _ _ _). bctxs-all-empty : {N} bctxs N M -> type. bctxs-all-empty/z : bctxs-all-empty _ bcz. bctxs-all-empty/s : bctxs-all-empty _ BCS -> bctxs-all-empty _ (bctx/empty bcs BCS). bstep : bprog N -> bprog N -> type. bstep/abs : id-btm (BE BV) BE' -> bvalue BV -> bstep (bprog/- (babs BE bapp BV) BC) (bprog/- BE' BC). bstep/rst : N natleq M -> bvalue BV -> bstep (bprog/- (brst N BV) BC : bprog M) (bprog/- BV BC). bstep/sft : bsfttm-plugall-bctxs BE BC BE' -> bctxs-all-empty N BC' -> bctxs-append (BC : bctxs N z) (BCB : bctxs _ N) BC1 -> bctxs-append (BC' : bctxs N z) BCB BC1' -> bstep (bprog/- (bsft BE) BC1) (bprog/- BE' BC1'). bstep/capp : bvalue BV -> bcapptm-to-bctxs BCT BCS -> bctxs-to-bctx BCS1 BC1 -> bctxs-append (BCS1 : bctxs (s N) z) (BC bcs (BCB : bctxs _ (s (s N)))) BCF -> bctxs-append (BCS : bctxs (s N) z) (bctx/cons BC BC1 bcs BCB) BCF' -> bstep (bprog/- (BCT bcapp BV) BCF) (bprog/- BV BCF'). % check correctness of definitions %query 1 * bstep (bprog/- (brst (s z) E) BC) B. %query 1 * bstep (bprog/- (bsft (bsz E)) BC) B. %query 1 * bstep (bprog/- (bsft (bss ([x] bsz (E x)))) BC) B. %query 1 * bstep (bprog/- (bsft (bss ([x] bss [y] bsz (E x y)))) BC) B. %query 0 * bstep (bprog/- (baz bcapp BV) BC) B. %query 1 * bstep (bprog/- (BCT bas baz bcapp BV) BC) B. %query 1 * bstep (bprog/- (BCT1 bas BCT2 bas baz bcapp BV) BC) B. bstep-focus-e : bprog N -> bprog N -> type. bstep-focus-a : bprogs M N -> bprogs M' N' -> type. bstep-focus-e/app : bstep-focus-e (bprog/- (BE1 bapp BE2) (BC bcs BCS)) (bprog/- BE1 (bctx/appl BC BE2 bcs BCS)). bstep-focus-e/capp : bstep-focus-e (bprog/- (BCA bcapp BE) (BC bcs BCS)) (bprog/- BE (bctx/capp BCA BC bcs BCS)). bstep-focus-e/rst : bctxs-to-bctx BCSA (BCA : bctx N) -> bctxs-all-empty (s N) BCSB -> bctxs-append (BCSA : bctxs (s N) z) (BC bcs BCB) BCS1 -> bctxs-append (BCSB : bctxs (s N) z) (bctx/cons BC BCA bcs BCB) BCS2 -> bstep-focus-e (bprog/- (brst (s N) BE) BCS1) (bprog/- BE BCS2). bstep-focus-a/appl : {BV:bvalue BE} bstep-focus-a (bprog/- BE (bctx/appl BC BE2 bcs BCS)) (bprog/- BE2 (bctx/appr BE BV BC bcs BCS)). bstep-focus-a/appr : {BV:bvalue BE} bstep-focus-a (bprog/- BE (bctx/appr BE2 BV2 BC bcs BCS)) (bprog/- (BE2 bapp BE) (BC bcs BCS)). bstep-focus-a/capp : {BV:bvalue BE} bstep-focus-a (bprog/- BE (bctx/capp BCA BC bcs BCS)) (bprog/- (BCA bcapp BE) (BC bcs BCS)). bstep-focus-a/cons : {BV:bvalue BE} bctx-to-bctxs (BCX : bctx N) BCSX -> bctxs-append (BCSX : bctxs (s N1) MM) (BC bcs BCB) BCS2 -> bstep-focus-a (bprog/- BE (bctx/cons BC BCX bcs BCB)) (bprog/- BE BCS2). bstep-focus-a/empty : {BV:bvalue BE} bstep-focus-a (bprog/- BE (bctx/empty bcs BCS)) (bprog/- BE BCS). %query 1 * bstep-focus-e (bprog/- (brst (s z) BE) (BC1 bcs BC2 bcs BC3 bcs bcz)) B. %query 1 * bstep-focus-e (bprog/- (brst (s (s z)) BE) (BC1 bcs BC2 bcs BC3 bcs bcz)) B. %query 1 1 bstep-focus-a (bprog/- (babs E) (bctx/cons BC2 (bctx/cons BC1 (bctx/empty : bctx z)) bcs BC3 bcs bcz)) B. %query 1 1 bstep-focus-a (bprog/- (babs E) (bctx/cons BC2 (bctx/cons BC1 (bctx/empty : bctx (s z))) bcs BC3 bcs bcz)) B. %query 1 * bstep-focus-a (bprog/- (babs E) (bctx/empty bcs bctx/empty bcs bctx/cons BC2 BC1 bcs BC3 bcs bcz)) B. bsteps-focus : bprogs M N -> bprogs M' N' -> type. bsteps-focus/z : bsteps-focus BP BP. bsteps-focus/e : bstep-focus-e BP BP' -> bsteps-focus BP' BP'' -> bsteps-focus BP BP''. bsteps-focus/a : bstep-focus-a BP BP' -> bsteps-focus BP' BP'' -> bsteps-focus BP BP''. bam-step : bams N M -> bams N' M' -> type. bam-step/e-babs : bam-step (bam/e (babs E) EC) (bam/a (babs E) bvalue/babs EC). bam-step/e-bapp : bam-step (bam/e (E1 bapp E2) (C bcs EC)) (bam/e E1 (bctx/appl C E2 bcs EC)). bam-step/e-bsft : bsfttm-plugall-bctxs BE BC BE' -> bctxs-all-empty N BC' -> bctxs-append (BC : bctxs N z) (BCB : bctxs _ N) BC1 -> bctxs-append (BC' : bctxs N z) BCB BC1' -> bam-step (bam/e (bsft BE) BC1) (bam/e BE' BC1'). bam-step/e-bcapp : bam-step (bam/e (BCE bcapp E) (C bcs EC)) (bam/e E (bctx/capp BCE C bcs EC)). bam-step/e-rst : bctxs-all-empty (s N) BCE -> bctxs-to-bctx (BCS : bctxs (s N) z) BCSB -> bctxs-append BCS (BC bcs BCB) BCF -> bctxs-append BCE (bctx/cons BC BCSB bcs BCB) BCF' -> bam-step (bam/e (brst (s N) E) BCF) (bam/e E BCF'). bam-step/a-bcapp : bcapptm-to-bctxs BCT BCS -> bctxs-to-bctx BCS1 BC1 -> bctxs-append (BCS1 : bctxs (s N) z) (BC bcs BCB) (BCF1 bcs BCF) -> bctxs-append (BCS : bctxs (s N) z) (bctx/cons BC BC1 bcs BCB) BCF' -> bam-step (bam/a BV BVV (bctx/capp BCT BCF1 bcs BCF)) (bam/a BV BVV BCF'). bam-step/a-appl : bam-step (bam/a BV BVV (bctx/appl BC BE bcs BCS)) (bam/e BE (bctx/appr BV BVV BC bcs BCS)). bam-step/a-appr : bam-step (bam/a BV BVV (bctx/appr (babs BE) bvalue/babs BC bcs BCS)) (bam/e (BE BV) (BC bcs BCS)). bam-step/a-empty : bam-step (bam/a BV BVV (bctx/empty bcs BCS)) (bam/a BV BVV BCS). bam-step/a-cons : bctx-append BC2 (BC1 bcs BCS) BCF -> bam-step (bam/a BV BVV (bctx/cons BC1 (BC2 : bctx N) bcs BCS)) (bam/a BV BVV BCF). %query 1 1 bam-step (bam/a BV BVV (bctx/cons BC1 bctx/empty bcs BCS)) F. %query 1 * bam-step (bam/e (brst (s (s z)) BE) (BC1 bcs BC2 bcs BC3 bcs bcz)) F. %query 1 * bam-step (bam/e (bsft (bss [x] bss [y] bsz (BE x y))) (BC1 bcs BC2 bcs BC3 bcs bcz)) F. %query 1 * bam-step (bam/a BV BVV (bctx/capp (bctmctx XC1 bas baz) BC1 bcs BC2 bcs BC3 bcs bcz)) F. bam-to-am : bams N M -> am -> type. bam-to-am/e : bam-to-am (bam/e BE BCS) (am/e E CS) <- bctxs-to-amectx-am BCS CS <- btm-to-amtm BE E. bam-to-am/a : bam-to-am (bam/a BE BV BCS) (am/a E V CS) <- bctxs-to-amectx-am BCS CS <- bvalue-to-amvalue2 BV V. %mode bam-to-am +Db -Dt. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bam-to-am _ _). %total {} (bam-to-am _ _). steps-append : steps E1 E2 -> steps E2 E3 -> steps E1 E3 -> type. steps-append/z : steps-append stz ST ST. steps-append/s : steps-append (S sts ST1) ST2 (S sts ST3) <- steps-append ST1 ST2 ST3. %mode steps-append +De1 +De2 -De3. %worlds (tm-block) (steps-append _ _ _). %total A (steps-append A _ _). %unique steps-append +De1 +De2 -1De3. bplug-bctxs : {N} bctxs M N -> (btm -> btm) -> type. bplug-bctxs/z : bplug-bctxs _ bcz ([x] x). bplug-bctxs/s : bplug-bctxs N (BC bcs BCS) ([x] BES (brst (s N) (BE x))) <- bplug-bctxs _ BCS BES <- bplug BC BE. %mode bplug-bctxs +Dn +Db -Dt. %worlds (btm-block | bctm-block) (bplug-bctxs _ _ _). %total A (bplug-bctxs _ A _). bprog-to-btm : bprog N -> btm -> type. bprog-to-btm/- : bprog-to-btm (bprog/- BE BCS) (BES BE) <- bplug-bctxs _ BCS BES. %mode bprog-to-btm +Db -Dt. %worlds (btm-block | bctm-block) (bprog-to-btm _ _). %total {} (bprog-to-btm _ _). bctxz-to-ctx : bctx z -> ctx -> type. bctxz-to-ctx/empty : bctxz-to-ctx bctx/empty ctx/empty. bctxz-to-ctx/appl : bctxz-to-ctx (bctx/appl BC BE) (ctx/appl C E) <- btm-to-tm BE E <- bctxz-to-ctx BC C. bctxz-to-ctx/appr : bctxz-to-ctx (bctx/appr BE BV BC) (ctx/appr E V C) <- bctxz-to-ctx BC C <- bvalue-to-value2 BV V. bctxz-to-ctx/capp : bctxz-to-ctx (bctx/capp BCA BC) (ctx/appr (abs EF) value/abs C) <- bctxz-to-ctx BC C <- bcapptm-to-tm (BCA : bcapptm N z) E' <- ({v} n-sft-dol-bcapp (s N) ([x] x) (E' v) (EF v)). %mode bctxz-to-ctx +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxz-to-ctx _ _). %total A (bctxz-to-ctx A _). %unique bctxz-to-ctx +Db -1Dt. bctxs-to-ectx : bctxs M N -> ectx -> type. bctxs-to-ectx/z : bctxs-to-ectx bcz (ectx/base ctx/empty). bctxs-to-ectx/s : bctxs-to-ectx (BC bcs BCS) (ectx/cons (abs EC) value/abs ctx/empty ECS) <- bctxs-to-ectx BCS ECS <- bctx-to-tm BC EC. %mode bctxs-to-ectx +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-ectx _ _). %total A (bctxs-to-ectx A _). %unique bctxs-to-ectx +Db -1Dt. bctxs-to-tm : bctxs M N -> (tm -> tm) -> type. bctxs-to-tm/z : bctxs-to-tm bcz ([x] x). bctxs-to-tm/s : bctx-to-tm BC EC -> bctxs-to-tm BCS ECS -> bctxs-to-tm (BC bcs BCS) ([x] ECS (abs EC dol x)). %mode bctxs-to-tm +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm _ _). %total A (bctxs-to-tm A _). %unique bctxs-to-tm +Db -1Dt. bctxs-to-tm-short : bctxs M N -> (tm -> tm) -> type. bctxs-to-tm-short/empty : bctxs-to-tm-short (bctx/empty bcs BCS) E <- bctxs-to-tm-short BCS E. bctxs-to-tm-short/full : bctxs-to-tm-short BCS E <- bctxs-to-tm BCS E. %mode bctxs-to-tm-short +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-short _ _). %total A (bctxs-to-tm-short A _). bctxsr-to-tm : bctxsr M N -> (tm -> tm) -> type. bctxsr-to-tm/z : bctxsr-to-tm bcrz ([x] x). bctxsr-to-tm/s : bctx-to-tm BC EC -> bctxsr-to-tm BCS ECS -> bctxsr-to-tm (BC bcrs BCS) ([x] abs EC dol ECS x). %mode bctxsr-to-tm +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxsr-to-tm _ _). %total A (bctxsr-to-tm A _). %unique bctxsr-to-tm +Db -1Dt. bctxs-to-tm-split : bctxs-append BCS1 BCS2 BCS -> bctxs-to-tm BCS E -> bctxs-to-tm BCS1 E1 -> bctxs-to-tm BCS2 E2 -> ({x} id-tm (E2 (E1 x)) (E x)) -> type. bctxs-to-tm-split/z : bctxs-to-tm-split bctxs-append/z BTE bctxs-to-tm/z BTE ([x] id-tm/refl). bctxs-to-tm-split/s : bctxs-to-tm-split (bctxs-append/s BAP) (bctxs-to-tm/s BTE BTES) (bctxs-to-tm/s (BTE : bctx-to-tm _ E) BTES') BTES'' ([x] ID (abs E dol x)) <- bctxs-to-tm-split BAP BTES BTES' BTES'' ID. %mode bctxs-to-tm-split +Da +Db1 -Db2 -Db3 -Did. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-split _ _ _ _ _). %total A (bctxs-to-tm-split A _ _ _ _). bctxs-to-tm-short-split : bctxs-append BCS1 BCS2 BCS -> bctxs-all-empty N BCS1 -> bctxs-to-tm-short BCS E -> bctxs-to-tm-short BCS1 E1 -> bctxs-to-tm-short BCS2 E2 -> ({x} id-tm (E2 (E1 x)) (E x)) -> type. bctxs-to-tm-short-split/z : bctxs-to-tm-short-split bctxs-append/z bctxs-all-empty/z BTE (bctxs-to-tm-short/full bctxs-to-tm/z) BTE ([x] id-tm/refl). bctxs-to-tm-short-split/s : bctxs-to-tm-short-split (bctxs-append/s BAP) (bctxs-all-empty/s BAE) (bctxs-to-tm-short/empty BTE) (bctxs-to-tm-short/empty NRST) BTE' ID <- bctxs-to-tm-short-split BAP BAE BTE NRST BTE' ID. bctxs-to-tm-short-split/full : bctxs-to-tm-short-split BAP (bctxs-all-empty/s BAE) (bctxs-to-tm-short/full BTE) (bctxs-to-tm-short/full BTE1) (bctxs-to-tm-short/full BTE2) ID <- bctxs-to-tm-split BAP BTE BTE1 BTE2 ID. %mode bctxs-to-tm-short-split +Da +Dae +Db1 -Db2 -Db3 -Did. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-short-split _ _ _ _ _ _). %total A (bctxs-to-tm-short-split A _ _ _ _ _). bctxs-to-tm-append : bctxs-append BCS1 BCS2 BCS -> bctxs-to-tm BCS1 E1 -> bctxs-to-tm BCS2 E2 -> bctxs-to-tm BCS ([x] E2 (E1 x)) -> type. bctxs-to-tm-append/z : bctxs-to-tm-append bctxs-append/z bctxs-to-tm/z BTES BTES. bctxs-to-tm-append/s : bctxs-to-tm-append (bctxs-append/s BCA) (bctxs-to-tm/s BTE BTES) BTES' (bctxs-to-tm/s BTE BTES'') <- bctxs-to-tm-append BCA BTES BTES' BTES''. %mode bctxs-to-tm-append +Da +Db1 +Db2 -Db3. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-append _ _ _ _). %total A (bctxs-to-tm-append A _ _ _). bctxs-to-tm-short-append : bctxs-append BCS1 BCS2 BCS -> bctxs-to-tm-short BCS1 E1 -> bctxs-to-tm BCS2 E2 -> bctxs-to-tm-short BCS ([x] E2 (E1 x)) -> type. bctxs-to-tm-short-append/z : bctxs-to-tm-short-append bctxs-append/z (bctxs-to-tm-short/full bctxs-to-tm/z) BTES (bctxs-to-tm-short/full BTES). bctxs-to-tm-short-append/empty : bctxs-to-tm-short-append (bctxs-append/s BCA) (bctxs-to-tm-short/empty BTE) BTE1 (bctxs-to-tm-short/empty BTE2) <- bctxs-to-tm-short-append BCA BTE BTE1 BTE2. bctxs-to-tm-short-append/full : bctxs-to-tm-short-append BCA (bctxs-to-tm-short/full BTE) BTE1 (bctxs-to-tm-short/full BTE2) <- bctxs-to-tm-append BCA BTE BTE1 BTE2. %mode bctxs-to-tm-short-append +Da +Db1 +Db2 -Db3. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-short-append _ _ _ _). %total A (bctxs-to-tm-short-append A _ _ _). bctxs-split-nat : sum M1 M2 M -> sum M1 N NM -> {BC1:bctxs M N}{BC2:bctxs M1 N}{BC3:bctxs M2 NM} bctxs-append BC2 BC3 BC1 -> type. bctxs-split-nat/z : bctxs-split-nat sum/z _ _ bcz _ bctxs-append/z. bctxs-split-nat/s : bctxs-split-nat (sum/s SUM) SUM1 (BC bcs BCS1) (BC bcs BCS2) BCS3 (bctxs-append/s BAP) <- sum-move-ltr SUM1 SUM1' <- bctxs-split-nat SUM SUM1' BCS1 BCS2 BCS3 BAP. %mode bctxs-split-nat +Ds1 +Ds2 +Db1 -Db2 -Db3 -Da. %worlds (btm-block | bctm-block) (bctxs-split-nat _ _ _ _ _ _). %total A (bctxs-split-nat _ _ A _ _ _). bprog-to-tm : bprogs M N -> tm -> type. bprog-to-tm/- : bprog-to-tm (bprog/- BE BCS) (ECS E) <- bctxs-to-tm BCS ECS <- btm-to-tm BE E. %mode bprog-to-tm +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bprog-to-tm _ _). %total {} (bprog-to-tm _ _). %unique bprog-to-tm +Db -1Dt. bprog-to-tm-short : bprog N -> tm -> type. bprog-to-tm-short/- : bprog-to-tm-short (bprog/- BE BCS) (ECS E) <- bctxs-to-tm-short BCS ECS <- btm-to-tm BE E. %mode bprog-to-tm-short +Db -Dt. %worlds (btm-to-tm-block | bctm-to-tm-block) (bprog-to-tm-short _ _). %total {} (bprog-to-tm-short _ _). bctxs-all-empty-n-rst-eqv : bctxs-all-empty N BCS -> bctxs-to-tm BCS E -> n-rst N ER -> ({x} tm-eqv (E x) (ER x)) -> type. bctxs-all-empty-n-rst-eqv/z : bctxs-all-empty-n-rst-eqv bctxs-all-empty/z bctxs-to-tm/z n-rst/z ([x] tm-eqv/refl). bctxs-all-empty-n-rst-eqv/s : bctxs-all-empty-n-rst-eqv (bctxs-all-empty/s BAE) (bctxs-to-tm/s BCEE BCES) (n-rst/s NRST) EQV'' <- bctx-to-tm-empty _ BCEE <- bctxs-all-empty-n-rst-eqv BAE BCES NRST (EQV : {x} tm-eqv (E1 x) (E2 x)) <- n-rst-exchange NRST ID <- ({x} tm-eqv-congr (tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) E2 (EQV1 x)) <- ({x} tm-eqv-respects-id (tm-eqv/trans (EQV _) (EQV1 x)) id-tm/refl (ID x) (EQV'' x)). %mode bctxs-all-empty-n-rst-eqv +De -Dt +Dr -De1. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-all-empty-n-rst-eqv _ _ _ _). %total A (bctxs-all-empty-n-rst-eqv A _ _ _). steps-to-steps-eqv : steps E1 E2 -> steps-eqv E1 E2 -> type. steps-to-steps-eqv/z : steps-to-steps-eqv stz (stez tm-eqv/refl). steps-to-steps-eqv/s : steps-to-steps-eqv (ST sts STS) (ST stes STS') <- steps-to-steps-eqv STS STS'. %mode steps-to-steps-eqv +Ds1 -Ds2. %worlds (tm-block) (steps-to-steps-eqv _ _). %total A (steps-to-steps-eqv A _). %unique steps-to-steps-eqv +Ds1 -1Ds2. steps-eqv-append : steps-eqv E1 E2 -> steps-eqv E2 E3 -> steps-eqv E1 E3 -> type. steps-eqv-append/z : steps-eqv-append (stez TEQ) ST (TEQ stee ST). steps-eqv-append/s : steps-eqv-append (S stes ST1) ST2 (S stes ST3) <- steps-eqv-append ST1 ST2 ST3. steps-eqv-append/s : steps-eqv-append (S stee ST1) ST2 (S stee ST3) <- steps-eqv-append ST1 ST2 ST3. %mode steps-eqv-append +De1 +De2 -De3. %worlds (tm-block) (steps-eqv-append _ _ _). %total A (steps-eqv-append A _ _). %unique steps-append +De1 +De2 -1De3. steps-eqv-congr-ectx : steps-eqv E1 E2 -> ectx-to-tm _ E -> steps-eqv (E E1) (E E2) -> type. steps-eqv-congr-ectx/z : steps-eqv-congr-ectx (stez EQV) (_ : ectx-to-tm _ E) (stez EQV') <- tm-eqv-congr EQV E EQV'. steps-eqv-congr-ectx/e : steps-eqv-congr-ectx (EQV stee ST) (CTT : ectx-to-tm _ E) (EQV' stee ST') <- steps-eqv-congr-ectx ST CTT ST' <- tm-eqv-congr EQV E EQV'. steps-eqv-congr-ectx/s : steps-eqv-congr-ectx (step/ec (XTT : ectx-to-tm _ E') RED stes ST) (CTT : ectx-to-tm _ E) (step/ec XTT' RED stes ST') <- steps-eqv-congr-ectx ST CTT ST' <- ectx-to-tm-append CTT XTT _ XTT'. %mode steps-eqv-congr-ectx +Ds1 +De -Ds2. %worlds (tm-block) (steps-eqv-congr-ectx _ _ _). %total A (steps-eqv-congr-ectx A _ _). bctxs-to-tm-to-bctxs-to-ectx : bctxs-to-tm BCS E -> ectx-to-tm ECTX E -> bctxs-to-ectx BCS ECTX -> type. bctxs-to-tm-to-bctxs-to-ectx/z : bctxs-to-tm-to-bctxs-to-ectx bctxs-to-tm/z (ectx-to-tm/base ctx-to-tm/empty) bctxs-to-ectx/z. bctxs-to-tm-to-bctxs-to-ectx/s : bctxs-to-tm-to-bctxs-to-ectx (bctxs-to-tm/s BCTX BCTXS) (ectx-to-tm/cons ECTX ctx-to-tm/empty) (bctxs-to-ectx/s BCTX BCTXS') <- bctxs-to-tm-to-bctxs-to-ectx BCTXS ECTX BCTXS'. %mode bctxs-to-tm-to-bctxs-to-ectx +Db -Dc -Db'. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-to-bctxs-to-ectx _ _ _). %total A (bctxs-to-tm-to-bctxs-to-ectx A _ _). btm-to-tm-to-bvalue-to-value2 : btm-to-tm BE E -> {BV:bvalue BE}{V:value E} bvalue-to-value2 BV V -> type. btm-to-tm-to-bvalue-to-value2/abs : btm-to-tm-to-bvalue-to-value2 (btm-to-tm/babs Q) bvalue/babs value/abs (bvalue-to-value2/abs Q). %mode btm-to-tm-to-bvalue-to-value2 +Db +Dbv -Dv -Dg. %worlds (btm-to-tm-block | bctm-to-tm-block) (btm-to-tm-to-bvalue-to-value2 _ _ _ _). %total {} (btm-to-tm-to-bvalue-to-value2 _ _ _ _). bctxz-to-tm-to-bctx-to-ctx : bctxz-to-tm BC E -> ctx-to-tm C E -> bctxz-to-ctx BC C -> type. bctxz-to-tm-to-bctx-to-ctx/empty : bctxz-to-tm-to-bctx-to-ctx bctxz-to-tm/empty ctx-to-tm/empty bctxz-to-ctx/empty. bctxz-to-tm-to-bctx-to-ctx/appl : bctxz-to-tm-to-bctx-to-ctx (bctxz-to-tm/appl Q BCT) (ctx-to-tm/appl CTT) (bctxz-to-ctx/appl BCZ Q) <- bctxz-to-tm-to-bctx-to-ctx BCT CTT BCZ. bctxz-to-tm-to-bctx-to-ctx/appr : bctxz-to-tm-to-bctx-to-ctx (bctxz-to-tm/appr Q BCT) (ctx-to-tm/appr CTT) (bctxz-to-ctx/appr W BCZ) <- bctxz-to-tm-to-bctx-to-ctx BCT CTT BCZ <- btm-to-tm-to-bvalue-to-value2 Q _ _ W. bctxz-to-tm-to-bctx-to-ctx/capp : bctxz-to-tm-to-bctx-to-ctx (bctxz-to-tm/capp NSD ZZZ BCT) (ctx-to-tm/appr CTT) (bctxz-to-ctx/capp NSD ZZZ BCZ) <- bctxz-to-tm-to-bctx-to-ctx BCT CTT BCZ. %mode bctxz-to-tm-to-bctx-to-ctx +Db -Dc -Db'. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxz-to-tm-to-bctx-to-ctx _ _ _). %total A (bctxz-to-tm-to-bctx-to-ctx A _ _). n-rst-ectx-to-tm : n-rst N E -> ectx-to-tm ECTX E -> type. n-rst-ectx-to-tm/z : n-rst-ectx-to-tm n-rst/z (ectx-to-tm/base ctx-to-tm/empty). n-rst-ectx-to-tm/s : n-rst-ectx-to-tm (n-rst/s NRST) ETT' <- n-rst-ectx-to-tm NRST (ETT : ectx-to-tm _ E) <- n-rst-exchange NRST ID <- (ectx-to-tm-respects-id (ectx-to-tm/cons ETT ctx-to-tm/empty : ectx-to-tm (ectx/cons _ value/abs _ _) _) id-ectx/refl ID ETT'). %mode n-rst-ectx-to-tm +Dr -De. %worlds (tm-block) (n-rst-ectx-to-tm _ _). %total A (n-rst-ectx-to-tm A _). n-rst-value-steps : n-rst _ E -> ectx-to-tm ECTX CE -> value V -> steps (CE (E V)) (CE V) -> type. n-rst-value-steps/z : n-rst-value-steps n-rst/z _ _ stz. n-rst-value-steps/s : n-rst-value-steps (n-rst/s NRST) (EC : ectx-to-tm _ EE) (V : value EV) (ST1 sts step/ec XXC (reduction/abs V : reduction ((abs [x] x) app _) _) sts STS) <- n-rst-value-steps NRST EC V STS <- n-rst-exchange NRST ID <- id-tm-congr (ID EV) EE ID' <- n-rst-ectx-to-tm NRST EER <- ectx-to-tm-append EC EER _ XXC <- step-respects-id (step/ec XXC (reduction/dol value/abs V : reduction (rst _) _)) ID' id-tm/refl ST1. %mode n-rst-value-steps +Dnr +Dec +Dv -Ds. %worlds (tm-block) (n-rst-value-steps _ _ _ _). %total A (n-rst-value-steps A _ _ _). bcapptm-to-tm-to-bctxs-to-tm : bcapptm-to-tm BCA E -> bcapptm-to-bctxs BCA BCS -> bctxs-to-tm BCS E' -> ({x} tm-eqv (E x) (E' x)) -> type. bcapptm-to-tm-to-bctxs-to-tm/z : bcapptm-to-tm-to-bctxs-to-tm bcapptm-to-tm/z bcapptm-to-bctxs/z bctxs-to-tm/z ([x] tm-eqv/refl). bcapptm-to-tm-to-bctxs-to-tm/s : bcapptm-to-tm-to-bctxs-to-tm (bcapptm-to-tm/s (bctm-to-tm/bctx BCCT) (BCAT : bcapptm-to-tm _ BCAE)) (bcapptm-to-bctxs/s BCTB) (bctxs-to-tm/s BCCT (BCT : bctxs-to-tm _ BCTE)) ([x] tm-eqv/trans (EQV _) (EQV' x)) <- bcapptm-to-tm-to-bctxs-to-tm BCAT BCTB BCT EQV <- ({x} tm-eqv-congr (tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) BCTE (EQV' x)). %mode bcapptm-to-tm-to-bctxs-to-tm +Db +Dt -Dr -Deq. %worlds (btm-to-tm-block | bctm-to-tm-block) (bcapptm-to-tm-to-bctxs-to-tm _ _ _ _). %total A (bcapptm-to-tm-to-bctxs-to-tm A _ _ _). bctxs-to-tm-acc-to-bctx-to-tm : bctxs-to-tm BCS E -> bctx-to-tm BCA E' -> bctxs-to-bctx-acc BCS BCA BC -> bctx-to-tm BC ([x] E (E' x)) -> type. bctxs-to-tm-acc-to-bctx-to-tm/z : bctxs-to-tm-acc-to-bctx-to-tm bctxs-to-tm/z BCTA bctxs-to-bctx-acc/z BCTA. bctxs-to-tm-acc-to-bctx-to-tm/s : bctxs-to-tm-acc-to-bctx-to-tm (bctxs-to-tm/s BCT BCST) BCTA (bctxs-to-bctx-acc/s BCTT) BCTR <- bctxs-to-tm-acc-to-bctx-to-tm BCST (bctx-to-tm/cons BCT BCTA) BCTT BCTR. %mode bctxs-to-tm-acc-to-bctx-to-tm +Db +Da +Dt -Dr. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-acc-to-bctx-to-tm _ _ _ _). %total A (bctxs-to-tm-acc-to-bctx-to-tm A _ _ _). bctx-to-tm-has-dol : bctx-to-tm BC E -> ({x} id-tm (abs E1 dol E2 x) (E x)) -> type. bctx-to-tm-has-dol/z : bctx-to-tm-has-dol (bctx-to-tm/z _) ([x] id-tm/refl). bctx-to-tm-has-dol/empty : bctx-to-tm-has-dol bctx-to-tm/empty ([x] id-tm/refl). bctx-to-tm-has-dol/cons : bctx-to-tm-has-dol (bctx-to-tm/cons _ _) ([x] id-tm/refl). %mode bctx-to-tm-has-dol +Di -Do. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctx-to-tm-has-dol _ _). %total {} (bctx-to-tm-has-dol _ _). bctx-to-tm-eqv : bctx-to-tm (BC : bctx z) E -> ({x} tm-eqv (abs E dol x) (E x)) -> type. bctx-to-tm-eqv/z : bctx-to-tm-eqv (bctx-to-tm/z BTT) ([x] tm-eqv/sym (tm-eqv/dol-ctx value/abs CTT)) <- bctxz-to-tm-to-bctx-to-ctx BTT CTT _. %mode bctx-to-tm-eqv +Di -Do. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctx-to-tm-eqv _ _). %total {} (bctx-to-tm-eqv _ _). bctxs-to-tm-to-bctx-to-tm : bctxs-to-tm (BCS : bctxs _ z) E -> bctxs-to-bctx BCS BC -> bctx-to-tm BC E' -> ({x} tm-eqv (E x) (E' x)) -> type. bctxs-to-tm-to-bctx-to-tm/z : bctxs-to-tm-to-bctx-to-tm (bctxs-to-tm/s (BCT1 : bctx-to-tm _ BCTE1) (BCST : bctxs-to-tm _ BCSTE)) (bctxs-to-bctx/z BCTT) BCT EQV <- bctxs-to-tm-acc-to-bctx-to-tm BCST BCT1 BCTT BCT <- bctx-to-tm-eqv BCT1 EQV' <- ({x} tm-eqv-congr (EQV' x) BCSTE (EQV x)). %mode bctxs-to-tm-to-bctx-to-tm +Db +Dt -Dr -Di. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-to-tm-to-bctx-to-tm _ _ _ _). %total {} (bctxs-to-tm-to-bctx-to-tm _ _ _ _). bstep-to-steps-brst : N natleq M1 -> sum M1 M2 M -> bctxs-to-tm (BC : bctxs M1 NN) CE -> bctxsr-to-tm (BCR : bctxsr (s M2) NN) CER -> ({x} tm-eqv (CER' x) (CER x)) -> n-rst M2 RE -> value E -> n-sft-dol-brst N (RE E) CER' E' -> steps-eqv (CE E') (CE (CER E)) -> type. bstep-to-steps-brst/z : bstep-to-steps-brst _ _ BCT _ CEQV NRST (V : value EV) (n-sft-dol-brst/z) ST' <- bctxs-to-tm-to-bctxs-to-ectx BCT ECT _ <- n-rst-value-steps NRST (ectx-to-tm/cons (ECT : ectx-to-tm _ ET) ctx-to-tm/empty : ectx-to-tm (ectx/cons _ value/abs _ _) _) V XST <- steps-to-steps-eqv XST ST <- tm-eqv-congr (CEQV EV) ET EQV <- steps-eqv-append ST (step/ec ECT (reduction/dol value/abs V) stes step/ec ECT (reduction/abs V) stes stez EQV) ST'. bstep-to-steps-brst/s : bstep-to-steps-brst (natleq/s NLEQ) SUM (bctxs-to-tm/s BCTT BCT) BCTR CEQV NRST V (n-sft-dol-brst/s (NSD : {x} n-sft-dol-brst _ _ _ (NSDE x))) (step/ec ECT (reduction/sft _ value/abs ctx-to-tm/empty) stes ST) <- bctxs-to-tm-to-bctxs-to-ectx BCT ECT _ <- sum-move-ltr SUM SUM' <- bstep-to-steps-brst NLEQ SUM' (BCT : bctxs-to-tm _ BCTE) (bctxsr-to-tm/s (BCTT : bctx-to-tm _ BCTTE) (BCTR : bctxsr-to-tm _ BCTRE)) ([x] tm-eqv/trans (tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) (tm-eqv/congr-dol tm-eqv/refl (CEQV x))) (n-rst/s NRST) V (NSD _) ST. %mode bstep-to-steps-brst +Dl +Ds +Dbt +Dbc +Dxx +Dnr +Dv +Dnsd -Deq. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-to-steps-brst _ _ _ _ _ _ _ _ _). %total A (bstep-to-steps-brst A _ _ _ _ _ _ _ _). bstep-to-steps-bsft : sum N1 N2 N3 -> bsfttm-to-tm (BSE : bsfttm N1 N2) SE -> bsfttm-plugall-bctxs BSE BC1 BE' -> btm-to-tm BE' E' -> bctxs-to-tm BC1 EC1 -> bctxs-to-tm BCB ECB -> n-rst N3 ER -> steps-eqv (ECB (EC1 SE)) (ECB (ER E')) -> type. bstep-to-steps-bsft/z : bstep-to-steps-bsft sum/z (bsfttm-to-tm/z NRST BTE) (bsfttm-plugall-bctxs/- bsfttm-plug-bctxs/z) BTE bctxs-to-tm/z (_ : bctxs-to-tm _ EC'') NRST (stez tm-eqv/refl). bstep-to-steps-bsft/s : bstep-to-steps-bsft SUM (bsfttm-to-tm/s (BSTE : {bcx:bctm _}{x:tm} bctm-to-tm bcx x -> bsfttm-to-tm (EBS bcx) _)) (bsfttm-plugall-bctxs/- (bsfttm-plug-bctxs/s BSP)) BTE (bctxs-to-tm/s BCE BCES) BCBS NRST (step/ec ECTX (reduction/sft _ value/abs ctx-to-tm/empty) stes ST) <- sum-move-ltr SUM SUM' <- bctxs-to-tm-to-bctxs-to-ectx BCBS (ECTB : ectx-to-tm _ ECB) _ <- bctxs-to-tm-to-bctxs-to-ectx BCES (ECTE : ectx-to-tm _ ECE) _ <- ectx-to-tm-append ECTB ECTE _ ECTX <- bstep-to-steps-bsft SUM' (BSTE _ _ (bctm-to-tm/bctx BCE)) (bsfttm-plugall-bctxs/- BSP) BTE BCES BCBS NRST ST. %mode bstep-to-steps-bsft +Ds +Dx1 +Dx2 -Dx6 +Dx3 +Dx4 -Dx5 -Deq. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-to-steps-bsft _ _ _ _ _ _ _ _). %total A (bstep-to-steps-bsft _ _ _ _ A _ _ _). bstep-to-steps-bcapp : n-sft-dol-bcapp N CER' (BCE E) E' -> bcapptm-to-tm BCA BCE -> bctxs-to-tm (BC : bctxs N X) CE -> bctxsr-to-tm (BCR : bctxsr M X) CER -> ({x} tm-eqv (CER' x) (CER x)) -> steps-eqv (CE E') ((abs [x] CE (CER x)) dol BCE E) -> type. bstep-to-steps-bcapp/z : bstep-to-steps-bcapp n-sft-dol-bcapp/z _ bctxs-to-tm/z _ EQ (stez (tm-eqv/congr-dol (tm-eqv/congr-abs EQ) tm-eqv/refl)). bstep-to-steps-bcapp/s : bstep-to-steps-bcapp (n-sft-dol-bcapp/s NSD) (BCAT : bcapptm-to-tm _ BCAE) (bctxs-to-tm/s (BCT : bctx-to-tm _ BCE) (BCST : bctxs-to-tm _ BCSE)) (BCRT : bctxsr-to-tm _ BCSR) EQ (step/ec ECST (reduction/sft _ value/abs ctx-to-tm/empty) stes ST) <- bstep-to-steps-bcapp (NSD (abs [x] abs BCE dol x)) BCAT BCST (bctxsr-to-tm/s BCT BCRT) ([x] tm-eqv/trans (tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) (tm-eqv/congr-dol tm-eqv/refl (EQ x))) ST <- bctxs-to-tm-to-bctxs-to-ectx BCST ECST _. %mode bstep-to-steps-bcapp +Dsd +Dbc +Dt1 +Dt2 +De -Dst. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-to-steps-bcapp _ _ _ _ _ _). %total A (bstep-to-steps-bcapp _ _ A _ _ _). bstep-to-steps : bstep BE BE' -> bprog-to-tm BE E -> bprog-to-tm BE' E' -> steps-eqv E E' -> type. bstep-to-steps/abs : bstep-to-steps (bstep/abs ID BV) (bprog-to-tm/- (btm-to-tm/bapp (btm-to-tm/babs BTM1) BTM2) BCS) (bprog-to-tm/- BTM3 BCS) (step/ec ETT (reduction/abs V) stes stez tm-eqv/refl) <- btm-to-tm-respects-id (BTM1 _ _ BTM2) ID id-tm/refl BTM3 <- bctxs-to-tm-to-bctxs-to-ectx BCS (ETT : ectx-to-tm _ CE) _ <- bvalue-to-value BV BTM2 V. bstep-to-steps/rst : bstep-to-steps (bstep/rst NLEQ BV) (bprog-to-tm/- (btm-to-tm/brst NSD BTM) (bctxs-to-tm/s BC BCS)) (bprog-to-tm/- BTM (bctxs-to-tm/s BC BCS)) (step/ec ETT (reduction/sft _ value/abs ctx-to-tm/empty) stes ST) <- bctxs-to-tm-to-bctxs-to-ectx BCS (ETT : ectx-to-tm _ CE) _ <- bvalue-to-value BV BTM V <- sum-z _ SUM <- bstep-to-steps-brst NLEQ SUM BCS (bctxsr-to-tm/s BC bctxsr-to-tm/z) ([x] tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) n-rst/z V (NSD _) ST. bstep-to-steps/sft : bstep-to-steps (bstep/sft BSPA BCAEM BCA1 BCA2) (bprog-to-tm/- (btm-to-tm/bsft BSTE) BCTS) (bprog-to-tm/- (BTE2 : btm-to-tm _ ER) BCTSW) ST'' <- bctxs-to-tm-split BCA1 (BCTS : bctxs-to-tm _ E) (BCTS1 : bctxs-to-tm _ E1) (BCTS2 : bctxs-to-tm _ E2) ID <- sum-z _ SUM <- bstep-to-steps-bsft SUM BSTE BSPA BTE2 BCTS1 BCTS2 NRST ST <- steps-eqv-respects-id ST (ID _) id-tm/refl ST' <- bctxs-all-empty-n-rst-eqv BCAEM BCTSQ NRST EQV <- bctxs-to-tm-append BCA2 BCTSQ BCTS2 BCTSW <- tm-eqv-congr (tm-eqv/sym (EQV ER)) E2 EQV' <- steps-eqv-append ST' (stez EQV') ST''. bstep-to-steps/capp : bstep-to-steps (bstep/capp BV BCATB BCSTBC BCA1 BCA2) (bprog-to-tm/- (btm-to-tm/bcapp NSD (BCAT : bcapptm-to-tm _ BCTE) BTE) BCTS) (bprog-to-tm/- BTE BCTSW) ST''' <- bctxs-to-tm-split BCA1 (BCTS : bctxs-to-tm _ CSE) (BCTS1 : bctxs-to-tm BCS1 CSE1) (bctxs-to-tm/s BCT (BCTS2 : bctxs-to-tm _ CSE2)) ID <- sum-z _ SUM1 <- sum-s SUM1 SUM2 <- bctxs-append-gen BCS1 (_ bcs bcz) SUM1 SUM2 BCAX <- bctxs-to-tm-append BCAX BCTS1 (bctxs-to-tm/s BCT bctxs-to-tm/z) BCTS1' <- bstep-to-steps-bcapp (NSD EV) BCAT BCTS1' bctxsr-to-tm/z ([x] tm-eqv/refl) ST <- bctxs-to-tm-to-bctxs-to-ectx BCTS2 ECT2 _ <- steps-eqv-congr-ectx ST ECT2 ST' <- steps-eqv-respects-id ST' (ID _) id-tm/refl ST'' <- bcapptm-to-tm-to-bctxs-to-tm BCAT BCATB BCCT EQV2 <- bctxs-to-tm-to-bctx-to-tm BCTS1 BCSTBC BCT1 EQV1 <- bctxs-to-tm-append BCA2 BCCT (bctxs-to-tm/s (bctx-to-tm/cons BCT BCT1) BCTS2) BCTSW <- bvalue-to-value BV BTE (V : value EV) <- bctxs-to-tm-to-bctxs-to-ectx BCTS ECT _ <- tm-eqv-congr (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/congr-dol tm-eqv/refl (EQV1 _)) (EQV2 _)) CSE2 EQV <- steps-eqv-append (step/ec ECT (reduction/abs V) stes ST'') (stez EQV) ST'''. %mode bstep-to-steps +Ds +Db1 -Db2 -Dss. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-to-steps _ _ _ _). %total {} (bstep-to-steps _ _ _ _). bstep-focus-to-steps-brst : sum N N' N'' -> bctxs-to-tm (BCS : bctxs N M) CE -> bctxsr-to-tm (BC : bctxsr _ M) CER -> ({x} tm-eqv (CER' x) (CER x)) -> n-rst N' RE -> n-rst N'' RE' -> n-sft-dol-brst N (RE E) CER' E' -> steps-eqv (CE E') ((abs [x] CE (CER x)) dol RE' E) -> type. bstep-focus-to-steps-brst/z : bstep-focus-to-steps-brst sum/z bctxs-to-tm/z BCT EQV NRST NRST n-sft-dol-brst/z (stez (tm-eqv/congr-dol (tm-eqv/congr-abs EQV) tm-eqv/refl)). bstep-focus-to-steps-brst/s : bstep-focus-to-steps-brst SUM (bctxs-to-tm/s (BCT : bctx-to-tm _ BCTE) (BCTS : bctxs-to-tm _ BCTSE)) (BCT1 : bctxsr-to-tm _ BCT1E) EQV NRST NRST' (n-sft-dol-brst/s (NSD : {x} n-sft-dol-brst _ _ _ (NSDE x))) (step/ec ETT (reduction/sft _ value/abs ctx-to-tm/empty) stes ST) <- bctxs-to-tm-to-bctxs-to-ectx BCTS ETT _ <- sum-move-ltr SUM SUM' <- bstep-focus-to-steps-brst SUM' BCTS (bctxsr-to-tm/s BCT BCT1) ([x] tm-eqv/trans (tm-eqv/congr-dol tm-eqv/refl (EQV x)) (tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty))) (n-rst/s (NRST : n-rst _ NRSTE)) NRST' (NSD _) ST. %mode bstep-focus-to-steps-brst +Ds +Da1 +Da11 +Deq +Da2 -Da3 +Da4 -Dr. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-focus-to-steps-brst _ _ _ _ _ _ _ _). %total A (bstep-focus-to-steps-brst _ A _ _ _ _ _ _). bstep-focus-e-to-steps : bstep-focus-e BE BE' -> bprog-to-tm BE E -> bprog-to-tm BE' E' -> steps-eqv E E' -> type. bstep-focus-e-to-steps/app : bstep-focus-e-to-steps bstep-focus-e/app (bprog-to-tm/- (btm-to-tm/bapp BTE1 BTE2) (bctxs-to-tm/s (bctx-to-tm/z BCTZ) (BCTS : bctxs-to-tm _ BCTSE))) (bprog-to-tm/- BTE1 (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/appl BTE2 BCTZ)) BCTS)) (stez EQV) <- bctxz-to-tm-to-bctx-to-ctx BCTZ CTT _ <- tm-eqv-congr (tm-eqv/trans (tm-eqv/dol-ctx value/abs (ctx-to-tm/appl ctx-to-tm/empty)) (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/sym (tm-eqv/dol-ctx value/abs CTT)) tm-eqv/refl)) BCTSE EQV. bstep-focus-e-to-steps/capp : bstep-focus-e-to-steps bstep-focus-e/capp (bprog-to-tm/- (btm-to-tm/bcapp NSD BCTT BE) (bctxs-to-tm/s (bctx-to-tm/z BCTZ) BCTS)) (bprog-to-tm/- BE (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/capp NSD BCTT BCTZ)) (BCTS : bctxs-to-tm _ BCTSE))) (stez EQV) <- bctxz-to-tm-to-bctx-to-ctx BCTZ (CTT : ctx-to-tm _ CTE) _ <- tm-eqv-congr (tm-eqv/trans (tm-eqv/dol-ctx value/abs (ctx-to-tm/appr ctx-to-tm/empty : ctx-to-tm (ctx/appr _ value/abs _) _)) (tm-eqv/sym (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/dol-ctx value/abs CTT) tm-eqv/refl))) BCTSE EQV. bstep-focus-e-to-steps/reset : bstep-focus-e-to-steps (bstep-focus-e/rst BCTSBC BCAEM BCA1 BCA2) (bprog-to-tm/- (btm-to-tm/brst (NSD : {x} n-sft-dol-brst _ _ _ (NSDE x)) BE) BCTS1) (bprog-to-tm/- BE BCTS2) ST' <- bctxs-to-tm-split BCA1 (BCTS1 : bctxs-to-tm _ BCTS1E) (bctxs-to-tm/s BCT1! (BCTS1A : bctxs-to-tm _ BCTS1AE)) (bctxs-to-tm/s (BCT1 : bctx-to-tm _ BCT1E) (BCTS1B : bctxs-to-tm _ BCTS1BE)) ID <- bctxs-to-tm-to-bctx-to-tm (bctxs-to-tm/s (BCT1! : bctx-to-tm _ BCT1!E) BCTS1A) BCTSBC (BCT1A : bctx-to-tm _ BCT1AE) EQV1 <- sum-z _ SUM1! <- sum-s SUM1! SUM2! <- bctxs-append-gen _ _ SUM2! SUM2! BCAC <- bctxs-to-tm-append BCAC BCTS1A (bctxs-to-tm/s BCT1 bctxs-to-tm/z) BCTS1C <- sum-z _ SUMZ! <- bstep-focus-to-steps-brst SUMZ! BCTS1C (bctxsr-to-tm/s BCT1! bctxsr-to-tm/z) ([x] tm-eqv/sym (tm-eqv/dol-ctx value/abs ctx-to-tm/empty)) n-rst/z (NRST : n-rst _ NRSTE) (NSD _) ST <- bctxs-all-empty-n-rst-eqv BCAEM (BCTS2A : bctxs-to-tm _ BCTS2E) NRST EQV2 <- bctxs-to-tm-append BCA2 BCTS2A (bctxs-to-tm/s (bctx-to-tm/cons BCT1 BCT1A) BCTS1B) BCTS2 <- bctxs-to-tm-to-bctxs-to-ectx BCTS1A ECT1A _ <- bctxs-to-tm-to-bctxs-to-ectx BCTS1B ECT1B _ <- tm-eqv-congr (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/congr-dol tm-eqv/refl (EQV1 _)) (tm-eqv/sym (EQV2 _))) BCTS1BE EQVX <- steps-eqv-congr-ectx ST ECT1B ST'' <- steps-eqv-append ST'' (stez EQVX) ST''' <- ectx-to-tm-append (ectx-to-tm/cons ECT1B ctx-to-tm/empty : ectx-to-tm (ectx/cons _ value/abs _ _) _) ECT1A _ ECT1 <- steps-eqv-respects-id (step/ec ECT1 (reduction/sft _ value/abs ctx-to-tm/empty) stes ST''') (ID _) id-tm/refl ST'. %mode bstep-focus-e-to-steps +Ds +Db1 -Db2 -Dss. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-focus-e-to-steps _ _ _ _). %total {} (bstep-focus-e-to-steps _ _ _ _). bctx-to-tm-to-bctxs-to-tm-acc : bctx-to-tm BC E -> bctx-to-bctxs-acc BC BCS' BCS -> bctxs-to-tm BCS' E' -> bctxs-to-tm BCS E'' -> ({x} tm-eqv (E' (E x)) (E'' x)) -> type. bctx-to-tm-to-bctxs-to-tm-acc/empty : bctx-to-tm-to-bctxs-to-tm-acc bctx-to-tm/empty bctx-to-bctxs-acc/empty BCS (bctxs-to-tm/s bctx-to-tm/empty (BCS : bctxs-to-tm _ BCSE)) EQV <- ({x} tm-eqv-congr (tm-eqv/dol-ctx value/abs ctx-to-tm/empty) BCSE (EQV x)). bctx-to-tm-to-bctxs-to-tm-acc/z : bctx-to-tm-to-bctxs-to-tm-acc BC bctx-to-bctxs-acc/z BCS (bctxs-to-tm/s BC (BCS : bctxs-to-tm _ BCSE)) EQV' <- bctx-to-tm-eqv BC EQV <- ({x} tm-eqv-congr (tm-eqv/sym (EQV x)) BCSE (EQV' x)). bctx-to-tm-to-bctxs-to-tm-acc/s : bctx-to-tm-to-bctxs-to-tm-acc (bctx-to-tm/cons BCX BC) (bctx-to-bctxs-acc/s BTB) BCS BCS' EQV <- bctx-to-tm-to-bctxs-to-tm-acc BC BTB (bctxs-to-tm/s BCX BCS) BCS' EQV. %mode bctx-to-tm-to-bctxs-to-tm-acc +De1 +De2 +De3 -De4 -De. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctx-to-tm-to-bctxs-to-tm-acc _ _ _ _ _). %total A (bctx-to-tm-to-bctxs-to-tm-acc _ A _ _ _). bctx-to-tm-to-bctxs-to-tm : bctx-to-tm BC E -> bctx-to-bctxs BC BCS -> bctxs-to-tm BCS E' -> ({x} tm-eqv (E x) (E' x)) -> type. bctx-to-tm-to-bctxs-to-tm/- : bctx-to-tm-to-bctxs-to-tm BC (bctx-to-bctxs/- BTB) BCS EQV <- bctx-to-tm-to-bctxs-to-tm-acc BC BTB bctxs-to-tm/z BCS EQV. %mode bctx-to-tm-to-bctxs-to-tm +De1 +De2 -De3 -De. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctx-to-tm-to-bctxs-to-tm _ _ _ _). %total {} (bctx-to-tm-to-bctxs-to-tm _ _ _ _). bstep-focus-a-to-steps : bstep-focus-a BE BE' -> bprog-to-tm BE E -> bprog-to-tm BE' E' -> steps-eqv E E' -> type. bstep-focus-a-to-steps/appl : bstep-focus-a-to-steps (bstep-focus-a/appl BV) (bprog-to-tm/- BE1 (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/appl BE2 BCTZ)) (BCTS : bctxs-to-tm _ BCTSE))) (bprog-to-tm/- BE2 (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/appr BE1 BCTZ)) BCTS)) (stez EQV) <- bctxz-to-tm-to-bctx-to-ctx BCTZ (CTT : ctx-to-tm _ CTE) _ <- bvalue-to-value BV BE1 V <- tm-eqv-congr (tm-eqv/trans (tm-eqv/sym (tm-eqv/dol-ctx value/abs (ctx-to-tm/appl CTT))) (tm-eqv/dol-ctx value/abs (ctx-to-tm/appr CTT : ctx-to-tm (ctx/appr _ V _) _))) BCTSE EQV. bstep-focus-a-to-steps/appr : bstep-focus-a-to-steps (bstep-focus-a/appr BV) (bprog-to-tm/- BE2 (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/appr BE1 BCTZ : bctxz-to-tm (bctx/appr _ BV2 _) _)) BCTS)) (bprog-to-tm/- (btm-to-tm/bapp BE1 BE2) (bctxs-to-tm/s (bctx-to-tm/z BCTZ) (BCTS : bctxs-to-tm _ BCTSE))) (stez EQV) <- bctxz-to-tm-to-bctx-to-ctx BCTZ (CTT : ctx-to-tm _ CTE) _ <- bvalue-to-value BV2 BE1 V2 <- tm-eqv-congr (tm-eqv/trans (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/dol-ctx value/abs CTT) tm-eqv/refl) (tm-eqv/sym (tm-eqv/dol-ctx value/abs (ctx-to-tm/appr ctx-to-tm/empty : ctx-to-tm (ctx/appr _ V2 _) _)))) BCTSE EQV. bstep-focus-a-to-steps/capp : bstep-focus-a-to-steps (bstep-focus-a/capp _) (bprog-to-tm/- BE (bctxs-to-tm/s (bctx-to-tm/z (bctxz-to-tm/capp NSD BCTT BCTZ)) BCTS)) (bprog-to-tm/- (btm-to-tm/bcapp NSD BCTT BE) (bctxs-to-tm/s (bctx-to-tm/z BCTZ) (BCTS : bctxs-to-tm _ BCTSE))) (stez (tm-eqv/sym EQV)) <- bctxz-to-tm-to-bctx-to-ctx BCTZ (CTT : ctx-to-tm _ CTE) _ <- tm-eqv-congr (tm-eqv/trans (tm-eqv/dol-ctx value/abs (ctx-to-tm/appr ctx-to-tm/empty : ctx-to-tm (ctx/appr _ value/abs _) _)) (tm-eqv/sym (tm-eqv/congr-dol (tm-eqv/congr-abs [x] tm-eqv/dol-ctx value/abs CTT) tm-eqv/refl))) BCTSE EQV. bstep-focus-a-to-steps/empty : bstep-focus-a-to-steps (bstep-focus-a/empty BV) (bprog-to-tm/- BE (bctxs-to-tm/s bctx-to-tm/empty BCTS)) (bprog-to-tm/- BE BCTS) (step/ec CTST (reduction/dol value/abs V) stes step/ec CTST (reduction/abs V) stes step/ec CTST (reduction/dol value/abs V) stes step/ec CTST (reduction/abs V) stes stez tm-eqv/refl) <- bctxs-to-tm-to-bctxs-to-ectx BCTS (CTST : ectx-to-tm _ BCTSE) _ <- bvalue-to-value BV BE V. bstep-focus-a-to-steps/z-empty : bstep-focus-a-to-steps (bstep-focus-a/empty BV) (bprog-to-tm/- BE (bctxs-to-tm/s (bctx-to-tm/z bctxz-to-tm/empty) BCTS)) (bprog-to-tm/- BE BCTS) (step/ec CTST (reduction/dol value/abs V) stes step/ec CTST (reduction/abs V) stes step/ec CTST (reduction/dol value/abs V) stes step/ec CTST (reduction/abs V) stes stez tm-eqv/refl) <- bctxs-to-tm-to-bctxs-to-ectx BCTS (CTST : ectx-to-tm _ BCTSE) _ <- bvalue-to-value BV BE V. bstep-focus-a-to-steps/cons : bstep-focus-a-to-steps (bstep-focus-a/cons BV BTB BCA) (bprog-to-tm/- BE (bctxs-to-tm/s (bctx-to-tm/cons BC BCX) BCTS)) (bprog-to-tm/- BE BCTS2) (step/ec CTST (reduction/dol value/abs V) stes step/ec CTST (reduction/abs V) stes stez EQV') <- bctxs-to-tm-to-bctxs-to-ectx BCTS (CTST : ectx-to-tm _ BCTSE) _ <- bvalue-to-value BV BE V <- bctx-to-tm-to-bctxs-to-tm BCX BTB BCS1 (EQV : {x} tm-eqv (EE1 x) (EE2 x)) <- bctxs-to-tm-append BCA BCS1 (bctxs-to-tm/s BC BCTS) BCTS2 <- tm-eqv-congr (tm-eqv/congr-dol tm-eqv/refl (EQV _)) BCTSE EQV'. %mode bstep-focus-a-to-steps +Ds +Db1 -Db2 -Dss. %worlds (btm-to-tm-block | bctm-to-tm-block) (bstep-focus-a-to-steps _ _ _ _). %total {} (bstep-focus-a-to-steps _ _ _ _). reduction-value-false : value V -> reduction V E -> null -> type. %mode reduction-value-false +Dv +Ds -Df. %worlds (tm-block) (reduction-value-false _ _ _). %total A (reduction-value-false _ A _). step-inv-value-false : value V -> step-inv V E -> null -> type. step-inv-value-false/- : step-inv-value-false V (step-inv/ec ectx-inv-to-tm/empty RED) N <- reduction-value-false V RED N. %mode step-inv-value-false +Dv +Ds -Df. %worlds (tm-block) (step-inv-value-false _ _ _). %total {} (step-inv-value-false _ _ _). tm-eqv-commutes-value : value V -> tm-2eqv V V' -> value V' -> type. tm-eqv-commutes-value-rtl : value V -> tm-2eqv V' V -> value V' -> type. tm-eqv-commutes-value/abs : tm-eqv-commutes-value value/abs _ value/abs. tm-eqv-commutes-value/sym : tm-eqv-commutes-value V (tm-eqv/sym EQ) V' <- tm-eqv-commutes-value-rtl V EQ V'. tm-eqv-commutes-value/trans : tm-eqv-commutes-value V (tm-eqv/trans EQ1 EQ2) V'' <- tm-eqv-commutes-value V EQ1 V' <- tm-eqv-commutes-value V' EQ2 V''. tm-eqv-commutes-value-rtl/abs : tm-eqv-commutes-value-rtl value/abs _ value/abs. tm-eqv-commutes-value-rtl/sym : tm-eqv-commutes-value-rtl V (tm-eqv/sym EQ) V' <- tm-eqv-commutes-value V EQ V'. tm-eqv-commutes-value-rtl/trans : tm-eqv-commutes-value-rtl V (tm-eqv/trans EQ1 EQ2) V'' <- tm-eqv-commutes-value-rtl V EQ2 V' <- tm-eqv-commutes-value-rtl V' EQ1 V''. %mode (tm-eqv-commutes-value +Dv +Deq -Dv') (tm-eqv-commutes-value-rtl +Dv +Deq -Dv'). %worlds (tm-block) (tm-eqv-commutes-value _ _ _) (tm-eqv-commutes-value-rtl _ _ _). %total (A B) (tm-eqv-commutes-value _ A _) (tm-eqv-commutes-value-rtl _ B _). bctxs-append-to-amectx-split : bctxs-append BC1 BC2 BC3 -> bctxs-to-amectx BC1 C1 -> bctxs-to-amectx BC2 C2 -> bctxs-to-amectx BC3 C3 -> amectx-append C1 C2 C3 -> type. bctxs-append-to-amectx-split/base : bctxs-append-to-amectx-split bctxs-append/z bctxs-to-amectx/z A A amectx-append/base. bctxs-append-to-amectx-split/cons : bctxs-append-to-amectx-split (bctxs-append/s BCA) (bctxs-to-amectx/s B A1) A2 (bctxs-to-amectx/s B A3) (amectx-append/cons AA) <- bctxs-append-to-amectx-split BCA A1 A2 A3 AA. %mode bctxs-append-to-amectx-split +Da -Dc1 -Dc2 +Dc3 -Da'. %worlds (btm-to-tm-block | bctm-to-tm-block) (bctxs-append-to-amectx-split _ _ _ _ _). %total A (bctxs-append-to-amectx-split A _ _ _ _). bctxs-append-to-amectx-am-split : bctxs-append BC1 BC2 BC3 -> bctxs-to-amectx BC1 C1 -> bctxs-to-amectx-am BC2 C2 -> bctxs-to-amectx-am BC3 C3 -> amectx-append C1 C2 C3 -> type. bctxs-append-to-amectx-am-split/base : bctxs-append-to-amectx-am-split bctxs-append/z bctxs-to-amectx/z A A amectx-append/base. bctxs-append-to-amectx-am-split/cons : bctxs-append-to-amectx-am-split (bctxs-append/s BCA) (bctxs-to-amectx/s B A1) A2 (bctxs-to-amectx-am/s B A3) (amectx-append/cons AA) <- bctxs-append-to-amectx-am-split BCA A1 A2 A3 AA. %mode bctxs-append-to-amectx-am-split +Da -Dc1 -Dc2 +Dc3 -Da'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-append-to-amectx-am-split _ _ _ _ _). %total A (bctxs-append-to-amectx-am-split A _ _ _ _). bctxs-append-to-amectx-append : bctxs-append BC1 BC2 BC3 -> bctxs-to-amectx BC1 C1 -> bctxs-to-amectx BC2 C2 -> bctxs-to-amectx BC3 C3 -> amectx-append C1 C2 C3 -> type. bctxs-append-to-amectx-append/base : bctxs-append-to-amectx-append bctxs-append/z bctxs-to-amectx/z A A amectx-append/base. bctxs-append-to-amectx-append/cons : bctxs-append-to-amectx-append (bctxs-append/s BCA) (bctxs-to-amectx/s B A1) A2 (bctxs-to-amectx/s B A3) (amectx-append/cons AA) <- bctxs-append-to-amectx-append BCA A1 A2 A3 AA. %mode bctxs-append-to-amectx-append +Da +Dc1 +Dc2 -Dc3 -Da'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-append-to-amectx-append _ _ _ _ _). %total A (bctxs-append-to-amectx-append A _ _ _ _). bctxs-append-to-amectx-am-append : bctxs-append BC1 BC2 BC3 -> bctxs-to-amectx BC1 C1 -> bctxs-to-amectx-am BC2 C2 -> bctxs-to-amectx-am BC3 C3 -> amectx-append C1 C2 C3 -> type. bctxs-append-to-amectx-am-append/base : bctxs-append-to-amectx-am-append bctxs-append/z bctxs-to-amectx/z A A amectx-append/base. bctxs-append-to-amectx-am-append/cons : bctxs-append-to-amectx-am-append (bctxs-append/s BCA) (bctxs-to-amectx/s B A1) A2 (bctxs-to-amectx-am/s B A3) (amectx-append/cons AA) <- bctxs-append-to-amectx-am-append BCA A1 A2 A3 AA. %mode bctxs-append-to-amectx-am-append +Da +Dc1 +Dc2 -Dc3 -Da'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-append-to-amectx-am-append _ _ _ _ _). %total A (bctxs-append-to-amectx-am-append A _ _ _ _). bctxs-append-to-amectx-am-append+ : bctxs-append BC1 BC2 BC3 -> bctxs-to-amectx BC1 C1 -> bctxs-to-amectx-am BC2 C2 -> bctxs-to-amectx-am BC3 C3 -> amectx-append C1 C2 C3 -> type. bctxs-append-to-amectx-am-append+/- : bctxs-append-to-amectx-am-append+ BCA A1 A2 A3' AP <- bctxs-append-to-amectx-am-append BCA A1 A2 A3 AP' <- amectx-append-det AP' AP ID <- bctxs-to-amectx-am-respects-id A3 id-bctxs/refl ID A3'. %mode bctxs-append-to-amectx-am-append+ +Da +Dc1 +Dc2 -Dc3 +Da'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-append-to-amectx-am-append+ _ _ _ _ _). %total A (bctxs-append-to-amectx-am-append+ A _ _ _ _). bctxs-all-empty-to-amectx-all-empty : bctxs-all-empty N BC -> bctxs-to-amectx BC C -> amectx-all-empty N C -> type. bctxs-all-empty-to-amectx-all-empty/z : bctxs-all-empty-to-amectx-all-empty bctxs-all-empty/z bctxs-to-amectx/z amectx-all-empty/z. bctxs-all-empty-to-amectx-all-empty/z-s : bctxs-all-empty-to-amectx-all-empty (bctxs-all-empty/s BAE) (bctxs-to-amectx/s bctx-to-amctx-left/z-empty BCE) (amectx-all-empty/s AE) <- bctxs-all-empty-to-amectx-all-empty BAE BCE AE. bctxs-all-empty-to-amectx-all-empty/s-s : bctxs-all-empty-to-amectx-all-empty (bctxs-all-empty/s BAE) (bctxs-to-amectx/s bctx-to-amctx-left/s-empty BCE) (amectx-all-empty/s AE) <- bctxs-all-empty-to-amectx-all-empty BAE BCE AE. %mode bctxs-all-empty-to-amectx-all-empty +Db -Dt -Db'. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-all-empty-to-amectx-all-empty _ _ _). %total A (bctxs-all-empty-to-amectx-all-empty A _ _). bctxs-to-bctx-acc-to-amctx : bctxs-to-bctx-acc BCS BC1 BC -> bctxs-to-amectx BCS EC -> {EC1} bctx-to-amctx BC1 (amctx/empty EC1) bctx-to-amctx-cond/s -> bctx-to-amctx BC (amctx/empty [x] EEC (EC1 x)) bctx-to-amctx-cond/s -> amectx-to-amtm EC EEC -> type. bctxs-to-bctx-acc-to-amctx/z : bctxs-to-bctx-acc-to-amctx bctxs-to-bctx-acc/z bctxs-to-amectx/z _ BC BC amectx-to-amtm/base. bctxs-to-bctx-acc-to-amctx/s : bctxs-to-bctx-acc-to-amctx (bctxs-to-bctx-acc/s BSTC) (bctxs-to-amectx/s BTC BTCS) _ BTC' BTC'' (amectx-to-amtm/cons ETT) <- bctxs-to-bctx-acc-to-amctx BSTC BTCS _ (bctx-to-amctx/cons (bctx-to-amctx-left/s-cons BTC BTC')) BTC'' ETT. %mode bctxs-to-bctx-acc-to-amctx +Db +Dr1 +Dx +Dr3 -Dr2 -Dq. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-bctx-acc-to-amctx _ _ _ _ _ _). %total A (bctxs-to-bctx-acc-to-amctx A _ _ _ _ _). bctxs-to-bctx-acc-to-amctx' : bctxs-to-bctx-acc BCS BC1 BC -> bctxs-to-amectx BCS EC -> {EC1} bctx-to-amctx-left BC1 EC1 bctx-to-amctx-cond/z -> bctx-to-amctx BC (amctx/empty [x] EEC (actx EC1 adol x)) bctx-to-amctx-cond/s -> amectx-to-amtm EC EEC -> type. bctxs-to-bctx-acc-to-amctx'/- : bctxs-to-bctx-acc-to-amctx' A B _ C D E <- bctxs-to-bctx-acc-to-amctx A B _ (bctx-to-amctx/z C) D E. %mode bctxs-to-bctx-acc-to-amctx' +Db +Dr1 +Dx +Dr3 -Dr2 -Dq. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-bctx-acc-to-amctx' _ _ _ _ _ _). %total A (bctxs-to-bctx-acc-to-amctx' A _ _ _ _ _). bctxs-to-bctx-to-amctx : bctxs-to-bctx (BCS : bctxs _ z) BC -> bctxs-to-amectx BCS EC -> bctx-to-amctx BC C _ -> amectx-to-amctx EC C -> type. bctxs-to-bctx-to-amctx/z : bctxs-to-bctx-to-amctx (bctxs-to-bctx/z BSTC) (bctxs-to-amectx/s BCT BTCS) BCT' (amectx-to-amctx/- (amectx-to-amtm/cons ETT)) <- bctxs-to-bctx-acc-to-amctx BSTC BTCS _ (bctx-to-amctx/z BCT) BCT' ETT. %mode bctxs-to-bctx-to-amctx +Db +Dr1 -Dr2 -Dx. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-bctx-to-amctx _ _ _ _). %total A (bctxs-to-bctx-to-amctx A _ _ _). bam-step-to-am-steps-brst-lemma : n-asft-adol-brst N E EE E' -> n-arst N ER -> amectx-length EC1 N -> amectx-to-amtm EC1 CE1 -> amectx-append EC1 (C2 ac EC2) EC -> am-steps (am/e E' EC) (am/e (ER E) ((amctx/empty [x] CE1 (EE x)) ac C2 ac EC2)) -> type. bam-step-to-am-steps-brst-lemma/z : bam-step-to-am-steps-brst-lemma n-asft-adol-brst/z n-arst/z amectx-length/z amectx-to-amtm/base amectx-append/base (am-step/e-dol asts am-step/e-abs asts am-step/a-dol-abs asts astz). bam-step-to-am-steps-brst-lemma/s : bam-step-to-am-steps-brst-lemma (n-asft-adol-brst/s NSD) (n-arst/s (NRST : n-arst _ ER)) (amectx-length/s CEL) (amectx-to-amtm/cons (ETT : amectx-to-amtm _ CE1)) (amectx-append/cons CEA) (am-step/e-sft asts STR) <- bam-step-to-am-steps-brst-lemma (NSD _) NRST CEL ETT CEA ST <- n-arst-exchange NRST IDR <- id-am-congr-e (IDR _) id-amectx/refl IDAM <- am-steps-respects-id ST id-am/refl IDAM STR. %mode bam-step-to-am-steps-brst-lemma +Dnn -Dr +Dl +Dat +Dap -Dst. %worlds (amtm-block) (bam-step-to-am-steps-brst-lemma _ _ _ _ _ _). %total A (bam-step-to-am-steps-brst-lemma A _ _ _ _ _). amectx-append-length-move : amectx-append EC1 (C2 ac EC2) EC -> amectx-length EC1 N -> amectx-append EC1' EC2 EC -> amectx-length EC1' (s N) -> amectx-append EC1 (C2 ac ab) EC1' -> type. amectx-append-length-move/z : amectx-append-length-move amectx-append/base amectx-length/z (amectx-append/cons amectx-append/base) (amectx-length/s amectx-length/z) amectx-append/base. amectx-append-length-move/s : amectx-append-length-move (amectx-append/cons AP1) (amectx-length/s L1) (amectx-append/cons AP2) (amectx-length/s L2) (amectx-append/cons AP3) <- amectx-append-length-move AP1 L1 AP2 L2 AP3. %mode amectx-append-length-move +Da1 +Dl1 -Da2 -Dl2 -Da3. %worlds (amtm-block) (amectx-append-length-move _ _ _ _ _). %total A (amectx-append-length-move A _ _ _ _). amectx-to-amtm-append : amectx-append EC1 EC2 EC3 -> amectx-to-amtm EC1 E1 -> amectx-to-amtm EC2 E2 -> amectx-to-amtm EC3 ([x] E2 (E1 x)) -> type. amectx-to-amtm-append/z : amectx-to-amtm-append amectx-append/base amectx-to-amtm/base AT AT. amectx-to-amtm-append/s : amectx-to-amtm-append (amectx-append/cons AP) (amectx-to-amtm/cons AT1) AT2 (amectx-to-amtm/cons AT3) <- amectx-to-amtm-append AP AT1 AT2 AT3. %mode amectx-to-amtm-append +Dap +Da1 +Da2 -Da3. %worlds (amtm-block) (amectx-to-amtm-append _ _ _ _). %total A (amectx-to-amtm-append A _ _ _). bam-step-to-am-steps-brst-lemma2 : n-asft-adol-brst (s N) E EE E' -> n-arst (s N) ER -> amectx-length EC1 N -> amectx-length EC2 (s _) -> amectx-to-amtm EC1 CE1 -> amectx-append EC1 (C2 ac EC2) EC -> am-steps (am/e E' EC) (am/e (ER E) ((amctx/empty [x] actx C2 adol CE1 (EE x)) ac EC2)) -> type. bam-step-to-am-steps-brst-lemma2/- : bam-step-to-am-steps-brst-lemma2 NSD NR AL (amectx-length/s _) AT AP ST <- amectx-append-length-move AP AL AP' AL' AP'' <- amectx-to-amtm-append AP'' AT (amectx-to-amtm/cons amectx-to-amtm/base) AT' <- bam-step-to-am-steps-brst-lemma NSD NR AL' AT' AP' ST. %mode bam-step-to-am-steps-brst-lemma2 +Dnn -Dr +Dl +Dl' +Dat +Dap -Dst. %worlds (amtm-block) (bam-step-to-am-steps-brst-lemma2 _ _ _ _ _ _ _). %total {} (bam-step-to-am-steps-brst-lemma2 _ _ _ _ _ _ _). amectx-all-empty-exchange : amectx-all-empty N EC -> ({x} amectx-append EC x (EC' x)) -> ({ecx} id-amectx (EC' ((amctx/empty [x] x) ac ecx)) ((amctx/empty [x] x) ac EC' ecx)) -> type. amectx-all-empty-exchange/z : amectx-all-empty-exchange amectx-all-empty/z ([x] amectx-append/base) ([x] id-amectx/refl). amectx-all-empty-exchange/s : amectx-all-empty-exchange (amectx-all-empty/s AE) ([x] amectx-append/cons (AP x)) ID' <- amectx-all-empty-exchange AE AP ID <- ({x} id-amectx-congr-ac id-amctx/refl (ID x) (ID' x)). %mode amectx-all-empty-exchange +Dae +Dap -Did. %worlds (amtm-block) (amectx-all-empty-exchange _ _ _). %total A (amectx-all-empty-exchange A _ _). am-steps-n-arst-lemma : {E} n-arst N ER -> amectx-all-empty N ECE -> ({ec} amectx-append ECE ec (EC' ec)) -> ({c}{ec} am-steps (am/e (ER E) (c ac ec)) (am/e E (EC' (c ac ec)))) -> type. am-steps-n-arst-lemma/z : am-steps-n-arst-lemma _ n-arst/z amectx-all-empty/z ([x] amectx-append/base) ([x][y] astz). am-steps-n-arst-lemma/s : am-steps-n-arst-lemma E (n-arst/s (NR : n-arst _ NRE)) (amectx-all-empty/s AE) ([x] amectx-append/cons (AA x)) ([x][y] am-step/e-dol asts am-step/e-abs asts am-step/a-dol-abs asts ST' x y) <- am-steps-n-arst-lemma E NR AE AA ST <- amectx-all-empty-exchange AE AA ID <- ({x} id-am-congr-e (id-amtm/refl : id-amtm E E) (ID x) (AMID x)) <- ({x}{y} am-steps-respects-id (ST (amctx/empty [x] x) (x ac y)) id-am/refl (AMID (x ac y)) (ST' x y)). %mode am-steps-n-arst-lemma +Dex +Dnr +De -Da -Ds. %worlds (amtm-block) (am-steps-n-arst-lemma _ _ _ _ _). %total A (am-steps-n-arst-lemma _ A _ _ _). am-steps-n-arst : {E} n-arst N ER -> amectx-all-empty N ECE -> amectx-append ECE (C ac EC) EC' -> am-steps (am/e (ER E) (C ac EC)) (am/e E EC') -> type. am-steps-n-arst/- : am-steps-n-arst E NR AE (APR : amectx-append ECE (C ac EC) EC') ST' <- am-steps-n-arst-lemma E NR AE AP ST <- amectx-append-det (AP (C ac EC)) APR ID <- id-am-congr-e id-amtm/refl ID AMID <- am-steps-respects-id (ST C EC) id-am/refl AMID ST'. %mode am-steps-n-arst +Dex +Dnr +De +Da -Ds. %worlds (amtm-block) (am-steps-n-arst _ _ _ _ _). %total A (am-steps-n-arst _ A _ _ _). bam-step-to-am-steps-s-cons : bctx-append BC BCS BCS' -> bctx-to-amtm-s BC EE -> bctxs-to-amectx-am BCS CS -> bctxs-to-amectx-am BCS' CS' -> {V:amvalue E} am-steps (am/e (EE E) CS) (am/a E V CS') -> type. bam-step-to-am-steps-s-cons/z : bam-step-to-am-steps-s-cons bctx-append/z (bctx-to-amtm-s/z BCT) BCTS (bctxs-to-amectx-am/s BCT BCTS) _ (am-step/e-dol asts am-step/e-ctx asts am-step/a-dol-ctx asts ST asts astz) <- am-step-value _ _ _ ST. bam-step-to-am-steps-s-cons/empty : bam-step-to-am-steps-s-cons bctx-append/empty bctx-to-amtm-s/empty BCTS (bctxs-to-amectx-am/s BCT BCTS) _ (am-step/e-dol asts am-step/e-ctx asts am-step/a-dol-ctx asts ST asts astz) <- bctx-to-amctx-left-empty _ _ BCT <- am-step-value _ _ _ ST. bam-step-to-am-steps-s-cons/s : bam-step-to-am-steps-s-cons (bctx-append/cons BA) (bctx-to-amtm-s/cons BTC BTT) BCTS BCTS' V (am-step/e-dol asts am-step/e-ctx asts am-step/a-dol-ctx asts STS) <- bam-step-to-am-steps-s-cons BA BTT (bctxs-to-amectx-am/s BTC BCTS) BCTS' V STS. %mode bam-step-to-am-steps-s-cons +Da +Dt1 +Dt2 -Dt3 +Dv -Ds. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bam-step-to-am-steps-s-cons _ _ _ _ _ _). %total A (bam-step-to-am-steps-s-cons A _ _ _ _ _). bctx-to-amctx-s-to-bctx-to-amtm-s : bctx-to-amctx BC (amctx/empty E) bctx-to-amctx-cond/s -> bctx-to-amtm-s BC E -> type. bctx-to-amctx-s-to-bctx-to-amtm-s/s-cons : bctx-to-amctx-s-to-bctx-to-amtm-s (bctx-to-amctx/cons (bctx-to-amctx-left/s-cons BTC' BTC)) (bctx-to-amtm-s/cons BTC' BTT) <- bctx-to-amctx-s-to-bctx-to-amtm-s BTC BTT. bctx-to-amctx-s-to-bctx-to-amtm-s/z : bctx-to-amctx-s-to-bctx-to-amtm-s (bctx-to-amctx/z BTC) (bctx-to-amtm-s/z BTC). bctx-to-amctx-s-to-bctx-to-amtm-s/empty : bctx-to-amctx-s-to-bctx-to-amtm-s bctx-to-amctx/s-empty bctx-to-amtm-s/empty. %mode bctx-to-amctx-s-to-bctx-to-amtm-s +Dc -Di. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctx-to-amctx-s-to-bctx-to-amtm-s _ _). %total A (bctx-to-amctx-s-to-bctx-to-amtm-s A _). bctxs-to-amectx-length : bctxs-to-amectx (BCE : bctxs N _) CE -> amectx-length CE N -> type. bctxs-to-amectx-length/z : bctxs-to-amectx-length bctxs-to-amectx/z amectx-length/z. bctxs-to-amectx-length/s : bctxs-to-amectx-length (bctxs-to-amectx/s _ BCE) (amectx-length/s L) <- bctxs-to-amectx-length BCE L. %mode bctxs-to-amectx-length +Db -Dl. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-length _ _). %total A (bctxs-to-amectx-length A _). bctxs-to-amectx-am-length : bctxs-to-amectx-am (BCE : bctxs N _) CE -> amectx-length CE (s N) -> type. bctxs-to-amectx-am-length/z : bctxs-to-amectx-am-length bctxs-to-amectx-am/z (amectx-length/s amectx-length/z). bctxs-to-amectx-am-length/s : bctxs-to-amectx-am-length (bctxs-to-amectx-am/s _ BCE) (amectx-length/s L) <- bctxs-to-amectx-am-length BCE L. %mode bctxs-to-amectx-am-length +Db -Dl. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bctxs-to-amectx-am-length _ _). %total A (bctxs-to-amectx-am-length A _). bam-step-to-am-steps-bsft : bsfttm-plugall-bctxs (BST : bsfttm N1 N2) (BCS : bctxs N1 N2) BE' -> bsfttm-to-amtm BST N2 E -> btm-to-amtm BE' E' -> bctxs-to-amectx BCS CS -> bctxs-to-amectx-am BCSB CSB -> amectx-append CS CSB CS1 -> sum N1 N2 N -> n-arst N ER -> am-steps (am/e E CS1) (am/e (ER E') CSB) -> type. bam-step-to-am-steps-bsft/z : bam-step-to-am-steps-bsft (bsfttm-plugall-bctxs/- bsfttm-plug-bctxs/z) (bsfttm-to-amtm/z NRST BTT) BTT bctxs-to-amectx/z _ amectx-append/base _ NRST astz. bam-step-to-am-steps-bsft/s : bam-step-to-am-steps-bsft (bsfttm-plugall-bctxs/- (bsfttm-plug-bctxs/s BPCS)) (bsfttm-to-amtm/s (BSTE : {bcx}{x} bctm-to-amtm bcx x -> bsfttm-to-amtm (XXXBE bcx) _ (XXXE x))) BTT (bctxs-to-amectx/s BTCL BTCS) BTCS2 (amectx-append/cons AP) SUM NRST (am-step/e-sft asts ST) <- sum-move-ltr SUM SUM' <- bam-step-to-am-steps-bsft (bsfttm-plugall-bctxs/- BPCS) (BSTE _ _ (bctm-to-amtm/bctx BTCL)) BTT BTCS BTCS2 AP SUM' NRST ST. %mode bam-step-to-am-steps-bsft +Dx1 +Dx2 -Dx3 +Dx4 +Dx5 +Dx6 +Dx66 -Dx7 -Dx8. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bam-step-to-am-steps-bsft _ _ _ _ _ _ _ _ _). %total A (bam-step-to-am-steps-bsft _ _ _ A _ _ _ _ _). bam-step-to-am-steps-bcapptm-lemma : bctxsr-to-amtm BCS EE -> bctxsr-to-amectx-diff BCS CS -> {CSF} amectx-length CSF (s N) -> {E} am-steps (am/e (EE E) CSF) (am/e E (CS CSF)) -> type. bam-step-to-am-steps-bcapptm-lemma/z : bam-step-to-am-steps-bcapptm-lemma bctxsr-to-amtm/z bctxsr-to-amectx-diff/z _ _ _ astz. bam-step-to-am-steps-bcapptm-lemma/s : bam-step-to-am-steps-bcapptm-lemma (bctxsr-to-amtm/s BCTC BCSTE) (bctxsr-to-amectx-diff/s BCTC BCSTCS) _ AL _ (am-step/e-dol asts am-step/e-ctx asts am-step/a-dol-ctx asts ST) <- bam-step-to-am-steps-bcapptm-lemma BCSTE BCSTCS _ (amectx-length/s AL) _ ST. %mode bam-step-to-am-steps-bcapptm-lemma +Dx2 -Dx3 +Dx4 +De +De' -Dx5. %worlds (btm-to-amtm-block | bctm-to-amtm-block) (bam-step-to-am-steps-bcapptm-lemma _ _ _ _ _ _). %total A (bam-step-to-am-steps-bcapptm-lemma A _ _ _ _ _). bam-step-to-am-steps-bcapptm : bcapptm-to-bctxs BCA BCS -> bcapptm-to-amtm BCA EE -> bctxs-to-amectx BCS CS -> bctxs-to-amectx-am BCSF CSF -> amectx-append CS CSF CSF' -> {E} am-steps (am/e (EE E) CSF) (am/e E CSF') -> type. bam-step-to-am-steps-bcapptm/- : bam-step-to-am-steps-bcapptm BCATBCS BCATE BCSTCS BCSTCSF (CSAP : amectx-append _ EC2 _) E ST <- bcapptm-to-amtm-to-bctxs-to-amtm+ (BCATE : bcapptm-to-amtm _ E2) BCATBCS BCSTE <- bctxs-to-amtm-to-bctxsr-to-amtm BCSTE BCSTBCSR BCSRTE <- bctxs-to-amectx-am-length BCSTCSF LEN <- bam-step-to-am-steps-bcapptm-lemma BCSRTE BCSRTCS _ LEN E ST <- bctxsr-to-amectx-diff-to-bctxs-to-amectx (BCSRTCS : bctxsr-to-amectx-diff _ CS1) BCSTBCSR BCSTCS <- bctxsr-to-amectx-diff-amectx-diff BCSRTCS CSD <- amectx-append-diff _ CSD EC2 CSAP. %mode bam-step-to-am-steps-bcapptm +Dx1 +Dx2 -Dx3 +Dx33 -Dx4 +De -Dx5. %worlds (btm-to-amtm-block) (bam-step-to-am-steps-bcapptm _ _ _ _ _ _ _). %total {} (bam-step-to-am-steps-bcapptm _ _ _ _ _ _ _). bam-step-to-am-steps-bcapp-lemma : n-asft-adol-bcapp N E1 E2 E3 -> amectx-length EC1 N -> amectx-to-amtm EC1 CE1 -> amectx-append EC1 (C2 ac EC2) EC -> am-steps (am/e E3 EC) (am/e E2 ((amctx/empty [x] CE1 (E1 x)) ac C2 ac EC2)) -> type. bam-step-to-am-steps-bcapp-lemma/z : bam-step-to-am-steps-bcapp-lemma n-asft-adol-bcapp/z amectx-length/z amectx-to-amtm/base amectx-append/base (am-step/e-dol asts am-step/e-abs asts am-step/a-dol-abs asts astz). bam-step-to-am-steps-bcapp-lemma/s : bam-step-to-am-steps-bcapp-lemma (n-asft-adol-bcapp/s NSD) (amectx-length/s LEN) (amectx-to-amtm/cons (ECTE : amectx-to-amtm _ EE)) (amectx-append/cons AP) (am-step/e-sft asts ST) <- bam-step-to-am-steps-bcapp-lemma (NSD _) LEN ECTE AP ST. %mode bam-step-to-am-steps-bcapp-lemma +Dx1 +Dl +Dx2 +Dx3 -Ds. %worlds (amtm-block) (bam-step-to-am-steps-bcapp-lemma _ _ _ _ _). %total A (bam-step-to-am-steps-bcapp-lemma A _ _ _ _). bam-step-to-am-steps-bcapp : n-asft-adol-bcapp (s N) E1 E2 E3 -> amectx-length EC1 N -> amectx-length EC2 (s _) -> amectx-to-amtm EC1 CE1 -> amectx-append EC1 (C2 ac EC2) EC -> am-steps (am/e E3 EC) (am/e E2 ((amctx/empty [x] actx C2 adol CE1 (E1 x)) ac EC2)) -> type. bam-step-to-am-steps-bcapp/- : bam-step-to-am-steps-bcapp NSD AL (amectx-length/s _) AT AP ST <- amectx-append-length-move AP AL AP' AL' AP'' <- amectx-to-amtm-append AP'' AT (amectx-to-amtm/cons amectx-to-amtm/base) AT' <- bam-step-to-am-steps-bcapp-lemma NSD AL' AT' AP' ST. %mode bam-step-to-am-steps-bcapp +Dx1 +Dl +Dl2 +Dx2 +Dx3 -Ds. %worlds (amtm-block) (bam-step-to-am-steps-bcapp _ _ _ _ _ _). %total A (bam-step-to-am-steps-bcapp A _ _ _ _ _). bam-step-to-am-steps : bam-step BAM1 BAM2 -> bam-to-am BAM1 AM1 -> bam-to-am BAM2 AM2 -> am-steps AM1 AM2 -> type. bam-step-to-am-steps/e-bapp : bam-step-to-am-steps bam-step/e-bapp (bam-to-am/e (btm-to-amtm/bapp BE1 BE2) (bctxs-to-amectx-am/s BC BCS)) (bam-to-am/e BE1 (bctxs-to-amectx-am/s (bctx-to-amctx-left/appl BC BE2) BCS)) (am-step/e-app asts astz). bam-step-to-am-steps/e-babs : bam-step-to-am-steps bam-step/e-babs (bam-to-am/e (btm-to-amtm/babs BE) BCS) (bam-to-am/a (bvalue-to-amvalue2/babs BE) BCS) (am-step/e-abs asts astz). bam-step-to-am-steps/a-appl : bam-step-to-am-steps bam-step/a-appl (bam-to-am/a BV (bctxs-to-amectx-am/s (bctx-to-amctx-left/appl BC BE) BCS)) (bam-to-am/e BE (bctxs-to-amectx-am/s (bctx-to-amctx-left/appr BV BC) BCS)) (am-step/a-appl asts astz). bam-step-to-am-steps/a-appr : bam-step-to-am-steps bam-step/a-appr (bam-to-am/a (bvalue-to-amvalue2/babs BE) (bctxs-to-amectx-am/s (bctx-to-amctx-left/appr (bvalue-to-amvalue2/babs BE2) BC) BCS)) (bam-to-am/e (BE2 _ _ (btm-to-amtm/babs BE)) (bctxs-to-amectx-am/s BC BCS)) (am-step/a-appr-abs asts astz). bam-step-to-am-steps/e-bcapp : bam-step-to-am-steps bam-step/e-bcapp (bam-to-am/e (btm-to-amtm/bcapp NSD BCT BE) (bctxs-to-amectx-am/s BC BCS)) (bam-to-am/e BE (bctxs-to-amectx-am/s (bctx-to-amctx-left/capp NSD BCT BC) BCS)) (am-step/e-app asts am-step/e-abs asts am-step/a-appl asts astz). bam-step-to-am-steps/a-z-empty : bam-step-to-am-steps bam-step/a-empty (bam-to-am/a BTV (bctxs-to-amectx-am/s bctx-to-amctx-left/z-empty BTCS)) (bam-to-am/a BTV BTCS) (am-step/a-empty asts am-step/e-abs asts astz). bam-step-to-am-steps/a-s-empty : bam-step-to-am-steps bam-step/a-empty (bam-to-am/a BTV (bctxs-to-amectx-am/s bctx-to-amctx-left/s-empty BTCS)) (bam-to-am/a BTV BTCS) (am-step/a-empty asts am-step/e-abs asts astz). bam-step-to-am-steps/a-s-cons : bam-step-to-am-steps (bam-step/a-cons BCA) (bam-to-am/a BTV (bctxs-to-amectx-am/s (bctx-to-amctx-left/s-cons BTC BTCZ) BCTS)) (bam-to-am/a BTV BCTS') (am-step/a-empty asts am-step/e-dol asts am-step/e-ctx asts am-step/a-dol-ctx asts ST) <- bctx-to-amctx-s-to-bctx-to-amtm-s BTCZ BTT <- bam-step-to-am-steps-s-cons BCA BTT (bctxs-to-amectx-am/s BTC BCTS) BCTS' _ ST. bam-step-to-am-steps/e-rst : bam-step-to-am-steps (bam-step/e-rst (BAE : bctxs-all-empty (s N) BCSAE) (bctxs-to-bctx/z BCT : bctxs-to-bctx (BCC1 bcs BCCS) BCC) (bctxs-append/s (BCA1 : bctxs-append BCCS (BCB1 bcs BCBS) BCF1)) (BCA2 : bctxs-append _ _ BCF2)) (bam-to-am/e (btm-to-amtm/brst (NSD : {x} n-asft-adol-brst (s N) EI _ (NSDE3 x)) BE) (bctxs-to-amectx-am/s (BCX : bctx-to-amctx-left _ CC1 _) BCS)) (bam-to-am/e BE BCS') (am-step/e-sft asts STSR) <- bctxs-append-to-amectx-am-split BCA1 BCS1 (bctxs-to-amectx-am/s (BC : bctx-to-amctx-left _ CB1 _) (BCS2 : bctxs-to-amectx-am _ CBS)) BCS AEA1 <- bctxs-all-empty-to-amectx-all-empty BAE BCSE (AE : amectx-all-empty _ CSAE) <- bctxs-to-bctx-acc-to-amctx' BCT (BCS1 : bctxs-to-amectx BCCS CCS) _ BCX BC1 (CCSTE : amectx-to-amtm _ CCSE) <- bctxs-append-to-amectx-am-append BCA2 BCSE (bctxs-to-amectx-am/s (bctx-to-amctx-left/s-cons BC BC1) BCS2) BCS' (AEA2 : amectx-append _ _ CF2) <- bctxs-to-amectx-length BCS1 ECL1 <- bctxs-to-amectx-am-length BCS2 ECL2 <- bam-step-to-am-steps-brst-lemma2 (NSD _) (NRST : n-arst _ ERST) ECL1 ECL2 CCSTE AEA1 STS <- am-steps-n-arst EI NRST AE AEA2 STS' <- am-steps-append STS STS' STSR. bam-step-to-am-steps/e-bsft : bam-step-to-am-steps (bam-step/e-bsft BPCS BAE BCA1 BCA2) (bam-to-am/e (btm-to-amtm/bsft BSTE) BCSF1) (bam-to-am/e BTE BCSF2) STSF <- bctxs-append-to-amectx-am-split BCA1 BCS1 BCB BCSF1 AEA1 <- bctxs-all-empty-to-amectx-all-empty BAE BCSE (AE : amectx-all-empty _ CSAE) <- bctxs-append-to-amectx-am-append BCA2 BCSE BCB BCSF2 AEA2 <- sum-z _ SUM <- bam-step-to-am-steps-bsft BPCS BSTE BTE BCS1 BCB AEA1 SUM NRST STS1 <- am-steps-n-arst _ NRST AE AEA2 STS2 <- am-steps-append STS1 STS2 STSF. bam-step-to-am-steps/a-bcapp : bam-step-to-am-steps (bam-step/a-bcapp BCATBCS (bctxs-to-bctx/z BCT) (bctxs-append/s BCA1) BCA2) (bam-to-am/a BV (bctxs-to-amectx-am/s (bctx-to-amctx-left/capp (NSD : {x} n-asft-adol-bcapp _ _ _ (QE x)) (BCTE : bcapptm-to-amtm _ QQQE) BCF1) BCSF1)) (bam-to-am/a BV BCSF2) (am-step/a-appr-abs asts STS) <- bctxs-append-to-amectx-am-split BCA1 BCS1 (bctxs-to-amectx-am/s BCB BCSB) BCSF1 AEA1 <- bctxs-to-bctx-acc-to-amctx' BCT BCS1 _ BCF1 BC1 (CCSTE : amectx-to-amtm _ QQE) <- bctxs-to-amectx-length BCS1 ECL1 <- bctxs-to-amectx-am-length BCSB ECL2 <- bam-step-to-am-steps-bcapp (NSD _) (amectx-length/s ECL1) ECL2 (amectx-to-amtm/cons CCSTE) (amectx-append/cons AEA1) STS1 <- bam-step-to-am-steps-bcapptm BCATBCS BCTE BCS2 (bctxs-to-amectx-am/s (bctx-to-amctx-left/s-cons BCB BC1) BCSB) AEA2 _ STS2 <- bctxs-append-to-amectx-am-append+ BCA2 BCS2 (bctxs-to-amectx-am/s (bctx-to-amctx-left/s-cons BCB BC1) BCSB) BCSF2 AEA2 <- am-step-value _ _ _ ST <- am-steps-append STS1 STS2 STS' <- am-steps-append STS' (ST asts astz) STS. %mode bam-step-to-am-steps +Ds +Db1 -Db2 -Ds'. %worlds (btm-to-amtm-block) (bam-step-to-am-steps _ _ _ _). %total {} (bam-step-to-am-steps _ _ _ _).