- eval_exbind_match_DEF
-
|- !exb sta env sta' exc.
eval_exbind_match exb sta env sta' exc =
(?excon en.
(exb = EXBIND1 excon NONE) /\
(exc = EXCONENVeep (insert_into_exconenv empty_exconenv excon en)) /\
(en = new_exname (STATE_arg2 sta)) /\
(sta' = add_exname en sta)) \/
(?excon eb en EE.
(exb = EXBIND1 excon (SOME eb)) /\
(exc =
EXCONENVeep
(add_exconenv (insert_into_exconenv empty_exconenv excon en) EE)) /\
(?s'.
(en = new_exname (STATE_arg2 sta)) /\
(s' = add_exname en sta) /\
eval_exbind eb s' env sta' (EXCONENVeep EE))) \/
(?excon eb p.
(exb = EXBIND1 excon (SOME eb)) /\
(exc = PACKeep p) /\
(?en s'.
(en = new_exname (STATE_arg2 sta)) /\
(s' = add_exname en sta) /\
eval_exbind eb s' env sta' (PACKeep p))) \/
(?excon longexcon en.
(exb = EXBIND2 excon longexcon NONE) /\
(sta = sta') /\
(exc = EXCONENVeep (insert_into_exconenv empty_exconenv excon en)) /\
(lookuplongexcon_env env longexcon = lift en)) \/
(?excon longexcon eb en EE.
(exb = EXBIND2 excon longexcon (SOME eb)) /\
(exc =
EXCONENVeep
(add_exconenv (insert_into_exconenv empty_exconenv excon en) EE)) /\
(lookuplongexcon_env env longexcon = lift en) /\
eval_exbind eb sta env sta' (EXCONENVeep EE)) \/
(?excon longexcon eb p.
(exb = EXBIND2 excon longexcon (SOME eb)) /\
(exc = PACKeep p) /\
(?en.
(lookuplongexcon_env env longexcon = lift en) /\
eval_exbind eb sta env sta' (PACKeep p)))
- eval_atpat_match_DEF
-
|- !atp sta env val sta' var'.
eval_atpat_match atp sta env val sta' var' =
(atp = WILDCARDatpat) /\
(sta = sta') /\
(var' = VARENVvef empty_varenv) \/
(?scon.
(atp = SCONatpat scon) /\
(sta = sta') /\
(var' = VARENVvef empty_varenv) /\
(val = SVALval (value_of scon))) \/
(?scon.
(atp = SCONatpat scon) /\
(sta = sta') /\
(var' = FAILvef) /\
~(val = SVALval (value_of scon))) \/
(?var.
(atp = VARatpat var) /\
(sta = sta') /\
(var' = VARENVvef (insert_into_varenv empty_varenv var val))) \/
(?longcon.
(atp = CONatpat longcon) /\
(sta = sta') /\
(var' = VARENVvef empty_varenv) /\
(val = CONval (long_base longcon))) \/
(?longcon.
(atp = CONatpat longcon) /\
(sta = sta') /\
(var' = FAILvef) /\
~(val = CONval (long_base longcon))) \/
(?longexcon en.
(atp = EXCONatpat longexcon) /\
(sta = sta') /\
(val = EXVALval (NAMEexval en)) /\
(var' = VARENVvef empty_varenv) /\
(lookuplongexcon_env env longexcon = lift en)) \/
(?longexcon en.
(atp = EXCONatpat longexcon) /\
(sta = sta') /\
(val = EXVALval (NAMEexval en)) /\
(var' = FAILvef) /\
(?en'.
(lookuplongexcon_env env longexcon = lift en') /\ ~(en = en'))) \/
(atp = RECORDatpat NONE) /\
(sta = sta') /\
(var' = VARENVvef empty_varenv) /\
(val = RECORDval empty_record) \/
(?VE patrow.
(atp = RECORDatpat (SOME patrow)) /\
(var' = VARENVvef (add_varenv empty_varenv VE)) /\
(?r.
(val = RECORDval (add_record empty_record r)) /\
eval_patrow patrow sta env r sta' (VARENVvef VE))) \/
(?patrow.
(atp = RECORDatpat (SOME patrow)) /\
(var' = FAILvef) /\
(?r.
(val = RECORDval (add_record empty_record r)) /\
eval_patrow patrow sta env r sta' FAILvef)) \/
(?pat. (atp = PARatpat pat) /\ eval_pat pat sta env val sta' var')
- eval_patrow_match_DEF
-
|- !pat' sta env rec sta' var.
eval_patrow_match pat' sta env rec sta' var =
(pat' = DOTDOTDOT) /\ (sta = sta') /\ (var = VARENVvef empty_varenv) \/
(?lab pat.
(pat' = PATROW lab pat NONE) /\
(var = FAILvef) /\
eval_pat pat sta env (lower (lookup_label rec lab)) sta' FAILvef) \/
(?lab pat patrow.
(pat' = PATROW lab pat (SOME patrow)) /\
(var = FAILvef) /\
eval_pat pat sta env (lower (lookup_label rec lab)) sta' FAILvef) \/
(?lab pat VE.
(pat' = PATROW lab pat NONE) /\
(var = VARENVvef VE) /\
eval_pat pat sta env (lower (lookup_label rec lab)) sta'
(VARENVvef VE)) \/
(?lab pat patrow VE VE'.
(pat' = PATROW lab pat (SOME patrow)) /\
(var = VARENVvef (add_varenv VE VE')) /\
(?s'.
eval_pat pat sta env (lower (lookup_label rec lab)) s'
(VARENVvef VE) /\
eval_patrow patrow s' env rec sta' (VARENVvef VE'))) \/
(?lab pat patrow.
(pat' = PATROW lab pat (SOME patrow)) /\
(var = FAILvef) /\
(?s' VE.
eval_pat pat sta env (lower (lookup_label rec lab)) s'
(VARENVvef VE) /\
eval_patrow patrow s' env rec sta' FAILvef))
- eval_pat_match_DEF
-
|- !pat' sta env val sta' var'.
eval_pat_match pat' sta env val sta' var' =
(?atpat.
(pat' = ATPATpat atpat) /\ eval_atpat atpat sta env val sta' var') \/
(?longcon atpat.
(pat' = CONpat longcon atpat) /\
(?con v'.
(long_base longcon = con) /\
~(con = CON "ref") /\
(val = APPCONval con v') /\
eval_atpat atpat sta env v' sta' var')) \/
(?longcon atpat.
(pat' = CONpat longcon atpat) /\
(sta = sta') /\
(var' = FAILvef) /\
(?con.
(long_base longcon = con) /\
~(con = CON "ref") /\
(!v'. ~(val = APPCONval con v')))) \/
(?longexcon atpat.
(pat' = EXCONpat longexcon atpat) /\
(?v' en.
(lookuplongexcon_env env longexcon = lift en) /\
(val = EXVALval (NAMEVALexval en v')) /\
eval_atpat atpat sta env v' sta' var')) \/
(?longexcon atpat.
(pat' = EXCONpat longexcon atpat) /\
(sta = sta') /\
(var' = FAILvef) /\
(?en.
(lookuplongexcon_env env longexcon = lift en) /\
(!v'. ~(val = EXVALval (NAMEVALexval en v'))))) \/
(?a atpat.
(pat' = CONpat (BASE (CON "ref")) atpat) /\
(sta = sta') /\
(val = ADDRval a) /\
(?v.
(lookupaddr_state sta' a = lift v) /\
eval_atpat atpat sta' env v sta' var')) \/
(?var pat VE.
(pat' = LAYEREDpat var pat) /\
(var' =
VARENVvef
(add_varenv (insert_into_varenv empty_varenv var val) VE)) /\
eval_pat pat sta env val sta' (VARENVvef VE)) \/
(?var pat.
(pat' = LAYEREDpat var pat) /\
(var' = FAILvef) /\
eval_pat pat sta env val sta' FAILvef)
- eval_atexp_match_DEF
-
|- !ate sta env sta' val.
eval_atexp_match ate sta env sta' val =
(?scon.
(ate = SCONatexp scon) /\
(sta = sta') /\
(val = VALvp (SVALval (value_of scon)))) \/
(?longvar v.
(ate = VARatexp longvar) /\
(sta = sta') /\
(val = VALvp v) /\
(lookuplongvar_env env longvar = lift v)) \/
(?longcon con.
(ate = CONatexp longcon) /\
(sta = sta') /\
(val = VALvp (CONval con)) /\
(long_base longcon = con)) \/
(?en longexcon.
(ate = EXCONatexp longexcon) /\
(sta = sta') /\
(val = VALvp (EXVALval (NAMEexval en))) /\
(lookuplongexcon_env env longexcon = lift en)) \/
(ate = RECORDatexp NONE) /\
(sta = sta') /\
(val = VALvp (RECORDval empty_record)) \/
(?exprow r.
(ate = RECORDatexp (SOME exprow)) /\
(val = VALvp (RECORDval (add_record empty_record r))) /\
eval_exprow exprow sta env sta' (RECORDrp r)) \/
(?exprow p.
(ate = RECORDatexp (SOME exprow)) /\
(val = PACKvp p) /\
eval_exprow exprow sta env sta' (PACKrp p)) \/
(?dec exp v.
(ate = LETatexp dec exp) /\
(val = VALvp v) /\
(?s' E'.
eval_dec dec sta env s' (ENVep E') /\
eval_exp exp s' (add_env env E') sta' (VALvp v))) \/
(?dec exp p.
(ate = LETatexp dec exp) /\
(val = PACKvp p) /\
eval_dec dec sta env sta' (PACKep p)) \/
(?dec exp p.
(ate = LETatexp dec exp) /\
(val = PACKvp p) /\
(?s' E'.
eval_dec dec sta env s' (ENVep E') /\
eval_exp exp s' (add_env env E') sta' (PACKvp p))) \/
(?exp. (ate = PARatexp exp) /\ eval_exp exp sta env sta' val)
- eval_exprow_match_DEF
-
|- !exp' sta env sta' rec.
eval_exprow_match exp' sta env sta' rec =
(?lab exp v.
(exp' = EXPROW lab exp NONE) /\
(rec = RECORDrp (insert_into_record empty_record lab v)) /\
eval_exp exp sta env sta' (VALvp v)) \/
(?lab exp exprow_op p.
(exp' = EXPROW lab exp exprow_op) /\
(rec = PACKrp p) /\
eval_exp exp sta env sta' (PACKvp p)) \/
(?lab exp exprow v r.
(exp' = EXPROW lab exp (SOME exprow)) /\
(rec =
RECORDrp (add_record (insert_into_record empty_record lab v) r)) /\
(?s'.
eval_exp exp sta env s' (VALvp v) /\
eval_exprow exprow s' env sta' (RECORDrp r))) \/
(?lab exp exprow p.
(exp' = EXPROW lab exp (SOME exprow)) /\
(rec = PACKrp p) /\
(?s' v.
eval_exp exp sta env s' (VALvp v) /\
eval_exprow exprow s' env sta' (PACKrp p)))
- eval_exp_match_DEF
-
|- !exp' sta env sta' val.
eval_exp_match exp' sta env sta' val =
(?atexp. (exp' = ATEXPexp atexp) /\ eval_atexp atexp sta env sta' val) \/
(?exp atexp c v.
(exp' = APPexp exp atexp) /\
(val = VALvp (APPCONval c v)) /\
(?s'.
eval_exp exp sta env s' (VALvp (CONval c)) /\
~(c = CON "ref") /\
eval_atexp atexp s' env sta' (VALvp v))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
eval_exp exp sta env sta' (PACKvp p)) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s' c.
eval_exp exp sta env s' (VALvp (CONval c)) /\
~(c = CON "ref") /\
eval_atexp atexp s' env sta' (PACKvp p))) \/
(?exp atexp en v.
(exp' = APPexp exp atexp) /\
(val = VALvp (EXVALval (NAMEVALexval en v))) /\
(?s'.
eval_exp exp sta env s' (VALvp (EXVALval (NAMEexval en))) /\
eval_atexp atexp s' env sta' (VALvp v))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s' en.
eval_exp exp sta env s' (VALvp (EXVALval (NAMEexval en))) /\
eval_atexp atexp s' env sta' (PACKvp p))) \/
(?s'' exp atexp a v.
(exp' = APPexp exp atexp) /\
(sta' = insert_into_state_mem s'' a v) /\
(val = VALvp (ADDRval a)) /\
(?s'.
eval_exp exp sta env s' (VALvp (CONval (CON "ref"))) /\
eval_atexp atexp s' env s'' (VALvp v) /\
(a = new_addr s''))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s'.
eval_exp exp sta env s' (VALvp (CONval (CON "ref"))) /\
eval_atexp atexp s' env sta' (PACKvp p))) \/
(?s'' exp atexp a v.
(exp' = APPexp exp atexp) /\
(sta' = insert_into_state_mem s'' a v) /\
(val = VALvp (RECORDval empty_record)) /\
(?s'.
eval_exp exp sta env s' (VALvp ASSGval) /\
eval_atexp atexp s' env s''
(VALvp
(RECORDval
(insert_into_record
(insert_into_record empty_record (LABEL "1") (ADDRval a))
(LABEL "2")
v))))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s'.
eval_exp exp sta env s' (VALvp ASSGval) /\
eval_atexp atexp s' env sta' (PACKvp p))) \/
(?exp atexp.
(exp' = APPexp exp atexp) /\
(?s' b v.
eval_exp exp sta env s' (VALvp (BASval b)) /\
eval_atexp atexp s' env sta' (VALvp v) /\
(apply b v = val))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s' b.
eval_exp exp sta env s' (VALvp (BASval b)) /\
eval_atexp atexp s' env sta' (PACKvp p))) \/
(?exp atexp v'.
(exp' = APPexp exp atexp) /\
(val = VALvp v') /\
(?s2 s3 match E' VE v.
eval_exp exp sta env s2 (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2 env s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
sta'
(VALvpf v'))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s2 match E' VE.
eval_exp exp sta env s2 (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2 env sta' (PACKvp p))) \/
(?exp atexp p.
(exp' = APPexp exp atexp) /\
(val = PACKvp p) /\
(?s2 s3 match E' VE v.
eval_exp exp sta env s2 (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2 env s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
sta'
(PACKvpf p))) \/
(?exp atexp.
(exp' = APPexp exp atexp) /\
(val = PACKvp (PACK (NAMEexval (EXNAME 7)))) /\
(?s2 s3 match E' VE v.
eval_exp exp sta env s2 (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2 env s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
sta'
FAILvpf)) \/
(?exp match v.
(exp' = HANDLEexp exp match) /\
(val = VALvp v) /\
eval_exp exp sta env sta' (VALvp v)) \/
(?exp match v.
(exp' = HANDLEexp exp match) /\
(val = VALvp v) /\
(?s' e.
eval_exp exp sta env s' (PACKvp (PACK e)) /\
eval_match match s' env (EXVALval e) sta' (VALvpf v))) \/
(?exp match p.
(exp' = HANDLEexp exp match) /\
(val = PACKvp p) /\
(?s' e.
eval_exp exp sta env s' (PACKvp (PACK e)) /\
eval_match match s' env (EXVALval e) sta' (PACKvpf p))) \/
(?exp match e.
(exp' = HANDLEexp exp match) /\
(val = PACKvp (PACK e)) /\
(?s'.
eval_exp exp sta env s' (PACKvp (PACK e)) /\
eval_match match s' env (EXVALval e) sta' FAILvpf)) \/
(?exp e.
(exp' = RAISEexp exp) /\
(val = PACKvp (PACK e)) /\
eval_exp exp sta env sta' (VALvp (EXVALval e))) \/
(?exp p.
(exp' = RAISEexp exp) /\
(val = PACKvp p) /\
eval_exp exp sta env sta' (PACKvp p)) \/
(?match.
(exp' = FNexp match) /\
(sta = sta') /\
(val = VALvp (CLOSUREval (CLOSURE match env empty_varenv))))
- eval_match_match_DEF
-
|- !mat sta env val sta' val'.
eval_match_match mat sta env val sta' val' =
(?mrule match_op v'.
(mat = MATCH mrule match_op) /\
(val' = VALvpf v') /\
eval_mrule mrule sta env val sta' (VALvpf v')) \/
(?mrule match_op p.
(mat = MATCH mrule match_op) /\
(val' = PACKvpf p) /\
eval_mrule mrule sta env val sta' (PACKvpf p)) \/
(?mrule.
(mat = MATCH mrule NONE) /\
(val' = FAILvpf) /\
eval_mrule mrule sta env val sta' FAILvpf) \/
(?mrule match.
(mat = MATCH mrule (SOME match)) /\
(?s'.
eval_mrule mrule sta env val s' FAILvpf /\
eval_match match s' env val sta' val'))
- eval_mrule_match_DEF
-
|- !mru sta env val sta' val'.
eval_mrule_match mru sta env val sta' val' =
(?pat exp v'.
(mru = MRULE pat exp) /\
(val' = VALvpf v') /\
(?s' VE.
eval_pat pat sta env val s' (VARENVvef VE) /\
eval_exp exp s' (add_env env (ENV empty_strenv VE empty_exconenv))
sta'
(VALvp v'))) \/
(?pat exp p.
(mru = MRULE pat exp) /\
(val' = PACKvpf p) /\
(?s' VE.
eval_pat pat sta env val s' (VARENVvef VE) /\
eval_exp exp s' (add_env env (ENV empty_strenv VE empty_exconenv))
sta'
(PACKvp p))) \/
(?pat exp.
(mru = MRULE pat exp) /\
(val' = FAILvpf) /\
eval_pat pat sta env val sta' FAILvef)
- eval_dec_match_DEF
-
|- !dec sta env sta' env'.
eval_dec_match dec sta env sta' env' =
(?valbind VE.
(dec = VALdec valbind) /\
(env' = ENVep (ENV empty_strenv VE empty_exconenv)) /\
eval_valbind valbind sta env sta' (VARENVvep VE)) \/
(?valbind p.
(dec = VALdec valbind) /\
(env' = PACKep p) /\
eval_valbind valbind sta env sta' (PACKvep p)) \/
(?exbind EE.
(dec = EXCEPTdec exbind) /\
(env' = ENVep (ENV empty_strenv empty_varenv EE)) /\
eval_exbind exbind sta env sta' (EXCONENVeep EE)) \/
(?exbind p.
(dec = EXCEPTdec exbind) /\
(env' = PACKep p) /\
eval_exbind exbind sta env sta' (PACKeep p)) \/
(?dec1 dec2 E2.
(dec = LOCALdec dec1 dec2) /\
(env' = ENVep E2) /\
(?E1 s'.
eval_dec dec1 sta env s' (ENVep E1) /\
eval_dec dec2 s' (add_env env E1) sta' (ENVep E2))) \/
(?dec1 dec2 p.
(dec = LOCALdec dec1 dec2) /\
(env' = PACKep p) /\
eval_dec dec1 sta env sta' (PACKep p)) \/
(?dec1 dec2 p.
(dec = LOCALdec dec1 dec2) /\
(env' = PACKep p) /\
(?E1 s'.
eval_dec dec1 sta env s' (ENVep E1) /\
eval_dec dec2 s' (add_env env E1) sta' (PACKep p))) \/
(?longstrid_1_n E_1_n.
(dec = OPENdec longstrid_1_n) /\
(sta = sta') /\
(env' = ENVep (add_nonemptylist_env E_1_n)) /\
(nonempty_MAP (lookuplongstrid_env env) longstrid_1_n =
nonempty_MAP lift E_1_n)) \/
(dec = EMPTYdec) /\
(sta = sta') /\
(env' = ENVep (ENV empty_strenv empty_varenv empty_exconenv)) \/
(?dec1 dec2 E1 E2.
(dec = SEQdec dec1 dec2) /\
(env' = ENVep (add_env E1 E2)) /\
(?s'.
eval_dec dec1 sta env s' (ENVep E1) /\
eval_dec dec2 s' (add_env env E1) sta' (ENVep E2))) \/
(?dec1 dec2 p.
(dec = SEQdec dec1 dec2) /\
(env' = PACKep p) /\
eval_dec dec1 sta env sta' (PACKep p)) \/
(?dec1 dec2 p.
(dec = SEQdec dec1 dec2) /\
(env' = PACKep p) /\
(?E1 s'.
eval_dec dec1 sta env s' (ENVep E1) /\
eval_dec dec2 s' (add_env env E1) sta' (PACKep p)))
- eval_valbind_match_DEF
-
|- !val sta env sta' var.
eval_valbind_match val sta env sta' var =
(?pat exp VE.
(val = PLAINvalbind pat exp NONE) /\
(var = VARENVvep VE) /\
(?v s'.
eval_exp exp sta env s' (VALvp v) /\
eval_pat pat s' env v sta' (VARENVvef VE))) \/
(?pat exp p.
(val = PLAINvalbind pat exp NONE) /\
(var = PACKvep p) /\
eval_exp exp sta env sta' (PACKvp p)) \/
(?pat exp valbind VE VE'.
(val = PLAINvalbind pat exp (SOME valbind)) /\
(var = VARENVvep (add_varenv VE VE')) /\
(?v s2 s3.
eval_exp exp sta env s2 (VALvp v) /\
eval_pat pat s2 env v s3 (VARENVvef VE) /\
eval_valbind valbind s3 env sta' (VARENVvep VE'))) \/
(?pat exp valbind p.
(val = PLAINvalbind pat exp (SOME valbind)) /\
(var = PACKvep p) /\
eval_exp exp sta env sta' (PACKvp p)) \/
(?pat exp valbind p.
(val = PLAINvalbind pat exp (SOME valbind)) /\
(var = PACKvep p) /\
(?v VE s2 s3.
eval_exp exp sta env s2 (VALvp v) /\
eval_pat pat s2 env v s3 (VARENVvef VE) /\
eval_valbind valbind s3 env sta' (PACKvep p))) \/
(?pat exp.
(val = PLAINvalbind pat exp NONE) /\
(var = PACKvep (PACK (NAMEexval (EXNAME 8)))) /\
(?v s'.
eval_exp exp sta env s' (VALvp v) /\
eval_pat pat s' env v sta' FAILvef)) \/
(?pat exp valbind.
(val = PLAINvalbind pat exp (SOME valbind)) /\
(var = PACKvep (PACK (NAMEexval (EXNAME 8)))) /\
(?v s'.
eval_exp exp sta env s' (VALvp v) /\
eval_pat pat s' env v sta' FAILvef)) \/
(?valbind VE.
(val = RECvalbind valbind) /\
(var = VARENVvep (rec_varenv VE)) /\
eval_valbind valbind sta env sta' (VARENVvep VE)) \/
(?valbind p.
(val = RECvalbind valbind) /\
(var = PACKvep p) /\
eval_valbind valbind sta env sta' (PACKvep p))
- eval_exbind_match_thm
-
|- !eb s1 e s2 eep.
eval_exbind eb s1 e s2 eep ==>
(?excon en.
(eb = EXBIND1 excon NONE) /\
(eep = EXCONENVeep (insert_into_exconenv empty_exconenv excon en)) /\
(en = new_exname (STATE_arg2 s1)) /\
(s2 = add_exname en s1)) \/
(?excon eb' en EE.
(eb = EXBIND1 excon (SOME eb')) /\
(eep =
EXCONENVeep
(add_exconenv (insert_into_exconenv empty_exconenv excon en) EE)) /\
(?s'.
(en = new_exname (STATE_arg2 s1)) /\
(s' = add_exname en s1) /\
eval_exbind eb' s' e s2 (EXCONENVeep EE))) \/
(?excon eb' p.
(eb = EXBIND1 excon (SOME eb')) /\
(eep = PACKeep p) /\
(?en s'.
(en = new_exname (STATE_arg2 s1)) /\
(s' = add_exname en s1) /\
eval_exbind eb' s' e s2 (PACKeep p))) \/
(?excon longexcon en.
(eb = EXBIND2 excon longexcon NONE) /\
(s1 = s2) /\
(eep = EXCONENVeep (insert_into_exconenv empty_exconenv excon en)) /\
(lookuplongexcon_env e longexcon = lift en)) \/
(?excon longexcon eb' en EE.
(eb = EXBIND2 excon longexcon (SOME eb')) /\
(eep =
EXCONENVeep
(add_exconenv (insert_into_exconenv empty_exconenv excon en) EE)) /\
(lookuplongexcon_env e longexcon = lift en) /\
eval_exbind eb' s1 e s2 (EXCONENVeep EE)) \/
(?excon longexcon eb' p.
(eb = EXBIND2 excon longexcon (SOME eb')) /\
(eep = PACKeep p) /\
(?en.
(lookuplongexcon_env e longexcon = lift en) /\
eval_exbind eb' s1 e s2 (PACKeep p)))
- eval_exbind_det
-
|- !eb s1 E s2 EEp s2' EEp'.
eval_exbind eb s1 E s2 EEp /\ eval_exbind eb s1 E s2' EEp' ==>
(s2 = s2') /\ (EEp = EEp')
- eval_atpat_match_thm
-
|- !ap s1 e v s2 vef.
eval_atpat ap s1 e v s2 vef ==>
(ap = WILDCARDatpat) /\ (s1 = s2) /\ (vef = VARENVvef empty_varenv) \/
(?scon.
(ap = SCONatpat scon) /\
(s1 = s2) /\
(vef = VARENVvef empty_varenv) /\
(v = SVALval (value_of scon))) \/
(?scon.
(ap = SCONatpat scon) /\
(s1 = s2) /\
(vef = FAILvef) /\
~(v = SVALval (value_of scon))) \/
(?var.
(ap = VARatpat var) /\
(s1 = s2) /\
(vef = VARENVvef (insert_into_varenv empty_varenv var v))) \/
(?longcon.
(ap = CONatpat longcon) /\
(s1 = s2) /\
(vef = VARENVvef empty_varenv) /\
(v = CONval (long_base longcon))) \/
(?longcon.
(ap = CONatpat longcon) /\
(s1 = s2) /\
(vef = FAILvef) /\
~(v = CONval (long_base longcon))) \/
(?longexcon en.
(ap = EXCONatpat longexcon) /\
(s1 = s2) /\
(v = EXVALval (NAMEexval en)) /\
(vef = VARENVvef empty_varenv) /\
(lookuplongexcon_env e longexcon = lift en)) \/
(?longexcon en.
(ap = EXCONatpat longexcon) /\
(s1 = s2) /\
(v = EXVALval (NAMEexval en)) /\
(vef = FAILvef) /\
(?en'. (lookuplongexcon_env e longexcon = lift en') /\ ~(en = en'))) \/
(ap = RECORDatpat NONE) /\
(s1 = s2) /\
(vef = VARENVvef empty_varenv) /\
(v = RECORDval empty_record) \/
(?VE patrow.
(ap = RECORDatpat (SOME patrow)) /\
(vef = VARENVvef (add_varenv empty_varenv VE)) /\
(?r.
(v = RECORDval (add_record empty_record r)) /\
eval_patrow patrow s1 e r s2 (VARENVvef VE))) \/
(?patrow.
(ap = RECORDatpat (SOME patrow)) /\
(vef = FAILvef) /\
(?r.
(v = RECORDval (add_record empty_record r)) /\
eval_patrow patrow s1 e r s2 FAILvef)) \/
(?pat. (ap = PARatpat pat) /\ eval_pat pat s1 e v s2 vef)
- eval_pat_match_thm
-
|- !p s1 e v s2 vef.
eval_pat p s1 e v s2 vef ==>
(?atpat. (p = ATPATpat atpat) /\ eval_atpat atpat s1 e v s2 vef) \/
(?longcon atpat.
(p = CONpat longcon atpat) /\
(?con v'.
(long_base longcon = con) /\
~(con = CON "ref") /\
(v = APPCONval con v') /\
eval_atpat atpat s1 e v' s2 vef)) \/
(?longcon atpat.
(p = CONpat longcon atpat) /\
(s1 = s2) /\
(vef = FAILvef) /\
(?con.
(long_base longcon = con) /\
~(con = CON "ref") /\
(!v'. ~(v = APPCONval con v')))) \/
(?longexcon atpat.
(p = EXCONpat longexcon atpat) /\
(?v' en.
(lookuplongexcon_env e longexcon = lift en) /\
(v = EXVALval (NAMEVALexval en v')) /\
eval_atpat atpat s1 e v' s2 vef)) \/
(?longexcon atpat.
(p = EXCONpat longexcon atpat) /\
(s1 = s2) /\
(vef = FAILvef) /\
(?en.
(lookuplongexcon_env e longexcon = lift en) /\
(!v'. ~(v = EXVALval (NAMEVALexval en v'))))) \/
(?a atpat.
(p = CONpat (BASE (CON "ref")) atpat) /\
(s1 = s2) /\
(v = ADDRval a) /\
(?v.
(lookupaddr_state s2 a = lift v) /\
eval_atpat atpat s2 e v s2 vef)) \/
(?var pat VE.
(p = LAYEREDpat var pat) /\
(vef =
VARENVvef (add_varenv (insert_into_varenv empty_varenv var v) VE)) /\
eval_pat pat s1 e v s2 (VARENVvef VE)) \/
(?var pat.
(p = LAYEREDpat var pat) /\
(vef = FAILvef) /\
eval_pat pat s1 e v s2 FAILvef)
- eval_patrow_match_thm
-
|- !pr s1 e r s2 vef.
eval_patrow pr s1 e r s2 vef ==>
(pr = DOTDOTDOT) /\ (s1 = s2) /\ (vef = VARENVvef empty_varenv) \/
(?lab pat.
(pr = PATROW lab pat NONE) /\
(vef = FAILvef) /\
eval_pat pat s1 e (lower (lookup_label r lab)) s2 FAILvef) \/
(?lab pat patrow.
(pr = PATROW lab pat (SOME patrow)) /\
(vef = FAILvef) /\
eval_pat pat s1 e (lower (lookup_label r lab)) s2 FAILvef) \/
(?lab pat VE.
(pr = PATROW lab pat NONE) /\
(vef = VARENVvef VE) /\
eval_pat pat s1 e (lower (lookup_label r lab)) s2 (VARENVvef VE)) \/
(?lab pat patrow VE VE'.
(pr = PATROW lab pat (SOME patrow)) /\
(vef = VARENVvef (add_varenv VE VE')) /\
(?s'.
eval_pat pat s1 e (lower (lookup_label r lab)) s' (VARENVvef VE) /\
eval_patrow patrow s' e r s2 (VARENVvef VE'))) \/
(?lab pat patrow.
(pr = PATROW lab pat (SOME patrow)) /\
(vef = FAILvef) /\
(?s' VE.
eval_pat pat s1 e (lower (lookup_label r lab)) s' (VARENVvef VE) /\
eval_patrow patrow s' e r s2 FAILvef))
- eval_atpat_det
-
|- !ap s1 E v s2 vef s2' vef'.
eval_atpat ap s1 E v s2 vef /\ eval_atpat ap s1 E v s2' vef' ==>
(s2 = s2') /\ (vef = vef')
- eval_pat_det
-
|- !p s1 E v s2 vef s2' vef'.
eval_pat p s1 E v s2 vef /\ eval_pat p s1 E v s2' vef' ==>
(s2 = s2') /\ (vef = vef')
- eval_patrow_det
-
|- !pr s1 E r s2 vef s2' vef'.
eval_patrow pr s1 E r s2 vef /\ eval_patrow pr s1 E r s2' vef' ==>
(s2 = s2') /\ (vef = vef')
- eval_atexp_match_thm
-
|- !ae s1 e s2 vp.
eval_atexp ae s1 e s2 vp ==>
(?scon.
(ae = SCONatexp scon) /\
(s1 = s2) /\
(vp = VALvp (SVALval (value_of scon)))) \/
(?longvar v.
(ae = VARatexp longvar) /\
(s1 = s2) /\
(vp = VALvp v) /\
(lookuplongvar_env e longvar = lift v)) \/
(?longcon con.
(ae = CONatexp longcon) /\
(s1 = s2) /\
(vp = VALvp (CONval con)) /\
(long_base longcon = con)) \/
(?en longexcon.
(ae = EXCONatexp longexcon) /\
(s1 = s2) /\
(vp = VALvp (EXVALval (NAMEexval en))) /\
(lookuplongexcon_env e longexcon = lift en)) \/
(ae = RECORDatexp NONE) /\
(s1 = s2) /\
(vp = VALvp (RECORDval empty_record)) \/
(?exprow r.
(ae = RECORDatexp (SOME exprow)) /\
(vp = VALvp (RECORDval (add_record empty_record r))) /\
eval_exprow exprow s1 e s2 (RECORDrp r)) \/
(?exprow p.
(ae = RECORDatexp (SOME exprow)) /\
(vp = PACKvp p) /\
eval_exprow exprow s1 e s2 (PACKrp p)) \/
(?dec exp v.
(ae = LETatexp dec exp) /\
(vp = VALvp v) /\
(?s' E'.
eval_dec dec s1 e s' (ENVep E') /\
eval_exp exp s' (add_env e E') s2 (VALvp v))) \/
(?dec exp p.
(ae = LETatexp dec exp) /\
(vp = PACKvp p) /\
eval_dec dec s1 e s2 (PACKep p)) \/
(?dec exp p.
(ae = LETatexp dec exp) /\
(vp = PACKvp p) /\
(?s' E'.
eval_dec dec s1 e s' (ENVep E') /\
eval_exp exp s' (add_env e E') s2 (PACKvp p))) \/
(?exp. (ae = PARatexp exp) /\ eval_exp exp s1 e s2 vp)
- eval_exprow_match_thm
-
|- !er s1 e s2 rp.
eval_exprow er s1 e s2 rp ==>
(?lab exp v.
(er = EXPROW lab exp NONE) /\
(rp = RECORDrp (insert_into_record empty_record lab v)) /\
eval_exp exp s1 e s2 (VALvp v)) \/
(?lab exp exprow_op p.
(er = EXPROW lab exp exprow_op) /\
(rp = PACKrp p) /\
eval_exp exp s1 e s2 (PACKvp p)) \/
(?lab exp exprow v r.
(er = EXPROW lab exp (SOME exprow)) /\
(rp =
RECORDrp (add_record (insert_into_record empty_record lab v) r)) /\
(?s'.
eval_exp exp s1 e s' (VALvp v) /\
eval_exprow exprow s' e s2 (RECORDrp r))) \/
(?lab exp exprow p.
(er = EXPROW lab exp (SOME exprow)) /\
(rp = PACKrp p) /\
(?s' v.
eval_exp exp s1 e s' (VALvp v) /\
eval_exprow exprow s' e s2 (PACKrp p)))
- eval_exp_match_thm
-
|- !ex s1 e s2 vp.
eval_exp ex s1 e s2 vp ==>
(?atexp. (ex = ATEXPexp atexp) /\ eval_atexp atexp s1 e s2 vp) \/
(?exp atexp c v.
(ex = APPexp exp atexp) /\
(vp = VALvp (APPCONval c v)) /\
(?s'.
eval_exp exp s1 e s' (VALvp (CONval c)) /\
~(c = CON "ref") /\
eval_atexp atexp s' e s2 (VALvp v))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
eval_exp exp s1 e s2 (PACKvp p)) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s' c.
eval_exp exp s1 e s' (VALvp (CONval c)) /\
~(c = CON "ref") /\
eval_atexp atexp s' e s2 (PACKvp p))) \/
(?exp atexp en v.
(ex = APPexp exp atexp) /\
(vp = VALvp (EXVALval (NAMEVALexval en v))) /\
(?s'.
eval_exp exp s1 e s' (VALvp (EXVALval (NAMEexval en))) /\
eval_atexp atexp s' e s2 (VALvp v))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s' en.
eval_exp exp s1 e s' (VALvp (EXVALval (NAMEexval en))) /\
eval_atexp atexp s' e s2 (PACKvp p))) \/
(?s'' exp atexp a v.
(ex = APPexp exp atexp) /\
(s2 = insert_into_state_mem s'' a v) /\
(vp = VALvp (ADDRval a)) /\
(?s'.
eval_exp exp s1 e s' (VALvp (CONval (CON "ref"))) /\
eval_atexp atexp s' e s'' (VALvp v) /\
(a = new_addr s''))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s'.
eval_exp exp s1 e s' (VALvp (CONval (CON "ref"))) /\
eval_atexp atexp s' e s2 (PACKvp p))) \/
(?s'' exp atexp a v.
(ex = APPexp exp atexp) /\
(s2 = insert_into_state_mem s'' a v) /\
(vp = VALvp (RECORDval empty_record)) /\
(?s'.
eval_exp exp s1 e s' (VALvp ASSGval) /\
eval_atexp atexp s' e s''
(VALvp
(RECORDval
(insert_into_record
(insert_into_record empty_record (LABEL "1") (ADDRval a))
(LABEL "2")
v))))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s'.
eval_exp exp s1 e s' (VALvp ASSGval) /\
eval_atexp atexp s' e s2 (PACKvp p))) \/
(?exp atexp.
(ex = APPexp exp atexp) /\
(?s' b v.
eval_exp exp s1 e s' (VALvp (BASval b)) /\
eval_atexp atexp s' e s2 (VALvp v) /\
(apply b v = vp))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s' b.
eval_exp exp s1 e s' (VALvp (BASval b)) /\
eval_atexp atexp s' e s2 (PACKvp p))) \/
(?exp atexp v'.
(ex = APPexp exp atexp) /\
(vp = VALvp v') /\
(?s2' s3 match E' VE v.
eval_exp exp s1 e s2' (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2' e s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
s2
(VALvpf v'))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s2' match E' VE.
eval_exp exp s1 e s2' (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2' e s2 (PACKvp p))) \/
(?exp atexp p.
(ex = APPexp exp atexp) /\
(vp = PACKvp p) /\
(?s2' s3 match E' VE v.
eval_exp exp s1 e s2' (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2' e s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
s2
(PACKvpf p))) \/
(?exp atexp.
(ex = APPexp exp atexp) /\
(vp = PACKvp (PACK (NAMEexval (EXNAME 7)))) /\
(?s2' s3 match E' VE v.
eval_exp exp s1 e s2' (VALvp (CLOSUREval (CLOSURE match E' VE))) /\
eval_atexp atexp s2' e s3 (VALvp v) /\
eval_match match s3
(add_env E' (ENV empty_strenv (rec_varenv VE) empty_exconenv))
v
s2
FAILvpf)) \/
(?exp match v.
(ex = HANDLEexp exp match) /\
(vp = VALvp v) /\
eval_exp exp s1 e s2 (VALvp v)) \/
(?exp match v.
(ex = HANDLEexp exp match) /\
(vp = VALvp v) /\
(?s' e'.
eval_exp exp s1 e s' (PACKvp (PACK e')) /\
eval_match match s' e (EXVALval e') s2 (VALvpf v))) \/
(?exp match p.
(ex = HANDLEexp exp match) /\
(vp = PACKvp p) /\
(?s' e'.
eval_exp exp s1 e s' (PACKvp (PACK e')) /\
eval_match match s' e (EXVALval e') s2 (PACKvpf p))) \/
(?exp match e'.
(ex = HANDLEexp exp match) /\
(vp = PACKvp (PACK e')) /\
(?s'.
eval_exp exp s1 e s' (PACKvp (PACK e')) /\
eval_match match s' e (EXVALval e') s2 FAILvpf)) \/
(?exp e'.
(ex = RAISEexp exp) /\
(vp = PACKvp (PACK e')) /\
eval_exp exp s1 e s2 (VALvp (EXVALval e'))) \/
(?exp p.
(ex = RAISEexp exp) /\
(vp = PACKvp p) /\
eval_exp exp s1 e s2 (PACKvp p)) \/
(?match.
(ex = FNexp match) /\
(s1 = s2) /\
(vp = VALvp (CLOSUREval (CLOSURE match e empty_varenv))))
- eval_match_match_thm
-
|- !m s1 v e s2 vpf.
eval_match m s1 v e s2 vpf ==>
(?mrule match_op v'.
(m = MATCH mrule match_op) /\
(vpf = VALvpf v') /\
eval_mrule mrule s1 v e s2 (VALvpf v')) \/
(?mrule match_op p.
(m = MATCH mrule match_op) /\
(vpf = PACKvpf p) /\
eval_mrule mrule s1 v e s2 (PACKvpf p)) \/
(?mrule.
(m = MATCH mrule NONE) /\
(vpf = FAILvpf) /\
eval_mrule mrule s1 v e s2 FAILvpf) \/
(?mrule match.
(m = MATCH mrule (SOME match)) /\
(?s'.
eval_mrule mrule s1 v e s' FAILvpf /\
eval_match match s' v e s2 vpf))
- eval_mrule_match_thm
-
|- !mr s1 v e s2 vpf.
eval_mrule mr s1 v e s2 vpf ==>
(?pat exp v'.
(mr = MRULE pat exp) /\
(vpf = VALvpf v') /\
(?s' VE.
eval_pat pat s1 v e s' (VARENVvef VE) /\
eval_exp exp s' (add_env v (ENV empty_strenv VE empty_exconenv)) s2
(VALvp v'))) \/
(?pat exp p.
(mr = MRULE pat exp) /\
(vpf = PACKvpf p) /\
(?s' VE.
eval_pat pat s1 v e s' (VARENVvef VE) /\
eval_exp exp s' (add_env v (ENV empty_strenv VE empty_exconenv)) s2
(PACKvp p))) \/
(?pat exp.
(mr = MRULE pat exp) /\
(vpf = FAILvpf) /\
eval_pat pat s1 v e s2 FAILvef)
- eval_dec_match_thm
-
|- !d s1 e s2 ep.
eval_dec d s1 e s2 ep ==>
(?valbind VE.
(d = VALdec valbind) /\
(ep = ENVep (ENV empty_strenv VE empty_exconenv)) /\
eval_valbind valbind s1 e s2 (VARENVvep VE)) \/
(?valbind p.
(d = VALdec valbind) /\
(ep = PACKep p) /\
eval_valbind valbind s1 e s2 (PACKvep p)) \/
(?exbind EE.
(d = EXCEPTdec exbind) /\
(ep = ENVep (ENV empty_strenv empty_varenv EE)) /\
eval_exbind exbind s1 e s2 (EXCONENVeep EE)) \/
(?exbind p.
(d = EXCEPTdec exbind) /\
(ep = PACKep p) /\
eval_exbind exbind s1 e s2 (PACKeep p)) \/
(?dec1 dec2 E2.
(d = LOCALdec dec1 dec2) /\
(ep = ENVep E2) /\
(?E1 s'.
eval_dec dec1 s1 e s' (ENVep E1) /\
eval_dec dec2 s' (add_env e E1) s2 (ENVep E2))) \/
(?dec1 dec2 p.
(d = LOCALdec dec1 dec2) /\
(ep = PACKep p) /\
eval_dec dec1 s1 e s2 (PACKep p)) \/
(?dec1 dec2 p.
(d = LOCALdec dec1 dec2) /\
(ep = PACKep p) /\
(?E1 s'.
eval_dec dec1 s1 e s' (ENVep E1) /\
eval_dec dec2 s' (add_env e E1) s2 (PACKep p))) \/
(?longstrid_1_n E_1_n.
(d = OPENdec longstrid_1_n) /\
(s1 = s2) /\
(ep = ENVep (add_nonemptylist_env E_1_n)) /\
(nonempty_MAP (lookuplongstrid_env e) longstrid_1_n =
nonempty_MAP lift E_1_n)) \/
(d = EMPTYdec) /\
(s1 = s2) /\
(ep = ENVep (ENV empty_strenv empty_varenv empty_exconenv)) \/
(?dec1 dec2 E1 E2.
(d = SEQdec dec1 dec2) /\
(ep = ENVep (add_env E1 E2)) /\
(?s'.
eval_dec dec1 s1 e s' (ENVep E1) /\
eval_dec dec2 s' (add_env e E1) s2 (ENVep E2))) \/
(?dec1 dec2 p.
(d = SEQdec dec1 dec2) /\
(ep = PACKep p) /\
eval_dec dec1 s1 e s2 (PACKep p)) \/
(?dec1 dec2 p.
(d = SEQdec dec1 dec2) /\
(ep = PACKep p) /\
(?E1 s'.
eval_dec dec1 s1 e s' (ENVep E1) /\
eval_dec dec2 s' (add_env e E1) s2 (PACKep p)))
- eval_valbind_match_thm
-
|- !vb s1 e s2 vep.
eval_valbind vb s1 e s2 vep ==>
(?pat exp VE.
(vb = PLAINvalbind pat exp NONE) /\
(vep = VARENVvep VE) /\
(?v s'.
eval_exp exp s1 e s' (VALvp v) /\
eval_pat pat s' e v s2 (VARENVvef VE))) \/
(?pat exp p.
(vb = PLAINvalbind pat exp NONE) /\
(vep = PACKvep p) /\
eval_exp exp s1 e s2 (PACKvp p)) \/
(?pat exp valbind VE VE'.
(vb = PLAINvalbind pat exp (SOME valbind)) /\
(vep = VARENVvep (add_varenv VE VE')) /\
(?v s2' s3.
eval_exp exp s1 e s2' (VALvp v) /\
eval_pat pat s2' e v s3 (VARENVvef VE) /\
eval_valbind valbind s3 e s2 (VARENVvep VE'))) \/
(?pat exp valbind p.
(vb = PLAINvalbind pat exp (SOME valbind)) /\
(vep = PACKvep p) /\
eval_exp exp s1 e s2 (PACKvp p)) \/
(?pat exp valbind p.
(vb = PLAINvalbind pat exp (SOME valbind)) /\
(vep = PACKvep p) /\
(?v VE s2' s3.
eval_exp exp s1 e s2' (VALvp v) /\
eval_pat pat s2' e v s3 (VARENVvef VE) /\
eval_valbind valbind s3 e s2 (PACKvep p))) \/
(?pat exp.
(vb = PLAINvalbind pat exp NONE) /\
(vep = PACKvep (PACK (NAMEexval (EXNAME 8)))) /\
(?v s'.
eval_exp exp s1 e s' (VALvp v) /\ eval_pat pat s' e v s2 FAILvef)) \/
(?pat exp valbind.
(vb = PLAINvalbind pat exp (SOME valbind)) /\
(vep = PACKvep (PACK (NAMEexval (EXNAME 8)))) /\
(?v s'.
eval_exp exp s1 e s' (VALvp v) /\ eval_pat pat s' e v s2 FAILvef)) \/
(?valbind VE.
(vb = RECvalbind valbind) /\
(vep = VARENVvep (rec_varenv VE)) /\
eval_valbind valbind s1 e s2 (VARENVvep VE)) \/
(?valbind p.
(vb = RECvalbind valbind) /\
(vep = PACKvep p) /\
eval_valbind valbind s1 e s2 (PACKvep p))
- eval_atexp_det
-
|- !ae s1 e s2 vp s2' vp'.
eval_atexp ae s1 e s2 vp /\ eval_atexp ae s1 e s2' vp' ==>
(s2 = s2') /\ (vp = vp')
- eval_exprow_det
-
|- !er s1 e s2 rp s2' rp'.
eval_exprow er s1 e s2 rp /\ eval_exprow er s1 e s2' rp' ==>
(s2 = s2') /\ (rp = rp')
- eval_exp_det
-
|- !ex s1 e s2 vp s2' vp'.
eval_exp ex s1 e s2 vp /\ eval_exp ex s1 e s2' vp' ==>
(s2 = s2') /\ (vp = vp')
- eval_match_det
-
|- !m s1 v e s2 vpf s2' vpf'.
eval_match m s1 v e s2 vpf /\ eval_match m s1 v e s2' vpf' ==>
(s2 = s2') /\ (vpf = vpf')
- eval_mrule_det
-
|- !mr s1 v e s2 vpf s2' vpf'.
eval_mrule mr s1 v e s2 vpf /\ eval_mrule mr s1 v e s2' vpf' ==>
(s2 = s2') /\ (vpf = vpf')
- eval_dec_det
-
|- !d s1 e s2 ep s2' ep'.
eval_dec d s1 e s2 ep /\ eval_dec d s1 e s2' ep' ==>
(s2 = s2') /\ (ep = ep')
- eval_valbind_det
-
|- !vb s1 e s2 vep s2' vep'.
eval_valbind vb s1 e s2 vep /\ eval_valbind vb s1 e s2' vep' ==>
(s2 = s2') /\ (vep = vep')