%%% Proof of Value Soundness %%% Author: Frank Pfenning, based on [Michaylov & Pfenning 92] vs : eval E V -> value V -> type. %mode vs +D -P. % Natural Numbers vs_z : vs (ev_z) (val_z). vs_s : vs (ev_s D1) (val_s P1) <- vs D1 P1. vs_case_z : vs (ev_case_z D2 D1) P2 <- vs D2 P2. vs_case_s : vs (ev_case_s D3 D1) P3 <- vs D3 P3. % Pairs vs_pair : vs (ev_pair D2 D1) (val_pair P2 P1) <- vs D1 P1 <- vs D2 P2. vs_fst : vs (ev_fst D') P1 <- vs D' (val_pair P2 P1). vs_snd : vs (ev_snd D') P2 <- vs D' (val_pair P2 P1). % Functions vs_lam : vs (ev_lam) (val_lam). vs_app : vs (ev_app D3 D2 D1) P3 <- vs D3 P3. % Definitions vs_letv : vs (ev_letv D2 D1) P2 <- vs D2 P2. vs_letn : vs (ev_letn D2) P2 <- vs D2 P2. % Recursion vs_fix : vs (ev_fix D1) P1 <- vs D1 P1. % Unit vs_unit : vs (ev_unit) (val_unit). % Sums vs_inl : vs (ev_inl D1) (val_inl P1) <- vs D1 P1. vs_inr : vs (ev_inr D2) (val_inr P2) <- vs D2 P2. vs_cases_l : vs (ev_cases_l D2 D1) P2 <- vs D2 P2. vs_cases_r : vs (ev_cases_r D3 D1) P3 <- vs D3 P3. % Recursive types vs_fold : vs (ev_fold D1) (val_fold P1) <- vs D1 P1. vs_unfold : vs (ev_unfold D1) P1' <- vs D1 (val_fold P1'). %terminates D (vs D _). %worlds () (vs D P). %covers vs +D *P. %total D (vs D _).