subst x a App e1 e2 mkapp subst x a e1 subst x a e2 subst x a Lam var exp subst[True][Ite] eqTerm x V var x a Lam var exp red App e1 e2 red[Let] App e1 e2 red e1 red Lam int term Lam int term subst x a V int subst[Ite] eqTerm x V int x a V int red V int V int eqTerm App t11 t12 App t21 t22 and eqTerm t11 t21 eqTerm t12 t22 eqTerm App t11 t12 Lam i2 l2 False eqTerm App t11 t12 V v2 False eqTerm Lam i1 l1 App t21 t22 False eqTerm Lam i1 l1 Lam i2 l2 and !EQ i1 i2 eqTerm l1 l2 eqTerm Lam i1 l1 V v2 False eqTerm V v1 App t21 t22 False eqTerm V v1 Lam i2 l2 False eqTerm V v1 V v2 !EQ v1 v2 mklam V name e Lam name e lamvar Lam var exp V var lambody Lam var exp exp isvar App t1 t2 False isvar Lam int term False isvar V int True islam App t1 t2 False islam Lam int term True islam V int False appe2 App e1 e2 e2 appe1 App e1 e2 e1 mkapp e1 e2 App e1 e2 lambdaint e red e and False False False and True False False and False True False and True True True !EQ S x S y !EQ x y !EQ 0 S y False !EQ S x 0 False !EQ 0 0 True red[Let][Let] e Lam var exp a red subst V var a exp subst[True][Ite] False x a Lam var exp mklam V var subst x a exp red[Let][Let] e App t1 t2 e2 App App t1 t2 e2 red[Let][Let] e V int e2 App V int e2 red[Let] App e1 e2 f red[Let][Let] App e1 e2 f red e2 subst[True][Ite] True x a e e subst[Ite] False x a e e subst[Ite] True x a e a App 2 True 0 red[Let] 2 red[Let][Let] 3 lambody 1 isvar 1 !EQ 2 subst[Ite] 4 lambdaint 1 eqTerm 2 subst[True][Ite] 4 red 1 mklam 2 False 0 mkapp 2 V 1 subst 3 and 2 appe2 1 lamvar 1 appe1 1 Lam 2 S 1 0 0 islam 1 INNERMOST Frederiksen_Glenstrup/lambdaint_typed.tml.trs