< Module matchEval:wrapper.
< Prove_Constraint matchEval:host:proj_expr_unique.
Variables: E1 E2
PrA : |{expr}- wrap E1 ~~> E1
PrB : |{expr}- wrap E1 ~~> E2
IsE : is_expr (wrap E1)
============================
E1 = E2
< case PrB.
Variables: E2
PrA : |{expr}- wrap E2 ~~> E2
IsE : is_expr (wrap E2)
============================
E2 = E2
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_expr_is.
Variables: E'
Pr : |{expr}- wrap E' ~~> E'
IsE : is_expr (wrap E')
============================
is_expr E'
< case IsE.
Variables: E'
Pr : |{expr}- wrap E' ~~> E'
H1 : is_expr E'
============================
is_expr E'
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_is.
Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_other.
Proof completed.
< Prove_Constraint matchEval:host:proj_fun_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_fun_is.
Proof completed.
< Prove_Constraint matchEval:host:proj_param_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_param_is.
Proof completed.
< Prove_Constraint matchEval:host:proj_program_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_program_is.
Proof completed.
< Prove_Constraint matchEval:host:proj_typ_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_typ_is.
Proof completed.
< Prove_Constraint matchEval:host:proj_value_unique.
Variables: V1 V2
PrA : |{value}- wrapVal V1 ~~> V1
PrB : |{value}- wrapVal V1 ~~> V2
IsV : is_value (wrapVal V1)
============================
V1 = V2
< case PrB.
Variables: V2
PrA : |{value}- wrapVal V2 ~~> V2
IsV : is_value (wrapVal V2)
============================
V2 = V2
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_value_is.
Variables: V'
Pr : |{value}- wrapVal V' ~~> V'
IsV : is_value (wrapVal V')
============================
is_value V'
< case IsV.
Variables: V'
Pr : |{value}- wrapVal V' ~~> V'
H1 : is_value V'
============================
is_value V'
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:is_expr,
matchEval:host:is_args,
matchEval:host:is_recFieldExprs.
Proof completed.
< Prove_Ext_Ind matchEval:host:is_expr,
matchEval:host:is_args,
matchEval:host:is_recFieldExprs.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 1.20:
Variables: Expr
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
R : is_expr (wrap Expr) @
R1 : is_expr Expr *
============================
<is_expr {P}> (wrap Expr)
< apply IH to R1.
Subgoal 1.20:
Variables: Expr
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
R : is_expr (wrap Expr) @
R1 : is_expr Expr *
H1 : <is_expr {P}> Expr
============================
<is_expr {P}> (wrap Expr)
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:is_stmt.
Proof completed.
< Prove_Ext_Ind matchEval:host:is_stmt.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Proof completed.
< Prove matchEval:host:is_args_nilArgs_or_consArgs.
Proof completed.
< Prove matchEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs.
Proof completed.
< Prove matchEval:host:vars_unique.
Subgoal 1.20:
Variables: V1 V2 E1
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
IsE : is_expr (wrap E1)
VarsA : vars (wrap E1) V1 @
VarsB : vars (wrap E1) V2
VarsA1 : vars E1 V1 *
============================
V1 = V2
< case IsE.
Subgoal 1.20:
Variables: V1 V2 E1
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (wrap E1) V1 @
VarsB : vars (wrap E1) V2
VarsA1 : vars E1 V1 *
H1 : is_expr E1
============================
V1 = V2
< VarsB: case VarsB.
Subgoal 1.20:
Variables: V1 V2 E1
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (wrap E1) V1 @
VarsA1 : vars E1 V1 *
H1 : is_expr E1
VarsB : vars E1 V2
============================
V1 = V2
< apply IH to _ VarsA1 VarsB.
Subgoal 1.20:
Variables: V2 E1
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (wrap E1) V2 @
VarsA1 : vars E1 V2 *
H1 : is_expr E1
VarsB : vars E1 V2
============================
V2 = V2
< search.
Proof completed.
< Prove matchEval:host:vars_is.
Subgoal 1.20:
Variables: V E1
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
IsE : is_expr (wrap E1)
V : vars (wrap E1) V @
V1 : vars E1 V *
============================
is_list is_string V
< case IsE.
Subgoal 1.20:
Variables: V E1
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (wrap E1) V @
V1 : vars E1 V *
H1 : is_expr E1
============================
is_list is_string V
< apply IH to _ V1.
Subgoal 1.20:
Variables: V E1
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (wrap E1) V @
V1 : vars E1 V *
H1 : is_expr E1
H2 : is_list is_string V
============================
is_list is_string V
< search.
Proof completed.
< Prove matchEval:host:vars_exist,
matchEval:host:varsArgs_exist,
matchEval:host:varsRecFields_exist.
Subgoal 1.20:
Variables: Expr
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (wrap Expr) @
IsE1 : is_expr Expr *
============================
exists V, vars (wrap Expr) V
< apply IH to IsE1.
Subgoal 1.20:
Variables: Expr V
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (wrap Expr) @
IsE1 : is_expr Expr *
H1 : vars Expr V
============================
exists V, vars (wrap Expr) V
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_expr_vars.
Variables: E_P V V_P X
Pr : |{expr}- wrap E_P ~~> E_P
IsE : is_expr (wrap E_P)
V : vars (wrap E_P) V
V_P : vars E_P V_P
Mem : mem X V
============================
mem X V_P
< V: case V.
Variables: E_P V V_P X
Pr : |{expr}- wrap E_P ~~> E_P
IsE : is_expr (wrap E_P)
V_P : vars E_P V_P
Mem : mem X V
V : vars E_P V
============================
mem X V_P
< case IsE.
Variables: E_P V V_P X
Pr : |{expr}- wrap E_P ~~> E_P
V_P : vars E_P V_P
Mem : mem X V
V : vars E_P V
H1 : is_expr E_P
============================
mem X V_P
< apply vars_unique to _ V V_P.
Variables: E_P V_P X
Pr : |{expr}- wrap E_P ~~> E_P
V_P : vars E_P V_P
Mem : mem X V_P
V : vars E_P V_P
H1 : is_expr E_P
============================
mem X V_P
< search.
Proof completed.
< Prove matchEval:host:typeOf_isTy.
Subgoal 1.22:
Variables: FT ET Ty E1
IH : forall E FT ET Ty,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
is_typ Ty
IH1 : forall A FT ET Tys,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
is_list is_typ Tys
IH2 : forall RF FT ET Fields,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
is_recFieldTys Fields
IsE : is_expr (wrap E1)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (wrap E1) Ty @
Ty1 : typeOf FT ET E1 Ty *
============================
is_typ Ty
< case IsE.
Subgoal 1.22:
Variables: FT ET Ty E1
IH : forall E FT ET Ty,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
is_typ Ty
IH1 : forall A FT ET Tys,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
is_list is_typ Tys
IH2 : forall RF FT ET Fields,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
is_recFieldTys Fields
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (wrap E1) Ty @
Ty1 : typeOf FT ET E1 Ty *
H1 : is_expr E1
============================
is_typ Ty
< apply IH to _ _ _ Ty1.
Subgoal 1.22:
Variables: FT ET Ty E1
IH : forall E FT ET Ty,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
is_typ Ty
IH1 : forall A FT ET Tys,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
is_list is_typ Tys
IH2 : forall RF FT ET Fields,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
is_recFieldTys Fields
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (wrap E1) Ty @
Ty1 : typeOf FT ET E1 Ty *
H1 : is_expr E1
H2 : is_typ Ty
============================
is_typ Ty
< search.
Proof completed.
< Prove matchEval:host:stmtOK_isCtx.
Proof completed.
< Prove matchEval:host:stmtOK_keep_scopes.
Proof completed.
< Prove matchEval:host:stmtOK_older_scopes_same.
Proof completed.
< Prove matchEval:host:stmtOK_first_scope_lookup_same.
Proof completed.
< Prove matchEval:host:typeOf_unique.
Subgoal 1.22:
Variables: FT ET_A ET_B TyA TyB E1
IH_E : forall FT ET_A ET_B E TyA TyB,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
TyA = TyB
IH_A : forall FT ET_A ET_B A TysA TysB,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsE : is_expr (wrap E1)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (wrap E1) TyA @
TyB : typeOf FT ET_B (wrap E1) TyB
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A E1 TyA *
============================
TyA = TyB
< case IsE.
Subgoal 1.22:
Variables: FT ET_A ET_B TyA TyB E1
IH_E : forall FT ET_A ET_B E TyA TyB,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
TyA = TyB
IH_A : forall FT ET_A ET_B A TysA TysB,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (wrap E1) TyA @
TyB : typeOf FT ET_B (wrap E1) TyB
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A E1 TyA *
H1 : is_expr E1
============================
TyA = TyB
< TyB: case TyB.
Subgoal 1.22:
Variables: FT ET_A ET_B TyA TyB E1
IH_E : forall FT ET_A ET_B E TyA TyB,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
TyA = TyB
IH_A : forall FT ET_A ET_B A TysA TysB,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (wrap E1) TyA @
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A E1 TyA *
H1 : is_expr E1
TyB : typeOf FT ET_B E1 TyB
============================
TyA = TyB
< apply IH_E to _ _ _ _ TyA1 TyB _.
Subgoal 1.22:
Variables: FT ET_A ET_B TyB E1
IH_E : forall FT ET_A ET_B E TyA TyB,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
TyA = TyB
IH_A : forall FT ET_A ET_B A TysA TysB,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (wrap E1) TyB @
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A E1 TyB *
H1 : is_expr E1
TyB : typeOf FT ET_B E1 TyB
============================
TyB = TyB
< search.
Proof completed.
< Prove matchEval:host:stmtOK_unique.
Proof completed.
< Prove matchEval:host:paramTy_is.
Proof completed.
< Prove matchEval:host:getFunInfo_is.
Proof completed.
< Prove matchEval:host:paramTy_exists.
Proof completed.
< Prove matchEval:host:getFunInfo_exists.
Proof completed.
< Prove matchEval:host:matchInt_is.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> is_integer I
IsV : is_value (wrapVal V1)
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
============================
is_integer I
< case IsV.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> is_integer I
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
============================
is_integer I
< apply IH to _ MI1.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> is_integer I
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
H2 : is_integer I
============================
is_integer I
< search.
Proof completed.
< Prove matchEval:host:matchString_is.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> is_string S
IsV : is_value (wrapVal V1)
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
============================
is_string S
< case IsV.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> is_string S
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
H1 : is_value V1
============================
is_string S
< apply IH to _ MS1.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> is_string S
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
H1 : is_value V1
H2 : is_string S
============================
is_string S
< search.
Proof completed.
< Prove matchEval:host:matchRec_is.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs,
is_value V -> matchRec V Fs * -> is_list (is_pair is_string is_value) Fs
IsV : is_value (wrapVal V1)
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
============================
is_list (is_pair is_string is_value) Fs
< case IsV.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs,
is_value V -> matchRec V Fs * -> is_list (is_pair is_string is_value) Fs
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
============================
is_list (is_pair is_string is_value) Fs
< apply IH to _ MR1.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs,
is_value V -> matchRec V Fs * -> is_list (is_pair is_string is_value) Fs
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
H2 : is_list (is_pair is_string is_value) Fs
============================
is_list (is_pair is_string is_value) Fs
< search.
Proof completed.
< Prove matchEval:host:evalExpr_isValue,
matchEval:host:evalStmt_isCtx,
matchEval:host:evalArgs_isValue,
matchEval:host:evalRecFields_isValue.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_V_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_value V
IH_C_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value V
IH_V_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list (is_pair is_string is_value) V
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
============================
is_value (wrapVal V1)
< case IsE.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_V_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_value V
IH_C_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value V
IH_V_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
============================
is_value (wrapVal V1)
< apply IH_V_E to _ _ _ Ev1.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_V_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_value V
IH_C_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value V
IH_V_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
H2 : is_value V1
============================
is_value (wrapVal V1)
< search.
Proof completed.
< Prove matchEval:host:evalExpr_isOutput,
matchEval:host:evalStmt_isOutput,
matchEval:host:evalArgs_isOutput,
matchEval:host:evalRecFields_isOutput.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_list is_value O
IH_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list is_value O
IH_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value O
IH_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list is_value O
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
============================
is_list is_value O
< case IsE.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_list is_value O
IH_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list is_value O
IH_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value O
IH_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
============================
is_list is_value O
< apply IH_E to _ _ _ Ev1.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall FE EE E V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
is_list is_value O
IH_S : forall FE EE EE' S O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
is_list is_value O
IH_A : forall FE EE A V O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V O * ->
is_list is_value O
IH_RF : forall FE EE RF V O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V O * ->
is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
H2 : is_list is_value O
============================
is_list is_value O
< search.
Proof completed.
< Prove matchEval:host:paramName_is.
Proof completed.
< Prove matchEval:host:getFunEvalInfo_is.
Proof completed.
< Prove matchEval:host:evalProgram_isOutput.
Proof completed.
< Prove matchEval:host:evalStmt_names_same.
Proof completed.
< Prove matchEval:host:matchInt_unique.
Subgoal 2:
Variables: IA IB V1
IH : forall V IA IB, is_value V -> matchInt V IA * -> matchInt V IB -> IA = IB
IsV : is_value (wrapVal V1)
MIA : matchInt (wrapVal V1) IA @
MIB : matchInt (wrapVal V1) IB
MIA1 : matchInt V1 IA *
============================
IA = IB
< case IsV.
Subgoal 2:
Variables: IA IB V1
IH : forall V IA IB, is_value V -> matchInt V IA * -> matchInt V IB -> IA = IB
MIA : matchInt (wrapVal V1) IA @
MIB : matchInt (wrapVal V1) IB
MIA1 : matchInt V1 IA *
H1 : is_value V1
============================
IA = IB
< MIB: case MIB.
Subgoal 2:
Variables: IA IB V1
IH : forall V IA IB, is_value V -> matchInt V IA * -> matchInt V IB -> IA = IB
MIA : matchInt (wrapVal V1) IA @
MIA1 : matchInt V1 IA *
H1 : is_value V1
MIB : matchInt V1 IB
============================
IA = IB
< apply IH to _ MIA1 MIB.
Subgoal 2:
Variables: IB V1
IH : forall V IA IB, is_value V -> matchInt V IA * -> matchInt V IB -> IA = IB
MIA : matchInt (wrapVal V1) IB @
MIA1 : matchInt V1 IB *
H1 : is_value V1
MIB : matchInt V1 IB
============================
IB = IB
< search.
Proof completed.
< Prove matchEval:host:matchTrue_matchFalse_exclusive.
Subgoal 2:
Variables: V1
IH : forall V, is_value V -> matchTrue V * -> matchFalse V -> false
IsV : is_value (wrapVal V1)
MT : matchTrue (wrapVal V1) @
MF : matchFalse (wrapVal V1)
MT1 : matchTrue V1 *
============================
false
< case IsV.
Subgoal 2:
Variables: V1
IH : forall V, is_value V -> matchTrue V * -> matchFalse V -> false
MT : matchTrue (wrapVal V1) @
MF : matchFalse (wrapVal V1)
MT1 : matchTrue V1 *
H1 : is_value V1
============================
false
< MF: case MF.
Subgoal 2:
Variables: V1
IH : forall V, is_value V -> matchTrue V * -> matchFalse V -> false
MT : matchTrue (wrapVal V1) @
MT1 : matchTrue V1 *
H1 : is_value V1
MF : matchFalse V1
============================
false
< apply IH to _ MT1 _.
Proof completed.
< Prove matchEval:host:matchString_unique.
Subgoal 2:
Variables: SA SB V1
IH : forall V SA SB,
is_value V -> matchString V SA * -> matchString V SB -> SA = SB
IsV : is_value (wrapVal V1)
MSA : matchString (wrapVal V1) SA @
MSB : matchString (wrapVal V1) SB
MSA1 : matchString V1 SA *
============================
SA = SB
< case IsV.
Subgoal 2:
Variables: SA SB V1
IH : forall V SA SB,
is_value V -> matchString V SA * -> matchString V SB -> SA = SB
MSA : matchString (wrapVal V1) SA @
MSB : matchString (wrapVal V1) SB
MSA1 : matchString V1 SA *
H1 : is_value V1
============================
SA = SB
< MSB: case MSB.
Subgoal 2:
Variables: SA SB V1
IH : forall V SA SB,
is_value V -> matchString V SA * -> matchString V SB -> SA = SB
MSA : matchString (wrapVal V1) SA @
MSA1 : matchString V1 SA *
H1 : is_value V1
MSB : matchString V1 SB
============================
SA = SB
< apply IH to _ MSA1 MSB.
Subgoal 2:
Variables: SB V1
IH : forall V SA SB,
is_value V -> matchString V SA * -> matchString V SB -> SA = SB
MSA : matchString (wrapVal V1) SB @
MSA1 : matchString V1 SB *
H1 : is_value V1
MSB : matchString V1 SB
============================
SB = SB
< search.
Proof completed.
< Prove matchEval:host:matchRec_unique.
Subgoal 2:
Variables: FA FB V1
IH : forall V FA FB, is_value V -> matchRec V FA * -> matchRec V FB -> FA = FB
IsV : is_value (wrapVal V1)
MRA : matchRec (wrapVal V1) FA @
MRB : matchRec (wrapVal V1) FB
MRA1 : matchRec V1 FA *
============================
FA = FB
< case IsV.
Subgoal 2:
Variables: FA FB V1
IH : forall V FA FB, is_value V -> matchRec V FA * -> matchRec V FB -> FA = FB
MRA : matchRec (wrapVal V1) FA @
MRB : matchRec (wrapVal V1) FB
MRA1 : matchRec V1 FA *
H1 : is_value V1
============================
FA = FB
< MRB: case MRB.
Subgoal 2:
Variables: FA FB V1
IH : forall V FA FB, is_value V -> matchRec V FA * -> matchRec V FB -> FA = FB
MRA : matchRec (wrapVal V1) FA @
MRA1 : matchRec V1 FA *
H1 : is_value V1
MRB : matchRec V1 FB
============================
FA = FB
< apply IH to _ MRA1 MRB.
Subgoal 2:
Variables: FB V1
IH : forall V FA FB, is_value V -> matchRec V FA * -> matchRec V FB -> FA = FB
MRA : matchRec (wrapVal V1) FB @
MRA1 : matchRec V1 FB *
H1 : is_value V1
MRB : matchRec V1 FB
============================
FB = FB
< search.
Proof completed.
< Prove matchEval:host:matchInt_matchTrue_exclusive.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchTrue V -> false
IsV : is_value (wrapVal V1)
MI : matchInt (wrapVal V1) I @
MT : matchTrue (wrapVal V1)
MI1 : matchInt V1 I *
============================
false
< case IsV.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchTrue V -> false
MI : matchInt (wrapVal V1) I @
MT : matchTrue (wrapVal V1)
MI1 : matchInt V1 I *
H1 : is_value V1
============================
false
< MT: case MT.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchTrue V -> false
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
MT : matchTrue V1
============================
false
< apply IH to _ MI1 _.
Proof completed.
< Prove matchEval:host:matchInt_matchFalse_exclusive.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchFalse V -> false
IsV : is_value (wrapVal V1)
MI : matchInt (wrapVal V1) I @
MF : matchFalse (wrapVal V1)
MI1 : matchInt V1 I *
============================
false
< case IsV.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchFalse V -> false
MI : matchInt (wrapVal V1) I @
MF : matchFalse (wrapVal V1)
MI1 : matchInt V1 I *
H1 : is_value V1
============================
false
< case MF.
Subgoal 2:
Variables: I V1
IH : forall V I, is_value V -> matchInt V I * -> matchFalse V -> false
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
H2 : matchFalse V1
============================
false
< apply IH to _ MI1 _.
Proof completed.
< Prove matchEval:host:matchInt_matchString_exclusive.
Subgoal 2:
Variables: I S V1
IH : forall V I S, is_value V -> matchInt V I * -> matchString V S -> false
IsV : is_value (wrapVal V1)
MI : matchInt (wrapVal V1) I @
MS : matchString (wrapVal V1) S
MI1 : matchInt V1 I *
============================
false
< case IsV.
Subgoal 2:
Variables: I S V1
IH : forall V I S, is_value V -> matchInt V I * -> matchString V S -> false
MI : matchInt (wrapVal V1) I @
MS : matchString (wrapVal V1) S
MI1 : matchInt V1 I *
H1 : is_value V1
============================
false
< case MS.
Subgoal 2:
Variables: I S V1
IH : forall V I S, is_value V -> matchInt V I * -> matchString V S -> false
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
H2 : matchString V1 S
============================
false
< apply IH to _ MI1 _.
Proof completed.
< Prove matchEval:host:matchInt_matchRec_exclusive.
Subgoal 2:
Variables: I Fs V1
IH : forall V I Fs, is_value V -> matchInt V I * -> matchRec V Fs -> false
IsV : is_value (wrapVal V1)
MI : matchInt (wrapVal V1) I @
MR : matchRec (wrapVal V1) Fs
MI1 : matchInt V1 I *
============================
false
< case IsV.
Subgoal 2:
Variables: I Fs V1
IH : forall V I Fs, is_value V -> matchInt V I * -> matchRec V Fs -> false
MI : matchInt (wrapVal V1) I @
MR : matchRec (wrapVal V1) Fs
MI1 : matchInt V1 I *
H1 : is_value V1
============================
false
< case MR.
Subgoal 2:
Variables: I Fs V1
IH : forall V I Fs, is_value V -> matchInt V I * -> matchRec V Fs -> false
MI : matchInt (wrapVal V1) I @
MI1 : matchInt V1 I *
H1 : is_value V1
H2 : matchRec V1 Fs
============================
false
< apply IH to _ MI1 _.
Proof completed.
< Prove matchEval:host:matchString_matchTrue_exclusive.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchTrue V -> false
IsV : is_value (wrapVal V1)
MS : matchString (wrapVal V1) S @
MT : matchTrue (wrapVal V1)
MS1 : matchString V1 S *
============================
false
< case IsV.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchTrue V -> false
MS : matchString (wrapVal V1) S @
MT : matchTrue (wrapVal V1)
MS1 : matchString V1 S *
H1 : is_value V1
============================
false
< case MT.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchTrue V -> false
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
H1 : is_value V1
H2 : matchTrue V1
============================
false
< apply IH to _ MS1 _.
Proof completed.
< Prove matchEval:host:matchString_matchFalse_exclusive.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchFalse V -> false
IsV : is_value (wrapVal V1)
MS : matchString (wrapVal V1) S @
MF : matchFalse (wrapVal V1)
MS1 : matchString V1 S *
============================
false
< case IsV.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchFalse V -> false
MS : matchString (wrapVal V1) S @
MF : matchFalse (wrapVal V1)
MS1 : matchString V1 S *
H1 : is_value V1
============================
false
< case MF.
Subgoal 2:
Variables: S V1
IH : forall V S, is_value V -> matchString V S * -> matchFalse V -> false
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
H1 : is_value V1
H2 : matchFalse V1
============================
false
< apply IH to _ MS1 _.
Proof completed.
< Prove matchEval:host:matchString_matchRec_exclusive.
Subgoal 2:
Variables: S Fs V1
IH : forall V S Fs, is_value V -> matchString V S * -> matchRec V Fs -> false
IsV : is_value (wrapVal V1)
MS : matchString (wrapVal V1) S @
MR : matchRec (wrapVal V1) Fs
MS1 : matchString V1 S *
============================
false
< case IsV.
Subgoal 2:
Variables: S Fs V1
IH : forall V S Fs, is_value V -> matchString V S * -> matchRec V Fs -> false
MS : matchString (wrapVal V1) S @
MR : matchRec (wrapVal V1) Fs
MS1 : matchString V1 S *
H1 : is_value V1
============================
false
< case MR.
Subgoal 2:
Variables: S Fs V1
IH : forall V S Fs, is_value V -> matchString V S * -> matchRec V Fs -> false
MS : matchString (wrapVal V1) S @
MS1 : matchString V1 S *
H1 : is_value V1
H2 : matchRec V1 Fs
============================
false
< apply IH to _ MS1 _.
Proof completed.
< Prove matchEval:host:matchRec_matchTrue_exclusive.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchTrue V -> false
IsV : is_value (wrapVal V1)
MR : matchRec (wrapVal V1) Fs @
MT : matchTrue (wrapVal V1)
MR1 : matchRec V1 Fs *
============================
false
< case IsV.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchTrue V -> false
MR : matchRec (wrapVal V1) Fs @
MT : matchTrue (wrapVal V1)
MR1 : matchRec V1 Fs *
H1 : is_value V1
============================
false
< case MT.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchTrue V -> false
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
H2 : matchTrue V1
============================
false
< apply IH to _ MR1 _.
Proof completed.
< Prove matchEval:host:matchRec_matchFalse_exclusive.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchFalse V -> false
IsV : is_value (wrapVal V1)
MR : matchRec (wrapVal V1) Fs @
MF : matchFalse (wrapVal V1)
MR1 : matchRec V1 Fs *
============================
false
< case IsV.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchFalse V -> false
MR : matchRec (wrapVal V1) Fs @
MF : matchFalse (wrapVal V1)
MR1 : matchRec V1 Fs *
H1 : is_value V1
============================
false
< case MF.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, is_value V -> matchRec V Fs * -> matchFalse V -> false
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
H2 : matchFalse V1
============================
false
< apply IH to _ MR1 _.
Proof completed.
< Prove matchEval:host:evalExpr_rel,
matchEval:host:evalExpr_rel_output,
matchEval:host:evalStmt_newNameScopes_output,
matchEval:host:evalStmt_newNameScopes,
matchEval:host:evalArgs_rel,
matchEval:host:evalArgs_rel_output,
matchEval:host:evalRecFields_rel,
matchEval:host:evalRecFields_rel_output.
Subgoal 1.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Vars : vars (wrap E1) Vars
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
============================
wrapVal V = VB
< case IsE.
Subgoal 1.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Vars : vars (wrap E1) Vars
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
============================
wrapVal V = VB
< Vars: case Vars.
Subgoal 1.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
Vars : vars E1 Vars
============================
wrapVal V = VB
< EvB: case EvB.
Subgoal 1.32:
Variables: FE EE_A EE_B O_A O_B Vars V E1 V1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
Vars : vars E1 Vars
EvB : evalExpr FE EE_B E1 V1 O_B
============================
wrapVal V = wrapVal V1
< apply IH_V_E to _ _ _ _ EvA1 EvB Vars _.
Subgoal 1.32:
Variables: FE EE_A EE_B O_A O_B Vars E1 V1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V1) O_A @
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V1 O_A *
H1 : is_expr E1
Vars : vars E1 Vars
EvB : evalExpr FE EE_B E1 V1 O_B
============================
wrapVal V1 = wrapVal V1
< search.
Subgoal 2.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Vars : vars (wrap E1) Vars
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
============================
O_A = O_B
< case IsE.
Subgoal 2.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Vars : vars (wrap E1) Vars
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
============================
O_A = O_B
< Vars: case Vars.
Subgoal 2.32:
Variables: FE EE_A EE_B VB O_A O_B Vars V E1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
EvB : evalExpr FE EE_B (wrap E1) VB O_B
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
Vars : vars E1 Vars
============================
O_A = O_B
< EvB: case EvB.
Subgoal 2.32:
Variables: FE EE_A EE_B O_A O_B Vars V E1 V1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_A @
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_A *
H1 : is_expr E1
Vars : vars E1 Vars
EvB : evalExpr FE EE_B E1 V1 O_B
============================
O_A = O_B
< apply IH_O_E to _ _ _ _ EvA1 EvB Vars _.
Subgoal 2.32:
Variables: FE EE_A EE_B O_B Vars V E1 V1
IH_V_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB O_A O_B Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalExpr FE EE_A E VA O_A * -> evalExpr FE EE_B E VB O_B -> vars E Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB O_A O_B Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalArgs FE EE_A A VA O_A * -> evalArgs FE EE_B A VB O_B -> varsArgs A Vars ->
(forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IH_V_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB O_A O_B Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
evalRecFields FE EE_A RF VA O_A * -> evalRecFields FE EE_B RF VB O_B ->
varsRecFields RF Vars -> (forall X V,
mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V) -> O_A = O_B
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) O_B @
Rel : forall X V, mem X Vars -> lookupScopes X EE_B V -> lookupScopes X EE_A V
EvA1 : evalExpr FE EE_A E1 V O_B *
H1 : is_expr E1
Vars : vars E1 Vars
EvB : evalExpr FE EE_B E1 V1 O_B
============================
O_B = O_B
< search.
Proof completed.
< Add_Ext_Size matchEval:host:evalExpr,
matchEval:host:evalArgs,
matchEval:host:evalRecFields,
matchEval:host:evalStmt.
Proof completed.
< Add_Proj_Rel matchEval:host:evalExpr,
matchEval:host:evalArgs,
matchEval:host:evalRecFields,
matchEval:host:evalStmt.
Proof completed.
< Prove matchEval:host:evalExpr_rel_exists_ES,
matchEval:host:evalStmt_newNameScopes_exists_ES,
matchEval:host:evalArgs_rel_exists_ES,
matchEval:host:evalRecFields_rel_exists_ES.
Subgoal 1.32:
Variables: FE EE_A EE_B O ES Vars N1 V1 E1
IH_E : forall FE EE_A EE_B E V O ES Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalExpr {ES}> FE EE_B E V O ES * -> vars E Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalExpr {ES}> FE EE_A E V O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
<evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V O ES Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalArgs {ES}> FE EE_B A V O ES * -> varsArgs A Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalArgs {ES}> FE EE_A A V O ES
IH_RF : forall FE EE_A EE_B RF V O ES Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalRecFields {ES}> FE EE_B RF V O ES * -> varsRecFields RF Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalRecFields {ES}> FE EE_A RF V O ES
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (wrap E1) (wrapVal V1) O ES @
Vars : vars (wrap E1) Vars
Rel : forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1
EvB1 : 1 + N1 = ES
EvB2 : <evalExpr {ES}> FE EE_B E1 V1 O N1 *
============================
<evalExpr {ES}> FE EE_A (wrap E1) (wrapVal V1) O ES
< case IsE.
Subgoal 1.32:
Variables: FE EE_A EE_B O ES Vars N1 V1 E1
IH_E : forall FE EE_A EE_B E V O ES Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalExpr {ES}> FE EE_B E V O ES * -> vars E Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalExpr {ES}> FE EE_A E V O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
<evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V O ES Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalArgs {ES}> FE EE_B A V O ES * -> varsArgs A Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalArgs {ES}> FE EE_A A V O ES
IH_RF : forall FE EE_A EE_B RF V O ES Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalRecFields {ES}> FE EE_B RF V O ES * -> varsRecFields RF Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalRecFields {ES}> FE EE_A RF V O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (wrap E1) (wrapVal V1) O ES @
Vars : vars (wrap E1) Vars
Rel : forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1
EvB1 : 1 + N1 = ES
EvB2 : <evalExpr {ES}> FE EE_B E1 V1 O N1 *
H1 : is_expr E1
============================
<evalExpr {ES}> FE EE_A (wrap E1) (wrapVal V1) O ES
< Vars: case Vars.
Subgoal 1.32:
Variables: FE EE_A EE_B O ES Vars N1 V1 E1
IH_E : forall FE EE_A EE_B E V O ES Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalExpr {ES}> FE EE_B E V O ES * -> vars E Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalExpr {ES}> FE EE_A E V O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
<evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V O ES Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalArgs {ES}> FE EE_B A V O ES * -> varsArgs A Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalArgs {ES}> FE EE_A A V O ES
IH_RF : forall FE EE_A EE_B RF V O ES Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalRecFields {ES}> FE EE_B RF V O ES * -> varsRecFields RF Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalRecFields {ES}> FE EE_A RF V O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (wrap E1) (wrapVal V1) O ES @
Rel : forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1
EvB1 : 1 + N1 = ES
EvB2 : <evalExpr {ES}> FE EE_B E1 V1 O N1 *
H1 : is_expr E1
Vars : vars E1 Vars
============================
<evalExpr {ES}> FE EE_A (wrap E1) (wrapVal V1) O ES
< apply IH_E to _ _ _ _ EvB2 _ Rel.
Subgoal 1.32:
Variables: FE EE_A EE_B O ES Vars N1 V1 E1
IH_E : forall FE EE_A EE_B E V O ES Vars,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalExpr {ES}> FE EE_B E V O ES * -> vars E Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalExpr {ES}> FE EE_A E V O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
<evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V O ES Vars,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalArgs {ES}> FE EE_B A V O ES * -> varsArgs A Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalArgs {ES}> FE EE_A A V O ES
IH_RF : forall FE EE_A EE_B RF V O ES Vars,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
<evalRecFields {ES}> FE EE_B RF V O ES * -> varsRecFields RF Vars -> (forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1) -> <evalRecFields {ES}> FE EE_A RF V O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (wrap E1) (wrapVal V1) O ES @
Rel : forall X V1,
mem X Vars -> lookupScopes X EE_B V1 -> lookupScopes X EE_A V1
EvB1 : 1 + N1 = ES
EvB2 : <evalExpr {ES}> FE EE_B E1 V1 O N1 *
H1 : is_expr E1
Vars : vars E1 Vars
H2 : <evalExpr {ES}> FE EE_A E1 V1 O N1
============================
<evalExpr {ES}> FE EE_A (wrap E1) (wrapVal V1) O ES
< search.
Proof completed.
< Prove matchEval:host:evalExpr_scopes_same,
matchEval:host:evalStmt_scopes_same,
matchEval:host:evalStmt_scopes_same_ctx,
matchEval:host:evalArgs_scopes_same,
matchEval:host:evalRecFields_scopes_same.
Subgoal 1.32:
Variables: FE EE_A OA EE_B VB OB V E1
IH_E : forall E FE EE_A VA OA EE_B VB OB,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E VA OA * -> evalExpr FE EE_B E VB OB ->
VA = VB /\ OA = OB
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA OA EE_B VB OB,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A VA OA * -> evalArgs FE EE_B A VB OB ->
VA = VB /\ OA = OB
IH_RF : forall RF FE EE_A VA OA EE_B VB OB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA OA * -> evalRecFields FE EE_B RF VB OB ->
VA = VB /\ OA = OB
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) OA @
EvB : evalExpr FE EE_B (wrap E1) VB OB
EvA1 : evalExpr FE EE_A E1 V OA *
============================
wrapVal V = VB /\ OA = OB
< case IsE.
Subgoal 1.32:
Variables: FE EE_A OA EE_B VB OB V E1
IH_E : forall E FE EE_A VA OA EE_B VB OB,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E VA OA * -> evalExpr FE EE_B E VB OB ->
VA = VB /\ OA = OB
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA OA EE_B VB OB,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A VA OA * -> evalArgs FE EE_B A VB OB ->
VA = VB /\ OA = OB
IH_RF : forall RF FE EE_A VA OA EE_B VB OB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA OA * -> evalRecFields FE EE_B RF VB OB ->
VA = VB /\ OA = OB
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) OA @
EvB : evalExpr FE EE_B (wrap E1) VB OB
EvA1 : evalExpr FE EE_A E1 V OA *
H1 : is_expr E1
============================
wrapVal V = VB /\ OA = OB
< EvB: case EvB.
Subgoal 1.32:
Variables: FE EE_A OA EE_B OB V E1 V1
IH_E : forall E FE EE_A VA OA EE_B VB OB,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E VA OA * -> evalExpr FE EE_B E VB OB ->
VA = VB /\ OA = OB
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA OA EE_B VB OB,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A VA OA * -> evalArgs FE EE_B A VB OB ->
VA = VB /\ OA = OB
IH_RF : forall RF FE EE_A VA OA EE_B VB OB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA OA * -> evalRecFields FE EE_B RF VB OB ->
VA = VB /\ OA = OB
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V) OA @
EvA1 : evalExpr FE EE_A E1 V OA *
H1 : is_expr E1
EvB : evalExpr FE EE_B E1 V1 OB
============================
wrapVal V = wrapVal V1 /\ OA = OB
< apply IH_E to _ _ _ _ SS EvA1 EvB.
Subgoal 1.32:
Variables: FE EE_A EE_B OB E1 V1
IH_E : forall E FE EE_A VA OA EE_B VB OB,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E VA OA * -> evalExpr FE EE_B E VB OB ->
VA = VB /\ OA = OB
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA OA EE_B VB OB,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A VA OA * -> evalArgs FE EE_B A VB OB ->
VA = VB /\ OA = OB
IH_RF : forall RF FE EE_A VA OA EE_B VB OB,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA OA * -> evalRecFields FE EE_B RF VB OB ->
VA = VB /\ OA = OB
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V1) OB @
EvA1 : evalExpr FE EE_A E1 V1 OB *
H1 : is_expr E1
EvB : evalExpr FE EE_B E1 V1 OB
============================
wrapVal V1 = wrapVal V1 /\ OB = OB
< search.
Proof completed.
< Prove matchEval:host:evalExpr_scopes_same_exists,
matchEval:host:evalStmt_scopes_same_exists,
matchEval:host:evalArgs_scopes_same_exists,
matchEval:host:evalRecFields_scopes_same_exists.
Subgoal 1.32:
Variables: FE EE_A O EE_B V1 E1
IH_E : forall E FE EE_A V O EE_B,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E V O * -> evalExpr FE EE_B E V O
IH_S : forall S FE EE_A EE_A' O EE_B,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V O EE_B,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A V O * -> evalArgs FE EE_B A V O
IH_RF : forall RF FE EE_A V O EE_B,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V O * -> evalRecFields FE EE_B RF V O
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V1) O @
EvA1 : evalExpr FE EE_A E1 V1 O *
============================
evalExpr FE EE_B (wrap E1) (wrapVal V1) O
< case IsE.
Subgoal 1.32:
Variables: FE EE_A O EE_B V1 E1
IH_E : forall E FE EE_A V O EE_B,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E V O * -> evalExpr FE EE_B E V O
IH_S : forall S FE EE_A EE_A' O EE_B,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V O EE_B,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A V O * -> evalArgs FE EE_B A V O
IH_RF : forall RF FE EE_A V O EE_B,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V O * -> evalRecFields FE EE_B RF V O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V1) O @
EvA1 : evalExpr FE EE_A E1 V1 O *
H1 : is_expr E1
============================
evalExpr FE EE_B (wrap E1) (wrapVal V1) O
< apply IH_E to _ _ _ _ SS EvA1.
Subgoal 1.32:
Variables: FE EE_A O EE_B V1 E1
IH_E : forall E FE EE_A V O EE_B,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalExpr FE EE_A E V O * -> evalExpr FE EE_B E V O
IH_S : forall S FE EE_A EE_A' O EE_B,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V O EE_B,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalArgs FE EE_A A V O * -> evalArgs FE EE_B A V O
IH_RF : forall RF FE EE_A V O EE_B,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V O * -> evalRecFields FE EE_B RF V O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (wrap E1) (wrapVal V1) O @
EvA1 : evalExpr FE EE_A E1 V1 O *
H1 : is_expr E1
H2 : evalExpr FE EE_B E1 V1 O
============================
evalExpr FE EE_B (wrap E1) (wrapVal V1) O
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_matchInt.
Variables: V_P I
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MI : matchInt V_P I
============================
matchInt (wrapVal V_P) I
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_matchTrue.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MT : matchTrue V_P
============================
matchTrue (wrapVal V_P)
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_matchFalse.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MF : matchFalse V_P
============================
matchFalse (wrapVal V_P)
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_matchString.
Variables: V_P S
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MS : matchString V_P S
============================
matchString (wrapVal V_P) S
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_matchRec.
Variables: V_P Fs
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MR : matchRec V_P Fs
============================
matchRec (wrapVal V_P) Fs
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:matchInt.
Proof completed.
< Prove_Ext_Ind matchEval:host:matchInt.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 2:
Variables: I V1
IH : forall V I, matchInt V I * -> is_value V -> <matchInt {P}> V I
R : matchInt (wrapVal V1) I @
IsV : is_value (wrapVal V1)
R1 : matchInt V1 I *
============================
<matchInt {P}> (wrapVal V1) I
< case IsV.
Subgoal 2:
Variables: I V1
IH : forall V I, matchInt V I * -> is_value V -> <matchInt {P}> V I
R : matchInt (wrapVal V1) I @
R1 : matchInt V1 I *
H1 : is_value V1
============================
<matchInt {P}> (wrapVal V1) I
< apply IH to R1 _.
Subgoal 2:
Variables: I V1
IH : forall V I, matchInt V I * -> is_value V -> <matchInt {P}> V I
R : matchInt (wrapVal V1) I @
R1 : matchInt V1 I *
H1 : is_value V1
H2 : <matchInt {P}> V1 I
============================
<matchInt {P}> (wrapVal V1) I
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:matchTrue.
Proof completed.
< Prove_Ext_Ind matchEval:host:matchTrue.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 2:
Variables: V1
IH : forall V, matchTrue V * -> is_value V -> <matchTrue {P}> V
R : matchTrue (wrapVal V1) @
IsV : is_value (wrapVal V1)
R1 : matchTrue V1 *
============================
<matchTrue {P}> (wrapVal V1)
< case IsV.
Subgoal 2:
Variables: V1
IH : forall V, matchTrue V * -> is_value V -> <matchTrue {P}> V
R : matchTrue (wrapVal V1) @
R1 : matchTrue V1 *
H1 : is_value V1
============================
<matchTrue {P}> (wrapVal V1)
< apply IH to R1 _.
Subgoal 2:
Variables: V1
IH : forall V, matchTrue V * -> is_value V -> <matchTrue {P}> V
R : matchTrue (wrapVal V1) @
R1 : matchTrue V1 *
H1 : is_value V1
H2 : <matchTrue {P}> V1
============================
<matchTrue {P}> (wrapVal V1)
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:matchFalse.
Proof completed.
< Prove_Ext_Ind matchEval:host:matchFalse.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 2:
Variables: V1
IH : forall V, matchFalse V * -> is_value V -> <matchFalse {P}> V
R : matchFalse (wrapVal V1) @
IsV : is_value (wrapVal V1)
R1 : matchFalse V1 *
============================
<matchFalse {P}> (wrapVal V1)
< case IsV.
Subgoal 2:
Variables: V1
IH : forall V, matchFalse V * -> is_value V -> <matchFalse {P}> V
R : matchFalse (wrapVal V1) @
R1 : matchFalse V1 *
H1 : is_value V1
============================
<matchFalse {P}> (wrapVal V1)
< apply IH to R1 _.
Subgoal 2:
Variables: V1
IH : forall V, matchFalse V * -> is_value V -> <matchFalse {P}> V
R : matchFalse (wrapVal V1) @
R1 : matchFalse V1 *
H1 : is_value V1
H2 : <matchFalse {P}> V1
============================
<matchFalse {P}> (wrapVal V1)
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:matchRec.
Proof completed.
< Prove_Ext_Ind matchEval:host:matchRec.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, matchRec V Fs * -> is_value V -> <matchRec {P}> V Fs
R : matchRec (wrapVal V1) Fs @
IsV : is_value (wrapVal V1)
R1 : matchRec V1 Fs *
============================
<matchRec {P}> (wrapVal V1) Fs
< case IsV.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, matchRec V Fs * -> is_value V -> <matchRec {P}> V Fs
R : matchRec (wrapVal V1) Fs @
R1 : matchRec V1 Fs *
H1 : is_value V1
============================
<matchRec {P}> (wrapVal V1) Fs
< apply IH to R1 _.
Subgoal 2:
Variables: Fs V1
IH : forall V Fs, matchRec V Fs * -> is_value V -> <matchRec {P}> V Fs
R : matchRec (wrapVal V1) Fs @
R1 : matchRec V1 Fs *
H1 : is_value V1
H2 : <matchRec {P}> V1 Fs
============================
<matchRec {P}> (wrapVal V1) Fs
< search.
Proof completed.
< Add_Proj_Rel matchEval:host:matchString.
Proof completed.
< Prove_Ext_Ind matchEval:host:matchString.
Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 2:
Variables: S V1
IH : forall V S, matchString V S * -> is_value V -> <matchString {P}> V S
R : matchString (wrapVal V1) S @
IsV : is_value (wrapVal V1)
R1 : matchString V1 S *
============================
<matchString {P}> (wrapVal V1) S
< case IsV.
Subgoal 2:
Variables: S V1
IH : forall V S, matchString V S * -> is_value V -> <matchString {P}> V S
R : matchString (wrapVal V1) S @
R1 : matchString V1 S *
H1 : is_value V1
============================
<matchString {P}> (wrapVal V1) S
< apply IH to R1 _.
Subgoal 2:
Variables: S V1
IH : forall V S, matchString V S * -> is_value V -> <matchString {P}> V S
R : matchString (wrapVal V1) S @
R1 : matchString V1 S *
H1 : is_value V1
H2 : <matchString {P}> V1 S
============================
<matchString {P}> (wrapVal V1) S
< search.
Proof completed.
< Prove matchEval:host:projedVal_is.
Proof completed.
< Prove matchEval:host:projedVal_matchInt.
Proof completed.
< Prove matchEval:host:projedVal_matchString.
Proof completed.
< Prove matchEval:host:projedVal_matchTrue.
Proof completed.
< Prove matchEval:host:projedVal_matchFalse.
Proof completed.
< Prove matchEval:host:projedVal_matchRec.
Proof completed.
< Prove_Constraint matchEval:host:matchInt_proj.
Variables: V_P I
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MI : matchInt (wrapVal V_P) I
============================
matchInt V_P I
< case MI.
Variables: V_P I
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
H1 : matchInt V_P I
============================
matchInt V_P I
< search.
Proof completed.
< Prove_Constraint matchEval:host:matchTrue_proj.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MT : matchTrue (wrapVal V_P)
============================
matchTrue V_P
< case MT.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
H1 : matchTrue V_P
============================
matchTrue V_P
< search.
Proof completed.
< Prove_Constraint matchEval:host:matchFalse_proj.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MF : matchFalse (wrapVal V_P)
============================
matchFalse V_P
< case MF.
Variables: V_P
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
H1 : matchFalse V_P
============================
matchFalse V_P
< search.
Proof completed.
< Prove_Constraint matchEval:host:matchString_proj.
Variables: V_P S
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MS : matchString (wrapVal V_P) S
============================
matchString V_P S
< case MS.
Variables: V_P S
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
H1 : matchString V_P S
============================
matchString V_P S
< search.
Proof completed.
< Prove_Constraint matchEval:host:matchRec_proj.
Variables: V_P Fs
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
MR : matchRec (wrapVal V_P) Fs
============================
matchRec V_P Fs
< case MR.
Variables: V_P Fs
Pr : |{value}- wrapVal V_P ~~> V_P
IsV : is_value (wrapVal V_P)
H1 : matchRec V_P Fs
============================
matchRec V_P Fs
< search.
Proof completed.
< Prove matchEval:host:matchInt_projedVal.
Proof completed.
< Prove matchEval:host:matchTrue_projedVal.
Proof completed.
< Prove matchEval:host:matchFalse_projedVal.
Proof completed.
< Prove matchEval:host:matchString_projedVal.
Proof completed.
< Prove matchEval:host:matchRec_projedVal.
Proof completed.
< Prove_Constraint matchEval:host:proj_evalExpr_forward.
Variables: E' FE EE V O
Pr : |{expr}- wrap E' ~~> E'
IsE : is_expr (wrap E')
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E') V O
============================
exists V', evalExpr FE EE E' V' O /\ projedVal V V'
< case Ev.
Variables: E' FE EE O V1
Pr : |{expr}- wrap E' ~~> E'
IsE : is_expr (wrap E')
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
H1 : evalExpr FE EE E' V1 O
============================
exists V', evalExpr FE EE E' V' O /\ projedVal (wrapVal V1) V'
< search.
Proof completed.
< Prove_Constraint matchEval:host:proj_evalStmt_forward.
Proof completed.
< Prove_Ext_Ind matchEval:host:evalExpr,
matchEval:host:evalArgs,
matchEval:host:evalRecFields,
matchEval:host:evalStmt.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (wrap E1)
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< case IsE.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< apply ext_size_is_int_evalExpr to R2.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< apply ext_size_pos_evalExpr to R2.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
H3 : 0 <= N2
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< L: apply lt_plus_one to R1 _.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
H3 : 0 <= N2
L : N2 < N
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< Acc: case Acc.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
H3 : 0 <= N2
L : N2 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< A: apply Acc to _ L.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
H3 : 0 <= N2
L : N2 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A : acc N2 *
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< apply IH to R2 A _ _ _.
Subgoal 1.32:
Variables: N FE EE O N2 V1 E1
IH : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH1 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH2 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH3 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V O,
<evalExpr {ES}> FE EE E V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V O
IH5 : forall N FE EE A V O,
<evalArgs {ES}> FE EE A V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V O
IH6 : forall N FE EE RF V O,
<evalRecFields {ES}> FE EE RF V O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
<evalRecFields {P}> FE EE RF V O
IH7 : forall N FE EE S EE' O,
<evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (wrap E1) (wrapVal V1) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E1 V1 O N2 **
H1 : is_expr E1
H2 : is_integer N2
H3 : 0 <= N2
L : N2 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A : acc N2 *
H4 : <evalExpr {P}> FE EE E1 V1 O
============================
<evalExpr {P}> FE EE (wrap E1) (wrapVal V1) O
< search.
Proof completed.
< Prove matchEval:host:paramName_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_paramName_forward.
Proof completed.
< Prove_Constraint matchEval:host:proj_paramName_back.
Proof completed.
< Prove matchEval:host:getFunEvalInfo_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_getFunEvalInfo_forward.
Proof completed.
< Prove_Constraint matchEval:host:proj_getFunEvalInfo_back.
Proof completed.
< Prove matchEval:host:evalProgram_unique.
Proof completed.
< Prove_Constraint matchEval:host:proj_evalProgram_forward.
Proof completed.
< Prove_Constraint matchEval:host:proj_evalProgram_back.
Proof completed.
< Prove matchEval:host:matchRec_typePres.
Subgoal 2:
Variables: Fs FTys V1
IH : forall V Fs FTys,
is_value V -> matchRec V Fs * -> valueType V (recTy FTys) -> valFieldTys Fs FTys
IsV : is_value (wrapVal V1)
MR : matchRec (wrapVal V1) Fs @
VTy : valueType (wrapVal V1) (recTy FTys)
MR1 : matchRec V1 Fs *
============================
valFieldTys Fs FTys
< case IsV.
Subgoal 2:
Variables: Fs FTys V1
IH : forall V Fs FTys,
is_value V -> matchRec V Fs * -> valueType V (recTy FTys) -> valFieldTys Fs FTys
MR : matchRec (wrapVal V1) Fs @
VTy : valueType (wrapVal V1) (recTy FTys)
MR1 : matchRec V1 Fs *
H1 : is_value V1
============================
valFieldTys Fs FTys
< VTy: case VTy.
Subgoal 2:
Variables: Fs FTys V1
IH : forall V Fs FTys,
is_value V -> matchRec V Fs * -> valueType V (recTy FTys) -> valFieldTys Fs FTys
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
VTy : valueType V1 (recTy FTys)
============================
valFieldTys Fs FTys
< apply IH to _ MR1 VTy.
Subgoal 2:
Variables: Fs FTys V1
IH : forall V Fs FTys,
is_value V -> matchRec V Fs * -> valueType V (recTy FTys) -> valFieldTys Fs FTys
MR : matchRec (wrapVal V1) Fs @
MR1 : matchRec V1 Fs *
H1 : is_value V1
VTy : valueType V1 (recTy FTys)
H2 : valFieldTys Fs FTys
============================
valFieldTys Fs FTys
< search.
Proof completed.
< Prove matchEval:host:evalExpr_typePres,
matchEval:host:evalStmt_typePres,
matchEval:host:evalArgs_typePres,
matchEval:host:evalRecFields_typePres.
Subgoal 1.32:
Variables: FT ET Ty FE EE O V1 E1
IH_E : forall E FT ET Ty FE EE O V,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
evalExpr FE EE E V O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueType V Ty
IH_S : forall S FT ET ET' FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
related_all_scopes ET' EE'
IH_A : forall A FT ET Tys FE EE O Vs,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
evalArgs FE EE A Vs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueTypeList Vs Tys
IH_RF : forall RF FT ET FTys FE EE O FVs,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
evalRecFields FE EE RF FVs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valFieldTys FVs FTys
IsE : is_expr (wrap E1)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (wrap E1) Ty
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE E1 V1 O *
============================
valueType (wrapVal V1) Ty
< case IsE.
Subgoal 1.32:
Variables: FT ET Ty FE EE O V1 E1
IH_E : forall E FT ET Ty FE EE O V,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
evalExpr FE EE E V O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueType V Ty
IH_S : forall S FT ET ET' FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
related_all_scopes ET' EE'
IH_A : forall A FT ET Tys FE EE O Vs,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
evalArgs FE EE A Vs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueTypeList Vs Tys
IH_RF : forall RF FT ET FTys FE EE O FVs,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
evalRecFields FE EE RF FVs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (wrap E1) Ty
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
============================
valueType (wrapVal V1) Ty
< Ty: case Ty.
Subgoal 1.32:
Variables: FT ET Ty FE EE O V1 E1
IH_E : forall E FT ET Ty FE EE O V,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
evalExpr FE EE E V O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueType V Ty
IH_S : forall S FT ET ET' FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
related_all_scopes ET' EE'
IH_A : forall A FT ET Tys FE EE O Vs,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
evalArgs FE EE A Vs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueTypeList Vs Tys
IH_RF : forall RF FT ET FTys FE EE O FVs,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
evalRecFields FE EE RF FVs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
Ty : typeOf FT ET E1 Ty
============================
valueType (wrapVal V1) Ty
< apply IH_E to _ _ _ _ _ Ty Ev1 _ _.
Subgoal 1.32:
Variables: FT ET Ty FE EE O V1 E1
IH_E : forall E FT ET Ty FE EE O V,
is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
evalExpr FE EE E V O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueType V Ty
IH_S : forall S FT ET ET' FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
related_all_scopes ET' EE'
IH_A : forall A FT ET Tys FE EE O Vs,
is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
evalArgs FE EE A Vs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valueTypeList Vs Tys
IH_RF : forall RF FT ET FTys FE EE O FVs,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
evalRecFields FE EE RF FVs O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
exists Scope TyEnv',
(zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
Ty : typeOf FT ET E1 Ty
H2 : valueType V1 Ty
============================
valueType (wrapVal V1) Ty
< search.
Proof completed.
< Prove matchEval:host:paramTy_paramName_same.
Proof completed.
< Prove matchEval:host:funOK_getFunEvalInfo_related.
Proof completed.
< Prove matchEval:host:evalExpr_output_forms,
matchEval:host:evalStmt_output_forms,
matchEval:host:evalArgs_output_forms,
matchEval:host:evalRecFields_output_forms.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall E FE EE V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
output_forms O
IH_S : forall S FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
output_forms O
IH_A : forall A FE EE Vs O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs O * ->
output_forms O
IH_RF : forall RF FE EE Fields O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields O * ->
output_forms O
IsE : is_expr (wrap E1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
============================
output_forms O
< case IsE.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall E FE EE V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
output_forms O
IH_S : forall S FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
output_forms O
IH_A : forall A FE EE Vs O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs O * ->
output_forms O
IH_RF : forall RF FE EE Fields O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields O * ->
output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
============================
output_forms O
< apply IH_E to _ _ _ Ev1.
Subgoal 1.32:
Variables: FE EE O V1 E1
IH_E : forall E FE EE V O,
is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V O * ->
output_forms O
IH_S : forall S FE EE EE' O,
is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
output_forms O
IH_A : forall A FE EE Vs O,
is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs O * ->
output_forms O
IH_RF : forall RF FE EE Fields O,
is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields O * ->
output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (wrap E1) (wrapVal V1) O @
Ev1 : evalExpr FE EE E1 V1 O *
H1 : is_expr E1
H2 : output_forms O
============================
output_forms O
< search.
Proof completed.
< Prove matchEval:host:evalProgram_output_forms.
Proof completed.
< Prove matchEval:host:paramName_exists.
Proof completed.
< Prove matchEval:host:getFunEvalInfo_exists.
Proof completed.