%%% Simply Typed Lambda Calculus w/ small-step, allocation semantics %%% Author: Matthew Fluet (June 2005) %%% progress.elf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Progress: If |- M, then M ok (i.e., M irred or M ==> M'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prog : |-stwf S ST -> |-exp ST E T -> mach_ok S E -> type. %mode prog +DSTcWf +DExpTc -DMachOk. -loc : prog DStTcWf (|-exp_loc _) (mach_ok_irred exp_irred_loc). -lam : prog DStTcWf (|-exp_lam _) (mach_ok_step (lam_alloc_step DStAlloc)) <- prog_st_alloc _ DStTcWf DStAlloc. -app : prog DStTcWf (|-exp_app DExpTcE2 DExpTcE1) DMachOk <- prog DStTcWf DExpTcE1 DMachOk1 <- prog DStTcWf DExpTcE2 DMachOk2 <- prog_app_aux _ _ DStTcWf DExpTcE1 DMachOk1 DMachOk2 DMachOk. -unit : prog DStTcWf (|-exp_unit) (mach_ok_step (unit_alloc_step DStAlloc)) <- prog_st_alloc _ DStTcWf DStAlloc. -letunit : prog DStTcWf (|-exp_letunit DExpTcE2 DExpTcE1) DMachOk <- prog DStTcWf DExpTcE1 DMachOk1 <- prog_letunit_aux _ _ DStTcWf DExpTcE1 DMachOk1 DMachOk. -pair : prog DStTcWf (|-exp_pair DExpTcE2 DExpTcE1) DMachOk <- prog DStTcWf DExpTcE1 DMachOk1 <- prog DStTcWf DExpTcE2 DMachOk2 <- prog_pair_aux _ _ DStTcWf DMachOk1 DMachOk2 DMachOk. -letpair : prog DStTcWf (|-exp_letpair DExpTcF2 DExpTcE1) DMachOk <- prog DStTcWf DExpTcE1 DMachOk1 <- prog_letpair_aux _ _ DStTcWf DExpTcE1 DMachOk1 DMachOk. %terminates DExpTc (prog _ DExpTc _). %worlds () (prog _ _ _). %covers prog +DSTcWf +DExpTc -DMachOk. %total DExpTc (prog _ DExpTc _).