exp : env P -> term P -> type. exp_empty : exp empty lunit. exp_addv : exp (addv G X) (lpair N X) <- exp G N. invcav : absv G X F -> conc F M -> exp G N -> conv (M N) X -> type. invcav_x : invcav av_x csnd (exp_addv EP) c_prr. invcav_y : invcav (av_y AV) (ccomp (CP:conc _ M) cfst) (exp_addv EP:exp _ (lpair MG Y)) (c_trans (CC (c_prl:conv (lfst (lpair MG Y)) _)) CVP) <- cong M CC <- invcav AV CP EP CVP. invca : abse G E F -> conc F M -> exp G N -> conv (M N) E -> type. invca_var : invca (avar AV) CP EP CVP <- invcav AV CP EP CVP. invca_fst : invca (afst AP) (ccomp cfst CP) EP (c_fst CVP) <- invca AP CP EP CVP. invca_snd : invca (asnd AP) (ccomp csnd CP) EP (c_snd CVP) <- invca AP CP EP CVP. invca_pair : invca (apair AP1 AP2) (cpair CP1 CP2) EP (c_pair CVP1 CVP2) <- invca AP1 CP1 EP CVP1 <- invca AP2 CP2 EP CVP2. invca_lam : invca (alam ([x] AP x)) (ccur CP) EP (c_lam ([x] CVP x)) <- {x}invca (AP x) CP (exp_addv EP) (CVP x). invca_app : invca (aapp AP1 AP2) (ccomp capp (cpair CP1 CP2)) EP (c_app (c_trans c_prl CVP1) (c_trans c_prr CVP2)) <- invca AP1 CP1 EP CVP1 <- invca AP2 CP2 EP CVP2. % sigma[p1:{x}{y}abse (addv (addv empty x) y) x F] sigma [p2:conc F M] sigma [p3:{x}{y}exp (addv (addv empty x) y) (N x y)] {x}{y}invca (p1 x y) p2 (p3 x y) (R x y). % sigma[p1:{x}abse (addv empty x) (llam [y] lpair y x) F] sigma [p2:conc F M] sigma [p3:{x}exp (addv empty x) (N x)] {x}invca (p1 x) p2 (p3 x) (R x). zconc : mor A B -> env A -> term B -> type. zconc1 : zconc F G (M MG) <- conc F M <- exp G MG. inv : abse G E F -> zconc F G E' -> conv E' E -> type. inv1 : inv AP (zconc1 EXP CP) EE <- invca AP CP EXP EE. % sigma[p1:{x}abse (addv empty x) (llam [y] lpair y x) F] sigma [p2:{x}zconc F (addv empty x) (M x)] {x} inv (p1 x) (p2 x) (R x).