%%% Simply Typed Lambda Calculus w/ small-step, allocation semantics %%% Author: Matthew Fluet (June 2005) %%% inversion-prog.elf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Store Typing Inversion (Progress) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prog_|-st_inversion_aux : sttp_wf ST -> st_wf S -> |-st S ST -> sttp_lookup ST L T -> st_lookup S L V -> |-val ST V T -> type. %mode prog_|-st_inversion_aux +DSTWf +DSWf +DStTcWf +SttpLookup -StLookup -DValTc. -hit : prog_|-st_inversion_aux DSTWf DSWf (|-st_cons DValTc' _) (sttp_lookup_hit) (st_lookup_hit) DValTc <- sttp!wf_cons_implies_extend_cons DSTWf DSttpExtend <- sttp_weak_|-val DValTc' DSttpExtend DValTc. -miss : prog_|-st_inversion_aux DSTWf DSWf (|-st_cons _ DStTc') (sttp_lookup_miss DSttpLookup' DLocLt) (st_lookup_miss DStLookup' DLocLt) DValTc <- sttp!wf_tail DSTWf DSTWf' <- st!wf_tail DSWf DSWf' <- prog_|-st_inversion_aux DSTWf' DSWf' DStTc' DSttpLookup' DStLookup' DValTc' <- sttp!wf_cons_implies_extend_cons DSTWf DSttpExtend' <- sttp_weak_|-val DValTc' DSttpExtend' DValTc. %terminates DSttpLookup (prog_|-st_inversion_aux _ _ _ DSttpLookup _ _). %worlds () (prog_|-st_inversion_aux _ _ _ _ _ _). %covers prog_|-st_inversion_aux +DSTWf +DSWf +DStTc -SttpLookup +StLookup -DValTc. %total DSttpLookup (prog_|-st_inversion_aux _ _ _ DSttpLookup _ _). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% prog_|-st_inversion : |-stwf S ST -> sttp_lookup ST L T -> st_lookup S L V -> |-val ST V T -> type. %mode prog_|-st_inversion +DStTcWf +SttpLookup -StLookup -DValTc. - : prog_|-st_inversion (|-stwf_ DSTWf DSWf DStTc) DSttpLookup DStLookup DValTc <- prog_|-st_inversion_aux DSTWf DSWf DStTc DSttpLookup DStLookup DValTc. %terminates {} (prog_|-st_inversion _ _ _ _). %worlds () (prog_|-st_inversion _ _ _ _). %covers prog_|-st_inversion +DStTcWf +SttpLookup -StLookup -DValTc. %total {} (prog_|-st_inversion _ _ _ _).