%%% Simply Typed Lambda Calculus w/ small-step, allocation semantics %%% Author: Matthew Fluet (June 2005) %%% dynsem-elf.elf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Dynamic Semantics Lemmas %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dynsem!step_preserves_wf : st_wf S1 -> step S1 E1 S2 E2 -> st_wf S2 -> type. %mode dynsem!step_preserves_wf +DSWf1 +DStep -DSWf2. -lam_alloc : dynsem!step_preserves_wf DSWf (lam_alloc_step DStAlloc) DSWf' <- st!alloc_preserves_wf DSWf DStAlloc DSWf'. -app_ctxt1 : dynsem!step_preserves_wf DSWf (app_ctxt1_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -app_ctxt2 : dynsem!step_preserves_wf DSWf (app_ctxt2_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -app_beta : dynsem!step_preserves_wf DSWf (app_beta_step _) DSWf. -unit_alloc : dynsem!step_preserves_wf DSWf (unit_alloc_step DStAlloc) DSWf' <- st!alloc_preserves_wf DSWf DStAlloc DSWf'. -letunit_ctxt : dynsem!step_preserves_wf DSWf (letunit_ctxt_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -letunit_beta : dynsem!step_preserves_wf DSWf (letunit_beta_step _) DSWf. -pair_ctxt1 : dynsem!step_preserves_wf DSWf (pair_ctxt1_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -pair_ctxt2 : dynsem!step_preserves_wf DSWf (pair_ctxt2_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -pair_alloc : dynsem!step_preserves_wf DSWf (pair_alloc_step DStAlloc) DSWf' <- st!alloc_preserves_wf DSWf DStAlloc DSWf'. -letpair_ctxt : dynsem!step_preserves_wf DSWf (letpair_ctxt_step DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. -letpair_beta : dynsem!step_preserves_wf DSWf (letpair_beta_step _) DSWf. %terminates DStep (dynsem!step_preserves_wf _ DStep _). %worlds () (dynsem!step_preserves_wf _ _ _). %covers dynsem!step_preserves_wf +DSWf1 +DStep -DSWf2. %total DStep (dynsem!step_preserves_wf _ DStep _). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dynsem!step*_preserves_wf : st_wf S1 -> step* S1 E1 S2 E2 -> st_wf S2 -> type. %mode dynsem!step*_preserves_wf +DSWf1 +DSteps -DSWf2. -refl : dynsem!step*_preserves_wf DSWf (refl_step*) DSWf. -trans : dynsem!step*_preserves_wf DSWf1 (trans_step* DSteps23 DSteps12) DSWf3 <- dynsem!step*_preserves_wf DSWf1 DSteps12 DSWf2 <- dynsem!step*_preserves_wf DSWf2 DSteps23 DSWf3. -step : dynsem!step*_preserves_wf DSWf (step_step* DStep) DSWf' <- dynsem!step_preserves_wf DSWf DStep DSWf'. %terminates DSteps (dynsem!step*_preserves_wf _ DSteps _). %worlds () (dynsem!step*_preserves_wf _ _ _). %covers dynsem!step*_preserves_wf +DSWf1 +DSteps -DSWf2. %total DSteps (dynsem!step*_preserves_wf _ DSteps _).